Browse Source

KERNEL-14105 feat:searchmultitextvaluecombo 的es6化

es6
crawford.zhou 2 years ago
parent
commit
ab2eb1f996
  1. 3
      src/widget/index.js
  2. 6
      src/widget/multiselect/index.js
  3. 5
      src/widget/searchmultitextvaluecombo/index.js
  4. 654
      src/widget/searchmultitextvaluecombo/multitextvalue.combo.search.js
  5. 189
      src/widget/searchmultitextvaluecombo/multitextvalue.combo.trigger.search.js
  6. 238
      src/widget/searchmultitextvaluecombo/multitextvalue.loader.search.js
  7. 112
      src/widget/searchmultitextvaluecombo/multitextvalue.popup.view.search.js
  8. 200
      src/widget/searchmultitextvaluecombo/trigger/searcher.multitextvalue.js

3
src/widget/index.js

@ -25,6 +25,7 @@ import * as singleselect from "./singleselect";
import * as multilayerdownlist from "./multilayerdownlist";
import * as multilayersingletree from "./multilayersingletree";
import * as searchmultitextvaluecombo from "./searchmultitextvaluecombo";
Object.assign(BI, {
Collapse,
...calendar,
@ -52,6 +53,7 @@ Object.assign(BI, {
...singleselect,
...multilayerdownlist,
...multilayersingletree,
...searchmultitextvaluecombo,
});
export * from "./date/calendar";
@ -68,6 +70,7 @@ export * from "./downlist";
export * from "./singleslider";
export * from "./intervalslider";
export * from "./year";
export * from "./searchmultitextvaluecombo";
export * from "./singleselect";
export * from "./multilayerdownlist";
export * from "./multilayersingletree";

6
src/widget/multiselect/index.js

@ -1,3 +1,9 @@
export { MultiSelectSearchPane } from "./search/multiselect.search.pane";
export { MultiSelectEditor } from "./trigger/editor.multiselect";
export { MultiSelectTrigger } from "./multiselect.trigger";
export { MultiSelectPopupView } from "./multiselect.popup.view";
export { MultiSelectSearcher } from "./trigger/searcher.multiselect";
export { MultiSelectCheckSelectedSwitcher } from "./trigger/switcher.checkselected";
export { MultiSelectCombo } from "./multiselect.combo";
export { MultiSelectNoBarCombo } from "./multiselect.combo.nobar";
export { MultiSelectInsertCombo } from "./multiselect.insert.combo";

5
src/widget/searchmultitextvaluecombo/index.js

@ -0,0 +1,5 @@
export { SearchMultiTextValueCombo } from "./multitextvalue.combo.search";
export { SearchMultiSelectPopupView } from "./multitextvalue.popup.view.search";
export { SearchMultiSelectTrigger } from "./multitextvalue.combo.trigger.search";
export { SearchMultiSelectLoader } from "./multitextvalue.loader.search";
export { SearchMultiSelectSearcher } from "./trigger/searcher.multitextvalue";

654
src/widget/searchmultitextvaluecombo/multitextvalue.combo.search.js

@ -1,29 +1,44 @@
/**
*
* @class BI.SearchMultiTextValueCombo
* @extends BI.Single
*/
BI.SearchMultiTextValueCombo = BI.inherit(BI.Single, {
_defaultConfig: function () {
return BI.extend(BI.SearchMultiTextValueCombo.superclass._defaultConfig.apply(this, arguments), {
import { shortcut, extend, isKey, Selection, remove, last, pushDistinct, deepClone, createWidget, toPix, isNotNull, initial, endWith, bind, nextTick, AbsoluteLayout, contains, map, makeObject, each, values, isNull, Func, isNotEmptyArray, isArray, find } from "@/core";
import { Single, Combo } from "@/base";
import { MultiSelectTrigger, MultiSelectPopupView, MultiSelectCombo, SearchMultiSelectTrigger, SearchMultiSelectPopupView } from "@/widget";
import { MultiSelectBar, TriggerIconButton } from "@/case";
@shortcut()
export class SearchMultiTextValueCombo extends Single {
static xtype = "bi.search_multi_text_value_combo";
static REQ_GET_DATA_LENGTH = 1;
static REQ_GET_ALL_DATA = -1;
static EVENT_CONFIRM = "EVENT_CONFIRM";
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-multi-select-combo bi-search-multi-text-value-combo",
height: 24,
items: []
items: [],
});
}
_init() {
const o = this.options;
const triggerBtn = createWidget({
type: TriggerIconButton.xtype,
width: o.height,
height: o.height,
cls: "multi-select-trigger-icon-button",
});
},
_init: function () {
var self = this, o = this.options;
BI.SearchMultiTextValueCombo.superclass._init.apply(this, arguments);
var assertShowValue = function () {
BI.isKey(self._startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, self._startValue) : BI.pushDistinct(self.storeValue.value, self._startValue));
self._updateAllValue();
self._checkError();
self.trigger.getSearcher().setState(self.storeValue);
self.trigger.getCounter().setButtonChecked(self.storeValue);
super._init(...arguments);
const assertShowValue = () => {
isKey(this._startValue) &&
(this.storeValue.type === Selection.All
? remove(this.storeValue.value, this._startValue)
: pushDistinct(this.storeValue.value, this._startValue));
this._updateAllValue();
this._checkError();
this.trigger.getSearcher().setState(this.storeValue);
this.trigger.getCounter().setButtonChecked(this.storeValue);
};
this.storeValue = BI.deepClone(o.value || {});
this.storeValue = deepClone(o.value || {});
this._updateAllValue();
this._assertValue(this.storeValue);
@ -32,10 +47,10 @@ BI.SearchMultiTextValueCombo = BI.inherit(BI.Single, {
// 标记正在请求数据
this.requesting = false;
this.trigger = BI.createWidget({
type: "bi.search_multi_select_trigger",
this.trigger = createWidget({
type: SearchMultiSelectTrigger.xtype,
text: o.text,
height: BI.toPix(o.height, o.simple ? 1 : 2),
height: toPix(o.height, o.simple ? 1 : 2),
// adapter: this.popup,
masker: {
offset: {
@ -45,437 +60,450 @@ BI.SearchMultiTextValueCombo = BI.inherit(BI.Single, {
bottom: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT + 1,
},
},
allValueGetter: function () {
return self.allValue;
},
allValueGetter: () => this.allValue,
valueFormatter: o.valueFormatter,
itemsCreator: function (op, callback) {
self._itemsCreator(op, function (res) {
if (op.times === 1 && BI.isNotNull(op.keywords)) {
itemsCreator: (op, callback) => {
this._itemsCreator(op, res => {
if (op.times === 1 && isNotNull(op.keywords)) {
// 预防trigger内部把当前的storeValue改掉
self.trigger.setValue(BI.deepClone(self.getValue()));
this.trigger.setValue(deepClone(this.getValue()));
}
callback.apply(self, arguments);
callback.apply(this, ...arguments);
});
},
value: this.storeValue,
warningTitle: o.warningTitle
warningTitle: o.warningTitle,
});
this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {
self._setStartValue("");
this.getSearcher().setValue(self.storeValue);
this.trigger.on(MultiSelectTrigger.EVENT_START, () => {
this._setStartValue("");
this.getSearcher().setValue(this.storeValue);
});
this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {
self._setStartValue("");
this.trigger.on(MultiSelectTrigger.EVENT_STOP, () => {
this._setStartValue("");
});
this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) {
var last = BI.last(keywords);
keywords = BI.initial(keywords || []);
if (keywords.length > 0) {
self._joinKeywords(keywords, function () {
if (BI.endWith(last, BI.BlankSplitChar)) {
self.combo.setValue(self.storeValue);
assertShowValue();
self.combo.populate();
self._setStartValue("");
} else {
self.combo.setValue(self.storeValue);
assertShowValue();
}
self._dataChange = true;
});
this.trigger.on(
MultiSelectTrigger.EVENT_SEARCHING,
keywords => {
const lastKeyWord = last(keywords);
keywords = initial(keywords || []);
if (keywords.length > 0) {
this._joinKeywords(keywords, () => {
if (endWith(lastKeyWord, BI.BlankSplitChar)) {
this.combo.setValue(this.storeValue);
assertShowValue();
this.combo.populate();
this._setStartValue("");
} else {
this.combo.setValue(this.storeValue);
assertShowValue();
}
this._dataChange = true;
});
}
}
});
);
this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) {
if (obj instanceof BI.MultiSelectBar) {
self._joinAll(this.getValue(), function () {
this.trigger.on(MultiSelectTrigger.EVENT_CHANGE, (value, obj) => {
if (obj instanceof MultiSelectBar) {
this._joinAll(this.getValue(), () => {
assertShowValue();
});
} else {
self._join(this.getValue(), function () {
this._join(this.getValue(), () => {
assertShowValue();
});
}
self._dataChange = true;
});
this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {
this.getCounter().setValue(self.storeValue);
this._dataChange = true;
});
this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () {
if (!self.combo.isViewVisible()) {
self.combo.showView();
this.trigger.on(
MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW,
() => {
this.getCounter().setValue(this.storeValue);
}
);
this.trigger.on(MultiSelectTrigger.EVENT_COUNTER_CLICK, () => {
if (!this.combo.isViewVisible()) {
this.combo.showView();
}
});
this.combo = BI.createWidget({
type: "bi.combo",
this.combo = createWidget({
type: Combo.xtype,
cls: o.simple ? "bi-border-bottom" : "bi-border bi-border-radius",
toggle: false,
container: o.container,
el: this.trigger,
adjustLength: 1,
popup: {
type: "bi.search_multi_select_popup_view",
ref: function () {
self.popup = this;
self.trigger.setAdapter(this);
type: SearchMultiSelectPopupView.xtype,
ref: _ref => {
this.popup = _ref;
this.trigger.setAdapter(_ref);
},
listeners: [{
eventName: BI.MultiSelectPopupView.EVENT_CHANGE,
action: function () {
self._dataChange = true;
self.storeValue = this.getValue();
self._adjust(function () {
assertShowValue();
});
}
}, {
eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,
action: function () {
self._defaultState();
}
}, {
eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,
action: function () {
self._dataChange = true;
self.setValue();
self._defaultState();
listeners: [
{
eventName: MultiSelectPopupView.EVENT_CHANGE,
action :() => {
this._dataChange = true;
this.storeValue = this.getValue();
this._adjust(() => {
assertShowValue();
});
},
},
{
eventName: MultiSelectPopupView.EVENT_CLICK_CONFIRM,
action :() => {
this._defaultState();
},
},
{
eventName: MultiSelectPopupView.EVENT_CLICK_CLEAR,
action: () => {
this._dataChange = true;
this.setValue();
this._defaultState();
},
}
}],
itemsCreator: BI.bind(self._itemsCreator, this),
],
itemsCreator: bind(this._itemsCreator, this),
valueFormatter: o.valueFormatter,
onLoaded: function () {
BI.nextTick(function () {
self.combo.adjustWidth();
self.combo.adjustHeight();
self.trigger.getCounter().adjustView();
self.trigger.getSearcher().adjustView();
onLoaded: () => {
nextTick(() => {
this.combo.adjustWidth();
this.combo.adjustHeight();
this.trigger.getCounter().adjustView();
this.trigger.getSearcher().adjustView();
});
}
},
},
value: o.value,
hideChecker: function (e) {
return triggerBtn.element.find(e.target).length === 0;
}
hideChecker: e => triggerBtn.element.find(e.target).length === 0,
});
this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {
this.combo.on(Combo.EVENT_BEFORE_POPUPVIEW, () => {
if (!this.isViewVisible()) {
self._dataChange = false;// 标记数据是否发生变化
this._dataChange = false; // 标记数据是否发生变化
}
this.setValue(self.storeValue);
BI.nextTick(function () {
self._populate();
this.setValue(this.storeValue);
nextTick(() => {
this._populate();
});
});
// 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件
this.wants2Quit = false;
this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {
this.combo.on(Combo.EVENT_AFTER_HIDEVIEW, () => {
// important:关闭弹出时又可能没有退出编辑状态
self.trigger.stopEditing();
if (self.requesting === true) {
self.wants2Quit = true;
this.trigger.stopEditing();
if (this.requesting === true) {
this.wants2Quit = true;
} else {
/**
* 在存在标红的情况如果popover没有发生改变就确认需要同步trigger的值否则对外value值和trigger样式不统一
*/
assertShowValue();
self._dataChange && self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM);
this._dataChange &&
this.fireEvent(SearchMultiTextValueCombo.EVENT_CONFIRM);
}
});
var triggerBtn = BI.createWidget({
type: "bi.trigger_icon_button",
width: o.height,
height: o.height,
cls: "multi-select-trigger-icon-button"
});
triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {
self.trigger.getCounter().hideView();
if (self.combo.isViewVisible()) {
self.combo.hideView();
triggerBtn.on(TriggerIconButton.EVENT_CHANGE, () => {
this.trigger.getCounter().hideView();
if (this.combo.isViewVisible()) {
this.combo.hideView();
} else {
self.combo.showView();
this.combo.showView();
}
});
BI.createWidget({
type: "bi.absolute",
createWidget({
type: AbsoluteLayout.xtype,
element: this,
items: [{
el: this.combo,
left: 0,
right: 0,
top: 0,
bottom: 0
}, {
el: triggerBtn,
right: 0,
top: 0,
bottom: 0
}]
items: [
{
el: this.combo,
left: 0,
right: 0,
top: 0,
bottom: 0,
},
{
el: triggerBtn,
right: 0,
top: 0,
bottom: 0,
}
],
});
this._checkError();
},
}
_defaultState: function () {
_defaultState() {
this.trigger.stopEditing();
this.combo.hideView();
},
}
_assertValue: function (val) {
var o = this.options;
_assertValue(val) {
const o = this.options;
val || (val = {});
val.type || (val.type = BI.Selection.Multi);
val.type || (val.type = Selection.Multi);
val.value || (val.value = []);
BI.remove(val.value, function (idx, value) {
return !BI.contains(BI.map(o.items, "value"), value);
});
},
remove(val.value, (idx, value) => !contains(map(o.items, "value"), value));
}
_makeMap: function (values) {
return BI.makeObject(values || []);
},
_makeMap(values) {
return makeObject(values || []);
}
_joinKeywords: function (keywords, callback) {
var self = this, o = this.options;
_joinKeywords(keywords, callback) {
this._assertValue(this.storeValue);
this.requesting = true;
this._itemsCreator({
type: BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,
keywords: keywords
}, function (ob) {
var values = BI.map(ob.items, "value");
digest(values);
});
function digest (items) {
var selectedMap = self._makeMap(items);
BI.each(keywords, function (i, val) {
if (BI.isNotNull(selectedMap[val])) {
self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);
const digest = items => {
const selectedMap = this._makeMap(items);
each(keywords, (i, val) => {
if (isNotNull(selectedMap[val])) {
this.storeValue.type === Selection.Multi
? pushDistinct(this.storeValue.value, val)
: remove(this.storeValue.value, val);
}
});
self._adjust(callback);
}
},
this._adjust(callback);
};
this._itemsCreator(
{
type: SearchMultiTextValueCombo.REQ_GET_ALL_DATA,
keywords,
},
ob => {
const values = map(ob.items, "value");
digest(values);
}
);
}
_joinAll: function (res, callback) {
var self = this, o = this.options;
_joinAll(res, callback) {
this._assertValue(res);
this.requesting = true;
this._itemsCreator({
type: BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,
keywords: [this.trigger.getKey()]
}, function (ob) {
var items = BI.map(ob.items, "value");
if (self.storeValue.type === res.type) {
var change = false;
var map = self._makeMap(self.storeValue.value);
BI.each(items, function (i, v) {
if (BI.isNotNull(map[v])) {
change = true;
self.storeValue.assist && self.storeValue.assist.push(map[v]);
delete map[v];
this._itemsCreator(
{
type: SearchMultiTextValueCombo.REQ_GET_ALL_DATA,
keywords: [this.trigger.getKey()],
},
ob => {
const map = this._makeMap(this.storeValue.value);
const items = map(ob.items, "value");
if (this.storeValue.type === res.type) {
let change = false;
each(items, (i, v) => {
if (isNotNull(map[v])) {
change = true;
this.storeValue.assist &&
this.storeValue.assist.push(map[v]);
delete map[v];
}
});
change && (this.storeValue.value = values(map));
this._adjust(callback);
return;
}
const selectedMap = this._makeMap(this.storeValue.value);
const notSelectedMap = this._makeMap(res.value);
const newItems = [];
each(items, (i, item) => {
if (isNotNull(selectedMap[items[i]])) {
this.storeValue.assist &&
this.storeValue.assist.push(selectedMap[items[i]]);
delete selectedMap[items[i]];
}
if (isNull(notSelectedMap[items[i]])) {
remove(this.storeValue.assist, item);
newItems.push(item);
}
});
change && (self.storeValue.value = BI.values(map));
self._adjust(callback);
return;
this.storeValue.value = newItems.concat(values(selectedMap));
this._adjust(callback);
}
var selectedMap = self._makeMap(self.storeValue.value);
var notSelectedMap = self._makeMap(res.value);
var newItems = [];
BI.each(items, function (i, item) {
if (BI.isNotNull(selectedMap[items[i]])) {
self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);
delete selectedMap[items[i]];
}
if (BI.isNull(notSelectedMap[items[i]])) {
BI.remove(self.storeValue.assist, item);
newItems.push(item);
}
});
self.storeValue.value = newItems.concat(BI.values(selectedMap));
self._adjust(callback);
});
},
_adjust: function (callback) {
var self = this, o = this.options;
if (!this._count) {
this._itemsCreator({
type: BI.SearchMultiTextValueCombo.REQ_GET_DATA_LENGTH
}, function (res) {
self._count = res.count;
adjust();
callback();
});
} else {
adjust();
callback();
}
);
}
function adjust () {
if (self.storeValue.type === BI.Selection.All && self.storeValue.value.length >= self._count) {
self.storeValue = {
type: BI.Selection.Multi,
value: []
_adjust(callback) {
const adjust = () => {
if (
this.storeValue.type === Selection.All &&
this.storeValue.value.length >= this._count
) {
this.storeValue = {
type: Selection.Multi,
value: [],
};
} else if (self.storeValue.type === BI.Selection.Multi && self.storeValue.value.length >= self._count) {
self.storeValue = {
type: BI.Selection.All,
value: []
} else if (
this.storeValue.type === Selection.Multi &&
this.storeValue.value.length >= this._count
) {
this.storeValue = {
type: Selection.All,
value: [],
};
}
self._updateAllValue();
self._checkError();
if (self.wants2Quit === true) {
self._dataChange && self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM);
self.wants2Quit = false;
this._updateAllValue();
this._checkError();
if (this.wants2Quit === true) {
this._dataChange &&
this.fireEvent(SearchMultiTextValueCombo.EVENT_CONFIRM);
this.wants2Quit = false;
}
self.requesting = false;
this.requesting = false;
};
if (!this._count) {
this._itemsCreator(
{
type: SearchMultiTextValueCombo.REQ_GET_DATA_LENGTH,
},
res => {
this._count = res.count;
adjust();
callback();
}
);
} else {
adjust();
callback();
}
},
}
_join: function (res, callback) {
var self = this, o = this.options;
_join(res, callback) {
this._assertValue(res);
this._assertValue(this.storeValue);
if (this.storeValue.type === res.type) {
var map = this._makeMap(this.storeValue.value);
BI.each(res.value, function (i, v) {
const map = this._makeMap(this.storeValue.value);
each(res.value, (i, v) => {
if (!map[v]) {
self.storeValue.value.push(v);
BI.remove(self.storeValue.assist, v);
this.storeValue.value.push(v);
remove(this.storeValue.assist, v);
map[v] = v;
}
});
var change = false;
BI.each(res.assist, function (i, v) {
if (BI.isNotNull(map[v])) {
let change = false;
each(res.assist, (i, v) => {
if (isNotNull(map[v])) {
change = true;
self.storeValue.assist && self.storeValue.assist.push(map[v]);
this.storeValue.assist &&
this.storeValue.assist.push(map[v]);
delete map[v];
}
});
change && (this.storeValue.value = BI.values(map));
self._adjust(callback);
change && (this.storeValue.value = values(map));
this._adjust(callback);
return;
}
this._joinAll(res, callback);
},
}
_setStartValue: function (value) {
_setStartValue(value) {
this._startValue = value;
this.popup.setStartValue(value);
},
}
_getItemsByTimes: function (items, times) {
var res = [];
for (var i = (times - 1) * 100; items[i] && i < times * 100; i++) {
_getItemsByTimes(items, times) {
const res = [];
for (let i = (times - 1) * 100; items[i] && i < times * 100; i++) {
res.push(items[i]);
}
return res;
},
}
_hasNextByTimes: function (items, times) {
_hasNextByTimes(items, times) {
return times * 100 < items.length;
},
}
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
var items = o.items;
var keywords = (options.keywords || []).slice();
_itemsCreator(options, callback) {
const o = this.options;
let items = o.items;
const keywords = (options.keywords || []).slice();
if (options.keyword) {
keywords.push(options.keyword);
}
BI.each(keywords, function (i, kw) {
var search = BI.Func.getSearchResult(items, kw);
each(keywords, (i, kw) => {
const search = Func.getSearchResult(items, kw);
items = search.match.concat(search.find);
});
if (options.selectedValues) {// 过滤
var filter = BI.makeObject(options.selectedValues, true);
items = BI.filter(items, function (i, ob) {
return !filter[ob.value];
});
if (options.selectedValues) {
// 过滤
const filter = makeObject(options.selectedValues, true);
items = filter(items, (i, ob) => !filter[ob.value]);
}
if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) {
if (options.type === MultiSelectCombo.REQ_GET_ALL_DATA) {
callback({
items: items
items,
});
return;
}
if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({count: items.length});
if (options.type === MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({ count: items.length });
return;
}
callback({
items: self._getItemsByTimes(items, options.times),
hasNext: self._hasNextByTimes(items, options.times)
items: this._getItemsByTimes(items, options.times),
hasNext: this._hasNextByTimes(items, options.times),
});
},
_checkError: function () {
var v = this.storeValue.value || [];
if(BI.isNotEmptyArray(v)) {
v = BI.isArray(v) ? v : [v];
var result = BI.find(this.allValue, function (idx, value) {
return !BI.contains(v, value);
});
if (BI.isNull(result)) {
BI.isNotNull(this.trigger) && (this.trigger.setTipType("success"));
}
_checkError() {
let v = this.storeValue.value || [];
if (isNotEmptyArray(v)) {
v = isArray(v) ? v : [v];
const result = find(this.allValue, (idx, value) => !contains(v, value));
if (isNull(result)) {
isNotNull(this.trigger) && this.trigger.setTipType("success");
this.element.removeClass("combo-error");
} else {
BI.isNotNull(this.trigger) && (this.trigger.setTipType("warning"));
isNotNull(this.trigger) && this.trigger.setTipType("warning");
this.element.addClass("combo-error");
}
} else {
if(v.length === this.allValue.length){
BI.isNotNull(this.trigger) && (this.trigger.setTipType("success"));
if (v.length === this.allValue.length) {
isNotNull(this.trigger) && this.trigger.setTipType("success");
this.element.removeClass("combo-error");
}else {
BI.isNotNull(this.trigger) && (this.trigger.setTipType("warning"));
} else {
isNotNull(this.trigger) && this.trigger.setTipType("warning");
this.element.addClass("combo-error");
}
}
},
}
_updateAllValue: function () {
_updateAllValue() {
this.storeValue = this.storeValue || {};
this.allValue = BI.deepClone(this.storeValue.value || []);
},
this.allValue = deepClone(this.storeValue.value || []);
}
setValue: function (v) {
this.storeValue = BI.deepClone(v || {});
setValue(v) {
this.storeValue = deepClone(v || {});
this._updateAllValue();
this._assertValue(this.storeValue);
this.combo.setValue(this.storeValue);
this._checkError();
},
}
getValue: function () {
return BI.deepClone(this.storeValue);
},
getValue() {
return deepClone(this.storeValue);
}
_populate: function () {
_populate() {
this._count = null;
this.combo.populate();
},
}
populate: function (items) {
populate(items) {
this.options.items = items;
this._populate();
}
});
BI.extend(BI.SearchMultiTextValueCombo, {
}
extend(SearchMultiTextValueCombo, {
REQ_GET_DATA_LENGTH: 1,
REQ_GET_ALL_DATA: -1
REQ_GET_ALL_DATA: -1,
});
BI.SearchMultiTextValueCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
BI.shortcut("bi.search_multi_text_value_combo", BI.SearchMultiTextValueCombo);

189
src/widget/searchmultitextvaluecombo/multitextvalue.combo.trigger.search.js

@ -1,31 +1,44 @@
BI.SearchMultiSelectTrigger = BI.inherit(BI.Trigger, {
import { shortcut, extend, emptyFn, createWidget, Events, nextTick, HTapeLayout, RightVerticalAdaptLayout } from "@/core";
import { Trigger } from "@/base";
import { MultiSelectCheckSelectedSwitcher, MultiSelectSearcher, SearchMultiSelectSearcher } from "@/widget";
constants: {
height: 14,
rgap: 4,
lgap: 4
},
@shortcut()
export class SearchMultiSelectTrigger extends Trigger {
static xtype = "bi.search_multi_select_trigger";
_defaultConfig: function () {
return BI.extend(BI.SearchMultiSelectTrigger.superclass._defaultConfig.apply(this, arguments), {
constants = { height: 14, rgap: 4, lgap: 4 };
static EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK";
static EVENT_COUNTER_CLICK = "EVENT_COUNTER_CLICK";
static EVENT_CHANGE = "EVENT_CHANGE";
static EVENT_START = "EVENT_START";
static EVENT_STOP = "EVENT_STOP";
static EVENT_PAUSE = "EVENT_PAUSE";
static EVENT_SEARCHING = "EVENT_SEARCHING";
static EVENT_BEFORE_COUNTER_POPUPVIEW = "EVENT_BEFORE_COUNTER_POPUPVIEW";
_defaultConfig() {
const conf = super._defaultConfig(...arguments);
return extend(conf, {
baseCls: "bi-multi-select-trigger",
itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn,
itemsCreator: emptyFn,
valueFormatter: emptyFn,
searcher: {},
switcher: {},
adapter: null,
masker: {}
masker: {},
});
},
}
_init: function () {
BI.SearchMultiSelectTrigger.superclass._init.apply(this, arguments);
_init() {
super._init(...arguments);
var self = this, o = this.options;
const o = this.options;
this.searcher = BI.createWidget(o.searcher, {
type: "bi.search_multi_select_searcher",
this.searcher = createWidget(o.searcher, {
type: SearchMultiSelectSearcher.xtype,
height: o.height,
itemsCreator: o.itemsCreator,
valueFormatter: o.valueFormatter,
@ -36,119 +49,125 @@ BI.SearchMultiSelectTrigger = BI.inherit(BI.Trigger, {
value: o.value,
text: o.text,
tipType: o.tipType,
warningTitle: o.warningTitle
warningTitle: o.warningTitle,
});
this.searcher.on(BI.MultiSelectSearcher.EVENT_START, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_START);
this.searcher.on(MultiSelectSearcher.EVENT_START, () => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_START);
});
this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_PAUSE);
this.searcher.on(MultiSelectSearcher.EVENT_PAUSE, () => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_PAUSE);
});
this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_SEARCHING, arguments);
this.searcher.on(MultiSelectSearcher.EVENT_SEARCHING, () => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_SEARCHING, ...arguments);
});
this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_STOP);
this.searcher.on(MultiSelectSearcher.EVENT_STOP, () => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_STOP);
});
this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_CHANGE, arguments);
this.searcher.on(MultiSelectSearcher.EVENT_CHANGE, () => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_CHANGE, ...arguments);
});
this.numberCounter = BI.createWidget(o.switcher, {
type: "bi.multi_select_check_selected_switcher",
this.numberCounter = createWidget(o.switcher, {
type: MultiSelectCheckSelectedSwitcher.xtype,
valueFormatter: o.valueFormatter,
itemsCreator: o.itemsCreator,
adapter: o.adapter,
masker: o.masker,
value: o.value
});
this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK);
});
this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {
self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW);
value: o.value,
});
this.numberCounter.on(
MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE,
() => {
this.fireEvent(SearchMultiSelectTrigger.EVENT_COUNTER_CLICK);
}
);
this.numberCounter.on(
MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW,
() => {
this.fireEvent(
SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW
);
}
);
var wrapNumberCounter = BI.createWidget({
type: "bi.right_vertical_adapt",
const wrapNumberCounter = createWidget({
type: RightVerticalAdaptLayout.xtype,
hgap: 4,
items: [{
el: this.numberCounter
}]
items: [
{
el: this.numberCounter,
}
],
});
var wrapper = BI.createWidget({
type: "bi.htape",
const wrapper = createWidget({
type: HTapeLayout.xtype,
element: this,
items: [
{
el: this.searcher,
width: "fill"
}, {
width: "fill",
},
{
el: wrapNumberCounter,
width: 0
}, {
el: BI.createWidget(),
width: 24
}]
width: 0,
},
{
el: createWidget(),
width: 24,
}
],
});
this.numberCounter.on(BI.Events.VIEW, function (b) {
BI.nextTick(function () {// 自动调整宽度
wrapper.attr("items")[1].width = (b === true ? self.numberCounter.element.outerWidth() + 8 : 0);
this.numberCounter.on(Events.VIEW, b => {
nextTick(() => {
// 自动调整宽度
wrapper.attr("items")[1].width =
b === true
? this.numberCounter.element.outerWidth() + 8
: 0;
wrapper.resize();
});
});
this.element.click(function (e) {
if (self.element.find(e.target).length > 0) {
self.numberCounter.hideView();
this.element.click(e => {
if (this.element.find(e.target).length > 0) {
this.numberCounter.hideView();
}
});
},
}
getCounter: function () {
getCounter() {
return this.numberCounter;
},
}
getSearcher: function () {
getSearcher() {
return this.searcher;
},
}
stopEditing: function () {
stopEditing() {
this.searcher.stopSearch();
this.numberCounter.hideView();
},
}
setAdapter: function (adapter) {
setAdapter(adapter) {
this.searcher.setAdapter(adapter);
this.numberCounter.setAdapter(adapter);
},
}
setValue: function (ob) {
setValue(ob) {
this.searcher.setValue(ob);
this.numberCounter.setValue(ob);
},
}
setTipType: function (v) {
setTipType(v) {
this.searcher.setTipType(v);
},
}
getKey: function () {
getKey() {
return this.searcher.getKey();
},
}
getValue: function () {
getValue() {
return this.searcher.getValue();
}
});
BI.SearchMultiSelectTrigger.EVENT_TRIGGER_CLICK = "EVENT_TRIGGER_CLICK";
BI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK = "EVENT_COUNTER_CLICK";
BI.SearchMultiSelectTrigger.EVENT_CHANGE = "EVENT_CHANGE";
BI.SearchMultiSelectTrigger.EVENT_START = "EVENT_START";
BI.SearchMultiSelectTrigger.EVENT_STOP = "EVENT_STOP";
BI.SearchMultiSelectTrigger.EVENT_PAUSE = "EVENT_PAUSE";
BI.SearchMultiSelectTrigger.EVENT_SEARCHING = "EVENT_SEARCHING";
BI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = "EVENT_BEFORE_COUNTER_POPUPVIEW";
BI.shortcut("bi.search_multi_select_trigger", BI.SearchMultiSelectTrigger);
}

238
src/widget/searchmultitextvaluecombo/multitextvalue.loader.search.js

@ -1,184 +1,202 @@
/**
* 多选加载数据面板
* Created by guy on 15/11/2.
* @class BI.SearchMultiSelectLoader
* @extends Widget
*/
BI.SearchMultiSelectLoader = BI.inherit(BI.Widget, {
_defaultConfig: function () {
return BI.extend(BI.SearchMultiSelectLoader.superclass._defaultConfig.apply(this, arguments), {
import { shortcut, Widget, extend, emptyFn, createWidget, isKey, Selection, map, contains, remove, pushDistinct, Controller, VerticalLayout, createItems, delay, isNotNull } from "@/core";
import { ButtonGroup, Loader } from "@/base";
import { SelectList, MultiSelectBar, MultiSelectItem } from "@/case";
@shortcut()
export class SearchMultiSelectLoader extends Widget {
static xtype = "bi.search_multi_select_loader";
static EVENT_CHANGE = "EVENT_CHANGE";
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-multi-select-loader",
logic: {
dynamic: true
dynamic: true,
},
el: {
height: 400
height: 400,
},
valueFormatter: BI.emptyFn,
itemsCreator: BI.emptyFn,
valueFormatter: emptyFn,
itemsCreator: emptyFn,
itemHeight: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT,
onLoaded: BI.emptyFn
onLoaded: emptyFn,
});
},
}
_init: function () {
BI.SearchMultiSelectLoader.superclass._init.apply(this, arguments);
_init() {
super._init(...arguments);
var self = this, opts = this.options;
var hasNext = false;
const opts = this.options;
let hasNext = false;
this.storeValue = opts.value || {};
this._assertValue(this.storeValue);
this.button_group = BI.createWidget({
type: "bi.select_list",
this.button_group = createWidget({
type: SelectList.xtype,
element: this,
logic: opts.logic,
toolbar: {
type: "bi.multi_select_bar",
type: MultiSelectBar.xtype,
cls: "bi-list-item-active",
height: this.options.itemHeight,
iconWrapperWidth: 36
iconWrapperWidth: 36,
},
el: BI.extend({
onLoaded: opts.onLoaded,
el: {
type: "bi.loader",
isDefaultInit: false,
logic: {
dynamic: true,
scrolly: true
},
el: extend(
{
onLoaded: opts.onLoaded,
el: {
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
behaviors: {
redmark: function () {
return true;
}
type: Loader.xtype,
isDefaultInit: false,
logic: {
dynamic: true,
scrolly: true,
},
layouts: [{
type: "bi.vertical"
}]
}
}
}, opts.el),
itemsCreator: function (op, callback) {
var startValue = self._startValue;
self.storeValue && (op = BI.extend(op || {}, {
selectedValues: BI.isKey(startValue) && self.storeValue.type === BI.Selection.Multi
? self.storeValue.value.concat(startValue) : self.storeValue.value
}));
opts.itemsCreator(op, function (ob) {
el: {
chooseType: ButtonGroup.CHOOSE_TYPE_MULTI,
behaviors: {
redmark: () => true,
},
layouts: [
{
type: VerticalLayout.xtype,
}
],
},
},
},
opts.el
),
itemsCreator: (op, callback) => {
const startValue = this._startValue;
this.storeValue &&
(op = extend(op || {}, {
selectedValues:
isKey(startValue) &&
this.storeValue.type === Selection.Multi
? this.storeValue.value.concat(startValue)
: this.storeValue.value,
}));
opts.itemsCreator(op, ob => {
hasNext = ob.hasNext;
var firstItems = [];
if (op.times === 1 && self.storeValue) {
var json = BI.map(self.storeValue.value, function (i, v) {
var txt = opts.valueFormatter(v) || v;
let firstItems = [];
if (op.times === 1 && this.storeValue) {
const json = map(this.storeValue.value, (i, v) => {
const txt = opts.valueFormatter(v) || v;
return {
text: txt,
value: v,
title: txt,
selected: self.storeValue.type === BI.Selection.Multi
selected:
this.storeValue.type === Selection.Multi,
};
});
if (BI.isKey(self._startValue) && !BI.contains(self.storeValue.value, self._startValue)) {
var txt = opts.valueFormatter(startValue) || startValue;
if (
isKey(this._startValue) &&
!contains(this.storeValue.value, this._startValue)
) {
const txt =
opts.valueFormatter(startValue) || startValue;
json.unshift({
text: txt,
value: startValue,
title: txt,
selected: true
selected: true,
});
}
firstItems = self._createItems(json);
firstItems = this._createItems(json);
}
callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || "");
if (op.times === 1 && self.storeValue) {
BI.isKey(startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, startValue) : BI.pushDistinct(self.storeValue.value, startValue));
self.setValue(self.storeValue);
callback(
firstItems.concat(this._createItems(ob.items)),
ob.keyword || ""
);
if (op.times === 1 && this.storeValue) {
isKey(startValue) &&
(this.storeValue.type === Selection.All
? remove(this.storeValue.value, startValue)
: pushDistinct(
this.storeValue.value,
startValue
));
this.setValue(this.storeValue);
}
(op.times === 1) && self._scrollToTop();
op.times === 1 && this._scrollToTop();
});
},
hasNext: function () {
return hasNext;
},
value: this.storeValue
hasNext: () => hasNext,
value: this.storeValue,
});
this.button_group.on(BI.Controller.EVENT_CHANGE, function () {
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
this.button_group.on(Controller.EVENT_CHANGE, () => {
this.fireEvent(Controller.EVENT_CHANGE, arguments);
});
this.button_group.on(BI.SelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.SearchMultiSelectLoader.EVENT_CHANGE, arguments);
this.button_group.on(SelectList.EVENT_CHANGE, () => {
this.fireEvent(SearchMultiSelectLoader.EVENT_CHANGE, ...arguments);
});
},
}
_createItems: function (items) {
return BI.createItems(items, {
type: "bi.multi_select_item",
_createItems(items) {
return createItems(items, {
type: MultiSelectItem.xtype,
logic: this.options.logic,
cls: "bi-list-item-active",
height: this.options.itemHeight,
selected: this.isAllSelected(),
iconWrapperWidth: 36
iconWrapperWidth: 36,
});
},
}
_scrollToTop: function () {
var self = this;
BI.delay(function () {
self.button_group.element.scrollTop(0);
_scrollToTop() {
delay(() => {
this.button_group.element.scrollTop(0);
}, 30);
},
}
isAllSelected: function () {
isAllSelected() {
return this.button_group.isAllSelected();
},
}
_assertValue: function (val) {
_assertValue(val) {
val || (val = {});
val.type || (val.type = BI.Selection.Multi);
val.type || (val.type = Selection.Multi);
val.value || (val.value = []);
},
}
setStartValue: function (v) {
setStartValue(v) {
this._startValue = v;
},
}
setValue: function (v) {
setValue(v) {
this.storeValue = v || {};
this._assertValue(this.storeValue);
this.button_group.setValue(this.storeValue);
},
}
getValue: function () {
getValue() {
return this.button_group.getValue();
},
}
getAllButtons: function () {
getAllButtons() {
return this.button_group.getAllButtons();
},
}
empty: function () {
empty() {
this.button_group.empty();
},
}
populate: function (items) {
if (BI.isNotNull(items)) {
populate(items) {
if (isNotNull(items)) {
arguments[0] = this._createItems(items);
}
this.button_group.populate.apply(this.button_group, arguments);
},
this.button_group.populate(...arguments);
}
resetHeight: function (h) {
resetHeight(h) {
this.button_group.resetHeight(h);
},
}
resetWidth: function (w) {
resetWidth(w) {
this.button_group.resetWidth(w);
}
});
BI.SearchMultiSelectLoader.EVENT_CHANGE = "EVENT_CHANGE";
BI.shortcut("bi.search_multi_select_loader", BI.SearchMultiSelectLoader);
}

112
src/widget/searchmultitextvaluecombo/multitextvalue.popup.view.search.js

@ -1,92 +1,104 @@
BI.SearchMultiSelectPopupView = BI.inherit(BI.Widget, {
import { shortcut, Widget, extend, emptyFn, createWidget, i18nText } from "@/core";
import { MultiPopupView } from "@/case";
import { SearchMultiSelectLoader } from "@/widget";
_defaultConfig: function () {
return BI.extend(BI.SearchMultiSelectPopupView.superclass._defaultConfig.apply(this, arguments), {
@shortcut()
export class SearchMultiSelectPopupView extends Widget {
static xtype = "bi.search_multi_select_popup_view";
static EVENT_CHANGE = "EVENT_CHANGE";
static EVENT_CLICK_CONFIRM = "EVENT_CLICK_CONFIRM";
static EVENT_CLICK_CLEAR = "EVENT_CLICK_CLEAR";
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-multi-select-popup-view",
maxWidth: "auto",
minWidth: 135,
maxHeight: 400,
valueFormatter: BI.emptyFn,
itemsCreator: BI.emptyFn,
onLoaded: BI.emptyFn
valueFormatter: emptyFn,
itemsCreator: emptyFn,
onLoaded: emptyFn,
});
},
}
_init: function () {
BI.SearchMultiSelectPopupView.superclass._init.apply(this, arguments);
var self = this, opts = this.options;
_init() {
super._init(...arguments);
const opts = this.options;
this.loader = BI.createWidget({
type: "bi.search_multi_select_loader",
this.loader = createWidget({
type: SearchMultiSelectLoader.xtype,
itemsCreator: opts.itemsCreator,
valueFormatter: opts.valueFormatter,
onLoaded: opts.onLoaded,
value: opts.value
value: opts.value,
});
this.popupView = BI.createWidget({
type: "bi.multi_popup_view",
this.popupView = createWidget({
type: MultiPopupView.xtype,
stopPropagation: false,
maxWidth: opts.maxWidth,
minWidth: opts.minWidth,
maxHeight: opts.maxHeight,
element: this,
buttons: [BI.i18nText("BI-Basic_Clears"), BI.i18nText("BI-Basic_OK")],
buttons: [i18nText("BI-Basic_Clears"), i18nText("BI-Basic_OK")],
el: this.loader,
value: opts.value
value: opts.value,
});
this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () {
self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CHANGE);
this.popupView.on(MultiPopupView.EVENT_CHANGE, () => {
this.fireEvent(SearchMultiSelectPopupView.EVENT_CHANGE);
});
this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {
switch (index) {
this.popupView.on(
MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON,
index => {
switch (index) {
case 0:
self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR);
this.fireEvent(
SearchMultiSelectPopupView.EVENT_CLICK_CLEAR
);
break;
case 1:
self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM);
this.fireEvent(
SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM
);
break;
default:
break;
}
}
});
},
);
}
isAllSelected: function () {
isAllSelected() {
return this.loader.isAllSelected();
},
}
setStartValue: function (v) {
setStartValue(v) {
this.loader.setStartValue(v);
},
}
setValue: function (v) {
setValue(v) {
this.popupView.setValue(v);
},
}
getValue: function () {
getValue() {
return this.popupView.getValue();
},
}
populate: function (items) {
this.popupView.populate.apply(this.popupView, arguments);
},
populate(items) {
this.popupView.populate(...arguments);
}
resetHeight: function (h) {
resetHeight(h) {
this.popupView.resetHeight(h);
},
}
resetWidth: function (w) {
resetWidth(w) {
this.popupView.resetWidth(w);
},
}
setDirection: function (direction, position) {
setDirection(direction, position) {
this.popupView.setDirection(direction, position);
},
});
BI.SearchMultiSelectPopupView.EVENT_CHANGE = "EVENT_CHANGE";
BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM = "EVENT_CLICK_CONFIRM";
BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR = "EVENT_CLICK_CLEAR";
BI.shortcut("bi.search_multi_select_popup_view", BI.SearchMultiSelectPopupView);
}
}

200
src/widget/searchmultitextvaluecombo/trigger/searcher.multitextvalue.js

@ -1,175 +1,179 @@
BI.SearchMultiSelectSearcher = BI.inherit(BI.Widget, {
_defaultConfig: function () {
return BI.extend(BI.SearchMultiSelectSearcher.superclass._defaultConfig.apply(this, arguments), {
import { shortcut, Widget, extend, emptyFn, createWidget, isNotNull, Selection, size, each } from "@/core";
import { Searcher } from "@/base";
import { MultiSelectEditor, MultiSelectSearchPane } from "@/widget";
@shortcut()
export class SearchMultiSelectSearcher extends Widget {
static xtype = "bi.search_multi_select_searcher";
static EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
static EVENT_CHANGE = "EVENT_CHANGE";
static EVENT_START = "EVENT_START";
static EVENT_STOP = "EVENT_STOP";
static EVENT_PAUSE = "EVENT_PAUSE";
static EVENT_SEARCHING = "EVENT_SEARCHING";
_defaultConfig() {
return extend(super._defaultConfig(...arguments), {
baseCls: "bi-multi-select-searcher",
itemsCreator: BI.emptyFn,
itemsCreator: emptyFn,
el: {},
popup: {},
valueFormatter: BI.emptyFn,
valueFormatter: emptyFn,
adapter: null,
masker: {}
masker: {},
});
},
}
_init: function () {
BI.SearchMultiSelectSearcher.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.editor = BI.createWidget(o.el, {
type: "bi.multi_select_editor",
_init() {
super._init(...arguments);
const o = this.options;
this.editor = createWidget(o.el, {
type: MultiSelectEditor.xtype,
height: o.height,
text: o.text,
tipType: o.tipType,
warningTitle: o.warningTitle
warningTitle: o.warningTitle,
});
this.searcher = BI.createWidget({
type: "bi.searcher",
this.searcher = createWidget({
type: Searcher.xtype,
element: this,
height: o.height,
isAutoSearch: false,
isAutoSync: false,
onSearch: function (op, callback) {
onSearch: (op, callback) => {
callback();
},
el: this.editor,
popup: BI.extend({
type: "bi.multi_select_search_pane",
valueFormatter: o.valueFormatter,
keywordGetter: function () {
return self.editor.getValue();
},
itemsCreator: function (op, callback) {
var keyword = self.editor.getValue();
op.keywords = [keyword];
o.itemsCreator(op, callback);
popup: extend(
{
type: MultiSelectSearchPane.xtype,
valueFormatter: o.valueFormatter,
keywordGetter: () => this.editor.getValue(),
itemsCreator: (op, callback) => {
const keyword = this.editor.getValue();
op.keywords = [keyword];
o.itemsCreator(op, callback);
},
value: o.value,
},
value: o.value
}, o.popup),
o.popup
),
adapter: o.adapter,
masker: o.masker
masker: o.masker,
});
this.searcher.on(BI.Searcher.EVENT_START, function () {
self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_START);
this.searcher.on(Searcher.EVENT_START, () => {
this.fireEvent(SearchMultiSelectSearcher.EVENT_START);
});
this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {
if (this.hasMatched()) {
}
self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_PAUSE);
this.searcher.on(Searcher.EVENT_PAUSE, () => {
this.fireEvent(SearchMultiSelectSearcher.EVENT_PAUSE);
});
this.searcher.on(BI.Searcher.EVENT_STOP, function () {
self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_STOP);
this.searcher.on(Searcher.EVENT_STOP, () => {
this.fireEvent(SearchMultiSelectSearcher.EVENT_STOP);
});
this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {
self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_CHANGE, arguments);
this.searcher.on(Searcher.EVENT_CHANGE, () => {
this.fireEvent(SearchMultiSelectSearcher.EVENT_CHANGE, ...arguments);
});
this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {
var keywords = this.getKeywords();
self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_SEARCHING, keywords);
this.searcher.on(Searcher.EVENT_SEARCHING, () => {
const keywords = this.getKeywords();
this.fireEvent(SearchMultiSelectSearcher.EVENT_SEARCHING, keywords);
});
if(BI.isNotNull(o.value)) {
if (isNotNull(o.value)) {
this.setState(o.value);
}
},
}
adjustView: function () {
adjustView() {
this.searcher.adjustView();
},
}
isSearching: function () {
isSearching() {
return this.searcher.isSearching();
},
}
stopSearch: function () {
stopSearch() {
this.searcher.stopSearch();
},
}
getKeyword: function () {
getKeyword() {
return this.editor.getValue();
},
}
hasMatched: function () {
hasMatched() {
return this.searcher.hasMatched();
},
}
hasChecked: function () {
hasChecked() {
return this.searcher.getView() && this.searcher.getView().hasChecked();
},
}
setAdapter: function (adapter) {
setAdapter(adapter) {
this.searcher.setAdapter(adapter);
},
}
setState: function (obj) {
var o = this.options;
var ob = {};
setState(obj) {
let state;
const o = this.options;
const ob = {};
ob.type = obj.type;
ob.value = o.allValueGetter() || [];
ob.assist = obj.assist;
if (ob.type === BI.Selection.All) {
if (ob.type === Selection.All) {
if (ob.value.length === 0) {
this.editor.setState(BI.Selection.All);
} else if (BI.size(ob.assist) <= 20) {
var state = "";
BI.each(ob.assist, function (i, v) {
this.editor.setState(Selection.All);
} else if (size(ob.assist) <= 20) {
state = "";
each(ob.assist, (i, v) => {
if (i === 0) {
state += "" + (o.valueFormatter(v + "") || v);
state += `${o.valueFormatter(`${v}`) || v}`;
} else {
state += "," + (o.valueFormatter(v + "") || v);
state += `,${o.valueFormatter(`${v}`) || v}`;
}
});
this.editor.setState(state);
} else {
this.editor.setState(BI.Selection.Multi);
this.editor.setState(Selection.Multi);
}
} else {
if (ob.value.length === 0) {
this.editor.setState(BI.Selection.None);
} else if (BI.size(ob.value) <= 20) {
var state = "";
BI.each(ob.value, function (i, v) {
this.editor.setState(Selection.None);
} else if (size(ob.value) <= 20) {
state = "";
each(ob.value, (i, v) => {
if (i === 0) {
state += "" + (o.valueFormatter(v + "") || v);
state += `${o.valueFormatter(`${v}`) || v}`;
} else {
state += "," + (o.valueFormatter(v + "") || v);
state += `,${o.valueFormatter(`${v}`) || v}`;
}
});
this.editor.setState(state);
} else {
this.editor.setState(BI.Selection.Multi);
this.editor.setState(Selection.Multi);
}
}
},
}
setTipType: function (v) {
setTipType(v) {
this.editor.setTipType(v);
},
}
setValue: function (ob) {
setValue(ob) {
this.setState(ob);
this.searcher.setValue(ob);
},
}
getKey: function () {
getKey() {
return this.editor.getValue();
},
}
getValue: function () {
getValue() {
return this.searcher.getValue();
},
}
populate: function (items) {
this.searcher.populate.apply(this.searcher, arguments);
populate(items) {
this.searcher.populate(...arguments);
}
});
BI.SearchMultiSelectSearcher.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
BI.SearchMultiSelectSearcher.EVENT_CHANGE = "EVENT_CHANGE";
BI.SearchMultiSelectSearcher.EVENT_START = "EVENT_START";
BI.SearchMultiSelectSearcher.EVENT_STOP = "EVENT_STOP";
BI.SearchMultiSelectSearcher.EVENT_PAUSE = "EVENT_PAUSE";
BI.SearchMultiSelectSearcher.EVENT_SEARCHING = "EVENT_SEARCHING";
BI.shortcut("bi.search_multi_select_searcher", BI.SearchMultiSelectSearcher);
}

Loading…
Cancel
Save