import { TreeTableComponent } from '@farris/ui-treetable'; import { LookupGridComponent } from '../lookup-grid.component'; export class SelectionManager { constructor(private ins: LookupGridComponent) { } destroy() { } getBindingData() { let jsonData = this.ins.bindingData; if ( this.ins.ngControl && this.ins.ngControl.formDirective && this.ins.ngControl.formDirective.form && this.ins.ngControl.formDirective.form.bindingData ) { const bindingData = this.ins.ngControl.formDirective.form.bindingData; jsonData = bindingData; if (bindingData.getObject) { jsonData = bindingData.getObject().toJSON(); } } return jsonData; } initDisplayValue() { const jsonData = this.getBindingData(); if (jsonData && this.ins.mapFields) { const idField = this.ins.idField; let targetField = this.ins.mapFields[idField]; if (targetField) { if (targetField.indexOf(',') > -1 ) { targetField = targetField.split(',')[0]; } const val = this.ins.utils.getValue(targetField, jsonData); if (val) { this.ins.displayValue = val; } } } } private _clearSelections() { const { cmpRefInstance: t } = this.getDataCmpInstance(); if (t) { if (this.ins.isTree()) { // 树表 t.clearAll(false); if (!t.cdRef.destroyed) { t.cdRef.detectChanges(); } } else { // 列表 t.dtBody.selectedRowIndex = -1; t.dtBody.selections = undefined; if (!t.cd.destroyed) { t.cd.detectChanges(); } } } } /** * 帮助窗口打开后,根据 displayValue 选中数据 */ selectCurrentValue(selectedIds = []) { if (!this.ins.enableToSelect) { return; } const { cmpRefInstance: t, items } = this.getDataCmpInstance(); if (!t || !items || !items.length) { return; } this._clearSelections(); if (!selectedIds || !selectedIds.length) { const selectedRows = this.ins.lookupSelectionSer.getSelections(); if (selectedRows.length) { selectedIds = selectedRows.map(n => n[this.ins.idField]); } } // const _ids = this.getSelectedIds(); // selectedIds = selectedIds.concat(_ids); // selectedIds = Array.from(new Set(selectedIds)); if (selectedIds && selectedIds.length) { if (this.ins.isTree()) { // 树表 this.selected4Treetable(t, selectedIds); if (!t.cdRef.destroyed) { t.cdRef.detectChanges(); } } else { // 列表 this.selected4Datatable(t, items, selectedIds); if (!t.cd.destroyed) { t.cd.detectChanges(); } } } } private getDataCmpInstance() { let ref = null; let items = null; if (this.ins.activeTab === 'datalist') { if (this.ins.isTree()) { ref = this.ins.lookupCmpMgr.getComponentInstance('treetable'); items = (ref as TreeTableComponent).serializedValue; } else { items = this.ins.items; ref = this.ins.lookupCmpMgr.getComponentInstance(); } } else if (this.ins.activeTab === 'favorite') { ref = this.ins.lookupCmpMgr.getComponentInstance('fav'); items = this.ins.favoriteItems; } return { cmpRefInstance: ref, items }; } private selected4Datatable(t: any, items: any, values: any) { if (this.ins.singleSelect) { items.forEach((item, index) => { if (item[this.ins.idField] === values[0]) { if (!t.dtBody.isSelected(item)) { t.dtBody.selectedRowIndex = -1; t.dtBody.selectedRow('', index, item); } } }); } else { // const values = this.getSelectedIds(); values.forEach(id => { const r = items.find(n => n[this.ins.idField] == id); if (r) { t.checkRow(id); } }); } } private selected4Treetable(t: any, valueArr: any) { if (this.ins.singleSelect) { t.selectNode(valueArr[0], false, false); } else { // const valueArr = this.getSelectedIds(); t.checkedNodes(valueArr, false, false); t.selectNodes(valueArr); } } getSelectedIds() { let values = []; const s = this.ins.multipleChoiceSeparator; // 多选分隔符 if (!this.ins.singleSelect && this.ins.displayValue && ('' + this.ins.displayValue).indexOf(s) > -1) { values = this.ins.displayValue.split(s); } else { if (this.ins.displayValue !== null && this.ins.displayValue !== '' && this.ins.displayValue !== undefined) { values = [this.ins.displayValue]; } } // 启用显示多选列表 if (this.ins.showSelected) { const rows = this.ins.lookupSelectionSer.getSelections(); if (rows && rows.length) { values = rows.map(n => n[this.ins.idField]); } else { values = []; } } return values; } }