com.phloxui
Version:
PhloxUI Ng2+ Framework
578 lines (577 loc) • 86.1 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';
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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