com.phloxui
Version:
PhloxUI Ng2+ Framework
566 lines (565 loc) • 86 kB
JavaScript
/**
* @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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