@adaptabletools/adaptable 20.1.2 → 20.1.4
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/base.css +1 -0
- package/base.css.map +1 -1
- package/index.css +1 -0
- package/index.css.map +1 -1
- package/package.json +1 -1
- package/src/AdaptableState/Common/{AdaptableSearchState.d.ts → AdaptableFilterState.d.ts} +7 -7
- package/src/AdaptableState/Common/AdaptableSortState.d.ts +1 -1
- package/src/Api/Implementation/StateApiImpl.d.ts +2 -2
- package/src/Api/Implementation/StateApiImpl.js +5 -5
- package/src/Api/Internal/EventInternalApi.js +1 -1
- package/src/Api/Internal/ExportInternalApi.js +1 -1
- package/src/Api/StateApi.d.ts +3 -3
- package/src/Redux/Store/AdaptableStore.js +7 -6
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +2 -2
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +2 -2
- package/src/View/CellSummary/CellSummaryDetails.js +2 -2
- package/src/View/CellSummary/CellSummaryViewPanel.js +2 -2
- package/src/View/ColumnInfo/ColumnInfo.js +2 -2
- package/src/View/Comments/CommentsPopup.js +2 -2
- package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +7 -1
- package/src/View/Components/Forms/AdaptableFormControlTextClear.js +1 -1
- package/src/View/Components/PreviewResultsPanel.js +2 -2
- package/src/View/Components/Selectors/BulkUpdateValueSelector.js +2 -2
- package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
- package/src/View/Components/WizardSummaryPage.js +2 -2
- package/src/View/Dashboard/CustomDashboardButton.js +1 -1
- package/src/View/Dashboard/Dashboard.js +2 -2
- package/src/View/Dashboard/DashboardToolbarFactory.js +1 -1
- package/src/View/DataChangeHistory/DataChangeHistoryViewPanel.js +8 -9
- package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +2 -2
- package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +2 -2
- package/src/View/DataSet/DataSetViewPanel.js +1 -1
- package/src/View/Export/ReportFormatSelector.js +1 -1
- package/src/View/Export/ReportNameSelector.js +1 -1
- package/src/View/Filter/FilterViewPanel.js +2 -2
- package/src/View/GridFilter/GridFilterViewPanel.js +1 -1
- package/src/View/Layout/LayoutViewPanel.js +1 -1
- package/src/View/Layout/PivotDetailsPopoup.js +2 -2
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +2 -2
- package/src/View/Note/NotePopup.js +2 -2
- package/src/View/SmartEdit/SmartEditViewPanel.js +1 -1
- package/src/View/StateManagement/components/LoadButton.js +1 -1
- package/src/View/Theme/ThemeSelector.js +1 -1
- package/src/agGrid/AdaptableAgGrid.d.ts +10 -0
- package/src/agGrid/AdaptableAgGrid.js +66 -28
- package/src/agGrid/AgGridExportAdapter.js +1 -1
- package/src/components/Dashboard/DashboardToolbar.js +2 -2
- package/src/components/Datepicker/index.js +50 -5
- package/src/components/Icon/index.js +1 -1
- package/src/components/InfiniteTable/index.d.ts +2 -2
- package/src/components/InfiniteTable/index.js +2 -2
- package/src/components/List/GridList/index.js +2 -2
- package/src/components/Select/Select.d.ts +2 -0
- package/src/components/Select/Select.js +1 -1
- package/src/components/SimpleButton/index.js +5 -1
- package/src/env.js +2 -2
- package/src/layout-manager/src/index.js +32 -3
- package/src/metamodel/adaptable.metamodel.d.ts +10 -10
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/types.d.ts +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
- /package/src/AdaptableState/Common/{AdaptableSearchState.js → AdaptableFilterState.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AdaptablePopover } from '../AdaptablePopover';
|
|
3
|
-
import { DataSource,
|
|
3
|
+
import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
|
|
4
4
|
import CheckIcon from '../../components/icons/check';
|
|
5
5
|
import UIHelper from '../UIHelper';
|
|
6
6
|
import Panel from '../../components/Panel';
|
|
@@ -58,7 +58,7 @@ export class PreviewResultsPanel extends React.Component {
|
|
|
58
58
|
},
|
|
59
59
|
} },
|
|
60
60
|
React.createElement(DataSource, { data: dataSource, primaryKey: "Id" },
|
|
61
|
-
React.createElement(
|
|
61
|
+
React.createElement(InfiniteTableGrid, { sortable: false, domProps: tableDOMProps, columns: columnsMap })))) : null;
|
|
62
62
|
}
|
|
63
63
|
getValidationErrorMessage(alertDefinitions) {
|
|
64
64
|
let validationService = this.props.api.internalApi.getValidationService();
|
|
@@ -33,7 +33,7 @@ export const BulkUpdateValueSelector = (props) => {
|
|
|
33
33
|
]), onChange: (value) => {
|
|
34
34
|
props.onColumnValueChange(value || null);
|
|
35
35
|
} })));
|
|
36
|
-
const input = (React.createElement(AdaptableInput, { "data-name": "bulkupdate-value-input", type: props.selectedColumn
|
|
36
|
+
const input = (React.createElement(AdaptableInput, { "data-name": "bulkupdate-value-input", "aria-label": "Bulk Update Value Input", type: props.selectedColumn
|
|
37
37
|
? UIHelper.getDescriptionForDataType(props.selectedColumn.dataType)
|
|
38
38
|
: 'text', placeholder: props.selectedColumn
|
|
39
39
|
? UIHelper.getPlaceholderForDataType(props.selectedColumn.dataType)
|
|
@@ -42,7 +42,7 @@ export const BulkUpdateValueSelector = (props) => {
|
|
|
42
42
|
} }));
|
|
43
43
|
let valueTypeSelector = null;
|
|
44
44
|
if (isDateType) {
|
|
45
|
-
valueTypeSelector = (React.createElement(Select, { options: [
|
|
45
|
+
valueTypeSelector = (React.createElement(Select, { "aria-label": "Bulk Update Value Selector", options: [
|
|
46
46
|
{ label: 'New', value: 'new' },
|
|
47
47
|
{ label: 'Existing', value: 'existing' },
|
|
48
48
|
], value: valueType, onChange: (value) => {
|
|
@@ -97,5 +97,5 @@ export const PermittedValuesSelector = function (props) {
|
|
|
97
97
|
reload();
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
|
-
return (React.createElement(Select, { menuPortalTarget: props.menuPortalTarget, size: props.size, isMulti: props.isMulti, className: props.className, disabled: props.disabled, closeMenuOnSelect: !props.isMulti, "data-name": "permitted-values-selector", placeholder: props.placeholder || (props.allowNewValues ? 'Select or type new value' : 'Select value'), isCreatable: isCreatable, isClearable: true, onMenuOpen: reload, options: options, isLoading: isLoading, onInputChange: onInputChange, onChange: handleOnChange, onFocus: props.onFocus, onBlur: props.onBlur, value: props.value }));
|
|
100
|
+
return (React.createElement(Select, { "aria-label": "Permitted Values Selector", menuPortalTarget: props.menuPortalTarget, size: props.size, isMulti: props.isMulti, className: props.className, disabled: props.disabled, closeMenuOnSelect: !props.isMulti, "data-name": "permitted-values-selector", placeholder: props.placeholder || (props.allowNewValues ? 'Select or type new value' : 'Select value'), isCreatable: isCreatable, isClearable: true, onMenuOpen: reload, options: options, isLoading: isLoading, onInputChange: onInputChange, onChange: handleOnChange, onFocus: props.onFocus, onBlur: props.onBlur, value: props.value }));
|
|
101
101
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import WizardPanel from '../../components/WizardPanel';
|
|
3
|
-
import { DataSource,
|
|
3
|
+
import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
|
|
4
4
|
const columnsMap = {
|
|
5
5
|
Key: { field: 'Key', header: 'Property', defaultFlex: 1 },
|
|
6
6
|
Value: { field: 'Value', header: 'Value', defaultFlex: 3 },
|
|
@@ -15,5 +15,5 @@ const tableDOMProps = {
|
|
|
15
15
|
export const WizardSummaryPage = (props) => {
|
|
16
16
|
return (React.createElement(WizardPanel, { bodyProps: { padding: 0 }, className: "ab-WizardSummary", "data-name": 'wizard-summary' },
|
|
17
17
|
React.createElement(DataSource, { data: props.KeyValuePairs, primaryKey: "Key" },
|
|
18
|
-
React.createElement(
|
|
18
|
+
React.createElement(InfiniteTableGrid, { showZebraRows: true, domProps: tableDOMProps, columns: columnsMap }))));
|
|
19
19
|
};
|
|
@@ -19,7 +19,7 @@ export const CustomDashboardButton = (props) => {
|
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
21
|
const disabled = button.disabled && button.disabled(button, dashboardContext);
|
|
22
|
-
return (React.createElement(SimpleButton, { key: buttonLabel, variant: buttonStyle && buttonStyle.variant ? buttonStyle.variant : 'text', tone: buttonStyle && buttonStyle.tone ? buttonStyle.tone : 'none', className: `ab-DashboardToolbar__Home__${kebabCase(buttonLabel)} ${buttonStyle?.className || ''}`, tooltip: buttonTooltip, icon: buttonIcon, disabled: disabled || props.accessLevel == 'ReadOnly', onClick: () => {
|
|
22
|
+
return (React.createElement(SimpleButton, { key: buttonLabel, "aria-label": buttonLabel, variant: buttonStyle && buttonStyle.variant ? buttonStyle.variant : 'text', tone: buttonStyle && buttonStyle.tone ? buttonStyle.tone : 'none', className: `ab-DashboardToolbar__Home__${kebabCase(buttonLabel)} ${buttonStyle?.className || ''}`, tooltip: buttonTooltip, icon: buttonIcon, disabled: disabled || props.accessLevel == 'ReadOnly', onClick: () => {
|
|
23
23
|
button.onClick?.(button, dashboardContext);
|
|
24
24
|
setTimeout(() => {
|
|
25
25
|
// mutate state to force a re-rendering
|
|
@@ -65,7 +65,7 @@ const DashboardComponent = (props) => {
|
|
|
65
65
|
shortcuts = shortcutsArray.map((x, index) => {
|
|
66
66
|
let menuItem = props.InternalState.Dashboard.DashboardModuleButtons.find((y) => y.isVisible && y.category == x);
|
|
67
67
|
if (menuItem) {
|
|
68
|
-
return (React.createElement(AdaptableButtonComponent, { "data-name": `dashboard-module-button-${menuItem.category ?? 'custom-' + index}`, key: menuItem.label, variant: menuItem.category === 'SystemStatus' ? 'outlined' : 'text', tone: menuItem.category === 'SystemStatus' ? 'neutral' : 'none', className: `ab-DashboardToolbar__Home__${kebabCase(menuItem.label)}`, icon: menuItem.icon, tooltip: menuItem.label, disabled: props.accessLevel == 'ReadOnly', onClick: () => props.dispatch(menuItem.reduxAction), accessLevel: 'Full', style: menuItem.category === 'SystemStatus'
|
|
68
|
+
return (React.createElement(AdaptableButtonComponent, { "data-name": `dashboard-module-button-${menuItem.category ?? 'custom-' + index}`, "aria-label": menuItem.label, key: menuItem.label, variant: menuItem.category === 'SystemStatus' ? 'outlined' : 'text', tone: menuItem.category === 'SystemStatus' ? 'neutral' : 'none', className: `ab-DashboardToolbar__Home__${kebabCase(menuItem.label)}`, icon: menuItem.icon, tooltip: menuItem.label, disabled: props.accessLevel == 'ReadOnly', onClick: () => props.dispatch(menuItem.reduxAction), accessLevel: 'Full', style: menuItem.category === 'SystemStatus'
|
|
69
69
|
? {
|
|
70
70
|
...UIHelper.getStyleForMessageType(props.api.systemStatusApi.getCurrentSystemStatusMessageInfo()?.statusType ??
|
|
71
71
|
'Success'),
|
|
@@ -89,7 +89,7 @@ const DashboardComponent = (props) => {
|
|
|
89
89
|
};
|
|
90
90
|
const renderQuickSearch = () => {
|
|
91
91
|
return (React.createElement(Box, { ml: 2 },
|
|
92
|
-
React.createElement(AdaptableFormControlTextClear, { type: "text", placeholder: props.api.optionsApi.getQuickSearchOptions().quickSearchPlaceholder, className: "ab-DashboardToolbar__QuickSearch__text", value: searchText, OnTextChange: search, style: { width: 'auto' }, inputStyle: { width: '7rem' } })));
|
|
92
|
+
React.createElement(AdaptableFormControlTextClear, { type: "text", "aria-label": 'Quick Search', placeholder: props.api.optionsApi.getQuickSearchOptions().quickSearchPlaceholder, className: "ab-DashboardToolbar__QuickSearch__text", value: searchText, OnTextChange: search, style: { width: 'auto' }, inputStyle: { width: '7rem' } })));
|
|
93
93
|
};
|
|
94
94
|
let instanceName = props.api.internalApi.getToolbarTitle();
|
|
95
95
|
let dashboardOptions = props.api.optionsApi.getDashboardOptions();
|
|
@@ -12,7 +12,7 @@ const SystemDashboardToolbarFactory = (props) => {
|
|
|
12
12
|
const accessLevel = adaptable.api.entitlementApi.getEntitlementAccessLevelForModule(props.toolbarName);
|
|
13
13
|
const moduleToolbarView = AdaptableViewPanelFactory.get(props.toolbarName);
|
|
14
14
|
if (!moduleToolbarView) {
|
|
15
|
-
return React.createElement(React.Fragment, null
|
|
15
|
+
return React.createElement(React.Fragment, null);
|
|
16
16
|
}
|
|
17
17
|
const moduleToolbarElement = React.createElement(moduleToolbarView, {
|
|
18
18
|
viewType: 'Toolbar',
|
|
@@ -20,21 +20,20 @@ export const DataChangeHistoryViewPanelControl = (props) => {
|
|
|
20
20
|
const handleOpenPopup = React.useCallback(() => {
|
|
21
21
|
adaptable.api.settingsPanelApi.openSettingsPanel('DataChangeHistory');
|
|
22
22
|
}, []);
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}));
|
|
23
|
+
const dataChangeHistoryState = useSelector((state) => state.Internal.DataChangeHistory);
|
|
24
|
+
const changeHistoryMode = dataChangeHistoryState.currentMode;
|
|
25
|
+
const activationTime = dataChangeHistoryState.enableTime;
|
|
26
|
+
const suspensionTime = dataChangeHistoryState.suspendTime;
|
|
28
27
|
const enabled = changeHistoryMode === 'ACTIVE';
|
|
29
28
|
const disabled = changeHistoryMode === 'INACTIVE';
|
|
30
29
|
const suspended = changeHistoryMode === 'SUSPENDED';
|
|
31
30
|
const gap = props.gap ?? 'var(--ab-space-1)';
|
|
32
31
|
const buttonsPaddingY = props.buttonsPaddingY ?? 2;
|
|
33
32
|
const buttonPanel = (React.createElement(Flex, { className: "ab-DataChangeHistoryPanel--button-panel", paddingY: buttonsPaddingY, style: { gap: gap } },
|
|
34
|
-
disabled && (React.createElement(ButtonPlay, { className: "ab-DataChangeHistoryPanel--button-activate", "data-name": 'data-change-history--button-activate', tooltip: '', onClick: () => onChangeHistoryEnable() })),
|
|
35
|
-
suspended && (React.createElement(ButtonPlay, { className: "ab-DataChangeHistoryPanel--button-resume", "data-name": 'data-change-history--button-resume', tooltip: 'Resume tracking data changes', onClick: () => onChangeHistoryResume() })),
|
|
36
|
-
enabled && (React.createElement(ButtonPause, { className: "ab-DataChangeHistoryPanel--button-suspend", "data-name": 'data-change-history--button-suspend', tooltip: 'Suspend tracking data changes', onClick: () => onChangeHistorySuspend() })),
|
|
37
|
-
(enabled || suspended) && (React.createElement(ButtonStop, { className: "ab-DataChangeHistoryPanel--button-deactivate", "data-name": 'data-change-history--button-deactivate', tooltip: 'Deactivate data change tracking', onClick: () => onChangeHistoryDisable() }))));
|
|
33
|
+
disabled && (React.createElement(ButtonPlay, { "aria-label": "Enable Data Change History", className: "ab-DataChangeHistoryPanel--button-activate", "data-name": 'data-change-history--button-activate', tooltip: '', onClick: () => onChangeHistoryEnable() })),
|
|
34
|
+
suspended && (React.createElement(ButtonPlay, { "aria-label": "Resume Data Change History", className: "ab-DataChangeHistoryPanel--button-resume", "data-name": 'data-change-history--button-resume', tooltip: 'Resume tracking data changes', onClick: () => onChangeHistoryResume() })),
|
|
35
|
+
enabled && (React.createElement(ButtonPause, { "aria-label": "Suspend Data Change History", className: "ab-DataChangeHistoryPanel--button-suspend", "data-name": 'data-change-history--button-suspend', tooltip: 'Suspend tracking data changes', onClick: () => onChangeHistorySuspend() })),
|
|
36
|
+
(enabled || suspended) && (React.createElement(ButtonStop, { "aria-label": "Deactivate Data Change History", className: "ab-DataChangeHistoryPanel--button-deactivate", "data-name": 'data-change-history--button-deactivate', tooltip: 'Deactivate data change tracking', onClick: () => onChangeHistoryDisable() }))));
|
|
38
37
|
const dateFormat = `${adaptable.api.optionsApi.getUserInterfaceOptions().dateInputOptions.dateFormat} HH:mm:ss`;
|
|
39
38
|
const statusPanel = (React.createElement(Flex, { className: "ab-DataChangeHistoryPanel--status-panel", alignItems: 'center', style: { gap: gap } },
|
|
40
39
|
enabled && (React.createElement(Tooltip, { label: !!activationTime && `since ${DateFormatter(activationTime, { Pattern: dateFormat })}` },
|
|
@@ -4,7 +4,7 @@ import { CheckBox } from '../../../../components/CheckBox';
|
|
|
4
4
|
import DropdownButton from '../../../../components/DropdownButton';
|
|
5
5
|
import HelpBlock from '../../../../components/HelpBlock';
|
|
6
6
|
import { Icon } from '../../../../components/icons';
|
|
7
|
-
import { DataSource,
|
|
7
|
+
import { DataSource, InfiniteTableGrid, } from '../../../../components/InfiniteTable';
|
|
8
8
|
import { Tabs } from '../../../../components/Tabs';
|
|
9
9
|
import { Tag } from '../../../../components/Tag';
|
|
10
10
|
import { useAdaptable } from '../../../AdaptableContext';
|
|
@@ -114,7 +114,7 @@ export const ColumnsSection = (props) => {
|
|
|
114
114
|
React.createElement(Tabs.Tab, null, "Columns"),
|
|
115
115
|
React.createElement(Tabs.Content, null,
|
|
116
116
|
React.createElement(DataSource, { data: props.columnsMap, primaryKey: 'field' },
|
|
117
|
-
React.createElement(
|
|
117
|
+
React.createElement(InfiniteTableGrid, { columnPinning: {
|
|
118
118
|
valid: 'end',
|
|
119
119
|
type: 'end',
|
|
120
120
|
}, columnTypes: {
|
|
@@ -2,7 +2,7 @@ import flatten from 'lodash/flatten';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import HelpBlock from '../../../../components/HelpBlock';
|
|
4
4
|
import { Icon } from '../../../../components/icons';
|
|
5
|
-
import { DataSource,
|
|
5
|
+
import { DataSource, InfiniteTableGrid, } from '../../../../components/InfiniteTable';
|
|
6
6
|
import { Tag } from '../../../../components/Tag';
|
|
7
7
|
import { useAdaptable } from '../../../AdaptableContext';
|
|
8
8
|
import { AdaptablePopover } from '../../../AdaptablePopover';
|
|
@@ -139,7 +139,7 @@ export const DataPreview = (props) => {
|
|
|
139
139
|
});
|
|
140
140
|
props.onDataChange(newRowData);
|
|
141
141
|
} },
|
|
142
|
-
React.createElement(
|
|
142
|
+
React.createElement(InfiniteTableGrid, { columnPinning: {
|
|
143
143
|
valid: 'end',
|
|
144
144
|
type: 'end',
|
|
145
145
|
}, columnTypes: {
|
|
@@ -26,7 +26,7 @@ class DataSetViewPanelComponent extends React.Component {
|
|
|
26
26
|
});
|
|
27
27
|
const elementType = this.props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
|
|
28
28
|
return (React.createElement(Flex, { flexDirection: "row", className: `ab-${elementType}__DataSet__wrap` },
|
|
29
|
-
React.createElement(Select, { style: { width: '100%' }, placeholder: 'Select Data Set', disabled: ArrayExtensions.IsNullOrEmpty(availableDataSets), options: availableDataSets, value: currentDataSetName, className: `ab-${elementType}__DataSet__select`, onChange: (destination) => this.onSelectedDataSetChanged(destination) })));
|
|
29
|
+
React.createElement(Select, { "aria-label": 'Select Data Set', style: { width: '100%' }, placeholder: 'Select Data Set', disabled: ArrayExtensions.IsNullOrEmpty(availableDataSets), options: availableDataSets, value: currentDataSetName, className: `ab-${elementType}__DataSet__select`, onChange: (destination) => this.onSelectedDataSetChanged(destination) })));
|
|
30
30
|
}
|
|
31
31
|
onSelectedDataSetChanged(dataSetName) {
|
|
32
32
|
if (StringExtensions.IsNullOrEmpty(dataSetName)) {
|
|
@@ -16,5 +16,5 @@ export const ReportFormatSelector = (props) => {
|
|
|
16
16
|
});
|
|
17
17
|
const elementType = props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
|
|
18
18
|
return (React.createElement(Flex, { "data-name": "report-format-selector", flex: 1, minWidth: 140 },
|
|
19
|
-
React.createElement(Select, { style: { width: '100%' }, size: size, placeholder: SELECT_REPORT_FORMAT_STRING, disabled: !allFormats.length || reportName == undefined, className: `ab-${elementType}__Export__format-select`, options: formatItems, onChange: (format) => onReportFormatSelected(format), value: reportFormat, isClearable: true })));
|
|
19
|
+
React.createElement(Select, { "aria-label": SELECT_REPORT_FORMAT_STRING, style: { width: '100%' }, size: size, placeholder: SELECT_REPORT_FORMAT_STRING, disabled: !allFormats.length || reportName == undefined, className: `ab-${elementType}__Export__format-select`, options: formatItems, onChange: (format) => onReportFormatSelected(format), value: reportFormat, isClearable: true })));
|
|
20
20
|
};
|
|
@@ -16,5 +16,5 @@ export const ReportNameSelector = (props) => {
|
|
|
16
16
|
});
|
|
17
17
|
const elementType = props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
|
|
18
18
|
return (React.createElement(Flex, { "data-name": "report-name-selector", flex: 1, minWidth: 160 },
|
|
19
|
-
React.createElement(Select, { style: { width: '100%' }, size: size, "data-name": "report-name-selector", placeholder: SELECT_REPORT_STRING, disabled: !allReportNames.length, className: `ab-${elementType}__Export__report-select`, options: reportItems, onChange: (report) => onReportNameSelected(report), value: reportName, isClearable: true })));
|
|
19
|
+
React.createElement(Select, { "aria-label": SELECT_REPORT_STRING, style: { width: '100%' }, size: size, "data-name": "report-name-selector", placeholder: SELECT_REPORT_STRING, disabled: !allReportNames.length, className: `ab-${elementType}__Export__report-select`, options: reportItems, onChange: (report) => onReportNameSelected(report), value: reportName, isClearable: true })));
|
|
20
20
|
};
|
|
@@ -29,8 +29,8 @@ class FilterViewPanelComponent extends React.Component {
|
|
|
29
29
|
return (React.createElement(Flex, { flexDirection: "row", className: `ab-${elementType}__Filter__wrap`, flexWrap: this.props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
|
|
30
30
|
React.createElement(Flex, null,
|
|
31
31
|
ArrayExtensions.IsNotNullOrEmpty(this.props.ColumnFilters) && (React.createElement(AdaptablePopover, { popupPadding: 0, className: `ab-${elementType}__Filter__info`, headerText: "", bodyText: [React.createElement(ActiveFiltersPanel, null)], useButton: true, showEvent: 'focus', hideEvent: "blur", popoverMinWidth: 400 })),
|
|
32
|
-
React.createElement(ButtonClear, { className: `ab-${elementType}__Filter__clear`, marginLeft: 1, marginBottom: 0, marginRight: 1, onClick: () => this.onClearFilters(), tooltip: "Clear Filters", disabled: this.props.ColumnFilters.length == 0, showText: this.props.viewType === 'ToolPanel' }, this.props.viewType === 'ToolPanel' && 'Clear'),
|
|
33
|
-
React.createElement(SimpleButton, { className: join(`ab-${elementType}__Filter__suspend-button`, isAtLeastOneFilterActive && `ab-${elementType}__Filter__suspend-all`, !isAtLeastOneFilterActive && `ab-${elementType}__Filter__un-suspend-all`), disabled: !isAtLeastOneFilter, onClick: handleSuspendUnsuspendAll, tone: isAtLeastOneFilterActive ? 'neutral' : 'success', variant: "text", icon: isAtLeastOneFilterActive ? 'pause' : 'play', accessLevel: this.props.accessLevel })),
|
|
32
|
+
React.createElement(ButtonClear, { "aria-label": 'Clear Filters', className: `ab-${elementType}__Filter__clear`, marginLeft: 1, marginBottom: 0, marginRight: 1, onClick: () => this.onClearFilters(), tooltip: "Clear Filters", disabled: this.props.ColumnFilters.length == 0, showText: this.props.viewType === 'ToolPanel' }, this.props.viewType === 'ToolPanel' && 'Clear'),
|
|
33
|
+
React.createElement(SimpleButton, { "aria-label": isAtLeastOneFilterActive ? 'Suspend All Filters' : 'Resume All Filters', className: join(`ab-${elementType}__Filter__suspend-button`, isAtLeastOneFilterActive && `ab-${elementType}__Filter__suspend-all`, !isAtLeastOneFilterActive && `ab-${elementType}__Filter__un-suspend-all`), disabled: !isAtLeastOneFilter, onClick: handleSuspendUnsuspendAll, tone: isAtLeastOneFilterActive ? 'neutral' : 'success', variant: "text", icon: isAtLeastOneFilterActive ? 'pause' : 'play', accessLevel: this.props.accessLevel })),
|
|
34
34
|
React.createElement(Flex, { alignItems: "center" }, this.props.api.filterApi.columnFilterApi.isQuickFilterAvailable() && (React.createElement(CheckBox, { className: `ab-${elementType}__Filter__active-check`, disabled: this.props.accessLevel === 'ReadOnly' ||
|
|
35
35
|
this.props.api.layoutApi.isCurrentLayoutPivot(), marginTop: 0, marginBottom: 0, fontSize: 2, padding: 1, checked: this.props.IsQuickFilterVisible, onChange: (checked) => {
|
|
36
36
|
checked ? this.props.onShowQuickFilterBar() : this.props.onHideQuickFilterBar();
|
|
@@ -90,7 +90,7 @@ const QueryViewPanelComponent = (props) => {
|
|
|
90
90
|
columnsDropdown,
|
|
91
91
|
namedQuerySelector,
|
|
92
92
|
' ')) : (React.createElement(React.Fragment, null,
|
|
93
|
-
React.createElement(ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
|
|
93
|
+
React.createElement(ButtonPlay, { "aria-label": 'Run Grid Filter', onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
|
|
94
94
|
' ',
|
|
95
95
|
React.createElement(ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel, disabled: expression == '' }),
|
|
96
96
|
' ',
|
|
@@ -40,7 +40,7 @@ const LayoutViewPanelComponent = (props) => {
|
|
|
40
40
|
const layoutSelectStyle = elementType === 'ToolPanel' ? { minWidth: '100%' } : {};
|
|
41
41
|
return (React.createElement(Flex, { flexDirection: "row", className: `ab-${elementType}__Layout__wrap`, flexWrap: viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
|
|
42
42
|
React.createElement(Flex, { style: layoutSelectStyle, flex: 1 },
|
|
43
|
-
React.createElement(Select, { disabled: isErrorLayout, style: { width: '100%' }, options: availableLayoutOptions, className: `ab-${elementType}__Layout__select`, value: layoutEntity ? layoutEntity.Name : null, onChange: (layout) => onSelectLayout(layout) })),
|
|
43
|
+
React.createElement(Select, { "aria-label": 'Select Layout', disabled: isErrorLayout, style: { width: '100%' }, options: availableLayoutOptions, className: `ab-${elementType}__Layout__select`, value: layoutEntity ? layoutEntity.Name : null, onChange: (layout) => onSelectLayout(layout) })),
|
|
44
44
|
React.createElement(Flex, { flexDirection: "row", className: join(accessLevel === 'ReadOnly' ? GeneralConstants.READ_ONLY_STYLE : '', `ab-${elementType}__Layout__wrap`) },
|
|
45
45
|
React.createElement(ButtonEdit, { disabled: isErrorLayout, onClick: () => api.layoutApi.showLayoutEditor(layoutEntity.Name), tooltip: LAYOUT_EDIT_TOOLTIP, className: `ab-${elementType}__Layout__edit`, accessLevel: entityAccessLevel }),
|
|
46
46
|
React.createElement(ButtonClone, { disabled: isErrorLayout, onClick: () => api.layoutApi.showLayoutEditor(layoutEntity.Name, isPivotLayout(layoutEntity) ? 'pivot' : 'table', 'Clone'), tooltip: LAYOUT_CLONE_TOOLTIP, className: `ab-${elementType}__Layout__clone`, tone: "neutral", variant: "text", children: null, accessLevel: cloneAccessLevel }),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { DataSource,
|
|
2
|
+
import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
|
|
3
3
|
import { useAdaptable } from '../AdaptableContext';
|
|
4
4
|
const tableDOMProps = {
|
|
5
5
|
style: {
|
|
@@ -69,5 +69,5 @@ export const PivotDetailsPopoup = (props) => {
|
|
|
69
69
|
};
|
|
70
70
|
}, [props.popupProps]);
|
|
71
71
|
return (React.createElement(DataSource, { data: data, primaryKey: columnId },
|
|
72
|
-
React.createElement(
|
|
72
|
+
React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, domProps: tableDOMProps, columns: columns })));
|
|
73
73
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataSource,
|
|
1
|
+
import { DataSource, InfiniteTableGrid, } from '../../../../components/InfiniteTable';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { Box, Flex, Text } from 'rebass';
|
|
4
4
|
import DropdownButton from '../../../../components/DropdownButton';
|
|
@@ -129,7 +129,7 @@ export const ColumnsSectionSummary = () => {
|
|
|
129
129
|
},
|
|
130
130
|
};
|
|
131
131
|
return (React.createElement(DataSource, { data: data, primaryKey: "columnId" },
|
|
132
|
-
React.createElement(
|
|
132
|
+
React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, rowHeight: rowHeight, columnHeaderHeight: headerHeight, domProps: tableDOMProps, columns: columns })));
|
|
133
133
|
};
|
|
134
134
|
const ColumnRow = (props) => {
|
|
135
135
|
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useSelector } from 'react-redux';
|
|
3
|
-
import { DataSource,
|
|
3
|
+
import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
|
|
4
4
|
import { GetAllNotesSelector } from '../../Redux/ActionsReducers/NoteRedux';
|
|
5
5
|
import { useAdaptable } from '../AdaptableContext';
|
|
6
6
|
import { AdaptableButtonComponent } from '../Components/AdaptableButton';
|
|
@@ -87,5 +87,5 @@ export const NotePopup = (props) => {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
} },
|
|
90
|
-
React.createElement(
|
|
90
|
+
React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
|
|
91
91
|
};
|
|
@@ -66,7 +66,7 @@ class SmartEditViewPanelComponent extends React.Component {
|
|
|
66
66
|
const elementType = this.props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
|
|
67
67
|
return (React.createElement(Flex, { flexDirection: "row", className: `ab-${elementType}__SmartEdit__wrap`, flexWrap: this.props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
|
|
68
68
|
React.createElement(Flex, null,
|
|
69
|
-
React.createElement(Select, { value: typeof this.props.SmartEditOperation === 'object'
|
|
69
|
+
React.createElement(Select, { "aria-label": 'Select Smart Edit Operation', value: typeof this.props.SmartEditOperation === 'object'
|
|
70
70
|
? this.props.SmartEditOperation.name
|
|
71
71
|
: this.props.SmartEditOperation, options: operationMenuItems, onChange: (operation) => this.props.onSmartEditOperationChange(operation), style: { marginRight: 1 } }),
|
|
72
72
|
React.createElement(Input, { style: {
|
|
@@ -17,7 +17,7 @@ export const LoadButton = (props) => {
|
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
19
|
return (React.createElement(SimpleButton, { ...props, className: "ab-StateManagement__Load-Button" },
|
|
20
|
-
React.createElement("input", { type: "file", onChange: (json) => onLoadInitialState(json), accept: '.json', style: {
|
|
20
|
+
React.createElement("input", { "aria-label": "Load Adaptable State", type: "file", onChange: (json) => onLoadInitialState(json), accept: '.json', style: {
|
|
21
21
|
opacity: 0,
|
|
22
22
|
position: 'absolute',
|
|
23
23
|
cursor: 'pointer',
|
|
@@ -23,7 +23,7 @@ export const ThemeSelector = (props) => {
|
|
|
23
23
|
label: theme.Description,
|
|
24
24
|
};
|
|
25
25
|
});
|
|
26
|
-
return (React.createElement(Select, { "data-name": "select-theme-dropdown", searchable: false, options: optionThemes, value: currentTheme, disabled: disabled, size: props.size, onChange: (themeName) => {
|
|
26
|
+
return (React.createElement(Select, { "aria-label": "Select Theme", "data-name": "select-theme-dropdown", searchable: false, options: optionThemes, value: currentTheme, disabled: disabled, size: props.size, onChange: (themeName) => {
|
|
27
27
|
dispatch(ThemeRedux.ThemeSelect(themeName));
|
|
28
28
|
} }));
|
|
29
29
|
};
|
|
@@ -225,6 +225,16 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
225
225
|
updateRowGroupsExpandedState(layout?: Layout): void;
|
|
226
226
|
isGroupRowNode(rowNode: IRowNode): boolean;
|
|
227
227
|
getFilteredData(): any[];
|
|
228
|
+
/**
|
|
229
|
+
* This method internally differentiates between server-side and client-side row model
|
|
230
|
+
* and correctly calls the appropriate method as per the current row model type
|
|
231
|
+
*/
|
|
232
|
+
private applyAgGridTransaction;
|
|
233
|
+
/**
|
|
234
|
+
* This method internally differentiates between server-side and client-side row model
|
|
235
|
+
* and correctly calls the appropriate method as per the current row model type
|
|
236
|
+
*/
|
|
237
|
+
private applyAgGridTransactionAsync;
|
|
228
238
|
updateRows(dataRows: any[], dataUpdateConfig?: DataUpdateConfig): Promise<IRowNode[]>;
|
|
229
239
|
addRows(dataRows: any[], dataUpdateConfig?: DataUpdateConfig): Promise<IRowNode[]>;
|
|
230
240
|
addOrUpdateRows(dataRows: any[], dataUpdateConfig?: DataUpdateConfig): Promise<{
|
|
@@ -1557,8 +1557,11 @@ You need to define at least one Layout!`);
|
|
|
1557
1557
|
if (isPivot) {
|
|
1558
1558
|
// let's also support the pivot result columns
|
|
1559
1559
|
const pivotResultColumns = gridApi.getPivotResultColumns() || [];
|
|
1560
|
+
const autoGroupColumns = gridApi
|
|
1561
|
+
.getAllGridColumns()
|
|
1562
|
+
.filter((column) => this.api.columnApi.isAutoRowGroupColumn(column.getColId()));
|
|
1560
1563
|
if (pivotResultColumns.length) {
|
|
1561
|
-
agGridCols = [...agGridCols, ...pivotResultColumns];
|
|
1564
|
+
agGridCols = [...agGridCols, ...pivotResultColumns, ...autoGroupColumns];
|
|
1562
1565
|
}
|
|
1563
1566
|
}
|
|
1564
1567
|
const columnGroupChildren = gridApi
|
|
@@ -1954,6 +1957,28 @@ You need to define at least one Layout!`);
|
|
|
1954
1957
|
});
|
|
1955
1958
|
return data;
|
|
1956
1959
|
}
|
|
1960
|
+
/**
|
|
1961
|
+
* This method internally differentiates between server-side and client-side row model
|
|
1962
|
+
* and correctly calls the appropriate method as per the current row model type
|
|
1963
|
+
*/
|
|
1964
|
+
applyAgGridTransaction(transaction) {
|
|
1965
|
+
const isServerSideRowModel = this.getAgGridRowModelType() === 'serverSide';
|
|
1966
|
+
const agGridApi = this.agGridAdapter.getAgGridApi();
|
|
1967
|
+
return isServerSideRowModel
|
|
1968
|
+
? agGridApi.applyServerSideTransaction(transaction)
|
|
1969
|
+
: agGridApi.applyTransaction(transaction);
|
|
1970
|
+
}
|
|
1971
|
+
/**
|
|
1972
|
+
* This method internally differentiates between server-side and client-side row model
|
|
1973
|
+
* and correctly calls the appropriate method as per the current row model type
|
|
1974
|
+
*/
|
|
1975
|
+
applyAgGridTransactionAsync(transaction, callback) {
|
|
1976
|
+
const isServerSideRowModel = this.getAgGridRowModelType() === 'serverSide';
|
|
1977
|
+
const agGridApi = this.agGridAdapter.getAgGridApi();
|
|
1978
|
+
return isServerSideRowModel
|
|
1979
|
+
? agGridApi.applyServerSideTransactionAsync(transaction, callback)
|
|
1980
|
+
: agGridApi.applyTransactionAsync(transaction, callback);
|
|
1981
|
+
}
|
|
1957
1982
|
updateRows(dataRows, dataUpdateConfig) {
|
|
1958
1983
|
if (this.hasAutogeneratedPrimaryKey) {
|
|
1959
1984
|
this.addSyntheticPrimaryKeyIfMissing(dataRows);
|
|
@@ -1961,9 +1986,7 @@ You need to define at least one Layout!`);
|
|
|
1961
1986
|
dataUpdateConfig = dataUpdateConfig || {};
|
|
1962
1987
|
if (dataUpdateConfig.runAsync) {
|
|
1963
1988
|
return new Promise((resolve) => {
|
|
1964
|
-
this.
|
|
1965
|
-
.getAgGridApi()
|
|
1966
|
-
.applyTransactionAsync({ update: dataRows }, (transaction) => {
|
|
1989
|
+
this.applyAgGridTransactionAsync({ update: dataRows }, (transaction) => {
|
|
1967
1990
|
if (typeof dataUpdateConfig.callback === 'function') {
|
|
1968
1991
|
dataUpdateConfig.callback(transaction);
|
|
1969
1992
|
}
|
|
@@ -1975,7 +1998,7 @@ You need to define at least one Layout!`);
|
|
|
1975
1998
|
});
|
|
1976
1999
|
}
|
|
1977
2000
|
else {
|
|
1978
|
-
const transaction = this.
|
|
2001
|
+
const transaction = this.applyAgGridTransaction({
|
|
1979
2002
|
update: dataRows,
|
|
1980
2003
|
});
|
|
1981
2004
|
if (dataUpdateConfig.flushAsync) {
|
|
@@ -1995,7 +2018,7 @@ You need to define at least one Layout!`);
|
|
|
1995
2018
|
}
|
|
1996
2019
|
if (dataUpdateConfig.runAsync) {
|
|
1997
2020
|
return new Promise((resolve) => {
|
|
1998
|
-
this.
|
|
2021
|
+
this.applyAgGridTransactionAsync(newData, (transaction) => {
|
|
1999
2022
|
if (typeof dataUpdateConfig.callback === 'function') {
|
|
2000
2023
|
dataUpdateConfig.callback(transaction);
|
|
2001
2024
|
}
|
|
@@ -2008,7 +2031,7 @@ You need to define at least one Layout!`);
|
|
|
2008
2031
|
});
|
|
2009
2032
|
}
|
|
2010
2033
|
else {
|
|
2011
|
-
const transaction = this.
|
|
2034
|
+
const transaction = this.applyAgGridTransaction(newData);
|
|
2012
2035
|
if (dataUpdateConfig.flushAsync) {
|
|
2013
2036
|
this.agGridAdapter.getAgGridApi().flushAsyncTransactions();
|
|
2014
2037
|
}
|
|
@@ -2035,9 +2058,7 @@ You need to define at least one Layout!`);
|
|
|
2035
2058
|
dataUpdateConfig = dataUpdateConfig || {};
|
|
2036
2059
|
if (dataUpdateConfig.runAsync) {
|
|
2037
2060
|
return new Promise((resolve) => {
|
|
2038
|
-
this.
|
|
2039
|
-
.getAgGridApi()
|
|
2040
|
-
.applyTransactionAsync({ update: updateDataRows, add: addDataRows, addIndex: dataUpdateConfig.addIndex }, (transaction) => {
|
|
2061
|
+
this.applyAgGridTransactionAsync({ update: updateDataRows, add: addDataRows, addIndex: dataUpdateConfig.addIndex }, (transaction) => {
|
|
2041
2062
|
if (typeof dataUpdateConfig.callback === 'function') {
|
|
2042
2063
|
dataUpdateConfig.callback(transaction);
|
|
2043
2064
|
}
|
|
@@ -2055,7 +2076,7 @@ You need to define at least one Layout!`);
|
|
|
2055
2076
|
});
|
|
2056
2077
|
}
|
|
2057
2078
|
else {
|
|
2058
|
-
const transaction = this.
|
|
2079
|
+
const transaction = this.applyAgGridTransaction({
|
|
2059
2080
|
update: updateDataRows,
|
|
2060
2081
|
add: addDataRows,
|
|
2061
2082
|
addIndex: dataUpdateConfig.addIndex,
|
|
@@ -2076,9 +2097,7 @@ You need to define at least one Layout!`);
|
|
|
2076
2097
|
dataUpdateConfig = dataUpdateConfig || {};
|
|
2077
2098
|
if (dataUpdateConfig.runAsync) {
|
|
2078
2099
|
return new Promise((resolve) => {
|
|
2079
|
-
this.
|
|
2080
|
-
.getAgGridApi()
|
|
2081
|
-
.applyTransactionAsync({ remove: dataRows }, (transaction) => {
|
|
2100
|
+
this.applyAgGridTransactionAsync({ remove: dataRows }, (transaction) => {
|
|
2082
2101
|
if (typeof dataUpdateConfig.callback === 'function') {
|
|
2083
2102
|
dataUpdateConfig.callback(transaction);
|
|
2084
2103
|
}
|
|
@@ -2090,7 +2109,7 @@ You need to define at least one Layout!`);
|
|
|
2090
2109
|
});
|
|
2091
2110
|
}
|
|
2092
2111
|
else {
|
|
2093
|
-
const transaction = this.
|
|
2112
|
+
const transaction = this.applyAgGridTransaction({
|
|
2094
2113
|
remove: dataRows,
|
|
2095
2114
|
});
|
|
2096
2115
|
if (dataUpdateConfig.flushAsync) {
|
|
@@ -3026,7 +3045,7 @@ You need to define at least one Layout!`);
|
|
|
3026
3045
|
// and is specific to Adaptable, therefore we need to refresh it manually
|
|
3027
3046
|
this.refreshHeader();
|
|
3028
3047
|
const layoutModel = layoutStateToLayoutModel(layout);
|
|
3029
|
-
this.layoutManager?.setLayout(layoutModel, {
|
|
3048
|
+
const layoutChanged = this.layoutManager?.setLayout(layoutModel, {
|
|
3030
3049
|
skipApplyRowGroupsExpandedState: !shouldUpdateExpandState,
|
|
3031
3050
|
});
|
|
3032
3051
|
if (layout.AutoSizeColumns) {
|
|
@@ -3049,6 +3068,15 @@ You need to define at least one Layout!`);
|
|
|
3049
3068
|
plugin.afterSetLayout(this, layout);
|
|
3050
3069
|
}
|
|
3051
3070
|
});
|
|
3071
|
+
if (!layoutChanged) {
|
|
3072
|
+
// we won't get an onLayoutChange event
|
|
3073
|
+
// most likely only filters have changed (column or grid filters)
|
|
3074
|
+
// and because filters are not part of the layout manager
|
|
3075
|
+
// there will be no change to the layout
|
|
3076
|
+
// so we need to manually trigger the onLayoutChange event
|
|
3077
|
+
// for other layout-related updates
|
|
3078
|
+
this.onLayoutChange(layout, { skipRefresh: true });
|
|
3079
|
+
}
|
|
3052
3080
|
perfSetLayout.end();
|
|
3053
3081
|
}
|
|
3054
3082
|
getActiveAdaptableAggFuncForCol(columnId) {
|
|
@@ -3172,7 +3200,14 @@ You need to define at least one Layout!`);
|
|
|
3172
3200
|
});
|
|
3173
3201
|
this.refreshCellsBasedOnCellDataChange(rowNode, cellDataChangedInfos);
|
|
3174
3202
|
this.refreshColumnsBasedOnCellDataChange(cellDataChangedInfos);
|
|
3175
|
-
|
|
3203
|
+
const colIds = cellDataChangedInfos.map((c) => c.column.columnId);
|
|
3204
|
+
const { columnFilterApi, gridFilterApi } = this.api.filterApi;
|
|
3205
|
+
const isGridFilterActive = !!gridFilterApi.getCurrentGridFilterExpression();
|
|
3206
|
+
const isColumnFilterActive = colIds.some((colId) => columnFilterApi.isColumnFilterActiveForColumn(colId));
|
|
3207
|
+
const shouldFilter = isGridFilterActive || isColumnFilterActive;
|
|
3208
|
+
if (shouldFilter) {
|
|
3209
|
+
this.filterOnDataChange();
|
|
3210
|
+
}
|
|
3176
3211
|
}
|
|
3177
3212
|
refreshCellsBasedOnCellDataChange(rowNode, cellDataChangedInfos) {
|
|
3178
3213
|
// Check if node is visible as otherwise AG Grid wont refresh
|
|
@@ -3350,18 +3385,21 @@ You need to define at least one Layout!`);
|
|
|
3350
3385
|
};
|
|
3351
3386
|
return hasPivotTotals(one) || hasPivotTotals(other);
|
|
3352
3387
|
}
|
|
3353
|
-
onLayoutChange(layout) {
|
|
3388
|
+
onLayoutChange(layout, options) {
|
|
3354
3389
|
this.logger.info('onLayoutChange()');
|
|
3355
|
-
const
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3390
|
+
const skipRefresh = options?.skipRefresh;
|
|
3391
|
+
if (!skipRefresh) {
|
|
3392
|
+
const prevOnChangeLayout = this.__prevLayoutForOnChange || this.api.layoutApi.getCurrentLayout();
|
|
3393
|
+
// see #on-regroup-expect-group-column-to-be-recomputed-and-setup-properly
|
|
3394
|
+
const rowGroupsChanged = this.isRowGroupDifferentInLayout(prevOnChangeLayout, layout);
|
|
3395
|
+
const hasPivotTotalsInLayout = this.hasPivotTotalsInLayout(prevOnChangeLayout, layout);
|
|
3396
|
+
const pivotColsChanged = JSON.stringify(layout.PivotColumns) !== JSON.stringify(prevOnChangeLayout.PivotColumns);
|
|
3397
|
+
if (rowGroupsChanged || pivotColsChanged || hasPivotTotalsInLayout) {
|
|
3398
|
+
this.updateColumnModelAndRefreshGrid();
|
|
3399
|
+
}
|
|
3400
|
+
else {
|
|
3401
|
+
this.deriveAdaptableColumnStateFromAgGrid();
|
|
3402
|
+
}
|
|
3365
3403
|
}
|
|
3366
3404
|
this.__prevLayoutForOnChange = layout;
|
|
3367
3405
|
this.api.layoutApi.createOrUpdateLayout(layout);
|
|
@@ -108,7 +108,7 @@ export class AgGridExportAdapter {
|
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
catch (error) {
|
|
111
|
-
this.logger.consoleError(`Error exporting ${report.Name} in ${format} format to ${config.destination}`, error);
|
|
111
|
+
this.logger.consoleError(`Error exporting ${report.Name} in ${format} format to ${config.destination}`, error.message);
|
|
112
112
|
}
|
|
113
113
|
finally {
|
|
114
114
|
/**
|
|
@@ -7,7 +7,7 @@ export function DashboardToolbar(props) {
|
|
|
7
7
|
React.createElement("div", { className: "ab-Dashboard__toolbar-content" }, props.children),
|
|
8
8
|
React.createElement(Flex, { className: "ab-Dashboard__toolbar-title", flexDirection: "row", alignItems: "center" },
|
|
9
9
|
React.createElement("span", null, props.title),
|
|
10
|
-
props.showConfigure && (React.createElement(SimpleButton, { icon: "spanner", variant: "text", tone: "none", "data-name": "configure", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Configure ${props.title}`, onClick: () => props.onConfigure() })),
|
|
10
|
+
props.showConfigure && (React.createElement(SimpleButton, { "aria-label": `Configure ${props.title}`, icon: "spanner", variant: "text", tone: "none", "data-name": "configure", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Configure ${props.title}`, onClick: () => props.onConfigure() })),
|
|
11
11
|
' ',
|
|
12
|
-
props.showClose && (React.createElement(SimpleButton, { style: { alignSelf: 'flex-end' }, disabled: props.accessLevel == 'ReadOnly', "data-name": "close", icon: "close", variant: "text", tone: "none", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Close ${props.title} Toolbar`, onClick: () => props.onClose() })))));
|
|
12
|
+
props.showClose && (React.createElement(SimpleButton, { "aria-label": `Close ${props.title}`, style: { alignSelf: 'flex-end' }, disabled: props.accessLevel == 'ReadOnly', "data-name": "close", icon: "close", variant: "text", tone: "none", iconSize: 16, marginLeft: 1, tooltip: props.tooltip || `Close ${props.title} Toolbar`, onClick: () => props.onClose() })))));
|
|
13
13
|
}
|