UNPKG

@adaptabletools/adaptable-cjs

Version:

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

320 lines (319 loc) 12.7 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 LayoutRedux_1 = 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)) { const currentLayoutName = this.getCurrentLayoutName(); if (StringExtensions_1.default.IsNotNullOrEmpty(currentLayoutName)) { this.dispatchAction(LayoutRedux.LayoutSetColumnCaption(currentLayoutName, columnId, caption)); } } } createOrUpdateLayout(layout) { if (!this.doesLayoutExist(layout)) { this.createLayout(layout); } else { this.dispatchAction(LayoutRedux.LayoutSave(layout)); } } showChangeColumnCaption(column) { const customHeader = this.getCurrentLayout().ColumnHeaders?.[column.columnId] ?? column.friendlyName; this.dispatchAction((0, PopupRedux_1.PopupShowPrompt)({ Header: `Change caption for '${column.friendlyName}'`, Msg: '', DefaultValue: customHeader, ConfirmActionCreator: (inputText) => inputText !== customHeader && (0, LayoutRedux_1.LayoutSetColumnCaption)(this.getCurrentLayoutName(), column.columnId, inputText), })); } 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, }, }); } isCurrentLayoutReadOnly() { const currentLayout = this.getCurrentLayout(); if (currentLayout) { return currentLayout.IsReadOnly; } return true; } 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) { this.removeColumnFromLayout(columnId, this.getCurrentLayoutName()); } removeColumnFromAllLayouts(columnId) { this.getLayouts().forEach((layout) => { this.removeColumnFromLayout(columnId, layout.Name); }); } removeColumnFromLayout(columnId, layoutName) { const column = this.getColumnApi().getColumnWithColumnId(columnId); if (column) { const layout = this.getLayoutByName(layoutName); if (layout && !(0, LayoutHelpers_1.isPivotLayout)(layout)) { if (layout.TableColumns.includes(columnId)) { this.dispatchAction(LayoutRedux.LayoutRemoveColumn(layoutName, columnId)); this.getColumnApi().hideColumn(columnId); } } } } addColumnToTableLayout(columnId, layoutName) { const column = this.getColumnApi().getColumnWithColumnId(columnId); if (column) { const layout = this.getLayoutByName(layoutName); if (layout && !(0, LayoutHelpers_1.isPivotLayout)(layout)) { if (!layout.TableColumns.includes(columnId)) { this.dispatchAction(LayoutRedux.LayoutAddColumn(layoutName, columnId)); this.getColumnApi().showColumn(columnId); } } } } addColumnToCurrentTableLayout(columnId) { this.addColumnToTableLayout(columnId, this.getCurrentLayoutName()); } } exports.LayoutApiImpl = LayoutApiImpl;