UNPKG

@adaptabletools/adaptable-cjs

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

319 lines (318 loc) 12.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LayoutApiImpl = void 0; const tslib_1 = require("tslib"); const LayoutRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/LayoutRedux")); const ModuleConstants = tslib_1.__importStar(require("../../Utilities/Constants/ModuleConstants")); const ApiBase_1 = require("./ApiBase"); const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions")); const ObjectFactory_1 = tslib_1.__importDefault(require("../../Utilities/ObjectFactory")); const Helper_1 = tslib_1.__importDefault(require("../../Utilities/Helpers/Helper")); const Uuid_1 = require("../../AdaptableState/Uuid"); const PopupRedux_1 = require("../../Redux/ActionsReducers/PopupRedux"); const LayoutInternalApi_1 = require("../Internal/LayoutInternalApi"); const LayoutHelpers_1 = require("./LayoutHelpers"); const GeneralConstants_1 = require("../../Utilities/Constants/GeneralConstants"); class LayoutApiImpl extends ApiBase_1.ApiBase { constructor(_adaptable) { super(_adaptable); this.internalApi = new LayoutInternalApi_1.LayoutInternalApi(_adaptable); } updateCurrentLayout(updateFn) { const currentLayout = this.getCurrentLayout(); const updatedLayout = (0, LayoutHelpers_1.normalizeLayout)(updateFn(structuredClone(currentLayout))); this.createOrUpdateLayout(updatedLayout); } isCurrentLayoutPivot() { return (0, LayoutHelpers_1.isPivotLayout)(this.getCurrentLayout()); } getLayoutState() { return this.getAdaptableState().Layout; } getCurrentVisibleColumnIdsMapForTableLayout() { const layout = this.getCurrentLayout(); if ((0, LayoutHelpers_1.isPivotLayout)(layout)) { return {}; } return layout.TableColumns.reduce((acc, colId) => { acc[colId] = true; return acc; }, {}); } getCurrentVisibleColumnIdsForTableLayout() { const layout = this.getCurrentLayout(); if ((0, LayoutHelpers_1.isPivotLayout)(layout)) { return []; } return layout.TableColumns.filter((colId) => !layout.ColumnVisibility || layout.ColumnVisibility?.[colId] !== false); } getCurrentVisibleColumnIdsForPivotLayout() { const layout = this.getCurrentLayout(); if (!(0, LayoutHelpers_1.isPivotLayout)(layout)) { return []; } return this.getAgGridApi() .getAllDisplayedColumns() .map((col) => col.getColId()); } getCurrentRowGroupsColumnIds() { const layout = this.getCurrentLayout(); if ((0, LayoutHelpers_1.isPivotLayout)(layout)) { return layout.PivotGroupedColumns; } return layout.RowGroupedColumns; } setLayout(layoutName) { if (StringExtensions_1.default.IsNullOrEmpty(layoutName)) { return; } if (layoutName === this.getCurrentLayoutName()) { return; } let layout = this.getLayoutByName(layoutName); if (this.checkItemExists(layout, layoutName, 'Layout')) { this.dispatchAction(LayoutRedux.LayoutSelect(layoutName)); } } getCurrentLayout() { let layoutName = this.getLayoutState().CurrentLayout; return this.getLayoutByName(layoutName) ?? GeneralConstants_1.ERROR_LAYOUT; } getCurrentLayoutColumnSort(columnId) { const currentLayout = this.getCurrentLayout(); return (currentLayout?.ColumnSorts?.find?.((sort) => sort.ColumnId === columnId)?.SortOrder ?? null); } getCurrentLayoutName() { return this.getAdaptableState().Layout.CurrentLayout; } getLayoutByName(layoutName) { if (StringExtensions_1.default.IsNotNullOrEmpty(layoutName)) { let layout = this.getLayouts().find((l) => l.Name == layoutName); if (this.checkItemExists(layout, layoutName, 'Layout')) { return layout; } } } getExtendedLayoutByName(layoutName) { const layout = this.getLayoutByName(layoutName); if (!layout) { return undefined; } const config = { includeLayoutNotAssociatedObjects: true, associatedWithLayout: layoutName, }; // cannot see a better way than to go through this module by module... let extensions = []; this.getAlertApi() .getAlertDefinitions(config) .forEach((obj) => { extensions.push({ Module: 'Alert', Object: obj }); }); this.getCustomSortApi() .getCustomSorts(config) .forEach((obj) => { extensions.push({ Module: 'CustomSort', Object: obj }); }); this.getFlashingCellApi() .getFlashingCellDefinitions(config) .forEach((obj) => { extensions.push({ Module: 'FlashingCell', Object: obj }); }); this.getFormatColumnApi() .getFormatColumns(config) .forEach((obj) => { extensions.push({ Module: 'FormatColumn', Object: obj }); }); this.getPlusMinusApi() .getAllPlusMinus(config) .forEach((obj) => { extensions.push({ Module: 'PlusMinus', Object: obj }); }); this.getScheduleApi() .getReminderSchedules(config) .forEach((obj) => { extensions.push({ Module: 'Schedule', Object: obj }); }); this.getScheduleApi() .getReportSchedules(config) .forEach((obj) => { extensions.push({ Module: 'Schedule', Object: obj }); }); this.getShortcutApi() .getShortcuts(config) .forEach((obj) => { extensions.push({ Module: 'Shortcut', Object: obj }); }); this.getStyledColumnApi() .getStyledColumns(config) .forEach((obj) => { extensions.push({ Module: 'StyledColumn', Object: obj }); }); return { Layout: layout, Extensions: extensions, }; } getLayouts() { return this.getAdaptableState().Layout.Layouts ?? []; } getLayoutById(id) { return this.getLayouts()?.find((layout) => layout?.Uuid === id); } saveCurrentLayout() { let currentLayout = this.getCurrentLayout(); if (currentLayout) { this.createOrUpdateLayout(currentLayout); } } doesLayoutExist(layout) { if (layout == null) { return false; } let existingLayout = this.getLayouts().find((l) => l.Uuid == layout.Uuid || l.Name === layout.Name); return existingLayout != null; } createAndSetLayout(layoutToCreate) { const layout = this.createLayout(layoutToCreate); if (layout) { this.setLayout(layoutToCreate.Name); } return layout; } createLayout(layoutToCreate) { if (this.doesLayoutExist(layoutToCreate)) { this.logError("Cannot create layout with the Name: '" + layoutToCreate.Name + "' as it already exists"); return false; } const newLayout = ObjectFactory_1.default.CreateEmptyLayout({ ...layoutToCreate }); this.addUidToAdaptableObject(newLayout); this.dispatchAction(LayoutRedux.LayoutAdd(newLayout)); return newLayout; } cloneAndSetLayout(layoutToClone, layoutName) { const newLayout = this.cloneLayout(layoutToClone, layoutName); if (newLayout) { this.setLayout(layoutName); } return newLayout; } cloneLayout(layoutToClone, layoutName) { if (!this.doesLayoutExist(layoutToClone)) { this.logError("Cannot clone layout with Name: '" + layoutName + "' as other Layout does not exist"); return false; } const newLayout = Helper_1.default.cloneObject(layoutToClone); newLayout.Uuid = (0, Uuid_1.createUuid)(); newLayout.Name = layoutName; this.dispatchAction(LayoutRedux.LayoutAdd(newLayout)); return this.getLayoutById(newLayout.Uuid); } setColumnCaption(columnId, caption) { if (StringExtensions_1.default.IsNotNullOrEmpty(columnId) && StringExtensions_1.default.IsNotNullOrEmpty(caption)) { this.updateCurrentLayout((layout) => { layout.ColumnHeaders = { ...layout.ColumnHeaders }; layout.ColumnHeaders[columnId] = caption; return layout; }); } } createOrUpdateLayout(layout) { if (!this.doesLayoutExist(layout)) { this.createLayout(layout); } else { this.dispatchAction(LayoutRedux.LayoutSave(layout)); } } showChangeColumnCaption(column) { const currentLayout = this.getCurrentLayout(); const customHeader = currentLayout.ColumnHeaders?.[column.columnId] ?? column.friendlyName; this.dispatchAction((0, PopupRedux_1.PopupShowPrompt)({ Header: `Change caption for '${column.friendlyName}'`, Msg: '', DefaultValue: customHeader, ConfirmActionCreator: (inputText) => { if (inputText !== customHeader) { this.setColumnCaption(column.columnId, inputText); } return { type: 'NOOP' }; }, })); } openLayoutSettingsPanel() { this.showModulePopup(ModuleConstants.LayoutModuleId); } showLayoutEditor(layoutName, layoutType, action = 'Edit') { let preparedAction = action; if (!['Edit', 'New', 'Clone'].includes(action)) { preparedAction = 'Edit'; this.logError(`When opening the layout editor the action must be one of: New, Clone, Edit; given: ${action}`); } let layout = layoutName ? this.getLayoutByName(layoutName) : this.getCurrentLayout(); if (preparedAction === 'New') { layout = null; } this.showModulePopup(ModuleConstants.LayoutModuleId, { source: 'Toolbar', action: preparedAction, value: layout, config: { layoutType, }, }); } deleteLayout(layout) { const layoutCount = this.getLayouts().length; if (layoutCount === 1) { this.logWarn('You cannot delete the only Layout. AdapTable always requires one layout'); return; } this.dispatchAction(LayoutRedux.LayoutDelete(layout)); } deleteLayoutByName(layoutName) { const layout = this.getLayoutByName(layoutName); if (!layout) { this.logWarn('No Layout exists with that name'); return; } return this.deleteLayout(layout); } removeColumnFromCurrentLayout(columnId) { const column = this.getColumnApi().getColumnWithColumnId(columnId); if (column) { const layout = this.getCurrentLayout(); if (!(0, LayoutHelpers_1.isPivotLayout)(layout)) { this.updateCurrentLayout((layout) => { layout.TableColumns = layout.TableColumns.filter((c) => c !== columnId); return layout; }); } else { this.updateCurrentLayout((layout) => { layout.PivotColumns = layout.PivotColumns.filter((c) => c !== columnId); return layout; }); } } } addColumnToCurrentLayout(columnId) { const column = this.getColumnApi().getColumnWithColumnId(columnId); if (column) { const layout = this.getCurrentLayout(); if (!(0, LayoutHelpers_1.isPivotLayout)(layout)) { this.updateCurrentLayout((layout) => { layout.TableColumns.push(columnId); return layout; }); } else { this.updateCurrentLayout((layout) => { layout.PivotColumns.push(columnId); return layout; }); } } } } exports.LayoutApiImpl = LayoutApiImpl;