UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

1,406 lines 173 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { PhloxAppInfo } from '../model/models'; import { DataSchema } from '../../share/model/models'; import { DefaultDataComparator } from '../../component/DefaultDataComparator'; import { DefaultDataEditorContextMenuFactory } from './DefaultDataEditorContextMenuFactory'; import { DATA_CREATE_EVENT, DATA_UPDATE_EVENT, DATA_DELETE_EVENT, DATA_REVERT_EVENT, DATA_SCHEMA_LOAD_EVENT } from '../../share/CustomEventType'; import { Option } from '../../decorator/Option.decorator'; import { AbstractI18NApplicable } from '../../share/AbstractI18NApplicable'; import { DataUtils } from '../../share/utils/DataUtils'; import { EventUtils } from '../../share/utils/EventUtils'; import { I18N } from '../../decorator/decorators'; const /** @type {?} */ CONFIG_NAME = 'com.phlox-ui.dataEditor'; /** * <p style="text-indent: 2em;"> * An abstract base class for <code>data editor</code> page component. A single <code>data editor</code> may contain one or more <code>data view</code>s ([[ViewModel]]). * All <code>data view</code>s must manipulate with the same data set in that editor. For an instance, when a user edit data from one view and switch to another view, the data * shown in the second view must always be identical the same as the first one. An editor may contain a set of <code>action</code>s ([[ActionModel]]) which user can perform * on editor's data. For more information about creating your own editor page, please see the documentation below. * </p> * <section style="padding-top: 7pt;"> * <header style="font-weight: bold;"> * Data View * </header> * <p style="text-indent: 2em;"> * To specify the list of views in an editor, you have to provide a <code>view provider</code> ([[IDataEditorViewProvider]]) into editor's constructor. The editor's constructor * will call [[IDataEditorViewProvider.getViewModels]] to obtain the list of <code>data view</code>s being displayed in this editor. The concept behind <code>data view</code> is that * to provide user the different perspectives on the same data set. For example, if you're going to build a customer data editor page, you may want to provide user a <code>list view</code> * which allows user to easily search a customer by typing into search text box, then, it'll show customer data in tabular form. Therefore, in some sense, you may want to provide * a <code>calendar view</code> displaying customer's birth date to the user --letting he/she to take less efforts on organizing a CRM work plan. For this kind of use, using <code> * data view</code>, instead of building seperate pages, is the best choice to build your application. * </p> * </section> * <section style="padding-top: 7pt;"> * <header style="font-weight: bold;"> * Action * </header> * <p style="text-indent: 2em;"> * abcdef * </p> * </section> * * @author shiorin, tee4cute * @see [[ViewModel]] * @see [[ActionModel]] * @see [[IDataEditorViewProvider]] * @see [[IDataEditorActionProvider]] * @see [[IDataServiceFactory]] * @abstract */ export class AbstractDataEditor extends AbstractI18NApplicable { /** * @param {?} actionProvider * @param {?} viewProvider * @param {?} dataFactory * @param {?} settingServiceFactory * @param {?} phloxAppService * @param {?} dialogService * @param {?} bgProcessMgr */ constructor(actionProvider, viewProvider, dataFactory, settingServiceFactory, phloxAppService, dialogService, bgProcessMgr) { super(); this.PAGE_LOOP_TIMEOUT = 5; this.data = []; this.dialogService = dialogService; this.bgProcessMgr = bgProcessMgr; this.dataServiceFactory = dataFactory; this.viewProvider = viewProvider; this.actionProvider = actionProvider; this.settingServiceFactory = settingServiceFactory; this.phloxAppService = phloxAppService; this.views = []; this.viewModels = []; this.actionModels = []; this.viewWrappers = []; this.dataCreateEvent = new EventEmitter(); this.dataUpdateEvent = new EventEmitter(); this.dataDeleteEvent = new EventEmitter(); this.dataRevertEvent = new EventEmitter(); this.dataQueryEvent = new EventEmitter(); this.viewShowEvent = new EventEmitter(); this.viewHideEvent = new EventEmitter(); this.viewChangeEvent = new EventEmitter(); this.dataReloadEvent = new EventEmitter(); this.dataSchemaLoadEvent = new EventEmitter(); this.viewShowHandlerFunction = (event) => { this.onViewShowHandler(event); }; this.viewHideHandlerFunction = (event) => { this.onViewHideHandler(event); }; this.viewChangeHandlerFunction = (event) => { this.onViewChangeHandler(event); }; } /** * @return {?} */ ngOnInit() { if (this.menuModelFactory == null || typeof this.menuModelFactory === 'undefined') { this.menuModelFactory = new DefaultDataEditorContextMenuFactory(this); } if (this.dataComparator == null || typeof this.dataComparator === 'undefined') { this.dataComparator = new DefaultDataComparator(); } this.initPage(); //loader if (this.bgProcessMgr !== null && typeof this.bgProcessMgr !== 'undefined') { this.bgProcessMgr.execute(() => { return new Promise((resolve, reject) => { let /** @type {?} */ timeout = PhloxAppInfo.DEFAULT_PAGE_LOAD_TIMEOUT; if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined' && this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT !== null && typeof this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT !== 'undefined') { timeout = this.phloxAppInfo.settings.PAGE_LOAD_TIMEOUT; } let /** @type {?} */ startTime = null; let /** @type {?} */ handler = () => { if (startTime === null) { startTime = (new Date()).getTime(); } let /** @type {?} */ currentTime = (new Date()).getTime(); if (this.isPageLoaded()) { resolve(); } else if ((currentTime - startTime) >= timeout) { reject(); } else { setTimeout(handler, this.PAGE_LOOP_TIMEOUT); } }; handler(); }); }, { type: "connection.page" }); } } /** * @return {?} */ initPage() { if ((this.viewProvider !== null && this.viewProvider !== undefined) && this.viewProvider.getViewModels(this) != null) { this.viewProvider.getViewModels(this).then((result) => { this.viewModels = []; if (result !== null && result !== undefined) { for (let /** @type {?} */ item of result) { this.viewModels.push(item); } } // default first one when view loaded if (this.viewModels !== null && this.viewModels !== undefined && this.viewModels.length > 0) { this.showView(this.viewModels[0]); } }); } if ((this.actionProvider !== null && this.actionProvider !== undefined) && this.actionProvider.getActionModels(this) != null) { this.actionProvider.getActionModels(this).then((result) => { let /** @type {?} */ actModelArray = []; if (result !== null && result !== undefined) { for (let /** @type {?} */ item of result) { actModelArray.push(item); } } this.setActionModels(actModelArray); }); } if (this.dataServiceFactory !== null && this.dataServiceFactory !== undefined) { let /** @type {?} */ dfProm = this.dataServiceFactory.createDataService(this); if (dfProm != null && dfProm !== undefined) { dfProm.then((result) => { this.dataService = result; this.reloadData(); }); } } if (this.settingServiceFactory !== null && this.settingServiceFactory !== undefined) { let /** @type {?} */ vhSettingProm = this.settingServiceFactory.createEditorSettingService(this); if (vhSettingProm != null && vhSettingProm !== undefined) { vhSettingProm.then((result) => { this.editorSetting = result; this.reloadEditorSetting(); }); } } if (this.phloxAppService !== null && this.phloxAppService !== undefined) { this.phloxAppService.getAppInfo().then((result) => { this.phloxAppInfo = result; }); } } /** * @param {?} key * @return {?} */ getI18NMessage(key) { if (this.phloxAppInfo != null && this.phloxAppInfo.i18n != null) { if (this.phloxAppInfo.i18n[key] !== null && typeof this.phloxAppInfo.i18n[key] !== 'undefined') { return this.phloxAppInfo.i18n[key]; } } return key; } /** * @param {?} event * @return {?} */ onViewShowHandler(event) { // re-emit if (this.viewShowEvent !== null && typeof this.viewShowEvent !== 'undefined') { this.viewShowEvent.emit(event); } } /** * @param {?} event * @return {?} */ onViewHideHandler(event) { // re-emit if (this.viewHideEvent !== null && typeof this.viewHideEvent !== 'undefined') { this.viewHideEvent.emit(event); } } /** * @param {?} event * @return {?} */ onViewChangeHandler(event) { // re-emit if (this.viewChangeEvent !== null && typeof this.viewChangeEvent !== 'undefined') { this.viewChangeEvent.emit(event); } } /** * @param {?} data * @return {?} */ removeData(data) { if (data !== null && typeof data !== 'undefined') { let /** @type {?} */ objIdField = this.getObjectIdField(); let /** @type {?} */ id = DataUtils.getDataValue(objIdField, data); if (id !== null && typeof id !== 'undefined') { let /** @type {?} */ index = -1; let /** @type {?} */ count = 0; for (let /** @type {?} */ tbData of this.data) { let /** @type {?} */ objId = DataUtils.getDataValue(objIdField, tbData); let /** @type {?} */ tbDataID = objId; if (id === tbDataID) { index = count; break; } count += 1; } if (index > -1) { this.data.splice(index, 1); return true; } } } return false; } /** * @param {?} checkData * @return {?} */ getRevertData(checkData) { if (checkData === null || typeof checkData === 'undefined') { return null; } let /** @type {?} */ comparator = this.getDataComparator(); for (let /** @type {?} */ d of this.data) { // revert if (comparator !== null) { if (comparator.equals(d, checkData)) { return d; } } } return null; } /** * @param {?} viewModel * @return {?} */ getViewComponentFromModel(viewModel) { if (viewModel === null) { return null; } for (let /** @type {?} */ v of this.views) { if (v.getModel() === viewModel) { return v; } } return null; } /** * @param {?} actionModels * @return {?} */ setActionModels(actionModels) { this.actionModels = actionModels; } /** * @return {?} */ reInit() { this.initPage(); } /** * @return {?} */ getObjectIdField() { if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined') { return this.phloxAppInfo.getSettings().OBJECT_ID_FIELD_NAME; } return PhloxAppInfo.DEFAULT_OBJECT_ID_FIELD_NAME; } /** * @return {?} */ getLanguageField() { if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined') { return this.phloxAppInfo.getSettings().LANGUAGE_FIELD_NAME; } return PhloxAppInfo.DEFAULT_LANGUAGE_FIELD_NAME; } /** * @return {?} */ getAppSetting() { if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined') { return this.phloxAppInfo.getSettings(); } return {}; } /** * @return {?} */ recreateDataService() { return new Promise((resolve, reject) => { if (this.dataServiceFactory != null && typeof this.dataServiceFactory !== 'undefined') { let /** @type {?} */ dfProm = this.dataServiceFactory.createDataService(this); if (dfProm != null && typeof dfProm !== 'undefined') { dfProm.then((result) => { this.dataService = result; resolve(this.dataService); }); } else { resolve(this.dataService); } } else { resolve(this.dataService); } }).catch((error) => { return Promise.resolve(this.dataService); }); } /** * @return {?} */ getData() { return this.data; } /** * @return {?} */ getCurrentView() { return this.currentView; } /** * @param {?} view * @return {?} */ getViewModelIndex(view) { if (view === null || typeof view === 'undefined') { return -1; } for (let /** @type {?} */ i = 0; i < this.viewModels.length; i++) { if (view === this.viewModels[i]) { return i; } } return -1; } /** * @param {?} viewType * @return {?} */ getViewComponentFromType(viewType) { if (viewType === null) { return null; } for (let /** @type {?} */ v of this.views) { if (v.getModel().type === viewType) { return v; } } return null; } /** * @param {?} view * @return {?} */ showView(view) { return new Promise((resolve, reject) => { let /** @type {?} */ isRender = false; let /** @type {?} */ viewIndex = this.getViewModelIndex(view); let /** @type {?} */ viewWrapper = null; if (viewIndex > -1 && viewIndex < this.viewWrappers.length) { viewWrapper = this.viewWrappers[viewIndex]; isRender = viewWrapper.isRender(); } if (!isRender) { if (viewWrapper !== null) { viewWrapper.render(); } // delay before show if (this.showViewDelayTimer !== null && typeof this.showViewDelayTimer !== 'undefined') { clearTimeout(this.showViewDelayTimer); this.showViewDelayTimer = null; } this.showViewDelayTimer = setTimeout(() => { resolve(this._showView(view)); }, 1); } else { // rendered resolve(this._showView(view)); } }); } /** * @param {?} view * @return {?} */ _showView(view) { for (let /** @type {?} */ v of this.views) { v._doHide(); } let /** @type {?} */ viewCompo = this.getViewComponentFromModel(view); this.currentView = viewCompo; if (viewCompo !== null) { return viewCompo._doShow(); } return false; } /** * @param {?} objId * @return {?} */ getDataFromObjectId(objId) { if (objId === null || typeof objId === 'undefined') { return null; } let /** @type {?} */ objIdField = this.getObjectIdField(); for (let /** @type {?} */ d of this.data) { let /** @type {?} */ dId = DataUtils.getDataValue(objIdField, d); if (objId === dId) { return d; } } return null; } /** * @param {?} data * @return {?} */ editData(data) { if (data === null || typeof data === 'undefined') { return; } let /** @type {?} */ objIdField = this.getObjectIdField(); let /** @type {?} */ objId = DataUtils.getDataValue(objIdField, data); let /** @type {?} */ obj = this.getDataFromObjectId(objId); if (obj !== null) { for (let /** @type {?} */ attr in data) { obj[attr] = data[attr]; } } } /** * @param {?} dataProm * @return {?} */ getSavePromise(dataProm) { return new Promise((resolve, reject) => { if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { let /** @type {?} */ createdArray = []; let /** @type {?} */ updatedArray = []; let /** @type {?} */ objectIdField = this.getObjectIdField(); if (resolveData !== null && typeof resolveData !== 'undefined') { if (Array.isArray(resolveData)) { for (let /** @type {?} */ obj of resolveData) { let /** @type {?} */ objId = DataUtils.getDataValue(objectIdField, obj); if (objId !== null && typeof objId !== 'undefined') { updatedArray.push(obj); } else { createdArray.push(obj); } } } } let /** @type {?} */ createProm = this.createData(createdArray); if (createProm === null || typeof createProm === 'undefined') { createProm = Promise.resolve([]); } let /** @type {?} */ updateProm = this.updateData(updatedArray); if (updateProm === null || typeof updateProm === 'undefined') { updateProm = Promise.resolve([]); } Promise.all([createProm, updateProm]).then(values => { let /** @type {?} */ result = []; if (values !== null && typeof values !== 'undefined') { if (values.length >= 1) { let /** @type {?} */ val = values[0]; if (val !== null && typeof val !== 'undefined') { if (Array.isArray(val)) { for (let /** @type {?} */ v of val) { result.push(v); } } else { result.push(val); } } } if (values.length >= 2) { let /** @type {?} */ val = values[1]; if (val !== null && typeof val !== 'undefined') { if (Array.isArray(val)) { for (let /** @type {?} */ v of val) { result.push(v); } } else { result.push(val); } } } } resolve(result); }, (error) => { reject(error); }); }); } else { resolve([]); } }); } /** * @return {?} */ getDialogService() { return this.dialogService; } /** * @param {?} viewType * @return {?} */ showViewByType(viewType) { return new Promise((resolve, reject) => { if (viewType !== null && typeof viewType !== 'undefined') { for (let /** @type {?} */ vModel of this.viewModels) { if (vModel.type === viewType) { let /** @type {?} */ prom = this.showView(vModel); if (prom !== null && typeof prom !== 'undefined') { prom.then((result) => { resolve(result); }, (error) => { reject(error); }); } } } return; } resolve(false); }); } /** * @param {?} view * @return {?} */ addViewComponent(view) { if (view == null) { return; } this.views.push(view); // update view model at index let /** @type {?} */ index = -1; for (let /** @type {?} */ i = 0; i < this.viewModels.length; i++) { let /** @type {?} */ vModelType = this.viewModels[i].type; let /** @type {?} */ mViewModelType = (view.getModel() === null ? null : view.getModel().type); if (mViewModelType !== null && vModelType === mViewModelType) { index = i; break; } } if (index > -1) { // update model this.viewModels[index] = view.getModel(); } else { // add new one to model this.viewModels.push(view.getModel()); } // add view add i18N if (typeof this.i18nValue !== 'undefined') { let /** @type {?} */ viewI18NMap = this.i18nValue['views']; // reserved keyword let /** @type {?} */ vModel = view.getModel(); let /** @type {?} */ vName = (vModel === null || typeof vModel === 'undefined') ? null : vModel.type; if (vName !== null && typeof vName !== 'undefined') { if (typeof view.applyI18N === 'function' && viewI18NMap !== undefined) { view.applyI18N(viewI18NMap[vName]); } } } // add view setOptions if (typeof this.options !== 'undefined') { let /** @type {?} */ viewOptionsMap = this.options['views']; // reserved keyword let /** @type {?} */ vModel = view.getModel(); let /** @type {?} */ vName = (vModel === null || typeof vModel === 'undefined') ? null : vModel.type; if (vName !== null && typeof vName !== 'undefined') { if (typeof view.setOptions === 'function') { view.setOptions(viewOptionsMap[vName]); } } } } /** * @param {?} view * @return {?} */ removeViewComponent(view) { if (view == null) { return; } let /** @type {?} */ tempArray = []; for (let /** @type {?} */ v of this.views) { if (v === view) { continue; } tempArray.push(v); } this.views = tempArray; } /** * @return {?} */ reloadData() { return new Promise((resolve, reject) => { // console.log(this.dataService); if (this.dataService != null) { this.dataService.loadData().then((result) => { this.data = result; resolve(result); this.dataReloadEvent.emit(result); }); } else { resolve(null); this.dataReloadEvent.emit(null); } }).catch((error) => { return Promise.reject(error); }); } /** * @return {?} */ reloadEditorSetting() { if (this.editorSetting != null) { return new Promise((resolve, reject) => { this.editorSetting.loadSettings().then((result) => { this.onEditorSettingLoaded(result); resolve(result); }, (err) => { reject(err); }).catch((error) => { return Promise.reject(error); }); }); } return Promise.resolve(null); } /** * @return {?} */ reloadViewSetting() { if (this.editorSetting != null) { for (let /** @type {?} */ v of this.views) { v.reloadViewSetting(); } } } /** * @param {?} data * @return {?} */ createData(data) { if (this.dataService === null || typeof this.dataService === 'undefined') { return Promise.resolve(null); } let /** @type {?} */ dataTemp = []; if (Array.isArray(data)) { dataTemp = data; } else { dataTemp.push(data); } let /** @type {?} */ prom = this.dataService.createData(data); let /** @type {?} */ langFieldName = this.getLanguageField(); if (prom !== null) { prom.then((resolveData) => { let /** @type {?} */ result = []; if (resolveData !== null && typeof resolveData !== 'undefined') { if (Array.isArray(resolveData)) { for (let /** @type {?} */ item of resolveData) { if (item[langFieldName] === null || typeof item[langFieldName] === 'undefined') { // push only default data this.data.push(item); } result.push(item); } } else { // add in to data array if (resolveData[langFieldName] === null || typeof resolveData[langFieldName] === 'undefined') { // push only default data this.data.push(resolveData); } result.push(resolveData); } } // emit after save let /** @type {?} */ data = { data: result, original: dataTemp }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_CREATE_EVENT, this, data, null); this.dataCreateEvent.emit(ev); return Promise.resolve(resolveData); }); } return prom; } /** * @param {?} data * @return {?} */ createDataWithConfirmDialog(data) { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Create Data', 'Do you want to Create data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.createData(data); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ saveSelectedData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getSelectedData(); return this.getSavePromise(dataProm); } return null; } /** * @return {?} */ saveDirtyData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getEditorDirtyData(); return this.getSavePromise(dataProm); } return null; } /** * @return {?} */ saveSelectedDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Save Data', 'Do you want to Save Selected data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.saveSelectedData(); if (prom !== null) { prom.then((result) => { resolve(result); }, (error) => { reject(error); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ saveDirtyDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Save Data', 'Do you want to Save all data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.saveDirtyData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ updateSelectedData() { let /** @type {?} */ currentView = this.getCurrentView(); return new Promise((resolve, reject) => { if (currentView != null) { let /** @type {?} */ dataProm = currentView.getSelectedData(); if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { let /** @type {?} */ updateProm = this.updateData(resolveData); if (updateProm !== null) { updateProm.then((res) => { resolve(res); }).catch((error) => { reject(error); }); } else { resolve(null); } }); } } else { resolve(null); } }); } /** * @return {?} */ updateDirtyData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getEditorDirtyData(); if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { return this.updateData(resolveData); }); } } return null; } /** * @param {?} data * @return {?} */ updateData(data) { if (this.dataService === null || typeof this.dataService === 'undefined') { return Promise.resolve(null); } return new Promise((resolve, reject) => { let /** @type {?} */ dataTemp = []; if (Array.isArray(data)) { dataTemp = data; } else { dataTemp.push(data); } let /** @type {?} */ prom = this.dataService.updateData(data); let /** @type {?} */ langFieldName = this.getLanguageField(); if (prom !== null) { prom.then((resolveData) => { let /** @type {?} */ result = []; if (resolveData !== null && typeof resolveData !== 'undefined') { if (Array.isArray(resolveData)) { for (let /** @type {?} */ item of resolveData) { if (item[langFieldName] === null || typeof item[langFieldName] === 'undefined') { // update cache with default data only this.editData(item); } result.push(item); } } else { // update in to data array if (resolveData[langFieldName] === null || typeof resolveData[langFieldName] === 'undefined') { this.editData(resolveData); } result.push(resolveData); } } let /** @type {?} */ data = { data: result, original: dataTemp }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_UPDATE_EVENT, this, data, null); this.dataUpdateEvent.emit(ev); resolve(resolveData); }).catch((error) => { reject(error); }); } else { resolve(null); } }); } /** * @param {?} data * @return {?} */ updateDataWithConfirmDialog(data) { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Update Data', 'Do you want to Update data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.updateData(data); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(data); } }); }); } /** * @return {?} */ updateDirtyDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Update Data', 'Do you want to Update all data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.updateDirtyData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ updateSelectedDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Update Data', 'Do you want to Update selected data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.updateSelectedData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ deleteSelectedData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getSelectedData(); if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { return this.deleteData(resolveData); }); } } return null; } /** * @param {?} data * @return {?} */ deleteData(data) { if (this.dataService === null || typeof this.dataService === 'undefined') { return Promise.resolve(null); } let /** @type {?} */ dataTemp = []; if (Array.isArray(data)) { dataTemp = data; } else { dataTemp.push(data); } let /** @type {?} */ prom = this.dataService.deleteData(data); if (prom !== null) { prom.then((resolveData) => { let /** @type {?} */ result = []; if (resolveData !== null && typeof resolveData !== 'undefined') { if (Array.isArray(resolveData)) { for (let /** @type {?} */ item of resolveData) { this.removeData(item); result.push(item); } } else { // delete from data this.removeData(resolveData); result.push(resolveData); } } let /** @type {?} */ data = { data: result, original: dataTemp }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_DELETE_EVENT, this, data, null); this.dataDeleteEvent.emit(ev); return Promise.resolve(resolveData); }); } return prom; } /** * @param {?} data * @return {?} */ deleteDataWithConfirmDialog(data) { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Deleting Data', 'Do you want to delete data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.deleteData(data); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ deleteSelectedDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Deleting Data', 'Do you want to delete selected data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.deleteSelectedData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ revertDirtyData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getEditorDirtyData(); if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { return this.revertData(resolveData); }); } } return null; } /** * @return {?} */ revertSelectedData() { let /** @type {?} */ currentView = this.getCurrentView(); if (currentView != null) { let /** @type {?} */ dataProm = currentView.getSelectedData(); if (dataProm !== null && typeof dataProm !== 'undefined') { dataProm.then((resolveData) => { return this.revertData(resolveData); }); } } return null; } /** * @param {?} data * @return {?} */ revertData(data) { let /** @type {?} */ dataTemp = []; if (Array.isArray(data)) { dataTemp = data; } else { dataTemp.push(data); } return new Promise((resolve, reject) => { let /** @type {?} */ result = []; if (data !== null && typeof data !== 'undefined') { if (Array.isArray(data)) { for (let /** @type {?} */ item of data) { let /** @type {?} */ rvItem = this.getRevertData(item); if (rvItem !== null) { result.push(rvItem); } } } else { let /** @type {?} */ rvItem = this.getRevertData(data); if (rvItem !== null) { result.push(rvItem); } } } // revert into data for (let /** @type {?} */ rvItem of result) { this.editData(rvItem); } let /** @type {?} */ d = { data: result, original: dataTemp }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_REVERT_EVENT, this, d, null); this.dataRevertEvent.emit(ev); resolve(result); }); } /** * @param {?} data * @return {?} */ revertDataWithConfirmDialog(data) { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Revert Data', 'Do you want to revert data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.revertData(data); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(data); } }); }); } /** * @return {?} */ revertSelectedDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Revert Data', 'Do you want to revert selected data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.revertSelectedData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ revertDirtyDataWithConfirmDialog() { return new Promise((resolve, reject) => { this.dialogService.showConfirmDialog('Confirm Revert Data', 'Do you want to revert all data ?', false).then((result) => { if (result == 1) { let /** @type {?} */ prom = this.revertDirtyData(); if (prom !== null) { prom.then((result) => { resolve(result); }); } } else { // NO resolve(null); } }); }); } /** * @return {?} */ searchData() { let /** @type {?} */ prom = this.queryData(this.query); if (prom !== null && prom !== undefined) { prom.then((result) => { // save data into editor this.data = result; this.dataQueryEvent.emit(result); return Promise.resolve(result); }).catch((error) => { return Promise.reject(error); }); } return Promise.resolve(null); } /** * @param {?} queryObject * @return {?} */ queryData(queryObject) { if (this.dataService === null || typeof this.dataService === 'undefined') { return Promise.resolve(null); } return this.dataService.queryData(queryObject); } /** * @param {?} viewWrapper * @return {?} */ addViewWrapper(viewWrapper) { if (this.viewWrappers === null || typeof this.viewWrappers === 'undefined') { this.viewWrappers = []; } this.viewWrappers.push(viewWrapper); } /** * @param {?} viewWrapper * @return {?} */ removeViewWrapper(viewWrapper) { if (this.viewWrappers === null || typeof this.viewWrappers === 'undefined') { this.viewWrappers = []; } if (viewWrapper !== null && typeof viewWrapper !== 'undefined') { let /** @type {?} */ index = this.viewWrappers.indexOf(viewWrapper); if (index >= 0) { this.viewWrappers.splice(index, 1); } } } /** * @return {?} */ hideDialog() { if (this.dialogService != null && typeof this.dialogService !== 'undefined') { this.dialogService.hideDialog(); } } /** * @param {?} key * @return {?} */ getI18NObject(key) { if (this.phloxAppInfo != null && this.phloxAppInfo.i18n != null) { if (this.phloxAppInfo.i18n[key] !== null && typeof this.phloxAppInfo.i18n[key] !== 'undefined') { return this.phloxAppInfo.i18n[key]; } } return null; } /** * @param {?} value * @return {?} */ applyI18N(value) { super.applyI18N(value); if (typeof this.i18nValue !== 'undefined') { let /** @type {?} */ viewI18NMap = this.i18nValue['views']; // reserved keyword for (let /** @type {?} */ v of this.views) { let /** @type {?} */ vModel = v.getModel(); let /** @type {?} */ vName = (vModel === null || typeof vModel === 'undefined') ? null : vModel.type; if (vName !== null && typeof vName !== 'undefined') { if (typeof v.applyI18N === 'function') { v.applyI18N(viewI18NMap[vName]); } } } } } /** * @param {?} options * @return {?} */ setOptions(options) { super.setOptions(options); if (typeof this.options !== 'undefined') { let /** @type {?} */ viewOptionsMap = this.options['views']; // reserved keyword for (let /** @type {?} */ v of this.views) { let /** @type {?} */ vModel = v.getModel(); let /** @type {?} */ vName = (vModel === null || typeof vModel === 'undefined') ? null : vModel.type; if (vName !== null && typeof vName !== 'undefined') { if (typeof v.setOptions === 'function') { v.setOptions(viewOptionsMap[vName]); } } } } } /** * @param {?} dataSchema * @return {?} */ setDataSchema(dataSchema) { this.dataSchema = dataSchema; let /** @type {?} */ data = { data: dataSchema }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_SCHEMA_LOAD_EVENT, this, data, null); this.dataSchemaLoadEvent.emit(ev); } /** * @return {?} */ getDataSchema() { return this.dataSchema; } /** * @return {?} */ getDataService() { return this.dataService; } /** * @param {?} event * @return {?} */ setViewShowEvent(event) { this.viewShowEvent = event; } /** * @param {?} event * @return {?} */ setViewHideEvent(event) { this.viewHideEvent = event; } /** * @param {?} event * @return {?} */ setViewChangeEvent(event) { this.viewChangeEvent = event; } /** * @param {?} event * @return {?} */ setDataCreateEvent(event) { this.dataCreateEvent = event;