com.phloxui
Version:
PhloxUI Ng2+ Framework
1,406 lines • 173 kB
JavaScript
/**
* @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;