From bc863854584fd9d408bb55386abf7899620c0f97 Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley Date: Sat, 7 Jan 2012 17:40:44 -0500 Subject: [PATCH] pcrudfilterdialog: avoid failures in itemfilereadstore by creating new stores whenever we need them for the operator selector filteringselect Signed-off-by: Lebbeous Fogle-Weekley --- .../js/dojo/openils/widget/PCrudFilterDialog.js | 118 ++++++++++++--------- 1 file changed, 65 insertions(+), 53 deletions(-) diff --git a/Open-ILS/web/js/dojo/openils/widget/PCrudFilterDialog.js b/Open-ILS/web/js/dojo/openils/widget/PCrudFilterDialog.js index 8ce549fb5c..22194e091b 100644 --- a/Open-ILS/web/js/dojo/openils/widget/PCrudFilterDialog.js +++ b/Open-ILS/web/js/dojo/openils/widget/PCrudFilterDialog.js @@ -72,49 +72,54 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { } ]; - var _minimal_operator_store = new dojo.data.ItemFileReadStore( - { - "data": { - "identifier": "name", - "items": _minimal_operators - } - } - ); + var _operator_store_factory = {}; - var _most_operator_store = new dojo.data.ItemFileReadStore( - { - "data": { - "identifier": "name", - "items": _minimal_operators.concat(_strict_operators) - } - } - ); - - var _all_operator_store = new dojo.data.ItemFileReadStore( - { - "data": { - "identifier": "name", - "items": _minimal_operators. - concat(_strict_operators). - concat(_fuzzy_operators) - } - } - ); - - var _operator_stores = {}; ["bool", "link", "org_unit"].forEach( function(type) { - _operator_stores[type] = _minimal_operator_store; + _operator_store_factory[type] = function() { + return new dojo.data.ItemFileReadStore( + { + "data": { + "identifier": "name", + "items": _minimal_operators + } + } + ); + }; } ); ["float", "id", "int", "interval", "money", "number", "timestamp"].forEach( function(type) { - _operator_stores[type] = _most_operator_store; + _operator_store_factory[type] = function() { + return new dojo.data.ItemFileReadStore( + { + "data": { + "identifier": "name", + "items": _minimal_operators.concat( + _strict_operators + ) + } + } + ); + }; } ); - _operator_stores.text = _all_operator_store; + _operator_store_factory.text = function() { + return new dojo.data.ItemFileReadStore( + { + "data": { + "identifier": "name", + "items": _minimal_operators.concat( + _strict_operators + ).concat( + _fuzzy_operators + ) + } + } + ); + }; /* This is not the dijit per se. Search further in this file for * "dojo.declare" for the beginning of the dijit. */ @@ -231,7 +236,6 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { if (typeof(value) != "undefined" && typeof(field) != "undefined") { - if (!first_pass[field]) first_pass[field] = []; first_pass[field].push(value); @@ -290,8 +294,10 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { this._remove_operator_selector = function() { if (this.operator_selector) { var old_value = this.operator_selector.attr("value"); + this.operator_selector.destroy(); dojo.empty(this.operator_slot); + return old_value; } @@ -301,19 +307,19 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { this._replace_operator_selector = function() { var old_operator = this._remove_operator_selector(); - var _operator_store = _operator_stores[this.selected_field_type]; - var operator_selector_args = { - "labelAttr": "label", - "searchAttr": "label", - "scrollOnFocus": false, - "onChange": function(value) { - self.update_selected_operator(value); - }, - "store": _operator_store - }; + var _operator_store = + _operator_store_factory[this.selected_field_type](); this.operator_selector = new dijit.form.FilteringSelect( - operator_selector_args, + { + "labelAttr": "label", + "searchAttr": "label", + "scrollOnFocus": false, + "onChange": function(value) { + self.update_selected_operator(value); + }, + "store": _operator_store + }, dojo.create("span", {}, this.operator_slot) ); @@ -322,7 +328,11 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { { "identity": old_operator, "onItem": function(item) { - self.operator_selector.attr("value", old_operator); + if (item) { /* sic, necessary */ + self.operator_selector.attr( + "value", old_operator + ); + } } } ); @@ -364,13 +374,14 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { this._clear_value_slot(); - var _operator_store = _operator_stores[this.selected_field_type]; + var _operator_store = this.operator_selector.store; _operator_store.fetchItemByIdentity( { "identity": this.selected_operator, "onItem": function(item) { - self._rebuild_value_widgets_impl(item.param_count); + if (item) + self._rebuild_value_widgets_impl(item.param_count); } } ); @@ -412,7 +423,8 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { { "identity": value, "onItem": function(item) { - self._update_selected_field_impl(value, item.type); + if (item) + self._update_selected_field_impl(value, item.type); } } ); @@ -433,13 +445,13 @@ if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) { if (!values.length) { return this._null_clause(); /* null/not null */ - } else if (values.length == 1) { - var clause = {}; - clause[self.selected_operator] = values.pop(); - return clause; } else { var clause = {}; - clause[self.selected_operator] = values; + var op = this.selected_operator; + if (values.length == 1) + clause[op] = values.pop(); + else + clause[op] = values; return clause; } } else { -- 2.11.0