UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

578 lines (577 loc) 86.1 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'; var /** @type {?} */ FORM_VIEW = FormView.TYPE_NAME; var /** @type {?} */ RECORD_VIEW = RecordView.TYPE_NAME; var DefaultDataEditorActionProvider = /** @class */ (function () { function DefaultDataEditorActionProvider() { } /** * @param {?} editor * @return {?} */ DefaultDataEditorActionProvider.prototype.loadActionModels = /** * @param {?} editor * @return {?} */ function (editor) { var _this = this; return new Promise(function (resolve, reject) { var /** @type {?} */ actions = []; { // create bar var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { // create new tab editor.showViewByType(FORM_VIEW).then(function () { if (editor !== null && typeof editor !== 'undefined') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { formView.createDefaultTab(); var /** @type {?} */ allTabsCount = formView.getTabsCount(); if (allTabsCount > 0) { formView.showTabAtIndex(allTabsCount - 1); } } } }); }; var /** @type {?} */ action = new ActionModel(null, 'Create', 'create', showFunction, enableFunction, performeFunction, ["create"]); actions.push(action); } { // edit row var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { if (event !== null && typeof event !== 'undefined') { var /** @type {?} */ data_1 = null; if (event.data !== null && typeof event.data !== 'undefined') { data_1 = event.data; } if (data_1 !== null && typeof data_1 !== 'undefined') { if (data_1.constructor.name === 'RecordRow') { data_1 = data_1.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(function () { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { // if create tab set to last formView.showTabByData(data_1); } }, 1); } } }; var /** @type {?} */ action = new ActionModel(null, 'Edit', 'edit', showFunction, enableFunction, performeFunction, ["edit"]); actions.push(action); } { // delete action bar var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return true; } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.deleteSelectedDataWithConfirmDialog(); } }; var /** @type {?} */ action = new ActionModel(null, 'Delete', 'delete', showFunction, enableFunction, performeFunction, ["delete"]); actions.push(action); } { // delete tab & row var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'ActionMenuBar') { return false; } return true; }; var /** @type {?} */ enableFunction = function (iContext) { if (iContext.constructor.name === 'Tab') { if (editor !== null && typeof editor !== 'undefined') { var /** @type {?} */ tab = /** @type {?} */ (iContext); var /** @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; }; var /** @type {?} */ performeFunction = function (event) { if (event !== null && typeof event !== 'undefined') { var /** @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); } } }; var /** @type {?} */ action = new ActionModel(null, 'Delete', 'delete', showFunction, enableFunction, performeFunction); actions.push(action); } // Save as a one menu var /** @type {?} */ saveActionMenu = new ActionModelMenu(null, 'Save', 'edit', null, null, null, []); actions.push(saveActionMenu); { // save/edit action bar var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.saveSelectedDataWithConfirmDialog(); } }; var /** @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 var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.saveDirtyDataWithConfirmDialog(); } }; var /** @type {?} */ action = new ActionModel(null, 'Save All', 'edit', showFunction, enableFunction, performeFunction); saveActionMenu.items.push(action); } { // close tab var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { return true; } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab formView.closeTabAtIndex(index); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Tab', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close others tab var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); var /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (tabModels.length > 1) { return true; } } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close others tab formView.closeTabOther(index); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Other Tab', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab to the left var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { var /** @type {?} */ index = null; var /** @type {?} */ tab = /** @type {?} */ (iContext); index = tab.getIndex(); if (index !== null && typeof index === 'number') { if (index > 0) { return true; } } } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab to the left formView.closeTabToTheLeft(index); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Tab Left ', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab to the right var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { var /** @type {?} */ index = null; var /** @type {?} */ tab = /** @type {?} */ (iContext); index = tab.getIndex(); if (index !== null && typeof index === 'number') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); var /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (index < tabModels.length - 1) { return true; } } } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab to the right formView.closeTabToTheRight(index); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Tab Right ', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab saved var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); var /** @type {?} */ tabPane = formView.getTabPane(); var /** @type {?} */ tabModels = tabPane.getTabModels(); if (tabModels.length > 1) { var /** @type {?} */ countDirty = 0; // is dirty for (var /** @type {?} */ i = 0; i < tabModels.length; i++) { var /** @type {?} */ isDirty = tabPane.isTabDirty(i); if (isDirty) { countDirty++; } } if (countDirty > 0 && countDirty < tabModels.length) { return true; } } } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab saved formView.closeTabSaved(); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Tab Saved', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } { // close tab all var /** @type {?} */ showFunction = function (iContext) { if (iContext === null || typeof iContext === 'undefined') { return false; } if (iContext.constructor.name === 'Tab') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); var /** @type {?} */ tabModels = formView.getTabPane().getTabModels(); if (tabModels.length > 1) { return true; } } return false; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @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') { var /** @type {?} */ formView = /** @type {?} */ (editor.getViewComponentFromType(FORM_VIEW)); if (formView !== null && typeof formView !== 'undefined') { //close tab all formView.closeTabAll(index); } } }; var /** @type {?} */ action = new ActionModel(null, 'Close Tab All', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } // Revert as a one menu var /** @type {?} */ revertActionMenu = new ActionModelMenu(null, 'Revert', 'other', null, null, null, []); actions.push(revertActionMenu); { // revert selected by action bar var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.revertSelectedDataWithConfirmDialog(); } }; var /** @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 var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { var /** @type {?} */ currentView = editor.getCurrentView(); if (currentView !== null && typeof currentView !== 'undefined') { editor.revertDirtyDataWithConfirmDialog(); } }; var /** @type {?} */ action = new ActionModel(null, 'RevertAll', 'other', showFunction, enableFunction, performeFunction); revertActionMenu.items.push(action); } { // revert by row var /** @type {?} */ showFunction = function (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; }; var /** @type {?} */ enableFunction = function (iContext) { return true; }; var /** @type {?} */ performeFunction = function (event) { if (event !== null && typeof event !== 'undefined') { var /** @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); } } }; var /** @type {?} */ action = new ActionModel(null, 'Revert', 'other', showFunction, enableFunction, performeFunction); actions.push(action); } resolve(actions); }); }; /** * @param {?} editor * @return {?} */ DefaultDataEditorActionProvider.prototype.getActionModels = /** * @param {?} editor * @return {?} */ function (editor) { var _this = this; // not use cache value cause editor maybe changed return this.loadActionModels(editor).then(function (result) { _this.actionModels = result; return Promise.resolve(_this.actionModels); }); }; DefaultDataEditorActionProvider.decorators = [ { type: Injectable }, ]; /** @nocollapse */ DefaultDataEditorActionProvider.ctorParameters = function () { return []; }; return DefaultDataEditorActionProvider; }()); export { DefaultDataEditorActionProvider }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhdGFFZGl0b3JBY3Rpb25Qcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvc2VydmljZS9EZWZhdWx0RGF0YUVkaXRvckFjdGlvblByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXpFLHFCQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ3JDLHFCQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDOztJQVF2QztLQUNDOzs7OztJQUVTLDBEQUFnQjs7OztJQUExQixVQUEyQixNQUEwQjtRQUFyRCxpQkFvaUJDO1FBbmlCQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUNqQyxxQkFBSSxPQUFPLEdBQWtCLEVBQUUsQ0FBQztZQUVoQyxDQUFDOztnQkFFQyxxQkFBSSxZQUFZLEdBQWEsVUFBQyxRQUFhO29CQUN6QyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUM7cUJBQ2Q7b0JBRUQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQzt3QkFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQztxQkFDYjtvQkFFRCxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUNkLENBQUM7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