@adaptabletools/adaptable 23.0.4 → 23.0.5-canary.1
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.js +0 -31
- package/index.css +0 -64
- package/index.js +0 -31
- package/package.json +1 -1
- package/src/AdaptableInterfaces/IAdaptable.d.ts +0 -2
- package/src/AdaptableOptions/AdaptablePlugin.js +1 -9
- package/src/AdaptableOptions/DefaultAdaptableOptions.js +3 -39
- package/src/AdaptableOptions/SettingsPanelOptions.d.ts +44 -16
- package/src/AdaptableState/Aggregations/only.js +0 -11
- package/src/AdaptableState/Aggregations/weightedAverage.d.ts +0 -1
- package/src/AdaptableState/Aggregations/weightedAverage.js +1 -27
- package/src/AdaptableState/Common/AdaptableColumn.js +0 -1
- package/src/AdaptableState/Common/AdaptableForm.js +0 -49
- package/src/AdaptableState/Common/AdaptableFormatPresets.js +0 -13
- package/src/AdaptableState/Common/AdaptablePredicate.js +3 -125
- package/src/AdaptableState/Common/AggregationColumns.js +0 -10
- package/src/AdaptableState/Common/Enums.js +0 -3
- package/src/AdaptableState/Common/Menu.js +1 -7
- package/src/AdaptableState/Common/MenuItem.js +0 -2
- package/src/AdaptableState/Common/Types.js +2 -5
- package/src/AdaptableState/StatusBarState.js +0 -3
- package/src/AdaptableState/StyledColumns/BadgeStyle.js +0 -1
- package/src/AdaptableState/StyledColumns/Common/BarStyleProperties.js +0 -4
- package/src/AdaptableState/StyledColumns/Common/CellTextOptions.js +0 -5
- package/src/AdaptableState/StyledColumns/Common/NumericStyledColumn.js +0 -8
- package/src/AdaptableState/Uuid.js +0 -1
- package/src/Api/Implementation/AdaptableApiImpl.js +0 -4
- package/src/Api/Implementation/AlertApiImpl.js +0 -21
- package/src/Api/Implementation/ApiBase.js +0 -24
- package/src/Api/Implementation/CalculatedColumnApiImpl.js +0 -1
- package/src/Api/Implementation/ChartingApiImpl.js +0 -3
- package/src/Api/Implementation/ColumnApiImpl.js +1 -15
- package/src/Api/Implementation/ColumnFilterApiImpl.js +0 -9
- package/src/Api/Implementation/ColumnScopeApiImpl.js +0 -21
- package/src/Api/Implementation/DashboardApiImpl.js +0 -1
- package/src/Api/Implementation/EntitlementApiImpl.js +0 -1
- package/src/Api/Implementation/ExportApiImpl.js +0 -10
- package/src/Api/Implementation/ExpressionApiImpl.js +0 -1
- package/src/Api/Implementation/FormatColumnApiImpl.js +0 -3
- package/src/Api/Implementation/FreeTextColumnApiImpl.js +0 -2
- package/src/Api/Implementation/GridApiImpl.js +1 -22
- package/src/Api/Implementation/GridFilterApiImpl.js +0 -2
- package/src/Api/Implementation/LayoutApiImpl.js +0 -18
- package/src/Api/Implementation/LayoutHelpers.js +0 -16
- package/src/Api/Implementation/NamedQueryApiImpl.js +0 -1
- package/src/Api/Implementation/PredicateApiImpl.js +0 -5
- package/src/Api/Implementation/RowFormApiImpl.js +0 -2
- package/src/Api/Implementation/StateApiImpl.js +0 -7
- package/src/Api/Implementation/SystemStatusApiImpl.js +0 -2
- package/src/Api/Implementation/TeamSharingApiImpl.js +0 -3
- package/src/Api/Implementation/UserInterfaceApiImpl.js +0 -1
- package/src/Api/Internal/ActionColumnInternalApi.js +0 -1
- package/src/Api/Internal/AdaptableInternalApi.d.ts +0 -2
- package/src/Api/Internal/AdaptableInternalApi.js +1 -39
- package/src/Api/Internal/AlertInternalApi.js +1 -102
- package/src/Api/Internal/CalculatedColumnInternalApi.js +0 -17
- package/src/Api/Internal/ChartingInternalApi.js +0 -1
- package/src/Api/Internal/ColumnFilterInternalApi.js +0 -52
- package/src/Api/Internal/ColumnInternalApi.js +0 -32
- package/src/Api/Internal/CustomSortInternalApi.js +0 -5
- package/src/Api/Internal/DashboardInternalApi.js +0 -23
- package/src/Api/Internal/DataImportInternalApi.js +0 -1
- package/src/Api/Internal/EventInternalApi.js +0 -2
- package/src/Api/Internal/ExportInternalApi.js +1 -16
- package/src/Api/Internal/ExpressionInternalApi.js +0 -23
- package/src/Api/Internal/Fdc3InternalApi.js +0 -9
- package/src/Api/Internal/FlashingCellInternalApi.js +0 -5
- package/src/Api/Internal/FormatColumnInternalApi.js +5 -107
- package/src/Api/Internal/FreeTextColumnInternalApi.js +0 -8
- package/src/Api/Internal/GridFilterInternalApi.js +0 -3
- package/src/Api/Internal/GridInternalApi.js +0 -37
- package/src/Api/Internal/LayoutInternalApi.js +0 -18
- package/src/Api/Internal/NamedQueryInternalApi.js +0 -9
- package/src/Api/Internal/PredicateInternalApi.js +0 -23
- package/src/Api/Internal/RowFormInternalApi.js +0 -18
- package/src/Api/Internal/StateInternalApi.js +0 -25
- package/src/Api/Internal/StyledColumnInternalApi.js +0 -62
- package/src/Api/Internal/TeamSharingInternalApi.js +0 -9
- package/src/Redux/ActionsReducers/AlertRedux.js +0 -24
- package/src/Redux/ActionsReducers/ApplicationRedux.js +0 -9
- package/src/Redux/ActionsReducers/BulkUpdateRedux.js +0 -6
- package/src/Redux/ActionsReducers/CalculatedColumnRedux.js +1 -16
- package/src/Redux/ActionsReducers/ChartingRedux.js +0 -24
- package/src/Redux/ActionsReducers/CommentsRedux.js +0 -24
- package/src/Redux/ActionsReducers/CustomSortRedux.js +0 -24
- package/src/Redux/ActionsReducers/DashboardRedux.js +0 -33
- package/src/Redux/ActionsReducers/ExportRedux.js +0 -36
- package/src/Redux/ActionsReducers/FlashingCellRedux.js +0 -24
- package/src/Redux/ActionsReducers/FormatColumnRedux.js +0 -36
- package/src/Redux/ActionsReducers/FreeTextColumnRedux.js +1 -20
- package/src/Redux/ActionsReducers/InternalRedux.js +0 -42
- package/src/Redux/ActionsReducers/LayoutRedux.js +1 -67
- package/src/Redux/ActionsReducers/NamedQueryRedux.js +0 -15
- package/src/Redux/ActionsReducers/NoteRedux.js +0 -14
- package/src/Redux/ActionsReducers/PluginsRedux.js +0 -3
- package/src/Redux/ActionsReducers/PlusMinusRedux.js +0 -34
- package/src/Redux/ActionsReducers/PopupRedux.js +2 -6
- package/src/Redux/ActionsReducers/QuickSearchRedux.js +0 -15
- package/src/Redux/ActionsReducers/ShortcutRedux.js +0 -24
- package/src/Redux/ActionsReducers/SmartEditRedux.js +0 -6
- package/src/Redux/ActionsReducers/StatusBarRedux.js +0 -6
- package/src/Redux/ActionsReducers/StyledColumnRedux.js +0 -27
- package/src/Redux/ActionsReducers/SystemStatusRedux.js +0 -6
- package/src/Redux/ActionsReducers/TeamSharingRedux.js +0 -1
- package/src/Redux/ActionsReducers/ThemeRedux.js +0 -26
- package/src/Redux/ActionsReducers/ToolPanelRedux.js +0 -22
- package/src/Redux/ActionsReducers/UserInterfaceRedux.js +0 -3
- package/src/Redux/ActionsReducers/utils.js +0 -6
- package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +0 -1
- package/src/Redux/Store/AdaptableReduxMerger.js +0 -25
- package/src/Redux/Store/AdaptableStore.js +5 -301
- package/src/Strategy/AdaptableModuleBase.js +0 -35
- package/src/Strategy/AlertModule.js +0 -9
- package/src/Strategy/CellSummaryModule.js +0 -12
- package/src/Strategy/ChartingModule.js +0 -1
- package/src/Strategy/ColumnFilterModule.js +1 -11
- package/src/Strategy/CommentModule.js +0 -2
- package/src/Strategy/DashboardModule.js +0 -4
- package/src/Strategy/ExportModule.js +0 -1
- package/src/Strategy/FlashingCellModule.js +0 -8
- package/src/Strategy/FormatColumnModule.js +0 -3
- package/src/Strategy/FreeTextColumnModule.js +0 -3
- package/src/Strategy/LayoutModule.js +0 -26
- package/src/Strategy/NoteModule.js +0 -3
- package/src/Strategy/PlusMinusModule.js +0 -3
- package/src/Strategy/SettingsPanelModule.js +0 -1
- package/src/Strategy/ShortcutModule.js +0 -1
- package/src/Strategy/SmartEditModule.js +0 -5
- package/src/Strategy/StatusBarModule.js +0 -7
- package/src/Strategy/StyledColumnModule.js +1 -16
- package/src/Strategy/TeamSharingModule.js +0 -9
- package/src/Strategy/Utilities/Layout/columnsSummaryHelpers.js +0 -5
- package/src/Utilities/Constants/DocumentationLinkConstants.js +0 -1
- package/src/Utilities/Constants/GeneralConstants.js +0 -10
- package/src/Utilities/Constants/ObjectDefaultConstants.js +0 -3
- package/src/Utilities/Constants/ReduxConstants.js +4 -8
- package/src/Utilities/Emitter.js +0 -9
- package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +0 -8
- package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +0 -15
- package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +0 -3
- package/src/Utilities/ExpressionFunctions/deepMap.js +0 -16
- package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +0 -9
- package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +7 -78
- package/src/Utilities/ExpressionFunctions/scalarAggregationHelper.js +0 -9
- package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +2 -16
- package/src/Utilities/Extensions/ArrayExtensions.js +1 -63
- package/src/Utilities/Extensions/NumberExtensions.js +0 -27
- package/src/Utilities/Extensions/ObjectExtensions.js +0 -36
- package/src/Utilities/Extensions/StringExtensions.js +0 -27
- package/src/Utilities/Helpers/ActionColumnHelper.js +0 -4
- package/src/Utilities/Helpers/AdaptableHelper.js +0 -8
- package/src/Utilities/Helpers/DateHelper.js +0 -10
- package/src/Utilities/Helpers/DisplayFormatHelper.js +0 -8
- package/src/Utilities/Helpers/Helper.js +3 -9
- package/src/Utilities/Helpers/PlusMinusHelper.js +0 -20
- package/src/Utilities/Helpers/QuickSearchHelper.js +0 -5
- package/src/Utilities/Helpers/Scheduling/CronExpression.js +0 -43
- package/src/Utilities/Helpers/Scheduling/ScheduledReportHelper.js +0 -4
- package/src/Utilities/Helpers/SettingsPanelHelper.js +40 -4
- package/src/Utilities/Helpers/StyleHelper.js +0 -56
- package/src/Utilities/Helpers/StyledColumns/BarStylesHelper.js +0 -46
- package/src/Utilities/Helpers/StyledColumns/GradientStyleHelper.js +0 -38
- package/src/Utilities/Helpers/StyledColumns/IconStyleHelper.js +0 -39
- package/src/Utilities/Helpers/StyledColumns/PercentBarStyleHelper.js +0 -1
- package/src/Utilities/Helpers/StyledColumns/SparklineStyleHelper.js +0 -5
- package/src/Utilities/Helpers/StyledColumns/StyledColumnHelper.js +0 -37
- package/src/Utilities/Helpers/TimingHelper.js +0 -13
- package/src/Utilities/ObjectFactory.js +2 -4
- package/src/Utilities/Services/AggregatedScalarLiveValue.js +0 -7
- package/src/Utilities/Services/AlertService.js +0 -1
- package/src/Utilities/Services/AnnotationsService.js +0 -22
- package/src/Utilities/Services/CalculatedColumnExpressionService.js +0 -8
- package/src/Utilities/Services/ChartingService.js +0 -9
- package/src/Utilities/Services/DataService.js +0 -11
- package/src/Utilities/Services/Fdc3Service.js +0 -3
- package/src/Utilities/Services/FlashingCellService.js +0 -6
- package/src/Utilities/Services/ModuleService.js +0 -8
- package/src/Utilities/Services/QueryLanguageService.js +2 -25
- package/src/Utilities/Services/RowFormService.js +0 -1
- package/src/Utilities/Services/RowSummaryService.js +1 -20
- package/src/Utilities/Services/TeamSharingService.js +0 -15
- package/src/Utilities/Services/ThemeService.js +0 -7
- package/src/Utilities/Services/ValidationService.js +0 -21
- package/src/Utilities/createAgStatusPanelComponent.js +0 -3
- package/src/Utilities/getExpressionViewItems.js +0 -2
- package/src/Utilities/getObjectTagsViewItems.js +0 -1
- package/src/Utilities/getScrollbarSize.js +0 -1
- package/src/Utilities/logDeprecation.js +0 -3
- package/src/Utilities/resolveContainerElement.js +0 -21
- package/src/Utilities/runIfNotResolvedIn.js +0 -7
- package/src/Utilities/sortColumnStateForVisibleColumns.js +2 -12
- package/src/Utilities/waitForTimeout.js +0 -1
- package/src/Utilities/wizardSelection.js +0 -2
- package/src/View/AdaptablePopover/index.js +1 -1
- package/src/View/AdaptableView.js +1 -5
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +0 -4
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +0 -23
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +0 -2
- package/src/View/AdaptableWizardView/Wizard.js +0 -12
- package/src/View/AdaptableWizardView/helper.js +0 -11
- package/src/View/Alert/ActiveAlertsPanel.js +0 -2
- package/src/View/Alert/AlertStatusSubPanel.js +0 -8
- package/src/View/Alert/Utilities/getAlertType.js +0 -7
- package/src/View/Alert/Utilities/getDefaultAlertDefinition.js +0 -5
- package/src/View/Alert/Utilities/mapAlertDefinition.js +0 -3
- package/src/View/Alert/Wizard/AlertWizard.js +0 -2
- package/src/View/Alert/Wizard/isValidAlertRules.js +0 -1
- package/src/View/BulkUpdate/BulkUpdatePopup.js +0 -1
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -3
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +0 -1
- package/src/View/CalculatedColumn/utils.d.ts +1 -1
- package/src/View/CellSummary/CellSummaryPopup.js +0 -3
- package/src/View/CellSummary/CellSummaryStatusBarSubPanelPopover.js +1 -7
- package/src/View/Charting/EditChartButton.js +1 -4
- package/src/View/Charting/ShowChartButton.js +0 -3
- package/src/View/Charting/useAgChartState.js +0 -5
- package/src/View/Charting/useChartingElements.js +0 -4
- package/src/View/Charting/useExternalChartState.js +0 -6
- package/src/View/ColumnInfo/ColumnInfo.js +7 -17
- package/src/View/Comments/CommentsEditor.js +1 -16
- package/src/View/Components/AdaptableButton/AdaptableButtonComponent.js +0 -1
- package/src/View/Components/AdaptableButton/AdaptableButtonView.js +0 -3
- package/src/View/Components/AdaptableDateInput/index.js +2 -9
- package/src/View/Components/AdaptableIconComponent/index.js +0 -4
- package/src/View/Components/AdaptableIconSelector/index.js +0 -3
- package/src/View/Components/AdaptableInput/index.js +0 -2
- package/src/View/Components/Badge/index.js +0 -8
- package/src/View/Components/Buttons/ButtonNewPage.js +1 -2
- package/src/View/Components/CellPopup/index.js +1 -2
- package/src/View/Components/ColumnFilter/AdaptableColumnFilter.js +0 -4
- package/src/View/Components/ColumnFilter/AdaptableFloatingFilter.js +0 -4
- package/src/View/Components/ColumnFilter/ColumnFilter.js +3 -46
- package/src/View/Components/ColumnFilter/ColumnFilterWindow.js +0 -2
- package/src/View/Components/ColumnFilter/FloatingFilter.js +1 -20
- package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +2 -16
- package/src/View/Components/ColumnFilter/components/ColumnFilterInputList.js +1 -4
- package/src/View/Components/ColumnFilter/components/FloatingFilterInputList.js +1 -6
- package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +0 -20
- package/src/View/Components/ColumnFilter/useAdaptableFilterWrapper.js +0 -5
- package/src/View/Components/ColumnFilter/utils.js +2 -9
- package/src/View/Components/EntityRulesEditor/EntityRulePredicatesEditor/EntityRulePredicateEditor.js +0 -2
- package/src/View/Components/EntityRulesEditor/EntityRulePredicatesEditor/EntityRulePredicatesEditor.js +0 -1
- package/src/View/Components/EntityRulesEditor/index.js +1 -11
- package/src/View/Components/ExternalRenderer.js +1 -3
- package/src/View/Components/FilterForm/ListBoxFilterForm.js +1 -52
- package/src/View/Components/ModuleValueSelector/index.js +0 -2
- package/src/View/Components/Panels/PanelWithImage.js +1 -5
- package/src/View/Components/Panels/PanelWithRow.js +0 -3
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopup.js +0 -6
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupBody.js +0 -3
- package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupModuleView.js +0 -6
- package/src/View/Components/Popups/AdaptablePopup/PopupPanel.js +1 -2
- package/src/View/Components/Popups/AdaptablePopup/useMenuItems.js +0 -1
- package/src/View/Components/Popups/AdaptablePopupAlert.js +0 -3
- package/src/View/Components/Popups/AdaptableToaster.js +0 -2
- package/src/View/Components/Popups/WindowPopups/WindowPopups.js +0 -8
- package/src/View/Components/RangesComponent.js +0 -57
- package/src/View/Components/Selectors/BulkUpdateValueSelector.js +0 -3
- package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -6
- package/src/View/Components/ToolPanel/AdaptableToolPanel.js +1 -18
- package/src/View/Components/ToolPanel/ToolPanelPopupSections.js +0 -4
- package/src/View/Components/ToolPanel/ToolPanelWrapper.js +1 -4
- package/src/View/Components/ValueSelector/index.js +0 -4
- package/src/View/Components/wizardColumnListStyles.js +0 -5
- package/src/View/Dashboard/CustomToolbar.js +1 -25
- package/src/View/Dashboard/PinnedToolbarsSelector.js +0 -1
- package/src/View/DataImport/DataImportWizard/DataImportWizard.js +1 -22
- package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +0 -1
- package/src/View/DataImport/systemFileHandlers.js +1 -1
- package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +0 -1
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +0 -27
- package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +0 -1
- package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +0 -7
- package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +0 -12
- package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +0 -10
- package/src/View/GridFilter/GridFilterPopup.js +0 -1
- package/src/View/GridFilter/useGridFilterExpressionEditor.js +0 -2
- package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +1 -31
- package/src/View/Layout/LayoutViewPanel.js +0 -2
- package/src/View/Layout/PivotDetailsPopoup.js +0 -2
- package/src/View/Layout/TransposedPopup.js +0 -7
- package/src/View/Layout/Wizard/LayoutWizard.js +1 -6
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +0 -2
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +1 -32
- package/src/View/Layout/Wizard/sections/RowSummarySection.js +0 -3
- package/src/View/Layout/Wizard/sections/columnLayoutHelpers.js +0 -2
- package/src/View/Layout/Wizard/sections/layoutWizardColumns.js +0 -4
- package/src/View/Note/NotePopup.js +0 -1
- package/src/View/QuickSearch/QuickSearchPopup.js +0 -1
- package/src/View/StatusBar/AdaptableStatusBar.js +0 -4
- package/src/View/StatusBar/StatusBarPanel.js +0 -8
- package/src/View/StatusBar/StatusBarPopup.js +0 -2
- package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +0 -11
- package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +0 -28
- package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +0 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +1 -25
- package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +0 -26
- package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +0 -3
- package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +0 -40
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +0 -55
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +0 -15
- package/src/View/StyledColumn/Wizard/StyledColumnWizardScopeSection.js +0 -21
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BarStyleCellTextPreview.js +0 -10
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +0 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +0 -4
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +0 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +0 -3
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnChartListPreviews.js +0 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +0 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +0 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +0 -1
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +0 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +1 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizardTypeSection.js +0 -21
- package/src/View/SystemStatus/SystemStatusPopup.js +0 -1
- package/src/View/TeamSharing/SharedEntityObjectView.js +0 -1
- package/src/View/Theme/ThemeSelector.js +0 -1
- package/src/View/UIHelper.js +0 -6
- package/src/View/UIInterfaces.js +0 -1
- package/src/View/Wizard/CollapsibleWizardCard.js +1 -8
- package/src/View/Wizard/OnePageWizards.js +2 -9
- package/src/View/Wizard/SummaryColorTag.js +0 -1
- package/src/View/Wizard/useKeyboardNavigation.js +1 -3
- package/src/agGrid/Adaptable.js +0 -12
- package/src/agGrid/AdaptableAgGrid.d.ts +0 -2
- package/src/agGrid/AdaptableAgGrid.js +3 -482
- package/src/agGrid/AdaptableFilterHandler.js +0 -5
- package/src/agGrid/AdaptableLogger.js +0 -6
- package/src/agGrid/AgGridAdapter.js +3 -90
- package/src/agGrid/AgGridColumnAdapter.js +6 -168
- package/src/agGrid/AgGridExportAdapter.js +4 -106
- package/src/agGrid/AgGridFilterAdapter.js +0 -5
- package/src/agGrid/AgGridFloatingFilterAdapter.js +0 -10
- package/src/agGrid/AgGridMenuAdapter.js +0 -143
- package/src/agGrid/AgGridModulesAdapter.js +0 -2
- package/src/agGrid/AgGridOptionsService.js +0 -2
- package/src/agGrid/AgGridThemeAdapter.js +0 -7
- package/src/agGrid/agGridDataTypeDefinitions.js +0 -8
- package/src/agGrid/cellRenderers/BadgeRenderer.js +0 -10
- package/src/agGrid/cellRenderers/BulletChartRenderer.js +1 -96
- package/src/agGrid/cellRenderers/IconRenderer.js +0 -55
- package/src/agGrid/cellRenderers/PercentBarRenderer.js +0 -51
- package/src/agGrid/cellRenderers/RangeBarRenderer.js +1 -50
- package/src/agGrid/cellRenderers/RatingRenderer.js +0 -40
- package/src/agGrid/editors/AdaptableDateEditor/index.js +0 -18
- package/src/agGrid/editors/AdaptableNumberEditor/InternalAdaptableNumberEditor.js +0 -3
- package/src/agGrid/editors/AdaptableNumberEditor/index.js +0 -11
- package/src/agGrid/editors/AdaptablePercentageEditor/index.js +0 -9
- package/src/agGrid/index.js +1 -9
- package/src/components/AdaptableFormComponent/AdaptableFormComponent.js +1 -73
- package/src/components/CodeBlock/index.d.ts +0 -1
- package/src/components/CodeBlock/index.js +1 -2
- package/src/components/ColorPicker/ColorPicker.js +0 -6
- package/src/components/Combobox/VirtualizedList.js +0 -5
- package/src/components/Combobox/index.js +5 -63
- package/src/components/Dashboard/Dashboard.js +1 -4
- package/src/components/Datepicker/index.js +2 -97
- package/src/components/DragAndDropContext/TabList.js +2 -6
- package/src/components/Drawer/index.js +0 -7
- package/src/components/Dropdown/index.js +0 -1
- package/src/components/DropdownButton/index.js +0 -1
- package/src/components/ExpressionEditor/BaseEditorInput.js +1 -16
- package/src/components/ExpressionEditor/EditorButton.js +0 -1
- package/src/components/ExpressionEditor/EditorInput.js +1 -7
- package/src/components/ExpressionEditor/EditorInputWithWhereClause.js +0 -1
- package/src/components/ExpressionEditor/ExpressionPreview.js +4 -14
- package/src/components/ExpressionEditor/NamedQueryContext.js +0 -1
- package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +1 -6
- package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +0 -12
- package/src/components/ExpressionEditor/QueryBuilder/utils.js +0 -4
- package/src/components/ExpressionEditor/index.js +5 -14
- package/src/components/Icon/index.js +0 -2
- package/src/components/Input/NumberInput.js +0 -10
- package/src/components/Modal/Backdrop.js +0 -1
- package/src/components/OverlayTrigger/Overlay.js +0 -1
- package/src/components/OverlayTrigger/index.js +3 -15
- package/src/components/ProgressIndicator/ProgressIndicator.js +3 -16
- package/src/components/ResizeObserver/index.js +0 -7
- package/src/components/SimpleButton/index.js +2 -16
- package/src/components/Tabs/index.js +0 -3
- package/src/components/Tag/Tag.js +0 -1
- package/src/components/Tag/columnScopeTagHelpers.js +0 -2
- package/src/components/Textarea/index.js +1 -8
- package/src/components/Toggle/Toggle.js +1 -5
- package/src/components/Toggle/ToggleGroup.js +1 -3
- package/src/components/ToggleButton/index.js +1 -3
- package/src/components/Tree/TreeDropdown/index.js +2 -130
- package/src/components/Tree/treeUtils.js +0 -4
- package/src/components/WindowModal/WindowModal.js +1 -14
- package/src/components/WindowModal/useStacking.js +0 -7
- package/src/components/icons/bullet-chart.js +0 -4
- package/src/components/icons/icon-style.js +0 -4
- package/src/components/icons/index.js +26 -36
- package/src/components/icons/range-bar.js +0 -5
- package/src/components/icons/star.js +0 -1
- package/src/components/twUtils.js +3 -12
- package/src/components/ui/calendar.js +1 -9
- package/src/components/ui/combobox.js +0 -4
- package/src/components/utils/captureTabNavigation/getFocusableChildren.js +0 -1
- package/src/components/utils/useDraggable.js +0 -4
- package/src/components/utils/useProperty.js +0 -18
- package/src/devTools/index.js +0 -1
- package/src/env.js +2 -2
- package/src/layout-manager/src/LMEmitter.js +0 -5
- package/src/layout-manager/src/destructurePivotColumnId.js +0 -19
- package/src/layout-manager/src/index.js +2 -182
- package/src/layout-manager/src/isLayoutEqual.js +0 -1
- package/src/layout-manager/src/isPivotColumnTotal.js +0 -2
- package/src/layout-manager/src/normalizeLayoutModel.js +0 -27
- package/src/layout-manager/src/simplifyLayoutModel.js +0 -11
- package/src/layout-manager/src/sortColumnIdsByOrder.js +2 -12
- package/src/lib/utils.js +0 -1
- package/src/migration/AdaptableUpgradeHelper.js +0 -2
- package/src/migration/VersionUpgrade17.js +0 -33
- package/src/migration/VersionUpgrade20.js +1 -21
- package/src/migration/VersionUpgrade21.js +0 -3
- package/src/migration/VersionUpgrade22.js +0 -11
- package/src/migration/VersionUpgrade23.js +0 -73
- package/src/parser/src/evaluator.js +0 -1
- package/src/parser/src/index.js +0 -1
- package/src/parser/src/parser.js +4 -103
- package/src/parser/src/predicate/mapExpressionToQlPredicate.js +0 -5
- package/src/parser/src/predicate/mapQlPredicateToExpression.js +0 -2
- package/src/parser/src/tokenizer.js +0 -2
- package/src/parser/src/utils.js +0 -1
- package/src/renderReactRoot.js +0 -12
- package/src/setupDevTools.js +0 -6
- package/src/twMerge.js +0 -1
- package/src/types.d.ts +1 -1
- package/src/types.js +0 -2
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/src/AdaptableState/Common/NamedObject.d.ts +0 -10
- package/src/AdaptableState/Common/NamedObject.js +0 -1
- package/src/Utilities/ExpressionFunctions/groupingMap.d.ts +0 -35
- package/src/Utilities/ExpressionFunctions/groupingMap.js +0 -100
- package/src/Utilities/Interface/AdaptableToolPanelContext.d.ts +0 -4
- package/src/Utilities/Interface/AdaptableToolPanelContext.js +0 -1
- package/src/Utilities/Services/Interface/IMetamodelService.d.ts +0 -20
- package/src/Utilities/Services/Interface/IMetamodelService.js +0 -1
- package/src/Utilities/Services/MetamodelService.d.ts +0 -17
- package/src/Utilities/Services/MetamodelService.js +0 -162
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.d.ts +0 -6
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/AdaptableOptionsForm.js +0 -99
- package/src/View/Components/Buttons/EntityListActionButtons.d.ts +0 -38
- package/src/View/Components/Buttons/EntityListActionButtons.js +0 -42
- package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.d.ts +0 -12
- package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +0 -67
- package/src/View/Components/EntityRowItem.d.ts +0 -7
- package/src/View/Components/EntityRowItem.js +0 -7
- package/src/View/Components/FilterForm/getDefaultColumnFilterPredicate.d.ts +0 -3
- package/src/View/Components/FilterForm/getDefaultColumnFilterPredicate.js +0 -5
- package/src/View/Components/ModuleProfile.d.ts +0 -8
- package/src/View/Components/ModuleProfile.js +0 -10
- package/src/View/Components/ModuleSummary/ModuleDetail.d.ts +0 -23
- package/src/View/Components/ModuleSummary/ModuleDetail.js +0 -15
- package/src/View/Components/ModuleSummary/ModuleHeader.d.ts +0 -15
- package/src/View/Components/ModuleSummary/ModuleHeader.js +0 -15
- package/src/View/Components/ModuleSummary/SummaryRowItem.d.ts +0 -7
- package/src/View/Components/ModuleSummary/SummaryRowItem.js +0 -12
- package/src/View/Components/SharedProps/ModuleSummaryProps.d.ts +0 -9
- package/src/View/Components/SharedProps/ModuleSummaryProps.js +0 -1
- package/src/View/Components/SharedProps/ToolPanelModuleViewPopupProps.d.ts +0 -13
- package/src/View/Components/SharedProps/ToolPanelModuleViewPopupProps.js +0 -1
- package/src/View/Components/SharedProps/ToolbarModuleViewPopupProps.d.ts +0 -14
- package/src/View/Components/SharedProps/ToolbarModuleViewPopupProps.js +0 -1
- package/src/View/Components/StyleVisualItem.d.ts +0 -9
- package/src/View/Components/StyleVisualItem.js +0 -40
- package/src/View/Components/WizardSummaryPage.d.ts +0 -7
- package/src/View/Components/WizardSummaryPage.js +0 -17
- package/src/components/Accordion.d.ts +0 -7
- package/src/components/Accordion.js +0 -33
- package/src/components/FlexWithFooter.d.ts +0 -9
- package/src/components/FlexWithFooter.js +0 -13
- package/src/components/NotifyResize/index.d.ts +0 -9
- package/src/components/NotifyResize/index.js +0 -35
- package/src/components/PopupWithFooter.d.ts +0 -14
- package/src/components/PopupWithFooter.js +0 -11
- package/src/components/SelectableList/index.d.ts +0 -15
- package/src/components/SelectableList/index.js +0 -95
- package/src/components/SizedContainer/index.d.ts +0 -17
- package/src/components/SizedContainer/index.js +0 -20
- package/src/components/Table/index.d.ts +0 -4
- package/src/components/Table/index.js +0 -6
- package/src/components/WizardPanel/index.d.ts +0 -9
- package/src/components/WizardPanel/index.js +0 -7
- package/src/components/icons/align-justify.d.ts +0 -3
- package/src/components/icons/align-justify.js +0 -3
- package/src/components/icons/column-info.d.ts +0 -3
- package/src/components/icons/column-info.js +0 -3
- package/src/components/icons/gradient-column.d.ts +0 -3
- package/src/components/icons/gradient-column.js +0 -3
- package/src/components/icons/invalid.d.ts +0 -3
- package/src/components/icons/invalid.js +0 -3
- package/src/components/icons/logout copy.d.ts +0 -3
- package/src/components/icons/logout copy.js +0 -3
- package/src/components/icons/smart-edit.d.ts +0 -3
- package/src/components/icons/smart-edit.js +0 -3
- package/src/components/icons/team-share.d.ts +0 -3
- package/src/components/icons/team-share.js +0 -3
- package/src/components/icons/unchecked.d.ts +0 -3
- package/src/components/icons/unchecked.js +0 -3
- package/src/components/icons/user-filter.d.ts +0 -3
- package/src/components/icons/user-filter.js +0 -3
- package/src/components/utils/useContainerScrollObserver/index.d.ts +0 -6
- package/src/components/utils/useContainerScrollObserver/index.js +0 -79
- package/src/components/utils/useGlobalEvent.d.ts +0 -1
- package/src/components/utils/useGlobalEvent.js +0 -7
- package/src/components/utils/useLatest.d.ts +0 -1
- package/src/components/utils/useLatest.js +0 -6
- package/src/components/utils/usePropState.d.ts +0 -2
- package/src/components/utils/usePropState.js +0 -8
- package/src/metamodel/adaptable-metamodel-model.d.ts +0 -26
- package/src/metamodel/adaptable-metamodel-model.js +0 -1
- package/src/metamodel/adaptable.metamodel.d.ts +0 -6244
- package/src/metamodel/adaptable.metamodel.js +0 -1
|
@@ -14,7 +14,6 @@ export const useAdaptableFilterWrapper = (columnId, filterComponent, handleOnCha
|
|
|
14
14
|
const column = api.columnApi.getColumnWithColumnId(columnId);
|
|
15
15
|
const columnFilterOptions = api.optionsApi.getFilterOptions().columnFilterOptions;
|
|
16
16
|
const qlPredicateDefs = React.useMemo(() => {
|
|
17
|
-
// this is NOT the ideal place to do this, but it is what it is: autoGroupCol should NOT have the 'Blanks'/'NonBlanks' predicates
|
|
18
17
|
const predicateDefs = api.filterApi.columnFilterApi
|
|
19
18
|
.getFilterPredicateDefsForColumn(column)
|
|
20
19
|
.filter((predDef) => {
|
|
@@ -34,7 +33,6 @@ export const useAdaptableFilterWrapper = (columnId, filterComponent, handleOnCha
|
|
|
34
33
|
? mapColumnFilterToQlPredicate(columnFilter, column, qlPredicateDefs, columnFilterOptions, filterComponent, api)
|
|
35
34
|
: null;
|
|
36
35
|
const handleOnChange = (adaptablePredicate, logic = 'AND') => {
|
|
37
|
-
// make sure we always have the latest columnFiler
|
|
38
36
|
const columnFilter = adaptable.api.filterApi.columnFilterApi.getColumnFilterForColumn(columnId);
|
|
39
37
|
const newFilter = {
|
|
40
38
|
...columnFilter,
|
|
@@ -52,9 +50,6 @@ export const useAdaptableFilterWrapper = (columnId, filterComponent, handleOnCha
|
|
|
52
50
|
}
|
|
53
51
|
};
|
|
54
52
|
const handleClear = React.useCallback(() => dispatch(LayoutRedux.LayoutColumnFilterClear(columnId)), [columnId]);
|
|
55
|
-
/**
|
|
56
|
-
* Converts a QlPredicate to an AdaptablePredicate and dispatches the change.
|
|
57
|
-
*/
|
|
58
53
|
const handlePredicateChange = React.useCallback((newPredicate) => {
|
|
59
54
|
if (!newPredicate) {
|
|
60
55
|
handleClear();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { isAdaptableIcon } from '../../../components/Icon';
|
|
3
3
|
import { AdaptableIconComponent } from '../AdaptableIconComponent';
|
|
4
|
-
export const mapAdaptablePredicateDefToQlPredicateDef = (adaptablePredicateDef,
|
|
5
|
-
// used to determine values type
|
|
6
|
-
dataType) => {
|
|
4
|
+
export const mapAdaptablePredicateDefToQlPredicateDef = (adaptablePredicateDef, dataType) => {
|
|
7
5
|
let icon = null;
|
|
8
6
|
if (isAdaptableIcon(adaptablePredicateDef.icon)) {
|
|
9
7
|
icon = React.createElement(AdaptableIconComponent, { icon: adaptablePredicateDef.icon });
|
|
@@ -16,11 +14,9 @@ dataType) => {
|
|
|
16
14
|
});
|
|
17
15
|
if (adaptablePredicateDef.id === 'In' || adaptablePredicateDef.id === 'NotIn') {
|
|
18
16
|
if (['text', 'number', 'date'].includes(dataType)) {
|
|
19
|
-
// add array type
|
|
20
17
|
inputs.push(`${dataType}[]`);
|
|
21
18
|
}
|
|
22
19
|
if (['text[]', 'number[]'].includes(dataType)) {
|
|
23
|
-
// add array type
|
|
24
20
|
inputs.push(dataType);
|
|
25
21
|
}
|
|
26
22
|
}
|
|
@@ -38,7 +34,7 @@ dataType) => {
|
|
|
38
34
|
};
|
|
39
35
|
export const mapAdaptablePredicateToQlPredicate = (adaptablePredicate) => {
|
|
40
36
|
return {
|
|
41
|
-
operator: adaptablePredicate.PredicateId,
|
|
37
|
+
operator: adaptablePredicate.PredicateId,
|
|
42
38
|
args: adaptablePredicate.Inputs,
|
|
43
39
|
};
|
|
44
40
|
};
|
|
@@ -52,7 +48,6 @@ export const qlPredicateToString = (qlPredicate, predicateDefs) => {
|
|
|
52
48
|
if (typeof qlPredicate === 'object' &&
|
|
53
49
|
'operator' in qlPredicate &&
|
|
54
50
|
(qlPredicate.operator === 'AND' || qlPredicate.operator === 'OR')) {
|
|
55
|
-
// save to join args because there is no extra nesting
|
|
56
51
|
return qlPredicate.args
|
|
57
52
|
.filter((str) => str)
|
|
58
53
|
.map((arg) => qlPredicateToString(arg, predicateDefs))
|
|
@@ -89,7 +84,6 @@ export const mapColumnFilterToQlPredicate = (columnFilter, abColumn, qlPredicate
|
|
|
89
84
|
args: (columnFilter?.Predicates ?? []).map?.(mapAdaptablePredicateToQlPredicate),
|
|
90
85
|
};
|
|
91
86
|
if (qlPredicate.args.length === 0) {
|
|
92
|
-
// used when none is defined
|
|
93
87
|
let defaultQlPredicate = null;
|
|
94
88
|
switch (abColumn.dataType) {
|
|
95
89
|
case 'number':
|
|
@@ -178,7 +172,6 @@ export const mapColumnFilterToQlPredicate = (columnFilter, abColumn, qlPredicate
|
|
|
178
172
|
break;
|
|
179
173
|
}
|
|
180
174
|
if (defaultQlPredicate === null) {
|
|
181
|
-
// take the firstavailable one
|
|
182
175
|
if (qlPredicateDefs.length > 0) {
|
|
183
176
|
defaultQlPredicate = { operator: qlPredicateDefs[0].operator, args: [] };
|
|
184
177
|
}
|
|
@@ -35,7 +35,6 @@ export const EntityRulePredicateEditor = (props) => {
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
|
-
// no previous predicate, e.g. it was cleared
|
|
39
38
|
newPredicates = [newPredicateDef];
|
|
40
39
|
}
|
|
41
40
|
props.onChange({
|
|
@@ -61,7 +60,6 @@ export const EntityRulePredicateEditor = (props) => {
|
|
|
61
60
|
label: col.label,
|
|
62
61
|
value: col.value,
|
|
63
62
|
}));
|
|
64
|
-
// use global scope or custom scope
|
|
65
63
|
let predicateColumnId = null;
|
|
66
64
|
if (predicate?.ColumnId && predicate.ColumnId !== '') {
|
|
67
65
|
predicateColumnId = predicate.ColumnId;
|
|
@@ -14,7 +14,6 @@ export const EntityRulePredicatesEditor = (props) => {
|
|
|
14
14
|
const { api } = useAdaptable();
|
|
15
15
|
const showDocumentationLinks = api.internalApi.isDocumentationLinksDisplayed();
|
|
16
16
|
const columnPredicateEnabled = props.data.Rule.Predicates.some((predicate) => predicate.ColumnId !== undefined);
|
|
17
|
-
// filter out predicates that are already in use
|
|
18
17
|
const defaultPredicateDefs = props.predicateDefs.filter((predicateDef) => {
|
|
19
18
|
return props.data.Rule?.Predicates?.every((rulePrediate) => rulePrediate.PredicateId !== predicateDef.id);
|
|
20
19
|
});
|
|
@@ -14,7 +14,6 @@ const QueryTab = (props) => {
|
|
|
14
14
|
const text = (_jsxs(Flex, { flexDirection: "column", children: [label, " ", _jsx(Box, { className: "twa:text-2", children: "query" })] }));
|
|
15
15
|
return (_jsx(Tabs.Tab, { style: { flex: 1 }, ...tabProps, children: !disabled && props.showRadio ? (_jsx(Radio, { tabIndex: -1, className: "twa:m-0 twa:align-baseline", checked: type === props.value, children: text })) : (text) }));
|
|
16
16
|
};
|
|
17
|
-
// needed here to be considered a child Tab component, inside the Tabs component
|
|
18
17
|
SupportedTabMenuComps.add(QueryTab);
|
|
19
18
|
export const EntityRulesSummary = (props) => {
|
|
20
19
|
const { data } = props;
|
|
@@ -25,16 +24,7 @@ export const EntityRulesSummary = (props) => {
|
|
|
25
24
|
!data?.Rule?.AggregatedBooleanExpression) {
|
|
26
25
|
return _jsx(Box, { className: "twa:text-2", children: "No Rule defined" });
|
|
27
26
|
}
|
|
28
|
-
return (_jsx(
|
|
29
|
-
Box,
|
|
30
|
-
{ className: "twa:text-2", children: data.Rule.Predicates ? (_jsx(_Fragment, { children: data.Rule?.Predicates?.map?.((predicate, index) => (
|
|
31
|
-
// predicate id is not unique
|
|
32
|
-
(_jsx(
|
|
33
|
-
React.Fragment,
|
|
34
|
-
{ children: props.renderPredicate(predicateApi.predicateToString(predicate)) },
|
|
35
|
-
index
|
|
36
|
-
)))) })) : (_jsx(_Fragment, { children: props.renderQueryExpression(internalApi.getAdaptableQueryExpressionText(data.Rule)) })) }
|
|
37
|
-
));
|
|
27
|
+
return (_jsx(Box, { className: "twa:text-2", children: data.Rule.Predicates ? (_jsx(_Fragment, { children: data.Rule?.Predicates?.map?.((predicate, index) => (_jsx(React.Fragment, { children: props.renderPredicate(predicateApi.predicateToString(predicate)) }, index))) })) : (_jsx(_Fragment, { children: props.renderQueryExpression(internalApi.getAdaptableQueryExpressionText(data.Rule)) })) }));
|
|
38
28
|
};
|
|
39
29
|
const RuleTabTitle = (props) => {
|
|
40
30
|
return props.showRadio ? (_jsx(Radio, { className: "twa:m-0", tabIndex: -1, checked: props.checked, children: props.children })) : (_jsx(_Fragment, { children: "props.children" }));
|
|
@@ -29,9 +29,7 @@ export const ExternalRenderer = ({ render, frameworkComponent, componentName = '
|
|
|
29
29
|
}
|
|
30
30
|
else if (frameworkComponent) {
|
|
31
31
|
onDestroy?.();
|
|
32
|
-
adaptableApi.internalApi.destroyFrameworkComponent(element, frameworkComponent,
|
|
33
|
-
// @ts-ignore
|
|
34
|
-
componentName);
|
|
32
|
+
adaptableApi.internalApi.destroyFrameworkComponent(element, frameworkComponent, componentName);
|
|
35
33
|
}
|
|
36
34
|
};
|
|
37
35
|
}, []);
|
|
@@ -12,7 +12,6 @@ import { isEmbeddedColumnFilterLocation } from '../ColumnFilter/columnFilterLoca
|
|
|
12
12
|
import { useColumnFilterLocation } from '../ColumnFilter/AdaptableColumnFilter';
|
|
13
13
|
import { GridFilterTreeDropdown } from '../../../components/Tree/TreeDropdown';
|
|
14
14
|
const baseClassName = 'ab-ListBoxFilterForm';
|
|
15
|
-
// used for displaying the date values in the input
|
|
16
15
|
function toDateDisplayValue(values) {
|
|
17
16
|
values = values.map((v) => {
|
|
18
17
|
if (!Array.isArray(v)) {
|
|
@@ -23,20 +22,6 @@ function toDateDisplayValue(values) {
|
|
|
23
22
|
return toDisplayValueDefault(values);
|
|
24
23
|
}
|
|
25
24
|
const dateOnChangeParser = (value) => {
|
|
26
|
-
/**
|
|
27
|
-
* the value looks like this:
|
|
28
|
-
* [
|
|
29
|
-
* ["2021","2021-01","2021-01-01"],
|
|
30
|
-
* ["2024","2024-02","2024-02-15T12:34:00"],
|
|
31
|
-
* ]
|
|
32
|
-
*/
|
|
33
|
-
// so first need to transfor the above to this:
|
|
34
|
-
/**
|
|
35
|
-
* [
|
|
36
|
-
* [2023, 12, 1, 1640668800000],
|
|
37
|
-
* [2023, 12, 3, 1738377600000]
|
|
38
|
-
* ]
|
|
39
|
-
*/
|
|
40
25
|
return value.map((v) => {
|
|
41
26
|
return v[v.length - 1];
|
|
42
27
|
});
|
|
@@ -47,7 +32,6 @@ export const ColumnValuesSelect = (props) => {
|
|
|
47
32
|
const column = props.column;
|
|
48
33
|
let selectedColumnValues = props.value || EMPTY_ARRAY;
|
|
49
34
|
const rawOptionsFromProps = Array.isArray(props.options) ? props.options : EMPTY_ARRAY;
|
|
50
|
-
// Drop empty entries for all column types; Memoise them because Date cols can leak them when using `customInFilterValues` + `orderedValues`
|
|
51
35
|
const optionsFromProps = useMemo(() => {
|
|
52
36
|
if (rawOptionsFromProps === EMPTY_ARRAY) {
|
|
53
37
|
return rawOptionsFromProps;
|
|
@@ -65,20 +49,6 @@ export const ColumnValuesSelect = (props) => {
|
|
|
65
49
|
return rawOptionsFromProps.filter((option) => !StringExtensions.IsNullOrEmpty(option?.value));
|
|
66
50
|
}, [rawOptionsFromProps]);
|
|
67
51
|
const value = [];
|
|
68
|
-
// For `customInFilterValues` + `orderedValues` on a date column, the
|
|
69
|
-
// options arrive with raw `Date` objects as `value`. `GridFilterTreeDropdown`
|
|
70
|
-
// round-trips path keys via `JSON.stringify`/`JSON.parse`, which converts
|
|
71
|
-
// `Date` -> ISO string. The stored selection paths therefore become
|
|
72
|
-
// strings while the option/treePath values are still `Date` references —
|
|
73
|
-
// and `TreeSelectionState`'s internal DeepMap uses strict reference
|
|
74
|
-
// equality, so a clicked item never matches its tree path on the next
|
|
75
|
-
// render (no checkbox, click looks like a no-op).
|
|
76
|
-
//
|
|
77
|
-
// Normalise `Date` option values to ISO strings up front so every layer
|
|
78
|
-
// (treePaths, items, selectionMap, value, onChange output) speaks the
|
|
79
|
-
// same primitive. Tree-shaped date options (the default-values flow) use
|
|
80
|
-
// string values like "2024" / "2024-01" / "2024-01-01" already and pass
|
|
81
|
-
// through unchanged.
|
|
82
52
|
const dateOptions = useMemo(() => {
|
|
83
53
|
if (column.dataType !== 'date') {
|
|
84
54
|
return optionsFromProps;
|
|
@@ -97,14 +67,6 @@ export const ColumnValuesSelect = (props) => {
|
|
|
97
67
|
return optionsFromProps.map(convert);
|
|
98
68
|
}, [column.dataType, optionsFromProps]);
|
|
99
69
|
if (column.dataType === 'date') {
|
|
100
|
-
// we might have a use-case where users might want to get rid of a tree level
|
|
101
|
-
// because it may contain only one child. currently,
|
|
102
|
-
// the value is an array of strings that have this form (ISOish)
|
|
103
|
-
// ["2021-01-01", "2021-10-02", "2021-01-03T12:00:00"]
|
|
104
|
-
// but we want the full path to each value
|
|
105
|
-
// but we can't compute that by simply splitting the strings by '-' or 'T',
|
|
106
|
-
// as if we do that, then we won't support removing a tree level
|
|
107
|
-
// so we have to compute the paths based on the options
|
|
108
70
|
const valueToPath = useMemo(() => {
|
|
109
71
|
const valueToPath = new Map();
|
|
110
72
|
const withOption = (option, parentPath = []) => {
|
|
@@ -119,9 +81,6 @@ export const ColumnValuesSelect = (props) => {
|
|
|
119
81
|
}, [dateOptions]);
|
|
120
82
|
selectedColumnValues = selectedColumnValues
|
|
121
83
|
.map((v) => {
|
|
122
|
-
// Saved selections may be raw `Date` objects from older
|
|
123
|
-
// `orderedValues` snapshots; coerce to the same ISO string we use
|
|
124
|
-
// for option keys so the lookup still hits.
|
|
125
84
|
const key = v instanceof Date ? v.toISOString() : v;
|
|
126
85
|
return valueToPath.get(key);
|
|
127
86
|
})
|
|
@@ -131,7 +90,6 @@ export const ColumnValuesSelect = (props) => {
|
|
|
131
90
|
? dateOptions
|
|
132
91
|
: optionsFromProps.filter((distinctValue) => {
|
|
133
92
|
let isActive = selectedColumnValues.indexOf(distinctValue.value) >= 0;
|
|
134
|
-
// special case for date objects, need to check against string values
|
|
135
93
|
if (!isActive && distinctValue.value && distinctValue.value instanceof Date) {
|
|
136
94
|
isActive = selectedColumnValues.some((dateStr) => isEqual(parseDateValue(dateStr), parseDateValue(distinctValue.value)));
|
|
137
95
|
}
|
|
@@ -159,23 +117,14 @@ export const ColumnValuesSelect = (props) => {
|
|
|
159
117
|
: undefined;
|
|
160
118
|
const component = column.dataType === 'date' || column.columnId === AG_GRID_GROUPED_COLUMN ? (_jsx(GridFilterTreeDropdown, { toDisplayValue: treeDropdownToDisplayValue, resizable: true, onValueChange: column.dataType === 'date'
|
|
161
119
|
? (value) => props.onChange(dateOnChangeParser(value))
|
|
162
|
-
: props.onChange, items: options,
|
|
163
|
-
// for dates, the treeDateOptions have ids that are numbers
|
|
164
|
-
// so we have to add the `toDateValue` function to convert the values to the correct format
|
|
165
|
-
value: selectedColumnValues, "data-name": "Select Values", primaryKey: 'value', isLoading: props.isLoading, onOpenChange: onOpenChange, showClear: isEmbeddedColumnFilterLocation(location) })) : (_jsx(GridFilterCombobox, { disabled: props.disabled, ...selectProps, onOpenChange: onOpenChange, items: options, value: value, isLoading: props.isLoading, onValueChange: props.onChange, showClear: isEmbeddedColumnFilterLocation(location) }, "select"));
|
|
120
|
+
: props.onChange, items: options, value: selectedColumnValues, "data-name": "Select Values", primaryKey: 'value', isLoading: props.isLoading, onOpenChange: onOpenChange, showClear: isEmbeddedColumnFilterLocation(location) })) : (_jsx(GridFilterCombobox, { disabled: props.disabled, ...selectProps, onOpenChange: onOpenChange, items: options, value: value, isLoading: props.isLoading, onValueChange: props.onChange, showClear: isEmbeddedColumnFilterLocation(location) }, "select"));
|
|
166
121
|
return (_jsx("div", { className: join(baseClassName, 'twa:relative', props.isLoading && `${baseClassName}--loading`, !value.length && `${baseClassName}--empty`), onKeyDownCapture: (e) => {
|
|
167
122
|
if (e.key === 'Tab') {
|
|
168
|
-
// Prevent AG Grid from hijacking Tab; keep browser default focus navigation.
|
|
169
123
|
e.stopPropagation();
|
|
170
124
|
return;
|
|
171
125
|
}
|
|
172
126
|
const event = e.nativeEvent || e;
|
|
173
127
|
event.stopPropagation = () => {
|
|
174
|
-
// see #ensure-keyboard-navigation-works-in-column-values-filter
|
|
175
|
-
// we want to prevent ag grid from stopping the propagation of the event
|
|
176
|
-
// so that the event can be handled by the select component and thus makes keyboard navigation work
|
|
177
|
-
//
|
|
178
|
-
// the solution is to reassign the stopPropagation method to a function that does nothing
|
|
179
128
|
};
|
|
180
129
|
}, children: component }));
|
|
181
130
|
};
|
|
@@ -28,8 +28,6 @@ export const ModuleValueSelector = (props) => {
|
|
|
28
28
|
return ArrayExtensions.sortArrayWithOrder(options, value, { sortUnorderedItems: true });
|
|
29
29
|
}, [allowReorder, options, value]);
|
|
30
30
|
const moduleFilter = useCallback((module, searchText) => {
|
|
31
|
-
// the module name is camelCased so I want to split it
|
|
32
|
-
// so we can also use spaces in the search text
|
|
33
31
|
const parts = module.split(/(?=[A-Z])/);
|
|
34
32
|
const withSpaces = parts.join(' ');
|
|
35
33
|
return (module.toLowerCase().includes(searchText.toLowerCase()) ||
|
|
@@ -5,9 +5,6 @@ import { allIcons } from '../../../components/icons';
|
|
|
5
5
|
import { ButtonInfo } from '../Buttons/ButtonInfo';
|
|
6
6
|
import { twMerge } from '../../../twMerge';
|
|
7
7
|
import { Box, Flex } from '../../../components/Flex';
|
|
8
|
-
//We cannot destructure this.props using the react way in typescript which is a real pain as you
|
|
9
|
-
//need to transfer props individually as a consequence
|
|
10
|
-
//let { buttonContent, ...other } = this.props
|
|
11
8
|
class PanelWithImageCmp extends React.Component {
|
|
12
9
|
render() {
|
|
13
10
|
const IconCmp = allIcons[(this.props.icon || this.props.glyphicon)];
|
|
@@ -16,8 +13,7 @@ class PanelWithImageCmp extends React.Component {
|
|
|
16
13
|
headerStyle.color = this.props.headerColor;
|
|
17
14
|
headerStyle.fill = this.props.headerColor;
|
|
18
15
|
}
|
|
19
|
-
let headerRow = (_jsx(Flex, { className: "twa:flex-1", children: _jsxs(Flex, { alignItems: "center", children: [_jsxs(Flex, { className: "twa:min-h-[15px]", alignItems: "center", style: headerStyle, children: [IconCmp ? _jsx(IconCmp, {}) : null, _jsx(Box, { className: "twa:mr-2" }), this.props.header ?? '', _jsx(Box, { className: "twa:mr-2", "data-name": "space-after" }), this.props.infoLink != null && !this.props.infoLinkDisabled && (_jsx(ButtonInfo, { onClick: () => window.open(this.props.infoLink, '_blank'
|
|
20
|
-
) }))] }), _jsx(Flex, { className: "twa:flex-1" }), this.props.button && React.cloneElement(this.props.button)] }) }));
|
|
16
|
+
let headerRow = (_jsx(Flex, { className: "twa:flex-1", children: _jsxs(Flex, { alignItems: "center", children: [_jsxs(Flex, { className: "twa:min-h-[15px]", alignItems: "center", style: headerStyle, children: [IconCmp ? _jsx(IconCmp, {}) : null, _jsx(Box, { className: "twa:mr-2" }), this.props.header ?? '', _jsx(Box, { className: "twa:mr-2", "data-name": "space-after" }), this.props.infoLink != null && !this.props.infoLinkDisabled && (_jsx(ButtonInfo, { onClick: () => window.open(this.props.infoLink, '_blank') }))] }), _jsx(Flex, { className: "twa:flex-1" }), this.props.button && React.cloneElement(this.props.button)] }) }));
|
|
21
17
|
return (_jsx(NewPanel, { header: headerRow, variant: this.props.variant, style: this.props.style, bodyScroll: this.props.bodyScroll !== undefined ? this.props.bodyScroll : true, className: twMerge('twa:rounded-none twa:border-none', this.props.className), bodyProps: {
|
|
22
18
|
...this.props.bodyProps,
|
|
23
19
|
className: twMerge('twa:p-0', this.props.bodyProps?.className),
|
|
@@ -2,9 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import Panel from '../../../components/Panel';
|
|
4
4
|
import { Flex, Box } from '../../../components/Flex';
|
|
5
|
-
// We cannot destructure this.props using the react way in typescript which is a real pain as you
|
|
6
|
-
// need to transfer props individually as a consequence
|
|
7
|
-
// let { buttonContent, ...other } = this.props
|
|
8
5
|
export class PanelWithRow extends React.Component {
|
|
9
6
|
render() {
|
|
10
7
|
const headerItems = this.props.colItems.map((colItem, index) => (_jsx(Box, { className: "twa:font-bold twa:text-3 twa:px-1", style: {
|
|
@@ -21,11 +21,6 @@ export const AdaptablePopup = (props) => {
|
|
|
21
21
|
const isWindowModal = settingsPanelOptions.popupType === 'window';
|
|
22
22
|
const modalContainer = resolveContainerElement(adaptable.adaptableOptions?.containerOptions?.modalContainer, props.api.internalApi.buildBaseContext());
|
|
23
23
|
let friendlyName = null;
|
|
24
|
-
/**
|
|
25
|
-
* This means that it is not rendered in the context of Settings Panel
|
|
26
|
-
* - no topbar
|
|
27
|
-
* - no navigation
|
|
28
|
-
*/
|
|
29
24
|
let isStandalone = false;
|
|
30
25
|
let moduleViewContent = null;
|
|
31
26
|
let activeItem = null;
|
|
@@ -34,7 +29,6 @@ export const AdaptablePopup = (props) => {
|
|
|
34
29
|
const firstMenuModule = firstMenuItem?.category;
|
|
35
30
|
let componentModule = props.componentModule;
|
|
36
31
|
let componentName = props.componentName;
|
|
37
|
-
// ts forces to check for General, there is no menu item General
|
|
38
32
|
const useFirstItem = !props.componentName;
|
|
39
33
|
if (useFirstItem &&
|
|
40
34
|
firstMenuModule !== 'General' &&
|
|
@@ -15,7 +15,6 @@ export const AdaptablePopupBody = (props) => {
|
|
|
15
15
|
props.onHide();
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
|
-
// show share button if TeamSharing is active & user has edit rights
|
|
19
18
|
teamSharingActivated: props.api.teamSharingApi.isTeamSharingAvailable() &&
|
|
20
19
|
props.api.teamSharingApi.hasTeamSharingFullRights(),
|
|
21
20
|
modalContainer: modalContainer,
|
|
@@ -24,7 +23,5 @@ export const AdaptablePopupBody = (props) => {
|
|
|
24
23
|
moduleInfo,
|
|
25
24
|
};
|
|
26
25
|
const BodyComponent = AdaptableViewFactory?.[props?.componentName ?? moduleInfo.Popup] || AdaptablePopupModuleView;
|
|
27
|
-
// key is to make sure state is reset between views
|
|
28
|
-
// most of the views use the `AdaptablePopupModuleView` component
|
|
29
26
|
return _jsx(BodyComponent, { module: props.module, ...moduleProps }, props?.componentName);
|
|
30
27
|
};
|
|
@@ -18,10 +18,6 @@ import Panel from '../../../../components/Panel';
|
|
|
18
18
|
import { Tabs } from '../../../../components/Tabs';
|
|
19
19
|
import { NewDropdownButton } from '../../../../components/DropdownButton';
|
|
20
20
|
export const AdaptablePopupModuleView = (props) => {
|
|
21
|
-
/**
|
|
22
|
-
* This triggers a render for each state change.
|
|
23
|
-
* NOT sure this is still needed... It is here for historical reasons.
|
|
24
|
-
*/
|
|
25
21
|
const adaptable = useAdaptable();
|
|
26
22
|
const rerender = useRerender();
|
|
27
23
|
useEffect(() => {
|
|
@@ -66,8 +62,6 @@ export const AdaptablePopupModuleView = (props) => {
|
|
|
66
62
|
emptyContent = emptyView;
|
|
67
63
|
}
|
|
68
64
|
const toolTipText = moduleViewProperties.newTooltipText ?? `Create ${moduleInfo.FriendlyName}`;
|
|
69
|
-
// Some modules do not have new button
|
|
70
|
-
// e.g. filter
|
|
71
65
|
let newButton = null;
|
|
72
66
|
if (moduleViewProperties?.abObjectTypes?.length) {
|
|
73
67
|
const items = moduleViewProperties?.abObjectTypes.map((abObjectType) => {
|
|
@@ -4,6 +4,5 @@ import { Box, Flex } from '../../../../components/Flex';
|
|
|
4
4
|
import { cn } from '../../../../lib/utils';
|
|
5
5
|
export const PopupPanel = (props) => {
|
|
6
6
|
const baseClassName = 'ab-Adaptable-Popup__Panel';
|
|
7
|
-
return (_jsxs(Box, { className: cn('twa:flex-1 twa:flex twa:flex-col twa:gap-3 twa:p-1', props.className, baseClassName, props.scrollable === false ? 'twa:overflow-hidden' : 'twa:overflow-auto'), children: [_jsxs("div", { className: `${baseClassName}__Header twa:flex`, children: [_jsxs(Flex, { alignItems: "center", children: [_jsx(Box, { className: "twa:mr-0", "data-name": "space-before" }), _jsx("div", { className: `${baseClassName}__Header__Title`, children: props.headerText }), _jsx(Box, { className: "twa:mr-2", "data-name": "space-after" }), props.infoLink != null && !props.infoLinkDisabled && (_jsx(ButtonInfo, { tone: "none", variant: "text", iconSize: 24, onClick: () => window.open(props.infoLink, '_blank'
|
|
8
|
-
) }))] }), _jsx(Box, { className: "twa:flex-1" }), props.button] }), _jsx(Box, { className: cn('twa:w-full twa:flex twa:flex-col twa:flex-1 twa:min-h-0', `${baseClassName}__Body`, props.bodyClassName), children: props.children })] }));
|
|
7
|
+
return (_jsxs(Box, { className: cn('twa:flex-1 twa:flex twa:flex-col twa:gap-3 twa:p-1', props.className, baseClassName, props.scrollable === false ? 'twa:overflow-hidden' : 'twa:overflow-auto'), children: [_jsxs("div", { className: `${baseClassName}__Header twa:flex`, children: [_jsxs(Flex, { alignItems: "center", children: [_jsx(Box, { className: "twa:mr-0", "data-name": "space-before" }), _jsx("div", { className: `${baseClassName}__Header__Title`, children: props.headerText }), _jsx(Box, { className: "twa:mr-2", "data-name": "space-after" }), props.infoLink != null && !props.infoLinkDisabled && (_jsx(ButtonInfo, { tone: "none", variant: "text", iconSize: 24, onClick: () => window.open(props.infoLink, '_blank') }))] }), _jsx(Box, { className: "twa:flex-1" }), props.button] }), _jsx(Box, { className: cn('twa:w-full twa:flex twa:flex-col twa:flex-1 twa:min-h-0', `${baseClassName}__Body`, props.bodyClassName), children: props.children })] }));
|
|
9
8
|
};
|
|
@@ -19,7 +19,6 @@ export const useMenuItems = () => {
|
|
|
19
19
|
const resolveNavigationItem = (moduleName) => {
|
|
20
20
|
const customSettingsPanel = settingsPanelOptions?.customSettingsPanels?.find?.((panel) => panel.name === moduleName);
|
|
21
21
|
if (customSettingsPanel) {
|
|
22
|
-
// @ts-ignore custom settings panel menu items are not part of the standard menu name union
|
|
23
22
|
return {
|
|
24
23
|
category: 'CustomSettingsPanel',
|
|
25
24
|
label: customSettingsPanel.name,
|
|
@@ -19,7 +19,6 @@ export const AdaptablePopupAlert = (props) => {
|
|
|
19
19
|
header = `${header}: ${props.adaptableAlert.header}`;
|
|
20
20
|
}
|
|
21
21
|
let glyph = UIHelper.getGlyphByMessageType(messageType);
|
|
22
|
-
// we still need the defauld
|
|
23
22
|
const defaultForm = React.useMemo(() => {
|
|
24
23
|
return api.alertApi.internalApi.getDefaultAlertNotificationForm();
|
|
25
24
|
}, []);
|
|
@@ -51,8 +50,6 @@ export const AdaptablePopupAlert = (props) => {
|
|
|
51
50
|
})
|
|
52
51
|
: msg] }), _jsx(Box, { className: "twa:m-2", children: adaptableForm ? (_jsx(AdaptableFormComponent, { focusFirstButton: props.focusFirstButton, data: formData, formDef: adaptableForm, displayTitle: true, onChange: setFormData, api: api, context: context, onButtonClick: (button) => {
|
|
53
52
|
props.onClose();
|
|
54
|
-
// we want to give the current popup time to close
|
|
55
|
-
// and we reopen with a delay in case this button action causes another popup
|
|
56
53
|
setTimeout(() => {
|
|
57
54
|
button.onClick?.(button, context);
|
|
58
55
|
}, 20);
|
|
@@ -3,8 +3,6 @@ import ObjectFactory from '../../../Utilities/ObjectFactory';
|
|
|
3
3
|
import { AdaptablePopupAlert } from './AdaptablePopupAlert';
|
|
4
4
|
import { toast } from '../../../components/Toastify';
|
|
5
5
|
export const showToast = (props) => {
|
|
6
|
-
// we're doing this hack and not simply using props.api in order not to have a memory
|
|
7
|
-
// leak where the api is still kept around in memory by the toaster
|
|
8
6
|
let api = props.api;
|
|
9
7
|
const off = api.eventApi.on('AdaptableDestroy', () => {
|
|
10
8
|
toast.dismiss();
|
|
@@ -14,14 +14,8 @@ const NoopComponent = () => {
|
|
|
14
14
|
return _jsx(_Fragment, {});
|
|
15
15
|
};
|
|
16
16
|
export const CUSTOM_WINDOW_FACTORY_ID = 'CUSTOM_WINDOW_FACTORY_ID';
|
|
17
|
-
/**
|
|
18
|
-
* Portals children into a target container element.
|
|
19
|
-
* Monitors the container with a MutationObserver — if the container is removed
|
|
20
|
-
* from the DOM, `onContainerRemoved` is called so callers can clean up React/Redux state.
|
|
21
|
-
*/
|
|
22
17
|
const ContainerPortal = ({ container, onContainerRemoved, children }) => {
|
|
23
18
|
React.useEffect(() => {
|
|
24
|
-
// If the container is already detached, clean up immediately
|
|
25
19
|
if (!document.contains(container)) {
|
|
26
20
|
onContainerRemoved();
|
|
27
21
|
return;
|
|
@@ -32,7 +26,6 @@ const ContainerPortal = ({ container, onContainerRemoved, children }) => {
|
|
|
32
26
|
observer.disconnect();
|
|
33
27
|
}
|
|
34
28
|
});
|
|
35
|
-
// Observe the entire document body for subtree removals
|
|
36
29
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
37
30
|
return () => {
|
|
38
31
|
observer.disconnect();
|
|
@@ -66,7 +59,6 @@ export const WindowPopups = () => {
|
|
|
66
59
|
Component = Component ?? NoopComponent;
|
|
67
60
|
componentNode = (_jsx(Component, { api: adaptable.api, onDismiss: handleDismiss, popupProps: restPopupProps }));
|
|
68
61
|
}
|
|
69
|
-
// Transposed View: portal into custom container if configured
|
|
70
62
|
if (windowItem.FactoryId === WINDOW_SHOW_TRANSPOSED_VIEW) {
|
|
71
63
|
const transposedContainer = resolveContainerElement(adaptable.adaptableOptions?.containerOptions?.transposedViewContainer, adaptable.api.internalApi.buildBaseContext());
|
|
72
64
|
if (transposedContainer) {
|
|
@@ -21,16 +21,6 @@ const DEFAULT_ZERO_CENTRED_COLORS = {
|
|
|
21
21
|
PositiveColor: 'rgba(40, 167, 69, 0.55)',
|
|
22
22
|
};
|
|
23
23
|
const hasConfiguredRanges = (ranges) => (ranges?.length ?? 0) > 0;
|
|
24
|
-
/**
|
|
25
|
-
* Decide which range tab should be active given the current props.
|
|
26
|
-
*
|
|
27
|
-
* Precedence:
|
|
28
|
-
* 1. `columnComparison` set → Column Comparison tab
|
|
29
|
-
* 2. Zero Centred set + supported → Zero Centred tab
|
|
30
|
-
* 3. `allowEmptyRanges` + no bands → No Ranges tab
|
|
31
|
-
* 4. `rangeValueType === 'Percentage'` → Percentage Range tab
|
|
32
|
-
* 5. otherwise → Number Range tab (default for new styles)
|
|
33
|
-
*/
|
|
34
24
|
function deriveInitialRangesType(props) {
|
|
35
25
|
if (props.columnComparison) {
|
|
36
26
|
return 'ColumnComparison';
|
|
@@ -43,14 +33,6 @@ function deriveInitialRangesType(props) {
|
|
|
43
33
|
}
|
|
44
34
|
return props.rangeValueType === 'Percentage' ? 'PercentageRange' : 'NumberRange';
|
|
45
35
|
}
|
|
46
|
-
/**
|
|
47
|
-
* A single Column Comparison bound (Min or Max). The user picks whether the
|
|
48
|
-
* bound is a fixed `Value` (a number applied to every row) or a `Column`
|
|
49
|
-
* (read from another column and evaluated per row). The underlying
|
|
50
|
-
* `ColumnComparison.MinValue`/`MaxValue` stays a `number | string` — number =>
|
|
51
|
-
* fixed value, non-numeric string => columnId — so the type is derived from the
|
|
52
|
-
* stored value via `isNaN`, mirroring how the runtime resolver discriminates it.
|
|
53
|
-
*/
|
|
54
36
|
const ColumnComparisonBoundInput = ({ value, disabled, onChange }) => {
|
|
55
37
|
const [type, setType] = React.useState(value != null && value !== '' && isNaN(Number(value)) ? 'column' : 'value');
|
|
56
38
|
const typeOptions = [
|
|
@@ -64,22 +46,12 @@ const ColumnComparisonBoundInput = ({ value, disabled, onChange }) => {
|
|
|
64
46
|
},
|
|
65
47
|
];
|
|
66
48
|
const editor = type === 'value' ? (_jsx(NumberInput, { className: "twa:w-full", disabled: disabled, type: "number", value: value != null && !isNaN(Number(value)) ? Number(value) : '', onChange: (v) => onChange(v) })) : (_jsx(ColumnSelector, { disabled: disabled, type: "number", value: value != null && isNaN(Number(value)) ? String(value) : undefined, onChange: (columnId) => onChange(columnId || undefined) }));
|
|
67
|
-
// The select trigger, the `NumberInput` (`.ab-Input`) and the `ColumnSelector`
|
|
68
|
-
// (a Combobox that does NOT forward `className`, rendering its border on a
|
|
69
|
-
// `[data-slot="input-group"]` wrapper) all hard-code `rounded-input`, so the
|
|
70
|
-
// InputGroup CSS-variable joining has no effect. We flatten the touching
|
|
71
|
-
// corners directly (important, to beat `rounded-input`) and overlap the shared
|
|
72
|
-
// border via `-ml-px` so the two controls read as a single block. The editor
|
|
73
|
-
// side targets both inner border elements through descendant arbitrary
|
|
74
|
-
// variants and forces them to fill the flex item.
|
|
75
49
|
const editorWrapperClassName = [
|
|
76
50
|
'twa:flex-1 twa:basis-0 twa:min-w-0 twa:-ml-px',
|
|
77
51
|
'twa:[&_.ab-Input]:w-full twa:[&_.ab-Input]:rounded-l-none!',
|
|
78
52
|
'twa:[&_[data-slot=input-group]]:w-full! twa:[&_[data-slot=input-group]]:rounded-l-none!',
|
|
79
53
|
].join(' ');
|
|
80
54
|
return (_jsxs(InputGroup, { Component: Flex, className: "twa:items-stretch twa:max-w-[20rem]", children: [_jsx(SingleSelect, { className: "twa:w-[120px] twa:max-w-none twa:shrink-0 twa:box-border twa:rounded-r-none!", disabled: disabled, value: type, items: typeOptions, onValueChange: (next) => {
|
|
81
|
-
// Switching type clears the stale bound so a fixed number can never
|
|
82
|
-
// be misread as a columnId (or vice versa).
|
|
83
55
|
onChange(undefined);
|
|
84
56
|
setType(next);
|
|
85
57
|
} }), _jsx(Box, { className: editorWrapperClassName, children: editor })] }));
|
|
@@ -93,14 +65,8 @@ export class RangesComponent extends React.Component {
|
|
|
93
65
|
let comparisonColor = this.props.columnComparison != null && this.props.columnComparison.Color != null
|
|
94
66
|
? this.props.columnComparison.Color
|
|
95
67
|
: undefined;
|
|
96
|
-
// Number / Percentage is now expressed at the tab level (Number Range tab
|
|
97
|
-
// vs Percentage Range tab) instead of an inline radio. The inner content
|
|
98
|
-
// is shared between the two range tabs and parameterised on this flag.
|
|
99
68
|
const isRangeValueTypeNumber = this.state.rangesType === 'NumberRange';
|
|
100
69
|
const renderNoneContent = () => (_jsx(Box, { className: "twa:text-2 twa:opacity-70 twa:py-2 twa:max-w-[520px]", children: "No coloured bands configured" }));
|
|
101
|
-
// Columns: Min, Max, Colour, [Reverse Gradient], Delete. Using one shared
|
|
102
|
-
// grid (rows are `display: contents`) keeps every band's cells aligned and
|
|
103
|
-
// spacing uniform via grid gaps, even with a single row.
|
|
104
70
|
const rangeGridTemplateColumns = [
|
|
105
71
|
'max-content',
|
|
106
72
|
'max-content',
|
|
@@ -152,20 +118,14 @@ export class RangesComponent extends React.Component {
|
|
|
152
118
|
const isComparison = !!this.props.columnComparison;
|
|
153
119
|
const wasZc = !!prevProps.zeroCentred;
|
|
154
120
|
const isZc = !!this.props.zeroCentred;
|
|
155
|
-
// External mutations to columnComparison drive the tab.
|
|
156
121
|
if (wasComparison !== isComparison) {
|
|
157
122
|
this.setState({ rangesType: deriveInitialRangesType(this.props) });
|
|
158
123
|
return;
|
|
159
124
|
}
|
|
160
|
-
// External mutations to zeroCentred drive the tab (when not in CC mode).
|
|
161
125
|
if (!isComparison && wasZc !== isZc) {
|
|
162
126
|
this.setState({ rangesType: deriveInitialRangesType(this.props) });
|
|
163
127
|
return;
|
|
164
128
|
}
|
|
165
|
-
// External flips of RangeValueType while the user is sitting on a range
|
|
166
|
-
// tab — keep the active tab in sync. We deliberately do NOT react when the
|
|
167
|
-
// user is on Zero Centred / Column Comparison tabs (parent code can still
|
|
168
|
-
// set RangeValueType: 'Number' as part of those flows).
|
|
169
129
|
if ((this.state.rangesType === 'NumberRange' || this.state.rangesType === 'PercentageRange') &&
|
|
170
130
|
prevProps.rangeValueType !== this.props.rangeValueType) {
|
|
171
131
|
this.setState({
|
|
@@ -210,9 +170,6 @@ export class RangesComponent extends React.Component {
|
|
|
210
170
|
this.props.onApplyZeroCentred?.(this.props.zeroCentred ?? DEFAULT_ZERO_CENTRED_COLORS);
|
|
211
171
|
return;
|
|
212
172
|
}
|
|
213
|
-
// Switching to a range tab — let the parent reseed CellRanges + the right
|
|
214
|
-
// RangeValueType (and clear ColumnComparison / ZeroCentred). Tab switches
|
|
215
|
-
// wipe any previously configured ranges by design.
|
|
216
173
|
this.props.onRangeValueTypeChange(value === 'PercentageRange' ? 'Percentage' : 'Number');
|
|
217
174
|
}
|
|
218
175
|
changeRangeMin(index, value) {
|
|
@@ -252,7 +209,6 @@ export class RangesComponent extends React.Component {
|
|
|
252
209
|
removeRange(index) {
|
|
253
210
|
let ranges = [...this.props.ranges];
|
|
254
211
|
ranges.splice(index, 1);
|
|
255
|
-
// Max 100 is always disabled, this prevents from having a Max range lower than 100
|
|
256
212
|
if (this.props.rangeValueType === 'Percentage' && ranges.length === 1) {
|
|
257
213
|
ranges[0] = {
|
|
258
214
|
...ranges[0],
|
|
@@ -288,13 +244,6 @@ export class RangesComponent extends React.Component {
|
|
|
288
244
|
this.props.updateRanges(newRanges);
|
|
289
245
|
}
|
|
290
246
|
addRange() {
|
|
291
|
-
// Most callers seed `ranges` with at least one entry, but Range Bar
|
|
292
|
-
// legitimately leaves `CellRanges` undefined (bands are optional). Handle
|
|
293
|
-
// both cases so the "Add Range" button always works.
|
|
294
|
-
//
|
|
295
|
-
// When starting from empty we seed TWO bands split at the midpoint — a
|
|
296
|
-
// single full-width band would just look like a back colour and wouldn't
|
|
297
|
-
// communicate the "qualitative scale" idea bands are intended for.
|
|
298
247
|
const existingRanges = this.props.ranges ?? [];
|
|
299
248
|
if (existingRanges.length === 0) {
|
|
300
249
|
const isPercentage = this.props.rangeValueType === 'Percentage';
|
|
@@ -326,8 +275,6 @@ export class RangesComponent extends React.Component {
|
|
|
326
275
|
this.props.updateRanges(seedRanges);
|
|
327
276
|
return;
|
|
328
277
|
}
|
|
329
|
-
// Splitting a single full-width band at the midpoint is easier to reason
|
|
330
|
-
// about than anchoring the break at the column maximum (e.g. tradeId 1–200 → 100).
|
|
331
278
|
if (existingRanges.length === 1) {
|
|
332
279
|
const splitAtMidpoint = this.splitFullSpanRangeAtMidpoint(existingRanges[0]);
|
|
333
280
|
if (splitAtMidpoint) {
|
|
@@ -356,10 +303,6 @@ export class RangesComponent extends React.Component {
|
|
|
356
303
|
const newRanges = [...existingRanges.slice(0, -1), previousRange, newRange];
|
|
357
304
|
this.props.updateRanges(newRanges);
|
|
358
305
|
}
|
|
359
|
-
/**
|
|
360
|
-
* When there is exactly one band spanning the full scale (Col-Min→Col-Max or
|
|
361
|
-
* 0→100), split at the midpoint instead of at the column maximum.
|
|
362
|
-
*/
|
|
363
306
|
splitFullSpanRangeAtMidpoint(onlyRange) {
|
|
364
307
|
const isPercentage = this.props.rangeValueType === 'Percentage';
|
|
365
308
|
if (isPercentage) {
|
|
@@ -16,9 +16,6 @@ export const BulkUpdateValueSelector = (props) => {
|
|
|
16
16
|
const columnDataType = props.selectedColumn?.dataType;
|
|
17
17
|
const isDateType = props.selectedColumn && columnDataType === 'date';
|
|
18
18
|
const columnId = props.selectedColumn?.columnId;
|
|
19
|
-
// TODO = this seems to be called whenever we edit a cell
|
|
20
|
-
// which is then triggering a get all values
|
|
21
|
-
// not sure that we need to
|
|
22
19
|
const permittedValueSelector = (_jsx(Box, { className: 'twa:flex-1', children: _jsx(PermittedValuesSelector, { allowNewValues: true, searchable: 'inline', disabled: props.disabled || !props.selectedColumn, value: props.selectedColumnValue === '' ? null : props.selectedColumnValue, columnId: columnId, placeholder: 'Select value', loadValues: useCallback(({ currentSearchValue }) => {
|
|
23
20
|
if (!columnId || !props.selectedGridCells.length) {
|
|
24
21
|
return Promise.resolve([]);
|
|
@@ -37,9 +37,7 @@ export const PermittedValuesSelector = function (props) {
|
|
|
37
37
|
return currentSearchValue;
|
|
38
38
|
},
|
|
39
39
|
});
|
|
40
|
-
const distinctColumnValues = await runIfNotResolvedIn(
|
|
41
|
-
// we are here ALWAYS getting Filter values but sometimes we want to get other things!!!
|
|
42
|
-
p, () => {
|
|
40
|
+
const distinctColumnValues = await runIfNotResolvedIn(p, () => {
|
|
43
41
|
setIsLoading(true);
|
|
44
42
|
});
|
|
45
43
|
setSearchValueWasUsedWhenFiltering(searchValueUsedInFilterValue);
|
|
@@ -50,7 +48,6 @@ export const PermittedValuesSelector = function (props) {
|
|
|
50
48
|
const isCreatable = (props.allowNewValues && !dataType) || ['text', 'number'].includes(dataType);
|
|
51
49
|
const handleSingleValueChange = (value) => {
|
|
52
50
|
if (isCreatable) {
|
|
53
|
-
// try to convert to correct type, when there is not type, e.g. field
|
|
54
51
|
if (!dataType && typeof value === 'string' && !isNaN(parseFloat(value))) {
|
|
55
52
|
props.onChange(parseFloat(value));
|
|
56
53
|
}
|
|
@@ -82,7 +79,6 @@ export const PermittedValuesSelector = function (props) {
|
|
|
82
79
|
}
|
|
83
80
|
};
|
|
84
81
|
const handleOnChange = (value) => {
|
|
85
|
-
// convert numbers
|
|
86
82
|
if (props.isMulti) {
|
|
87
83
|
handleMultiValueChange(value);
|
|
88
84
|
}
|
|
@@ -120,7 +116,6 @@ export const PermittedValuesSelector = function (props) {
|
|
|
120
116
|
virtualized: true,
|
|
121
117
|
resizable: true,
|
|
122
118
|
showClear: true,
|
|
123
|
-
// showClear: false,
|
|
124
119
|
onFocus: props.onFocus,
|
|
125
120
|
onBlur: props.onBlur,
|
|
126
121
|
};
|