UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

566 lines (565 loc) 86 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { FormView } from '../component/editor/editor.internal/FormView.component'; import { RecordView } from '../component/editor/editor.internal/RecordView.component'; import { ActionModel, ActionModelMenu } from '../component/model/models'; const /** @type {?} */ FORM_VIEW = FormView.TYPE_NAME; const /** @type {?} */ RECORD_VIEW = RecordView.TYPE_NAME; export class DefaultDataEditorActionProvider { constructor() { } /** * @param {?} editor * @return {?} */ loadActionModels(editor) { return new Promise((resolve, reject) => { let /** @type {?} */ actions = []; { // create bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { // create new tab editor.showViewByType(FORM_VIEW).then(() => { if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { formView.createDefaultTab(); let /** @type {?} */ allTabsCount = formView.getTabsCount(); if (allTabsCount > 0) { formView.showTabAtIndex(allTabsCount - 1); } } } }); }; let /** @type {?} */ action = new ActionModel(null, 'Create', 'create', showFunction, enableFunction, performeFunction, ["create"]); actions.push(action); } { // edit row let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return false; } return true; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { if (event !== null && typeof event !== 'undefined') { let /** @type {?} */ data = null; if (event.data !== null && typeof event.data !== 'undefined') { data = event.data; } if (data !== null && typeof data !== 'undefined') { if (data.constructor.name === 'RecordRow') { data = data.data; } } if (editor !== null && typeof editor !== 'undefined') { editor.showViewByType(FORM_VIEW); if (this.showViewDelayTimer !== null && typeof this.showViewDelayTimer !== 'undefined') { clearTimeout(this.showViewDelayTimer); this.showViewDelayTimer = null; } this.showViewDelayTimer = setTimeout(() => { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { // if create tab set to last formView.showTabByData(data); } }, 1); } } }; let /** @type {?} */ action = new ActionModel(null, 'Edit', 'edit', showFunction, enableFunction, performeFunction, ["edit"]); actions.push(action); } { // delete action bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.deleteSelectedDataWithConfirmDialog(); } }; let /** @type {?} */ action = new ActionModel(null, 'Delete', 'delete', showFunction, enableFunction, performeFunction, ["delete"]); actions.push(action); } { // delete tab & row let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return false; } return true; }; let /** @type {?} */ enableFunction = (iContext) => { if (iContext.constructor.name === 'Tab') { if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ tab = /** @type {?} */ (iContext); let /** @type {?} */ tDatas = tab.getData(); if (tDatas !== null && typeof tDatas !== 'undefined') { if (Array.isArray(tDatas)) { if (tDatas.length < 0) { return false; } } } else { return false; } } } return true; }; let /** @type {?} */ performeFunction = (event) => { if (event !== null && typeof event !== 'undefined') { let /** @type {?} */ data = null; if (event.data !== null && typeof event.data !== 'undefined') { data = event.data; } if (data !== null && typeof data !== 'undefined') { if (data.constructor.name === 'RecordRow') { data = data.data; } else if (data.objects !== undefined) { data = data.objects; } } if (editor !== null && typeof editor !== 'undefined') { editor.deleteDataWithConfirmDialog(data); } } }; let /** @type {?} */ action = new ActionModel(null, 'Delete', 'delete', showFunction, enableFunction, performeFunction); actions.push(action); } // Save as a one menu let /** @type {?} */ saveActionMenu = new ActionModelMenu(null, 'Save', 'edit', null, null, null, []); actions.push(saveActionMenu); { // save/edit action bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } if (iContext.constructor.name === 'ActionButton') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.saveSelectedDataWithConfirmDialog(); } }; let /** @type {?} */ action = new ActionModel(null, 'Save', 'edit', showFunction, enableFunction, performeFunction); saveActionMenu.items.push(action); // set def to save select saveActionMenu.isShow = showFunction; saveActionMenu.isEnabled = enableFunction; saveActionMenu.actionPerformedHandler = performeFunction; } { // save/edit all dirty action bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } if (iContext.constructor.name === 'ActionButton') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.saveDirtyDataWithConfirmDialog(); } }; let /** @type {?} */ action = new ActionModel(null, 'Save All', 'edit', showFunction, enableFunction, performeFunction); saveActionMenu.items.push(action); } { // close tab let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab formView.closeTabAtIndex(index); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Tab', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close others tab let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); let /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (tabModels.length > 1) { return true; } } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close others tab formView.closeTabOther(index); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Other Tab', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab to the left let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { let /** @type {?} */ index = null; let /** @type {?} */ tab = /** @type {?} */ (iContext); index = tab.getIndex(); if (index !== null && typeof index === 'number') { if (index > 0) { return true; } } } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab to the left formView.closeTabToTheLeft(index); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Tab Left ', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab to the right let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { let /** @type {?} */ index = null; let /** @type {?} */ tab = /** @type {?} */ (iContext); index = tab.getIndex(); if (index !== null && typeof index === 'number') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); let /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (index < tabModels.length - 1) { return true; } } } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab to the right formView.closeTabToTheRight(index); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Tab Right ', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab saved let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); let /** @type {?} */ tabPane = formView.getTabPane(); let /** @type {?} */ tabModels = tabPane.getTabModels(); if (tabModels.length > 1) { let /** @type {?} */ countDirty = 0; // is dirty for (let /** @type {?} */ i = 0; i < tabModels.length; i++) { let /** @type {?} */ isDirty = tabPane.isTabDirty(i); if (isDirty) { countDirty++; } } if (countDirty > 0 && countDirty < tabModels.length) { return true; } } } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab saved formView.closeTabSaved(); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Tab Saved', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab all let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); let /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (tabModels.length > 1) { return true; } } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ index = null; if (event.index !== null && typeof event.index !== 'undefined') { if (event.index !== null && typeof event.index !== 'undefined') { index = event.index; } } if (editor !== null && typeof editor !== 'undefined') { let /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab all formView.closeTabAll(index); } } }; let /** @type {?} */ action = new ActionModel(null, 'Close Tab All', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } // Revert as a one menu let /** @type {?} */ revertActionMenu = new ActionModelMenu(null, 'Revert', 'other', null, null, null, []); actions.push(revertActionMenu); { // revert selected by action bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } if (iContext.constructor.name === 'ActionButton') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.revertSelectedDataWithConfirmDialog(); } }; let /** @type {?} */ action = new ActionModel(null, 'Revert', 'other', showFunction, enableFunction, performeFunction); revertActionMenu.items.push(action); // set def to revert select revertActionMenu.isShow = showFunction; revertActionMenu.isEnabled = enableFunction; revertActionMenu.actionPerformedHandler = performeFunction; } { // revert Dirty by action bar let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } if (iContext.constructor.name === 'ActionButton') { return true; } return false; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { let /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.revertDirtyDataWithConfirmDialog(); } }; let /** @type {?} */ action = new ActionModel(null, 'RevertAll', 'other', showFunction, enableFunction, performeFunction); revertActionMenu.items.push(action); } { // revert by row let /** @type {?} */ showFunction = (iContext) => { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return false; } if (iContext.constructor.name === 'ActionButton') { return false; } return true; }; let /** @type {?} */ enableFunction = (iContext) => { return true; }; let /** @type {?} */ performeFunction = (event) => { if (event !== null && typeof event !== 'undefined') { let /** @type {?} */ data = null; if (event.data !== null && typeof event.data !== 'undefined') { data = event.data; } if (data !== null && typeof data !== 'undefined') { if (data.constructor.name === 'RecordRow') { data = data.data; } } if (editor !== null && typeof editor !== 'undefined') { editor.revertDataWithConfirmDialog(data); } } }; let /** @type {?} */ action = new ActionModel(null, 'Revert', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } resolve(actions); }); } /** * @param {?} editor * @return {?} */ getActionModels(editor) { // not use cache value cause editor maybe changed return this.loadActionModels(editor).then((result) => { this.actionModels = result; return Promise.resolve(this.actionModels); }); } } DefaultDataEditorActionProvider.decorators = [ { type: Injectable }, ]; /** @nocollapse */ DefaultDataEditorActionProvider.ctorParameters = () => []; function DefaultDataEditorActionProvider_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DefaultDataEditorActionProvider.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DefaultDataEditorActionProvider.ctorParameters; /** @type {?} */ DefaultDataEditorActionProvider.prototype.actionModels; /** @type {?} */ DefaultDataEditorActionProvider.prototype.showViewDelayTimer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhdGFFZGl0b3JBY3Rpb25Qcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvc2VydmljZS9EZWZhdWx0RGF0YUVkaXRvckFjdGlvblByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXpFLHVCQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ3JDLHVCQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBR3pDLE1BQU07SUFLSjtLQUNDOzs7OztJQUVTLGdCQUFnQixDQUFDLE1BQTBCO1FBQ25ELE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxxQkFBSSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztZQUVoQyxDQUFDOztnQkFFQyxxQkFBSSxZQUFZLEdBQWEsQ0FBQyxRQUFhLEVBQUUsRUFBRTtvQkFDN0MsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDO3FCQUNkO29CQUVELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQ2I7b0JBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDZCxD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