@adaptabletools/adaptable 22.0.0-canary.1 → 22.0.0-canary.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agGrid.d.ts +9 -9
- package/agGrid.js +1 -0
- package/index.css +1280 -1400
- package/index.css.map +1 -1
- package/index.d.ts +66 -0
- package/index.js +73 -0
- package/package.json +3 -3
- package/src/AdaptableInterfaces/IAdaptable.d.ts +6 -6
- package/src/AdaptableOptions/ActionColumnOptions.d.ts +2 -2
- package/src/AdaptableOptions/AdaptablePlugin.js +6 -1
- package/src/AdaptableOptions/ColumnOptions.d.ts +2 -2
- package/src/AdaptableOptions/ContainerOptions.d.ts +55 -15
- package/src/AdaptableOptions/CustomSortOptions.d.ts +4 -0
- package/src/AdaptableOptions/DashboardOptions.d.ts +1 -2
- package/src/AdaptableOptions/ExportOptions.d.ts +1 -2
- package/src/AdaptableOptions/FilterOptions.d.ts +3 -0
- package/src/AdaptableOptions/ToolPanelOptions.d.ts +1 -2
- package/src/AdaptableState/AdaptableState.d.ts +2 -0
- package/src/AdaptableState/AlertState.d.ts +5 -2
- package/src/AdaptableState/ChartingState.d.ts +2 -2
- package/src/AdaptableState/Common/AdaptableAlert.d.ts +2 -2
- package/src/AdaptableState/Common/AdaptableButton.d.ts +2 -2
- package/src/AdaptableState/Common/AdaptableColumn.d.ts +16 -10
- package/src/AdaptableState/Common/AdaptableColumnContext.d.ts +9 -0
- package/src/AdaptableState/Common/AdaptableFlashingCell.d.ts +2 -2
- package/src/AdaptableState/Common/AdaptableObject.d.ts +20 -2
- package/src/AdaptableState/Common/AdaptableRowContext.d.ts +11 -0
- package/src/AdaptableState/Common/AdaptableStyle.d.ts +8 -0
- package/src/AdaptableState/Common/BaseContext.d.ts +2 -0
- package/src/AdaptableState/Common/ColumnHighlightInfo.d.ts +18 -0
- package/src/AdaptableState/Common/DataUpdateConfig.d.ts +17 -0
- package/src/AdaptableState/Common/NamedObject.d.ts +10 -0
- package/src/AdaptableState/Common/NamedObject.js +1 -0
- package/src/AdaptableState/Common/RowDataChangedInfo.d.ts +3 -0
- package/src/AdaptableState/Common/RowSummary.d.ts +1 -1
- package/src/AdaptableState/Common/Schedule.d.ts +8 -5
- package/src/AdaptableState/Common/SystemStatusMessageInfo.d.ts +2 -2
- package/src/AdaptableState/Common/TransposeConfig.d.ts +12 -10
- package/src/AdaptableState/CustomSortState.d.ts +5 -1
- package/src/AdaptableState/DashboardState.d.ts +1 -1
- package/src/AdaptableState/ExportState.d.ts +1 -1
- package/src/AdaptableState/FlashingCellState.d.ts +6 -2
- package/src/AdaptableState/FormatColumnState.d.ts +5 -9
- package/src/AdaptableState/InitialState.d.ts +10 -1
- package/src/AdaptableState/InternalState.d.ts +2 -0
- package/src/AdaptableState/LayoutState.d.ts +7 -3
- package/src/AdaptableState/NamedQueryState.d.ts +1 -1
- package/src/AdaptableState/PlusMinusState.d.ts +5 -1
- package/src/AdaptableState/Selection/GridCell.d.ts +9 -0
- package/src/AdaptableState/ShortcutState.d.ts +5 -1
- package/src/AdaptableState/StyledColumnState.d.ts +1 -1
- package/src/AdaptableState/ThemeState.d.ts +1 -1
- package/src/AdaptableState/UserInterfaceState.d.ts +14 -0
- package/src/AdaptableState/UserInterfaceState.js +1 -0
- package/src/Api/AlertApi.d.ts +6 -0
- package/src/Api/CustomSortApi.d.ts +12 -3
- package/src/Api/DataSetApi.d.ts +1 -1
- package/src/Api/FlashingCellApi.d.ts +6 -0
- package/src/Api/FormatColumnApi.d.ts +10 -4
- package/src/Api/GridApi.d.ts +23 -12
- package/src/Api/Implementation/ActionColumnApiImpl.js +1 -0
- package/src/Api/Implementation/AdaptableApiImpl.js +52 -0
- package/src/Api/Implementation/AlertApiImpl.d.ts +1 -0
- package/src/Api/Implementation/AlertApiImpl.js +6 -6
- package/src/Api/Implementation/ApiBase.d.ts +1 -1
- package/src/Api/Implementation/ApiBase.js +2 -1
- package/src/Api/Implementation/CalculatedColumnApiImpl.js +1 -0
- package/src/Api/Implementation/ChartingApiImpl.js +6 -2
- package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -1
- package/src/Api/Implementation/ColumnApiImpl.js +1 -0
- package/src/Api/Implementation/ColumnFilterApiImpl.js +1 -0
- package/src/Api/Implementation/CommentsApiImpl.js +1 -0
- package/src/Api/Implementation/CustomSortApiImpl.d.ts +6 -1
- package/src/Api/Implementation/CustomSortApiImpl.js +6 -2
- package/src/Api/Implementation/DashboardApiImpl.js +1 -0
- package/src/Api/Implementation/DataChangeHistoryApiImpl.js +12 -15
- package/src/Api/Implementation/DataImportApiImpl.js +1 -0
- package/src/Api/Implementation/DataSetApiImpl.js +1 -0
- package/src/Api/Implementation/EntitlementApiImpl.js +1 -0
- package/src/Api/Implementation/EventApiImpl.js +16 -14
- package/src/Api/Implementation/ExportApiImpl.js +1 -0
- package/src/Api/Implementation/ExpressionApiImpl.js +1 -0
- package/src/Api/Implementation/Fdc3ApiImpl.js +1 -0
- package/src/Api/Implementation/FilterApiImpl.js +3 -0
- package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
- package/src/Api/Implementation/FlashingCellApiImpl.js +4 -0
- package/src/Api/Implementation/FormatColumnApiImpl.d.ts +6 -5
- package/src/Api/Implementation/FormatColumnApiImpl.js +7 -5
- package/src/Api/Implementation/FreeTextColumnApiImpl.js +1 -0
- package/src/Api/Implementation/GridApiImpl.d.ts +10 -10
- package/src/Api/Implementation/GridApiImpl.js +36 -21
- package/src/Api/Implementation/GridFilterApiImpl.js +1 -0
- package/src/Api/Implementation/LayoutApiImpl.d.ts +1 -0
- package/src/Api/Implementation/LayoutApiImpl.js +5 -1
- package/src/Api/Implementation/LayoutHelpers.js +7 -0
- package/src/Api/Implementation/NamedQueryApiImpl.js +3 -2
- package/src/Api/Implementation/NoteApiImpl.js +1 -0
- package/src/Api/Implementation/PlusMinusApiImpl.d.ts +1 -0
- package/src/Api/Implementation/PlusMinusApiImpl.js +3 -0
- package/src/Api/Implementation/PredicateApiImpl.js +1 -0
- package/src/Api/Implementation/RowFormApiImpl.js +1 -0
- package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ScheduleApiImpl.js +4 -0
- package/src/Api/Implementation/ShortcutApiImpl.d.ts +1 -0
- package/src/Api/Implementation/ShortcutApiImpl.js +3 -0
- package/src/Api/Implementation/StyledColumnApiImpl.js +1 -0
- package/src/Api/Implementation/SystemStatusApiImpl.js +8 -9
- package/src/Api/Implementation/TeamSharingApiImpl.js +1 -0
- package/src/Api/Implementation/ThemeApiImpl.js +1 -0
- package/src/Api/Implementation/UserInterfaceApiImpl.d.ts +5 -0
- package/src/Api/Implementation/UserInterfaceApiImpl.js +15 -1
- package/src/Api/Internal/CalculatedColumnInternalApi.js +2 -2
- package/src/Api/Internal/ColumnInternalApi.js +1 -1
- package/src/Api/Internal/FormatColumnInternalApi.d.ts +0 -10
- package/src/Api/Internal/FormatColumnInternalApi.js +1 -19
- package/src/Api/Internal/FreeTextColumnInternalApi.js +2 -2
- package/src/Api/Internal/LayoutInternalApi.js +1 -1
- package/src/Api/Internal/NamedQueryInternalApi.js +4 -4
- package/src/Api/LayoutApi.d.ts +6 -0
- package/src/Api/PlusMinusApi.d.ts +6 -0
- package/src/Api/ScheduleApi.d.ts +6 -0
- package/src/Api/ShortcutApi.d.ts +6 -0
- package/src/Api/UserInterfaceApi.d.ts +17 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +8 -0
- package/src/Redux/ActionsReducers/FormatColumnRedux.js +15 -0
- package/src/Redux/ActionsReducers/InternalRedux.d.ts +15 -0
- package/src/Redux/ActionsReducers/InternalRedux.js +36 -0
- package/src/Redux/ActionsReducers/LayoutRedux.d.ts +1 -1
- package/src/Redux/ActionsReducers/NoteRedux.js +1 -1
- package/src/Redux/ActionsReducers/UserInterfaceRedux.d.ts +11 -0
- package/src/Redux/ActionsReducers/UserInterfaceRedux.js +21 -0
- package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +6 -0
- package/src/Redux/Store/AdaptableStore.js +113 -57
- package/src/Strategy/AdaptableModuleBase.js +4 -0
- package/src/Strategy/AlertModule.js +5 -0
- package/src/Strategy/BulkUpdateModule.js +8 -8
- package/src/Strategy/CalculatedColumnModule.js +1 -0
- package/src/Strategy/CellSummaryModule.js +1 -1
- package/src/Strategy/CustomSortModule.js +4 -0
- package/src/Strategy/DataChangeHistoryModule.js +1 -0
- package/src/Strategy/FlashingCellModule.js +6 -0
- package/src/Strategy/FormatColumnModule.js +4 -0
- package/src/Strategy/FreeTextColumnModule.js +1 -0
- package/src/Strategy/LayoutModule.js +6 -5
- package/src/Strategy/PlusMinusModule.js +7 -1
- package/src/Strategy/QuickSearchModule.js +1 -1
- package/src/Strategy/ScheduleModule.js +5 -0
- package/src/Strategy/SettingsPanelModule.js +11 -7
- package/src/Strategy/ShortcutModule.js +6 -0
- package/src/Strategy/SmartEditModule.js +10 -10
- package/src/Strategy/TeamSharingModule.js +10 -10
- package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsViewItems.js +0 -3
- package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +3 -3
- package/src/Utilities/Constants/DocumentationLinkConstants.js +3 -3
- package/src/Utilities/ExpressionFunctions/deepMap.js +31 -31
- package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +3 -3
- package/src/Utilities/Extensions/StringExtensions.d.ts +2 -0
- package/src/Utilities/Extensions/StringExtensions.js +16 -0
- package/src/Utilities/Helpers/FormatHelper.js +9 -2
- package/src/Utilities/Helpers/StyleHelper.js +14 -0
- package/src/Utilities/MenuItem.js +18 -0
- package/src/Utilities/ObjectFactory.js +16 -3
- package/src/Utilities/Services/AggregatedScalarLiveValue.js +8 -0
- package/src/Utilities/Services/AlertService.js +6 -4
- package/src/Utilities/Services/AnnotationsService.js +4 -1
- package/src/Utilities/Services/CalculatedColumnExpressionService.js +2 -1
- package/src/Utilities/Services/ChartingService.js +1 -0
- package/src/Utilities/Services/DataService.js +11 -3
- package/src/Utilities/Services/Fdc3Service.js +9 -7
- package/src/Utilities/Services/FlashingCellService.js +5 -0
- package/src/Utilities/Services/LicenseService/index.js +1 -1
- package/src/Utilities/Services/MetamodelService.js +2 -2
- package/src/Utilities/Services/ModuleService.js +5 -6
- package/src/Utilities/Services/QueryLanguageService.js +6 -5
- package/src/Utilities/Services/RowFormService.js +1 -0
- package/src/Utilities/Services/RowSummaryService.js +10 -7
- package/src/Utilities/Services/TeamSharingService.js +3 -1
- package/src/Utilities/Services/ThemeService.js +13 -15
- package/src/Utilities/Services/ValidationService.js +2 -1
- package/src/Utilities/createAgStatusPanelComponent.js +3 -0
- package/src/Utilities/logDeprecation.js +3 -4
- package/src/Utilities/resolveContainerElement.d.ts +23 -0
- package/src/Utilities/resolveContainerElement.js +44 -0
- package/src/View/AdaptablePopover/index.d.ts +1 -0
- package/src/View/AdaptablePopover/index.js +1 -1
- package/src/View/Alert/ActiveAlertsPanel.js +8 -0
- package/src/View/Alert/AlertViewPanel.js +13 -9
- package/src/View/Alert/Utilities/getAlertButtonStyle.d.ts +1 -0
- package/src/View/Alert/Utilities/getAlertButtonStyle.js +8 -0
- package/src/View/Alert/Utilities/getDefaultAlertDefinition.d.ts +1 -0
- package/src/View/Alert/Wizard/AlertTypeWizardSection.d.ts +5 -2
- package/src/View/Alert/Wizard/AlertTypeWizardSection.js +47 -12
- package/src/View/Alert/Wizard/AlertWizard.js +14 -10
- package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
- package/src/View/BulkUpdate/BulkUpdateViewPanel.js +24 -11
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
- package/src/View/CellSummary/CellSummaryViewPanel.js +16 -17
- package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +2 -2
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +2 -2
- package/src/View/Components/AdaptableDateInput/index.js +1 -1
- package/src/View/Components/Buttons/ButtonApply.js +1 -1
- package/src/View/Components/Buttons/ButtonBase/index.js +9 -9
- package/src/View/Components/Buttons/ButtonClear.d.ts +1 -0
- package/src/View/Components/Buttons/EntityListActionButtons.d.ts +1 -2
- package/src/View/Components/Buttons/EntityListActionButtons.js +18 -18
- package/src/View/Components/Buttons/SuspendToggleButton/SuspendToggleButton.d.ts +1 -2
- package/src/View/Components/CellPopup/index.js +1 -1
- package/src/View/Components/ColumnFilter/FloatingFilter.js +41 -3
- package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +1 -1
- package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +54 -2
- package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +1 -1
- package/src/View/Components/EntityRulesEditor/Utilities.js +5 -5
- package/src/View/Components/NewScopeComponent.js +3 -3
- package/src/View/Components/Panels/PanelDashboard/index.js +8 -8
- package/src/View/Components/Panels/PanelToolPanel/index.js +7 -7
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopup.js +2 -1
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupBody.js +1 -1
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupDialog.d.ts +1 -1
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupDialog.js +1 -8
- package/src/View/Components/Popups/AdaptablePopupConfirmation.js +1 -1
- package/src/View/Components/Popups/WindowPopups/WindowPopups.js +36 -1
- package/src/View/Components/Selectors/BulkUpdateValueSelector.js +19 -18
- package/src/View/Components/StyleComponent.d.ts +1 -0
- package/src/View/Components/StyleComponent.js +94 -24
- package/src/View/Components/ToolPanel/AdaptableToolPanel.js +2 -0
- package/src/View/Components/WizardSummaryPage.js +1 -1
- package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.d.ts +2 -1
- package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +41 -15
- package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
- package/src/View/CustomSort/Wizard/CustomSortWizard.js +4 -4
- package/src/View/Dashboard/CustomToolbar.js +1 -1
- package/src/View/Dashboard/DashboardPopup.js +4 -5
- package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -0
- package/src/View/DataChangeHistory/DataChangeHistoryViewPanel.js +1 -1
- package/src/View/Export/ExportDestinationPicker.js +1 -1
- package/src/View/Export/ExportStatusBar.js +4 -2
- package/src/View/Export/ExportViewPanel.js +25 -18
- package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.d.ts +2 -1
- package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +34 -14
- package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +14 -10
- package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
- package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +46 -51
- package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +2 -2
- package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +20 -9
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +3 -3
- package/src/View/GridFilter/GridFilterExpressionEditor.js +6 -1
- package/src/View/GridFilter/GridFilterViewPanel.js +33 -70
- package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +57 -65
- package/src/View/Layout/LayoutViewPanel.js +1 -1
- package/src/View/Layout/TransposedPopup.js +144 -138
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +1 -1
- package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/GridFilterSection.js +1 -1
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +3 -3
- package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +8 -0
- package/src/View/Layout/Wizard/sections/RowSummarySection.js +1 -1
- package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +2 -2
- package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +35 -12
- package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +20 -15
- package/src/View/QuickSearch/QuickSearchPopup.js +4 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsIPushPull.js +12 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsOpenFin.js +12 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReminder.js +14 -4
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReport.js +12 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.d.ts +2 -1
- package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +19 -10
- package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.d.ts +2 -1
- package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +25 -4
- package/src/View/Shortcut/Wizard/ShortcutWizard.js +18 -14
- package/src/View/SmartEdit/SmartEditViewPanel.js +1 -0
- package/src/View/StateManagement/handleExportState.js +1 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +1 -1
- package/src/View/Theme/ThemePopup.js +13 -16
- package/src/View/UIHelper.d.ts +4 -1
- package/src/View/UIHelper.js +23 -14
- package/src/agGrid/Adaptable.js +15 -11
- package/src/agGrid/AdaptableAgGrid.d.ts +12 -8
- package/src/agGrid/AdaptableAgGrid.js +257 -111
- package/src/agGrid/AdaptableFilterHandler.js +4 -0
- package/src/agGrid/AdaptableLogger.d.ts +3 -0
- package/src/agGrid/AdaptableLogger.js +10 -0
- package/src/agGrid/AgGridAdapter.js +19 -9
- package/src/agGrid/AgGridColumnAdapter.d.ts +1 -0
- package/src/agGrid/AgGridColumnAdapter.js +20 -22
- package/src/agGrid/AgGridExportAdapter.js +15 -14
- package/src/agGrid/AgGridFilterAdapter.js +4 -0
- package/src/agGrid/AgGridFloatingFilterAdapter.js +4 -1
- package/src/agGrid/AgGridMenuAdapter.js +10 -1
- package/src/agGrid/AgGridModulesAdapter.js +2 -1
- package/src/agGrid/AgGridOptionsService.js +3 -0
- package/src/agGrid/AgGridThemeAdapter.js +4 -2
- package/src/agGrid/cellRenderers/ActionColumnRenderer.js +5 -0
- package/src/agGrid/cellRenderers/BadgeRenderer.js +2 -0
- package/src/agGrid/cellRenderers/PercentBarRenderer.js +1 -0
- package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -3
- package/src/agGrid/editors/AdaptableNumberEditor/index.js +16 -12
- package/src/agGrid/editors/AdaptablePercentageEditor/index.js +17 -13
- package/src/agGrid/index.d.ts +6 -0
- package/src/agGrid/index.js +6 -0
- package/src/components/CheckBox/index.js +1 -1
- package/src/components/ColorPicker/ColorPicker.js +5 -4
- package/src/components/Dashboard/DashboardToolbar.js +1 -1
- package/src/components/Datepicker/index.js +1 -1
- package/src/components/Dropdown/Arrows.js +1 -1
- package/src/components/ExpressionEditor/DataTableEditor.js +3 -3
- package/src/components/ExpressionEditor/EditorInput.js +19 -3
- package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
- package/src/components/FormLayout/index.js +1 -1
- package/src/components/OverlayTrigger/index.js +1 -1
- package/src/components/Select/Select.js +79 -16
- package/src/components/Tree/TreeDropdown/index.js +2 -2
- package/src/components/overlayBaseZIndex.js +1 -1
- package/src/components/utils/useContainerScrollObserver/index.js +17 -14
- package/src/devTools/index.js +54 -53
- package/src/env.js +2 -2
- package/src/layout-manager/src/LMEmitter.js +11 -11
- package/src/layout-manager/src/LMLogger.js +7 -0
- package/src/layout-manager/src/LayoutManagerModel.d.ts +1 -0
- package/src/layout-manager/src/index.js +81 -58
- package/src/layout-manager/src/normalizeLayoutModel.js +3 -0
- package/src/metamodel/adaptable.metamodel.d.ts +177 -8
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/migration/AdaptableUpgradeHelper.js +8 -3
- package/src/migration/VersionUpgrade.js +1 -0
- package/src/migration/VersionUpgrade17.js +5 -6
- package/src/migration/VersionUpgrade20.js +4 -4
- package/src/migration/VersionUpgrade22.d.ts +21 -0
- package/src/migration/VersionUpgrade22.js +187 -0
- package/src/parser/src/ExpressionEvaluationError.js +1 -0
- package/src/types.d.ts +9 -7
- package/themes/dark.css +30 -30
- package/themes/light.css +4 -2
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +0 -632
- package/src/View/Alert/AlertEntityRow.d.ts +0 -11
- package/src/View/Alert/AlertEntityRow.js +0 -28
- package/src/View/CalculatedColumn/CalculatedColumnSummary.d.ts +0 -21
- package/src/View/CalculatedColumn/CalculatedColumnSummary.js +0 -58
- package/src/View/Components/Buttons/ButtonFunction.d.ts +0 -7
- package/src/View/Components/Buttons/ButtonFunction.js +0 -8
- package/src/View/Components/Buttons/ButtonGeneral.d.ts +0 -5
- package/src/View/Components/Buttons/ButtonGeneral.js +0 -7
- package/src/View/Components/Buttons/ButtonPreviewDelete.d.ts +0 -4
- package/src/View/Components/Buttons/ButtonPreviewDelete.js +0 -5
- package/src/View/Components/Buttons/ButtonShow.d.ts +0 -5
- package/src/View/Components/Buttons/ButtonShow.js +0 -7
- package/src/View/Components/Buttons/ButtonShowChart.d.ts +0 -5
- package/src/View/Components/Buttons/ButtonShowChart.js +0 -7
- package/src/View/Components/Buttons/ButtonUndo.d.ts +0 -5
- package/src/View/Components/Buttons/ButtonUndo.js +0 -7
- package/src/View/Components/ExpressionWizard.d.ts +0 -24
- package/src/View/Components/ExpressionWizard.js +0 -77
- package/src/View/Components/FilterForm/Waiting.d.ts +0 -10
- package/src/View/Components/FilterForm/Waiting.js +0 -14
- package/src/View/Components/Panels/PanelFooter.d.ts +0 -10
- package/src/View/Components/Panels/PanelFooter.js +0 -9
- package/src/View/Components/Panels/PanelWithTwoButtons.d.ts +0 -12
- package/src/View/Components/Panels/PanelWithTwoButtons.js +0 -15
- package/src/View/Components/Panels/ToolPanelSettingsPanel.d.ts +0 -8
- package/src/View/Components/Panels/ToolPanelSettingsPanel.js +0 -26
- package/src/View/Components/Selectors/ColumnSelectorOld.d.ts +0 -18
- package/src/View/Components/Selectors/ColumnSelectorOld.js +0 -45
- package/src/View/Components/SharedProps/WizardScopeState.d.ts +0 -4
- package/src/View/Components/WizardSummaryRow.d.ts +0 -9
- package/src/View/Components/WizardSummaryRow.js +0 -11
- package/src/View/CustomSort/CustomSortSummary.d.ts +0 -23
- package/src/View/CustomSort/CustomSortSummary.js +0 -105
- package/src/View/DataImport/DataImportWizard/sections/ImportSection.d.ts +0 -9
- package/src/View/DataImport/DataImportWizard/sections/ImportSection.js +0 -19
- package/src/View/Export/Wizard/ReportColumnTypeWizard.d.ts +0 -19
- package/src/View/Export/Wizard/ReportColumnTypeWizard.js +0 -68
- package/src/View/Export/Wizard/ReportRowTypeWizard.d.ts +0 -19
- package/src/View/Export/Wizard/ReportRowTypeWizard.js +0 -68
- package/src/View/Export/Wizard/ReportSettingsWizard.d.ts +0 -21
- package/src/View/Export/Wizard/ReportSettingsWizard.js +0 -56
- package/src/View/Export/Wizard/ReportSummaryWizard.d.ts +0 -15
- package/src/View/Export/Wizard/ReportSummaryWizard.js +0 -35
- package/src/View/Filter/FilterSummary.d.ts +0 -18
- package/src/View/Filter/FilterSummary.js +0 -48
- package/src/View/FormatColumn/FormatColumnSummary.d.ts +0 -22
- package/src/View/FormatColumn/FormatColumnSummary.js +0 -90
- package/src/View/FreeTextColumn/FreeTextColumnSummary.d.ts +0 -22
- package/src/View/FreeTextColumn/FreeTextColumnSummary.js +0 -88
- package/src/View/GridInfo/GridInfoPopup/AdaptableOptionsComponent.d.ts +0 -7
- package/src/View/GridInfo/GridInfoPopup/AdaptableOptionsComponent.js +0 -94
- package/src/View/PlusMinus/PlusMinusSummary.d.ts +0 -22
- package/src/View/PlusMinus/PlusMinusSummary.js +0 -95
- package/src/View/Wizard/WizardLegend.d.ts +0 -12
- package/src/View/Wizard/WizardLegend.js +0 -23
- /package/src/{View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.d.ts → AdaptableState/Common/AdaptableRowContext.js} +0 -0
- /package/src/{View/Components/SharedProps/WizardScopeState.js → AdaptableState/Common/ColumnHighlightInfo.js} +0 -0
|
@@ -4,7 +4,7 @@ export const isValidAlertRules = (alert, api, context) => {
|
|
|
4
4
|
!alert.Rule.BooleanExpression &&
|
|
5
5
|
!alert.Rule.ObservableExpression &&
|
|
6
6
|
!alert.Rule.AggregatedBooleanExpression) {
|
|
7
|
-
return '
|
|
7
|
+
return 'A rule is required for the Alert.';
|
|
8
8
|
}
|
|
9
9
|
const isRuleValid = isAdaptableRuleValid(alert, api, context);
|
|
10
10
|
if (typeof isRuleValid === 'string') {
|
|
@@ -13,6 +13,7 @@ import { connect } from 'react-redux';
|
|
|
13
13
|
import { Flex } from '../../components/Flex';
|
|
14
14
|
import clsx from 'clsx';
|
|
15
15
|
class BulkUpdateViewPanelComponent extends React.Component {
|
|
16
|
+
cleanupEvent;
|
|
16
17
|
constructor(props) {
|
|
17
18
|
super(props);
|
|
18
19
|
this.state = {
|
|
@@ -37,24 +38,36 @@ class BulkUpdateViewPanelComponent extends React.Component {
|
|
|
37
38
|
let statusColour = this.getStatusColour();
|
|
38
39
|
let selectedColumn = this.props.BulkUpdateValidationResult.Column;
|
|
39
40
|
let previewPanel = (React.createElement(PreviewResultsPanel, { previewInfo: this.props.PreviewInfo, api: this.props.api, selectedColumn: selectedColumn, showPanel: true, showHeader: false }));
|
|
40
|
-
|
|
41
|
+
const valueSelectorDisabled = this.props.accessLevel == 'ReadOnly' ||
|
|
41
42
|
!this.props.BulkUpdateValidationResult.IsValid ||
|
|
42
|
-
this.props.api.layoutApi.isCurrentLayoutPivot()
|
|
43
|
+
this.props.api.layoutApi.isCurrentLayoutPivot();
|
|
44
|
+
const valueOperationDisabled = valueSelectorDisabled ||
|
|
45
|
+
StringExtensions.IsNullOrEmpty(this.props.BulkUpdateValue) ||
|
|
46
|
+
(this.props.PreviewInfo != null &&
|
|
47
|
+
this.props.PreviewInfo.previewValidationSummary.validationResult == 'All');
|
|
43
48
|
const applyStyle = {
|
|
44
49
|
color: statusColour,
|
|
45
50
|
fill: 'currentColor',
|
|
46
51
|
};
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
const isToolbar = this.props.viewType === 'Toolbar';
|
|
53
|
+
const elementType = isToolbar ? 'DashboardToolbar' : 'ToolPanel';
|
|
54
|
+
const messageStyle = UIHelper.getMessageTypeByStatusColour(statusColour);
|
|
55
|
+
const infoStyle = messageStyle === 'Success' ? 'Info' : messageStyle;
|
|
56
|
+
return (React.createElement(Flex, { className: clsx(valueSelectorDisabled ? GeneralConstants.READ_ONLY_STYLE : '', `ab-${elementType}__BulkUpdate__wrap twa:gap-1 twa:flex-row`, {
|
|
57
|
+
'twa:min-w-[300px] twa:max-w-[300px] twa:w-[300px] twa:flex-nowrap': isToolbar,
|
|
58
|
+
'twa:flex-1 twa:flex-wrap': !isToolbar,
|
|
59
|
+
}), flexWrap: isToolbar ? 'nowrap' : 'wrap' },
|
|
60
|
+
React.createElement(Flex, { className: clsx('twa:flex-1', {
|
|
61
|
+
'twa:min-w-[100px]': !isToolbar,
|
|
62
|
+
'twa:min-w-0': isToolbar,
|
|
63
|
+
}) },
|
|
50
64
|
React.createElement(BulkUpdateValueSelector, { selectedGridCells: this.props.SelectedGridCells, newLabel: "New", existingLabel: "Existing", dropdownButtonProps: {
|
|
51
65
|
listMinWidth: 160,
|
|
52
|
-
}, className: `ab-${elementType}__BulkUpdate__select`, disabled:
|
|
53
|
-
React.createElement(Flex,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
!shouldDisable && StringExtensions.IsNotNullOrEmpty(this.props.BulkUpdateValue) && (React.createElement(AdaptablePopover, { popoverMinWidth: 360, className: `ab-${elementType}__BulkUpdate__info`, headerText: "Preview Results", bodyText: [previewPanel], MessageType: UIHelper.getMessageTypeByStatusColour(statusColour), useButton: true, showEvent: 'focus', hideEvent: "blur" })))));
|
|
66
|
+
}, className: `ab-${elementType}__BulkUpdate__select twa:w-full`, disabled: valueSelectorDisabled, selectedColumnValue: this.props.BulkUpdateValue, selectedColumn: selectedColumn, api: this.props.api, onColumnValueChange: (columns) => this.onColumnValueSelectedChanged(columns) })),
|
|
67
|
+
React.createElement(Flex, { className: "twa:flex-shrink-0 twa:gap-1" },
|
|
68
|
+
React.createElement(Flex, { className: "twa:flex twa:box-border twa:items-center" },
|
|
69
|
+
React.createElement(ButtonApply, { className: `ab-${elementType}__BulkUpdate__apply twa:h-full`, onClick: () => this.onApplyClick(), style: applyStyle, tooltip: "Apply Bulk Update", disabled: valueOperationDisabled, accessLevel: this.props.accessLevel }, 'Apply')),
|
|
70
|
+
React.createElement(AdaptablePopover, { popoverMinWidth: 360, className: `ab-${elementType}__BulkUpdate__info`, headerText: "Preview Results", bodyText: [previewPanel], MessageType: infoStyle, useButton: true, showEvent: 'focus', hideEvent: "blur", disabled: valueSelectorDisabled || StringExtensions.IsNullOrEmpty(this.props.BulkUpdateValue) }))));
|
|
58
71
|
}
|
|
59
72
|
onColumnValueSelectedChanged(selectedColumnValue) {
|
|
60
73
|
this.props.onBulkUpdateValueChange(selectedColumnValue);
|
|
@@ -21,11 +21,11 @@ export const renderCalculatedColumnDefinitionSummary = (data) => {
|
|
|
21
21
|
export const isValidCalculatedColumnDefinition = (data, api) => {
|
|
22
22
|
const columns = api.columnApi.getColumns();
|
|
23
23
|
if (!data.ColumnId) {
|
|
24
|
-
return 'Column
|
|
24
|
+
return 'A Column ID is required.';
|
|
25
25
|
}
|
|
26
26
|
const columnsWithSameIdCount = columns.filter((c) => c.columnId === data.ColumnId).length;
|
|
27
27
|
const hasAlreadyExistingId = data.Uuid ? columnsWithSameIdCount > 1 : columnsWithSameIdCount > 0;
|
|
28
|
-
return hasAlreadyExistingId ? 'A
|
|
28
|
+
return hasAlreadyExistingId ? 'A column with this ID already exists.' : true;
|
|
29
29
|
};
|
|
30
30
|
export const CalculatedColumnDefinitionWizardSection = (props) => {
|
|
31
31
|
const { data, api } = useOnePageAdaptableWizardContext();
|
|
@@ -17,11 +17,11 @@ export const isValidCalculatedColumnExpression = (data, api) => {
|
|
|
17
17
|
const calculatedColumnExpressionService = api.internalApi.getCalculatedColumnExpressionService();
|
|
18
18
|
const expression = api.expressionApi.getAdaptableQueryExpression(data.Query)?.trim();
|
|
19
19
|
if (!expression) {
|
|
20
|
-
return '
|
|
20
|
+
return 'An expression is required for the Calculated Column.';
|
|
21
21
|
}
|
|
22
22
|
const isValid = calculatedColumnExpressionService.isCalculatedColumnQueryValid(data.Query);
|
|
23
23
|
if (!isValid) {
|
|
24
|
-
return 'Calculated
|
|
24
|
+
return 'The Calculated Column expression is not valid.';
|
|
25
25
|
}
|
|
26
26
|
return true;
|
|
27
27
|
};
|
|
@@ -16,7 +16,7 @@ export const renderCalculatedColumnSettingsSummary = (data) => {
|
|
|
16
16
|
};
|
|
17
17
|
export const isValidCalculatedColumnSettings = (data) => {
|
|
18
18
|
if (!data.CalculatedColumnSettings?.DataType) {
|
|
19
|
-
return '
|
|
19
|
+
return 'A data type is required. It could not be inferred from the expression.';
|
|
20
20
|
}
|
|
21
21
|
return true;
|
|
22
22
|
};
|
|
@@ -9,7 +9,9 @@ import * as InternalRedux from '../../Redux/ActionsReducers/InternalRedux';
|
|
|
9
9
|
import { connect } from 'react-redux';
|
|
10
10
|
import { Select } from '../../components/Select';
|
|
11
11
|
import { Flex } from '../../components/Flex';
|
|
12
|
+
import clsx from 'clsx';
|
|
12
13
|
class CellSummaryViewPanelComponent extends React.Component {
|
|
14
|
+
cleanupEvent;
|
|
13
15
|
constructor(props) {
|
|
14
16
|
super(props);
|
|
15
17
|
}
|
|
@@ -43,30 +45,27 @@ class CellSummaryViewPanelComponent extends React.Component {
|
|
|
43
45
|
});
|
|
44
46
|
let cellSummaryPopover = React.createElement(CellSummaryPopover, { CellSummary: this.props.CellSummary });
|
|
45
47
|
let shouldDisable = this.props.accessLevel == 'ReadOnly' || this.props.CellSummary == null;
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
return this.props.viewType === 'ToolPanel' ? (React.createElement(Flex, { className: `ab-${elementType}__CellSummary__value twa:rounded-standard twa:mr-2 twa:p-2 twa:text-text-on-info twa:bg-info twa:text-2` }, operationValue)) : (React.createElement(Flex, { justifyContent: "center", className: `ab-${elementType}__CellSummary__value twa:flex-1 twa:mr-2 twa:ml-1 text-text-on-primary` }, operationValue));
|
|
55
|
-
};
|
|
56
|
-
const elementType = this.props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
|
|
57
|
-
return (React.createElement(Flex, { flexDirection: "row", className: shouldDisable ? GeneralConstants.READ_ONLY_STYLE : `ab-${elementType}__CellSummary__wrap`, flexWrap: this.props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
|
|
48
|
+
const isToolbar = this.props.viewType === 'Toolbar';
|
|
49
|
+
const elementType = isToolbar ? 'DashboardToolbar' : 'ToolPanel';
|
|
50
|
+
const operationValue = this.getOperationValue() ?? 'N/A';
|
|
51
|
+
return (React.createElement(Flex, { className: clsx(shouldDisable ? GeneralConstants.READ_ONLY_STYLE : '', `ab-${elementType}__CellSummary__wrap twa:gap-2 twa:flex-row`, {
|
|
52
|
+
'twa:min-w-[215px] twa:max-w-[215px] twa:w-[215px] twa:flex-nowrap': isToolbar,
|
|
53
|
+
'twa:flex-1 twa:flex-wrap': !isToolbar,
|
|
54
|
+
}) },
|
|
58
55
|
React.createElement(Flex, { className: "twa:flex-1" },
|
|
59
56
|
React.createElement(Select, { "aria-label": "Cell Summary Operation Selector", className: `ab-${elementType}__CellSummary__select twa:w-full`, disabled: shouldDisable, options: [...operationMenuItems, ...operationDefinitions], onChange: (x) => this.props.onCellSummaryOperationChange(x), value: this.props.CellSummaryOperation })),
|
|
60
|
-
React.createElement(Flex, {
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
React.createElement(Flex, { className: "twa:items-center twa:gap-1" }, React.createElement(React.Fragment, null,
|
|
58
|
+
React.createElement(Flex, { className: clsx(`ab-${elementType}__CellSummary__value twa:min-w-[50px]`, {
|
|
59
|
+
'twa:rounded-standard twa:text-color-text-on-info twa:bg-color-info twa:text-2': !isToolbar,
|
|
60
|
+
'twa:flex-1 twa:text-color-text-on-primary twa:justify-center': isToolbar,
|
|
61
|
+
}) }, operationValue),
|
|
62
|
+
React.createElement(AdaptablePopover, { popoverMaxWidth: 360, className: "ab-ToolPanel__CellSummary__info", bodyText: [cellSummaryPopover], useButton: true, showEvent: 'focus', hideEvent: "blur", tooltipText: 'Show Cell Summaries', disabled: !this.props.CellSummary?.Count })))));
|
|
63
63
|
}
|
|
64
64
|
checkSelectedCells() {
|
|
65
65
|
this.props.onCreateCellSummary();
|
|
66
66
|
}
|
|
67
67
|
getOperationValue() {
|
|
68
|
-
|
|
69
|
-
return api.cellSummaryApi.getCellSummaryOperationValue(this.props.CellSummaryOperation);
|
|
68
|
+
return this.props.api.cellSummaryApi.getCellSummaryOperationValue(this.props.CellSummaryOperation);
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
71
|
function mapStateToProps(state, ownProps) {
|
|
@@ -5,12 +5,12 @@ import FormLayout, { FormRow } from '../../../../components/FormLayout';
|
|
|
5
5
|
import AdaptableInput from '../../../Components/AdaptableInput';
|
|
6
6
|
export const isSettingsValid = (chartDefinition, api) => {
|
|
7
7
|
if (!chartDefinition.Name) {
|
|
8
|
-
return '
|
|
8
|
+
return 'A name is required.';
|
|
9
9
|
}
|
|
10
10
|
const allChartDefinitions = api.chartingApi.getChartDefinitions();
|
|
11
11
|
if (allChartDefinitions.some((chartDefinitionLoopItem) => chartDefinitionLoopItem.Uuid !== chartDefinition.Uuid &&
|
|
12
12
|
chartDefinitionLoopItem.Name === chartDefinition.Name)) {
|
|
13
|
-
return '
|
|
13
|
+
return 'A Chart with this name already exists.';
|
|
14
14
|
}
|
|
15
15
|
return true;
|
|
16
16
|
};
|
|
@@ -3,12 +3,12 @@ import FormLayout, { FormRow } from '../../../../components/FormLayout';
|
|
|
3
3
|
import AdaptableInput from '../../../Components/AdaptableInput';
|
|
4
4
|
export const isSettingsValid = (chartDefinition, api) => {
|
|
5
5
|
if (!chartDefinition.Name) {
|
|
6
|
-
return '
|
|
6
|
+
return 'A name is required.';
|
|
7
7
|
}
|
|
8
8
|
const allChartDefinitions = api.chartingApi.getExternalChartDefinitions();
|
|
9
9
|
if (allChartDefinitions.some((chartDefinitionLoopItem) => chartDefinitionLoopItem.Uuid !== chartDefinition.Uuid &&
|
|
10
10
|
chartDefinitionLoopItem.Name === chartDefinition.Name)) {
|
|
11
|
-
return '
|
|
11
|
+
return 'A Chart with this name already exists.';
|
|
12
12
|
}
|
|
13
13
|
return true;
|
|
14
14
|
};
|
|
@@ -8,7 +8,7 @@ const AdaptableDateInput = React.forwardRef(function AdaptableDateInputCmp(props
|
|
|
8
8
|
const { value: _, defaultValue: __, onChange, required, disabled, showClearButton, ...inputProps } = props;
|
|
9
9
|
const [value, setValue] = useProperty(props, 'value', undefined, {
|
|
10
10
|
onChange: (dateString) =>
|
|
11
|
-
// wrap date value in
|
|
11
|
+
// wrap date value in ChangeEvent in order to keep the external API unchanged
|
|
12
12
|
props.onChange?.({
|
|
13
13
|
target: {
|
|
14
14
|
// ALWAYS trigger onChange with the ISO format
|
|
@@ -2,6 +2,6 @@ import * as React from 'react';
|
|
|
2
2
|
import SimpleButton from '../../../components/SimpleButton';
|
|
3
3
|
export class ButtonApply extends React.Component {
|
|
4
4
|
render() {
|
|
5
|
-
return (React.createElement(SimpleButton, { "data-name": "apply", tooltip: "Apply", iconSize: 20, icon: "check", variant: "
|
|
5
|
+
return (React.createElement(SimpleButton, { "data-name": "apply", tooltip: "Apply", iconSize: 20, icon: "check", variant: "outlined", ...this.props }));
|
|
6
6
|
}
|
|
7
7
|
}
|
|
@@ -7,6 +7,15 @@ const Glyphicon = ({ glyph, style }) => {
|
|
|
7
7
|
};
|
|
8
8
|
const baseClassName = 'ab-Button twa:text-current';
|
|
9
9
|
export class ButtonBase extends React.Component {
|
|
10
|
+
static defaultProps = {
|
|
11
|
+
overrideDisableButton: false,
|
|
12
|
+
toolTipAndText: '',
|
|
13
|
+
glyph: '',
|
|
14
|
+
displayMode: 'Glyph+Text',
|
|
15
|
+
transformGlyph: false,
|
|
16
|
+
accessLevel: 'Full',
|
|
17
|
+
showDefaultStyle: false,
|
|
18
|
+
};
|
|
10
19
|
render() {
|
|
11
20
|
let isDisabled;
|
|
12
21
|
isDisabled = this.props.accessLevel == 'Hidden';
|
|
@@ -59,12 +68,3 @@ export class ButtonBase extends React.Component {
|
|
|
59
68
|
return hideToolTip ? button : buttonwithtooltip;
|
|
60
69
|
}
|
|
61
70
|
}
|
|
62
|
-
ButtonBase.defaultProps = {
|
|
63
|
-
overrideDisableButton: false,
|
|
64
|
-
toolTipAndText: '',
|
|
65
|
-
glyph: '',
|
|
66
|
-
displayMode: 'Glyph+Text',
|
|
67
|
-
transformGlyph: false,
|
|
68
|
-
accessLevel: 'Full',
|
|
69
|
-
showDefaultStyle: false,
|
|
70
|
-
};
|
|
@@ -3,6 +3,7 @@ import { SimpleButtonProps } from '../../../components/SimpleButton';
|
|
|
3
3
|
export interface ClearButtonProps extends SimpleButtonProps {
|
|
4
4
|
showText?: boolean;
|
|
5
5
|
showIcon?: boolean;
|
|
6
|
+
variant?: SimpleButtonProps['variant'];
|
|
6
7
|
}
|
|
7
8
|
export declare class ButtonClear extends React.Component<ClearButtonProps, {}> {
|
|
8
9
|
render(): React.JSX.Element;
|
|
@@ -2,8 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import * as Redux from 'redux';
|
|
3
3
|
import { AccessLevel } from '../../../AdaptableState/Common/Entitlement';
|
|
4
4
|
import { AdaptableSharedEntityConfig } from '../../../AdaptableState/TeamSharingState';
|
|
5
|
-
import { AdaptableObject } from '../../../AdaptableState/Common/AdaptableObject';
|
|
6
|
-
import { SuspendableObject } from '../../../AdaptableState/Common/SuspendableObject';
|
|
5
|
+
import { AdaptableObject, SuspendableObject } from '../../../AdaptableState/Common/AdaptableObject';
|
|
7
6
|
export interface EntityListActionButtonsProps extends React.ClassAttributes<EntityListActionButtons> {
|
|
8
7
|
editClick?: () => void;
|
|
9
8
|
cloneClick?: () => void;
|
|
@@ -10,6 +10,24 @@ const stopPropagation = (e) => {
|
|
|
10
10
|
e.stopPropagation();
|
|
11
11
|
};
|
|
12
12
|
export class EntityListActionButtons extends React.Component {
|
|
13
|
+
static defaultProps = {
|
|
14
|
+
// Adaptable: null,
|
|
15
|
+
suspendableObject: null,
|
|
16
|
+
showEdit: true,
|
|
17
|
+
showDelete: true,
|
|
18
|
+
showShare: false,
|
|
19
|
+
showSuspend: false,
|
|
20
|
+
overrideDisableEdit: false,
|
|
21
|
+
overrideDisableDelete: false,
|
|
22
|
+
overrideDisableClone: false,
|
|
23
|
+
overrideDisableShare: false,
|
|
24
|
+
confirmDeleteAction: null,
|
|
25
|
+
entityType: '',
|
|
26
|
+
accessLevel: 'Full',
|
|
27
|
+
editSize: 'xsmall',
|
|
28
|
+
deleteSize: 'xsmall',
|
|
29
|
+
shareSize: 'xsmall',
|
|
30
|
+
};
|
|
13
31
|
render() {
|
|
14
32
|
const { justifyContent } = this.props;
|
|
15
33
|
const justifyContentClassName = clsx({
|
|
@@ -25,21 +43,3 @@ export class EntityListActionButtons extends React.Component {
|
|
|
25
43
|
this.props.showSuspend && this.props.suspendableObject && (React.createElement(SuspendToggleButton, { className: `twa:ml-[2px] twa:align-self-center`, onSuspend: this.props.onSuspend, onUnSuspend: this.props.onUnSuspend, suspendableObject: this.props.suspendableObject, disabled: this.props.accessLevel == 'ReadOnly' }))));
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
|
-
EntityListActionButtons.defaultProps = {
|
|
29
|
-
// Adaptable: null,
|
|
30
|
-
suspendableObject: null,
|
|
31
|
-
showEdit: true,
|
|
32
|
-
showDelete: true,
|
|
33
|
-
showShare: false,
|
|
34
|
-
showSuspend: false,
|
|
35
|
-
overrideDisableEdit: false,
|
|
36
|
-
overrideDisableDelete: false,
|
|
37
|
-
overrideDisableClone: false,
|
|
38
|
-
overrideDisableShare: false,
|
|
39
|
-
confirmDeleteAction: null,
|
|
40
|
-
entityType: '',
|
|
41
|
-
accessLevel: 'Full',
|
|
42
|
-
editSize: 'xsmall',
|
|
43
|
-
deleteSize: 'xsmall',
|
|
44
|
-
shareSize: 'xsmall',
|
|
45
|
-
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { AdaptableObject } from '../../../../AdaptableState/Common/AdaptableObject';
|
|
2
|
+
import { AdaptableObject, SuspendableObject } from '../../../../AdaptableState/Common/AdaptableObject';
|
|
3
3
|
import { AccessLevel } from '../../../../AdaptableState/Common/Entitlement';
|
|
4
|
-
import { SuspendableObject } from '../../../../AdaptableState/Common/SuspendableObject';
|
|
5
4
|
interface EntityListSuspendButtonProps {
|
|
6
5
|
onSuspend: (adaptableObject: AdaptableObject) => void;
|
|
7
6
|
onUnSuspend: (adaptableObject: AdaptableObject) => void;
|
|
@@ -32,7 +32,7 @@ export const CellPopup = React.forwardRef((props, ref) => {
|
|
|
32
32
|
const cellSelector = `[row-id="${props.primaryKeyValue}"] [col-id="${props.columnId}"]`;
|
|
33
33
|
const alignTo = document.querySelector(cellSelector);
|
|
34
34
|
if (!alignTo) {
|
|
35
|
-
adaptable.logger.consoleError(`
|
|
35
|
+
adaptable.logger.consoleError(`Cell not found for selector "${cellSelector}". Unable to display popup.`);
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
const showOverlayOptions = {
|
|
@@ -37,11 +37,19 @@ export const FloatingFilter = (props) => {
|
|
|
37
37
|
const handleClear = () => props.onClear?.();
|
|
38
38
|
const showEvent = 'click';
|
|
39
39
|
const hideEvent = 'blur';
|
|
40
|
+
const [overlayVisible, setOverlayVisible] = React.useState(false);
|
|
40
41
|
let filterDropdown = null;
|
|
41
|
-
|
|
42
|
+
const filterDropdownButton = (React.createElement(SimpleButton, { variant: "text", "data-name": "floating-filter-button", onBlur: () => {
|
|
43
|
+
if (isInlineEditable) {
|
|
44
|
+
setOverlayVisible(false);
|
|
45
|
+
}
|
|
46
|
+
}, "data-value": props.predicate?.args[0]?.operator, onClick: () => {
|
|
42
47
|
if (!isInlineEditable) {
|
|
43
48
|
adaptable.api.filterApi.columnFilterApi.internalApi.openColumnFilterPopup(props.columnId);
|
|
44
49
|
}
|
|
50
|
+
else {
|
|
51
|
+
setOverlayVisible(true);
|
|
52
|
+
}
|
|
45
53
|
}, style: {
|
|
46
54
|
textAlign: 'left',
|
|
47
55
|
marginRight: 1, // just so that the focus outline is not cut off
|
|
@@ -55,9 +63,10 @@ export const FloatingFilter = (props) => {
|
|
|
55
63
|
React.createElement(Box, null, !isManualApply && singleFilterPredicateDef?.icon ? (singleFilterPredicateDef?.icon) : (React.createElement(AdaptableIconComponent, { icon: { name: 'filter' } }))),
|
|
56
64
|
showLabel && (React.createElement(Box, { className: "ab-FloatingFilter-label twa:ml-2 twa:flex-1", title: label }, label))));
|
|
57
65
|
if (isInlineEditable) {
|
|
58
|
-
filterDropdown = showQuickFilterDropdown && (React.createElement(OverlayTrigger, { className: "ab-FloatingFilter-overlay", showEvent: showEvent, hideEvent: hideEvent, preventPortalEventPropagation: showEvent === 'click', targetOffset: 10, hideDelay: 50, "data-name": "floating-filter-overlay", render: () => {
|
|
66
|
+
filterDropdown = showQuickFilterDropdown && (React.createElement(OverlayTrigger, { className: "ab-FloatingFilter-overlay", showEvent: showEvent, hideEvent: hideEvent, visible: overlayVisible, onVisibleChange: setOverlayVisible, preventPortalEventPropagation: showEvent === 'click', targetOffset: 10, hideDelay: 50, "data-name": "floating-filter-overlay", render: () => {
|
|
59
67
|
// we render this only for single filter
|
|
60
68
|
return (React.createElement(ColumnFilterMenu, { columnId: props.columnId, disabled: props.disabled, predicate: props.predicate.args[0], predicateDefs: props.predicateDefs, onPredicateChange: (predicate) => {
|
|
69
|
+
setOverlayVisible(false);
|
|
61
70
|
props.onPredicateChange({
|
|
62
71
|
operator: props.predicate.operator,
|
|
63
72
|
args: [predicate],
|
|
@@ -68,7 +77,36 @@ export const FloatingFilter = (props) => {
|
|
|
68
77
|
else {
|
|
69
78
|
filterDropdown = filterDropdownButton;
|
|
70
79
|
}
|
|
71
|
-
return (React.createElement(Flex, { className: "ab-FloatingFilter twa:w-full"
|
|
80
|
+
return (React.createElement(Flex, { className: "ab-FloatingFilter twa:w-full", onKeyDownCapture: (e) => {
|
|
81
|
+
// AG Grid's header keyboard navigation intercepts Tab and calls preventDefault(),
|
|
82
|
+
// which prevents focus from moving between elements inside the floating filter.
|
|
83
|
+
// We handle Tab manually in the capture phase (before AG Grid's handlers).
|
|
84
|
+
if (e.key === 'Tab') {
|
|
85
|
+
const target = e.target;
|
|
86
|
+
const wrapper = e.currentTarget;
|
|
87
|
+
if (!e.shiftKey) {
|
|
88
|
+
// Tab forward: from filter button → select input
|
|
89
|
+
if (target.getAttribute('data-name') === 'floating-filter-button') {
|
|
90
|
+
const selectInput = wrapper.querySelector('[data-name="Select Values"] input');
|
|
91
|
+
if (selectInput) {
|
|
92
|
+
e.preventDefault();
|
|
93
|
+
e.nativeEvent.stopImmediatePropagation();
|
|
94
|
+
selectInput.focus();
|
|
95
|
+
// When the DummyInput gets focus, react-select sets isFocused=true,
|
|
96
|
+
// triggering a React re-render. During this re-render, unstable component
|
|
97
|
+
// references in selectComponents can cause the DummyInput to be removed
|
|
98
|
+
// from DOM and recreated, losing focus. We restore focus after the re-render.
|
|
99
|
+
requestAnimationFrame(() => {
|
|
100
|
+
if (document.activeElement === document.body || document.activeElement === null) {
|
|
101
|
+
const newInput = wrapper.querySelector('[data-name="Select Values"] input');
|
|
102
|
+
newInput?.focus();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} },
|
|
72
110
|
filterDropdown,
|
|
73
111
|
isInlineEditable && (React.createElement(Flex, { className: "twa:flex-1 twa:min-w-0" },
|
|
74
112
|
React.createElement(FloatingFilterInputList, { onKeyDown: props.onKeydown, columnId: props.columnId, disabled: props.disabled,
|
|
@@ -93,7 +93,7 @@ export const ColumnFilterInput = (props) => {
|
|
|
93
93
|
return (React.createElement(AdaptableInput, { style: filterType === 'floating'
|
|
94
94
|
? {
|
|
95
95
|
width: '100%',
|
|
96
|
-
padding: 'var(--ab-space
|
|
96
|
+
padding: 'var(--ab-base-space)',
|
|
97
97
|
borderRadius: 0,
|
|
98
98
|
border: 'none',
|
|
99
99
|
}
|
|
@@ -2,16 +2,68 @@ import * as React from 'react';
|
|
|
2
2
|
import Panel from '../../../../components/Panel';
|
|
3
3
|
import SimpleButton from '../../../../components/SimpleButton';
|
|
4
4
|
import { Box, Flex } from '../../../../components/Flex';
|
|
5
|
+
import clsx from 'clsx';
|
|
6
|
+
import { useEffect, useLayoutEffect } from 'react';
|
|
5
7
|
const ColumnFilterMenuItem = ({ active, onClick, icon, label, }) => {
|
|
6
8
|
return (React.createElement(SimpleButton, { className: "twa:p-1 twa:w-full", variant: "text", tone: active ? 'info' : 'none', onClick: onClick },
|
|
7
9
|
React.createElement(Box, { className: "twa:mr-2" }, icon),
|
|
8
10
|
React.createElement(Box, { className: "twa:text-2" }, label)));
|
|
9
11
|
};
|
|
10
12
|
export const ColumnFilterMenu = (props) => {
|
|
13
|
+
const [activeIndex, setActiveIndex] = React.useState(() => {
|
|
14
|
+
const index = props.predicateDefs.findIndex((predicateDef) => predicateDef.operator === props.predicate.operator);
|
|
15
|
+
return index === -1 ? 0 : index;
|
|
16
|
+
});
|
|
17
|
+
const activeIndexRef = React.useRef(activeIndex);
|
|
18
|
+
const onPredicateChangeRef = React.useRef(props.onPredicateChange);
|
|
19
|
+
const predicateDefsRef = React.useRef(props.predicateDefs);
|
|
20
|
+
useLayoutEffect(() => {
|
|
21
|
+
activeIndexRef.current = activeIndex;
|
|
22
|
+
onPredicateChangeRef.current = props.onPredicateChange;
|
|
23
|
+
predicateDefsRef.current = props.predicateDefs;
|
|
24
|
+
});
|
|
25
|
+
const confirm = React.useCallback((predicateDef) => {
|
|
26
|
+
onPredicateChangeRef.current({ operator: predicateDef.operator, args: [] });
|
|
27
|
+
}, []);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const onKeyDown = (e) => {
|
|
30
|
+
// Only handle arrow keys and Enter - let other keys (like Tab) pass through
|
|
31
|
+
if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp' && e.key !== 'Enter') {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const activeIndex = activeIndexRef.current;
|
|
35
|
+
const predicateDefs = predicateDefsRef.current;
|
|
36
|
+
if (e.key === 'Enter') {
|
|
37
|
+
const predicateDef = predicateDefs[activeIndex];
|
|
38
|
+
if (predicateDef) {
|
|
39
|
+
confirm(predicateDef);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
e.stopPropagation();
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
const dir = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : 0;
|
|
45
|
+
if (dir) {
|
|
46
|
+
let nextIndex = activeIndex + dir;
|
|
47
|
+
if (nextIndex < 0) {
|
|
48
|
+
nextIndex = predicateDefs.length - 1;
|
|
49
|
+
}
|
|
50
|
+
else if (nextIndex >= predicateDefs.length) {
|
|
51
|
+
nextIndex = 0;
|
|
52
|
+
}
|
|
53
|
+
setActiveIndex(nextIndex);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
document.addEventListener('keydown', onKeyDown);
|
|
57
|
+
return () => {
|
|
58
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
59
|
+
};
|
|
60
|
+
}, [confirm]);
|
|
11
61
|
return (React.createElement(Panel, { className: "twa:min-w-max" }, props.predicateDefs?.map((predicateDef, index) => {
|
|
12
|
-
|
|
62
|
+
const active = activeIndex === index;
|
|
63
|
+
return (React.createElement(Flex, { className: clsx("twa:mb-1", active && "twa:bg-primarylight"), key: index, onMouseDownCapture: (e) => {
|
|
13
64
|
e.stopPropagation();
|
|
65
|
+
e.preventDefault();
|
|
14
66
|
} },
|
|
15
|
-
React.createElement(ColumnFilterMenuItem, { onClick: () =>
|
|
67
|
+
React.createElement(ColumnFilterMenuItem, { onClick: () => confirm(predicateDef), icon: predicateDef.icon, label: predicateDef.label, active: active })));
|
|
16
68
|
})));
|
|
17
69
|
};
|
|
@@ -204,7 +204,7 @@ export const FloatingFilterValues = (props) => {
|
|
|
204
204
|
...(props.value?.length
|
|
205
205
|
? {
|
|
206
206
|
valueContainer: {
|
|
207
|
-
fontWeight: 'var(--ab-cmp-
|
|
207
|
+
fontWeight: 'var(--ab-cmp-floatingfilter-selected-options-text__font-weight)',
|
|
208
208
|
},
|
|
209
209
|
}
|
|
210
210
|
: {}),
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
export const isAdaptableRuleValid = (abObject, api, context) => {
|
|
2
2
|
if (abObject?.Rule?.Predicates?.length) {
|
|
3
3
|
if (!api.predicateApi.isEveryPredicateValid(abObject?.Rule?.Predicates)) {
|
|
4
|
-
return `The
|
|
4
|
+
return `The predicate${abObject?.Rule?.Predicates?.length === 1 ? ' is' : 's are'} not valid.`;
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
7
|
if (abObject?.Rule?.BooleanExpression) {
|
|
8
8
|
if (!api.expressionApi.isValidBooleanExpression(abObject?.Rule?.BooleanExpression, context.moduleInfo.ModuleName)) {
|
|
9
|
-
return 'The
|
|
9
|
+
return 'The Boolean expression is not valid.';
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
if (abObject?.Rule?.ObservableExpression) {
|
|
13
13
|
if (!api.expressionApi.isValidObservableExpression(abObject?.Rule?.ObservableExpression, context.moduleInfo.ModuleName)) {
|
|
14
|
-
return 'The
|
|
14
|
+
return 'The Observable expression is not valid.';
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
if (abObject?.Rule?.AggregatedBooleanExpression) {
|
|
18
18
|
if (!api.expressionApi.isValidAggregatedBooleanExpression(abObject?.Rule?.AggregatedBooleanExpression, context.moduleInfo.ModuleName)) {
|
|
19
|
-
return 'The
|
|
19
|
+
return 'The Aggregated Boolean expression is not valid.';
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
if (abObject?.Rule?.Predicates?.length) {
|
|
23
23
|
const isAPredicateWithInvalidColumnId = abObject?.Rule?.Predicates?.some((predicate) => predicate.ColumnId !== undefined && predicate.ColumnId === '');
|
|
24
24
|
if (isAPredicateWithInvalidColumnId) {
|
|
25
|
-
return 'Predicates with custom scope
|
|
25
|
+
return 'Predicates with a custom scope require a valid column.';
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
return true;
|
|
@@ -14,13 +14,13 @@ import { TagList } from '../../components/Tag/Tag';
|
|
|
14
14
|
export const isScopeValid = ({ Scope }) => {
|
|
15
15
|
const result = [];
|
|
16
16
|
if (!Scope) {
|
|
17
|
-
return '
|
|
17
|
+
return 'A scope is required.';
|
|
18
18
|
}
|
|
19
19
|
if (Scope && 'ColumnIds' in Scope && Scope.ColumnIds.length === 0) {
|
|
20
|
-
result.push('
|
|
20
|
+
result.push('Please select at least one column for the scope.');
|
|
21
21
|
}
|
|
22
22
|
if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
|
|
23
|
-
result.push('
|
|
23
|
+
result.push('Please select at least one data type for the scope.');
|
|
24
24
|
}
|
|
25
25
|
return result.length ? result.join(', ') : true;
|
|
26
26
|
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { DashboardToolbar as DashboardToolbarUI } from '../../../../components/Dashboard';
|
|
3
3
|
export class PanelDashboard extends React.Component {
|
|
4
|
+
static defaultProps = {
|
|
5
|
+
showConfigureActionButton: true,
|
|
6
|
+
showCloseActionButton: true,
|
|
7
|
+
headerText: 'Module',
|
|
8
|
+
onClose: null,
|
|
9
|
+
onConfigure: null,
|
|
10
|
+
accessLevel: 'Full',
|
|
11
|
+
};
|
|
4
12
|
render() {
|
|
5
13
|
const { headerText, showConfigureActionButton, showCloseActionButton, onConfigure, onClose, accessLevel, children, } = this.props;
|
|
6
14
|
return (React.createElement(DashboardToolbarUI, { title: headerText, onConfigure: onConfigure, showConfigure: showConfigureActionButton, showClose: showCloseActionButton, onClose: onClose, accessLevel: accessLevel }, children));
|
|
7
15
|
}
|
|
8
16
|
}
|
|
9
|
-
PanelDashboard.defaultProps = {
|
|
10
|
-
showConfigureActionButton: true,
|
|
11
|
-
showCloseActionButton: true,
|
|
12
|
-
headerText: 'Module',
|
|
13
|
-
onClose: null,
|
|
14
|
-
onConfigure: null,
|
|
15
|
-
accessLevel: 'Full',
|
|
16
|
-
};
|
|
@@ -7,6 +7,13 @@ import { ButtonMaximise } from '../../Buttons/ButtonMaximise';
|
|
|
7
7
|
import { twMerge } from '../../../../twMerge';
|
|
8
8
|
import { Flex } from '../../../../components/Flex';
|
|
9
9
|
export class PanelToolPanel extends React.Component {
|
|
10
|
+
static defaultProps = {
|
|
11
|
+
headerText: '',
|
|
12
|
+
onClose: null,
|
|
13
|
+
onConfigure: null,
|
|
14
|
+
onMinimiseChanged: null,
|
|
15
|
+
isMinimised: true,
|
|
16
|
+
};
|
|
10
17
|
render() {
|
|
11
18
|
const { useDefaultPanelStyle, isMinimised, onMinimiseChanged, headerText, onClose, onConfigure, ...props } = this.props;
|
|
12
19
|
let header = (React.createElement(React.Fragment, null,
|
|
@@ -38,10 +45,3 @@ export class PanelToolPanel extends React.Component {
|
|
|
38
45
|
} }));
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
|
-
PanelToolPanel.defaultProps = {
|
|
42
|
-
headerText: '',
|
|
43
|
-
onClose: null,
|
|
44
|
-
onConfigure: null,
|
|
45
|
-
onMinimiseChanged: null,
|
|
46
|
-
isMinimised: true,
|
|
47
|
-
};
|
|
@@ -9,6 +9,7 @@ import { AdaptablePopupBody } from './AdaptablePopupBody';
|
|
|
9
9
|
import { useAdaptable } from '../../../AdaptableContext';
|
|
10
10
|
import { CustomSettingsPanelView } from './CustomSettingsPanelView';
|
|
11
11
|
import { useMenuItems } from './useMenuItems';
|
|
12
|
+
import { resolveContainerElement } from '../../../../Utilities/resolveContainerElement';
|
|
12
13
|
import { AdaptablePopupDialog } from './AdaptablePopupDialog';
|
|
13
14
|
import { Box } from '../../../../components/Flex';
|
|
14
15
|
export const AdaptablePopup = (props) => {
|
|
@@ -17,7 +18,7 @@ export const AdaptablePopup = (props) => {
|
|
|
17
18
|
const settingsPanelTitle = adaptable.ModuleService.getModuleFriendlyName('SettingsPanel');
|
|
18
19
|
const menuItems = useMenuItems();
|
|
19
20
|
const isWindowModal = settingsPanelOptions.popupType === 'window';
|
|
20
|
-
const modalContainer = adaptable.adaptableOptions?.containerOptions?.modalContainer;
|
|
21
|
+
const modalContainer = resolveContainerElement(adaptable.adaptableOptions?.containerOptions?.modalContainer, props.api.internalApi.buildBaseContext());
|
|
21
22
|
let friendlyName = null;
|
|
22
23
|
/**
|
|
23
24
|
* This means that it is not rendered in the context of Settings Panel
|