@adaptabletools/adaptable 20.1.2 → 20.1.3

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.
Files changed (45) hide show
  1. package/package.json +1 -1
  2. package/src/Utilities/Services/DataService.js +1 -0
  3. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +2 -2
  4. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +2 -2
  5. package/src/View/CellSummary/CellSummaryDetails.js +2 -2
  6. package/src/View/CellSummary/CellSummaryViewPanel.js +2 -2
  7. package/src/View/ColumnInfo/ColumnInfo.js +2 -2
  8. package/src/View/Comments/CommentsPopup.js +2 -2
  9. package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +7 -1
  10. package/src/View/Components/Forms/AdaptableFormControlTextClear.js +1 -1
  11. package/src/View/Components/PreviewResultsPanel.js +2 -2
  12. package/src/View/Components/Selectors/BulkUpdateValueSelector.js +2 -2
  13. package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
  14. package/src/View/Components/WizardSummaryPage.js +2 -2
  15. package/src/View/Dashboard/CustomDashboardButton.js +1 -1
  16. package/src/View/Dashboard/Dashboard.js +2 -2
  17. package/src/View/Dashboard/DashboardToolbarFactory.js +1 -1
  18. package/src/View/DataChangeHistory/DataChangeHistoryViewPanel.js +8 -9
  19. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +2 -2
  20. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +2 -2
  21. package/src/View/DataSet/DataSetViewPanel.js +1 -1
  22. package/src/View/Export/ReportFormatSelector.js +1 -1
  23. package/src/View/Export/ReportNameSelector.js +1 -1
  24. package/src/View/Filter/FilterViewPanel.js +2 -2
  25. package/src/View/GridFilter/GridFilterViewPanel.js +1 -1
  26. package/src/View/Layout/LayoutViewPanel.js +1 -1
  27. package/src/View/Layout/PivotDetailsPopoup.js +2 -2
  28. package/src/View/Layout/Wizard/sections/ColumnsSection.js +2 -2
  29. package/src/View/Note/NotePopup.js +2 -2
  30. package/src/View/SmartEdit/SmartEditViewPanel.js +1 -1
  31. package/src/View/StateManagement/components/LoadButton.js +1 -1
  32. package/src/View/Theme/ThemeSelector.js +1 -1
  33. package/src/agGrid/AdaptableAgGrid.d.ts +10 -0
  34. package/src/agGrid/AdaptableAgGrid.js +38 -15
  35. package/src/components/Dashboard/DashboardToolbar.js +2 -2
  36. package/src/components/Icon/index.js +1 -1
  37. package/src/components/InfiniteTable/index.d.ts +2 -2
  38. package/src/components/InfiniteTable/index.js +2 -2
  39. package/src/components/List/GridList/index.js +2 -2
  40. package/src/components/Select/Select.d.ts +1 -0
  41. package/src/components/Select/Select.js +1 -1
  42. package/src/components/SimpleButton/index.js +5 -1
  43. package/src/env.js +2 -2
  44. package/src/layout-manager/src/index.js +32 -3
  45. package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "20.1.2",
3
+ "version": "20.1.3",
4
4
  "description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -35,6 +35,7 @@ export class DataService {
35
35
  if (cellDataChangedInfo.newValue != cellDataChangedInfo.oldValue) {
36
36
  this.emitter.emitSync('CellDataChanged', cellDataChangedInfo);
37
37
  this.adaptable.api.eventApi.internalApi.fireCellChangedEvent(cellDataChangedInfo);
38
+ console.log('cell changed called');
38
39
  const dataChangeLogEntry = this.extractDataChangeLogEntry(cellDataChangedInfo);
39
40
  this.cellDataChangeLogSubject$.next(dataChangeLogEntry);
40
41
  }
@@ -6,7 +6,7 @@ import Dropdown from '../../../components/Dropdown';
6
6
  import Input from '../../../components/Input';
7
7
  import { useRef, useState } from 'react';
8
8
  import StringExtensions from '../../../Utilities/Extensions/StringExtensions';
9
- import { DataSource, InfiniteTable } from '../../../components/InfiniteTable';
9
+ import { DataSource, InfiniteTableGrid, } from '../../../components/InfiniteTable';
10
10
  import { Box, Flex } from 'rebass';
11
11
  import throttle from 'lodash/throttle';
12
12
  const dataTypes = [
@@ -331,7 +331,7 @@ const ColumnsList = ({ columns: cols, handle, onValidityChange, onChange, onSele
331
331
  };
332
332
  return (React.createElement(Box, { p: 2, style: { height: '100%' }, className: theme },
333
333
  React.createElement(DataSource, { data: data, primaryKey: "colId" },
334
- React.createElement(InfiniteTable, { columnTypes: {
334
+ React.createElement(InfiniteTableGrid, { columnTypes: {
335
335
  default: {
336
336
  defaultFlex: 1,
337
337
  align: 'center',
@@ -5,7 +5,7 @@ import { Box, Flex } from 'rebass';
5
5
  import Radio from '../../../components/Radio';
6
6
  import FormLayout, { FormRow } from '../../../components/FormLayout';
7
7
  import { ADAPTABLE_MODULE_MAP } from '../../../Utilities/Constants/ModuleConstants';
8
- import { DataSource, InfiniteTable } from '../../../components/InfiniteTable';
8
+ import { DataSource, InfiniteTableGrid, } from '../../../components/InfiniteTable';
9
9
  const ALL_ENTITLEMENTS_MODULES = ALL_MODULES;
10
10
  const tableDOMProps = {
11
11
  style: {
@@ -106,7 +106,7 @@ const EntitlementsListForm = (props) => {
106
106
  }
107
107
  return (React.createElement(Box, { flex: 1, height: "100%", className: theme },
108
108
  React.createElement(DataSource, { data: data, primaryKey: "name" },
109
- React.createElement(InfiniteTable, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
109
+ React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
110
110
  };
111
111
  const DefaultEntitlementForm = (props) => {
112
112
  const abOptions = props.adaptableOptions;
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import EmptyContent from '../../components/EmptyContent';
3
- import { DataSource, InfiniteTable } from '../../components/InfiniteTable';
3
+ import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
4
4
  const columnsMap = {
5
5
  Operation: { field: 'Operation', defaultFlex: 1 },
6
6
  Value: { field: 'Value', defaultFlex: 1 },
@@ -25,7 +25,7 @@ export class CellSummaryDetails extends React.Component {
25
25
  });
26
26
  }
27
27
  return (React.createElement(React.Fragment, null, this.props.CellSummary != null ? (React.createElement(DataSource, { data: data, primaryKey: "Operation" },
28
- React.createElement(InfiniteTable, { domProps: tableDOMProps, columns: columnsMap }))) : (React.createElement(EmptyContent, null,
28
+ React.createElement(InfiniteTableGrid, { domProps: tableDOMProps, columns: columnsMap }))) : (React.createElement(EmptyContent, null,
29
29
  React.createElement("p", null, "No cells are selected - please select some cells.")))));
30
30
  }
31
31
  }
@@ -56,10 +56,10 @@ class CellSummaryViewPanelComponent extends React.Component {
56
56
  const elementType = this.props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
57
57
  return (React.createElement(Flex, { flexDirection: "row", className: shouldDisable ? GeneralConstants.READ_ONLY_STYLE : `ab-${elementType}__CellSummary__wrap`, flexWrap: this.props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
58
58
  React.createElement(Flex, { flex: 1 },
59
- React.createElement(Select, { style: { width: '100%' }, className: `ab-${elementType}__CellSummary__select`, disabled: shouldDisable, options: [...operationMenuItems, ...operationDefinitions], onChange: (x) => this.props.onCellSummaryOperationChange(x), value: this.props.CellSummaryOperation })),
59
+ React.createElement(Select, { "aria-label": "Cell Summary Operation Selector", style: { width: '100%' }, className: `ab-${elementType}__CellSummary__select`, disabled: shouldDisable, options: [...operationMenuItems, ...operationDefinitions], onChange: (x) => this.props.onCellSummaryOperationChange(x), value: this.props.CellSummaryOperation })),
60
60
  React.createElement(Flex, { alignItems: "center", ml: 2 }, React.createElement(React.Fragment, null,
61
61
  renderOperationValue(),
62
- this.props.CellSummary != null && this.props.CellSummary.Count > 0 && (React.createElement(AdaptablePopover, { popoverMaxWidth: 360, className: "ab-ToolPanel__CellSummary__info", bodyText: [cellSummaryPopover], useButton: true, showEvent: 'focus', hideEvent: "blur" }))))));
62
+ this.props.CellSummary != null && this.props.CellSummary.Count > 0 && (React.createElement(AdaptablePopover, { popoverMaxWidth: 360, className: "ab-ToolPanel__CellSummary__info", bodyText: [cellSummaryPopover], useButton: true, showEvent: 'focus', hideEvent: "blur", tooltipText: 'Show Cell Summaries' }))))));
63
63
  }
64
64
  checkSelectedCells() {
65
65
  this.props.onCreateCellSummary();
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Box, Flex } from 'rebass';
3
3
  import FormLayout, { FormRow } from '../../components/FormLayout';
4
- import { DataSource, InfiniteTable } from '../../components/InfiniteTable';
4
+ import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
5
5
  import Panel from '../../components/Panel';
6
6
  import { Tabs } from '../../components/Tabs';
7
7
  import { useAdaptable } from '../AdaptableContext';
@@ -156,7 +156,7 @@ const ColumnDefPreview = (props) => {
156
156
  Value: { field: 'Value', header: 'Value', defaultFlex: 3 },
157
157
  };
158
158
  return (React.createElement(DataSource, { data: keyValuePairs, primaryKey: "Key" },
159
- React.createElement(InfiniteTable, { domProps: domProps, columns: columnsMap })));
159
+ React.createElement(InfiniteTableGrid, { domProps: domProps, columns: columnsMap })));
160
160
  }
161
161
  };
162
162
  const ModuleView = (props) => {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { useSelector } from 'react-redux';
3
- import { DataSource, InfiniteTable } from '../../components/InfiniteTable';
3
+ import { DataSource, InfiniteTableGrid } from '../../components/InfiniteTable';
4
4
  import Panel from '../../components/Panel';
5
5
  import { Box, Flex } from 'rebass';
6
6
  import { useAdaptable } from '../AdaptableContext';
@@ -83,7 +83,7 @@ const CellComments = (props) => {
83
83
  adaptable.api.commentApi.deleteCommentThread(props.commentThread);
84
84
  } })) },
85
85
  React.createElement(DataSource, { data: props.commentThread.Comments, primaryKey: "Uuid" },
86
- React.createElement(InfiniteTable, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
86
+ React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
87
87
  };
88
88
  export const CommentsPopup = (props) => {
89
89
  const commentThreads = useSelector((state) => {
@@ -8,7 +8,13 @@ const renderSingleValue = (option) => {
8
8
  const renderMultipleValues = (values, options) => {
9
9
  const { focused, placeholder } = options;
10
10
  const text = values.map(renderSingleValue).join(', ');
11
- return values.length ? `(${values.length}) ${text}` : focused ? null : placeholder ?? 'Select...';
11
+ return values.length ? (React.createElement(React.Fragment, null,
12
+ React.createElement("span", { "data-name": "multiple-values-count" },
13
+ "(",
14
+ values.length,
15
+ ")"),
16
+ " ",
17
+ text)) : focused ? null : (placeholder ?? 'Select...');
12
18
  };
13
19
  export function useDistinctFilterColumnValues(options) {
14
20
  const { columnId, searchValueRef } = options;
@@ -13,7 +13,7 @@ export const AdaptableFormControlTextClear = React.forwardRef((props, ref) => {
13
13
  width: '100%',
14
14
  ...props.style,
15
15
  } },
16
- React.createElement(Input, { autoFocus: props.autoFocus, style: props.inputStyle, ref: (r) => {
16
+ React.createElement(Input, { "aria-label": props['aria-label'], autoFocus: props.autoFocus, style: props.inputStyle, ref: (r) => {
17
17
  inputRef.current = r;
18
18
  if (!ref) {
19
19
  return;
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { AdaptablePopover } from '../AdaptablePopover';
3
- import { DataSource, InfiniteTable } from '../../components/InfiniteTable';
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(InfiniteTable, { sortable: false, domProps: tableDOMProps, columns: columnsMap })))) : null;
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, InfiniteTable } from '../../components/InfiniteTable';
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(InfiniteTable, { showZebraRows: true, domProps: tableDOMProps, columns: columnsMap }))));
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, "adasdasdas");
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 { changeHistoryMode, activationTime, suspensionTime } = useSelector((state) => ({
24
- changeHistoryMode: state.Internal.DataChangeHistory.currentMode,
25
- activationTime: state.Internal.DataChangeHistory.enableTime,
26
- suspensionTime: state.Internal.DataChangeHistory.suspendTime,
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, InfiniteTable, } from '../../../../components/InfiniteTable';
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(InfiniteTable, { columnPinning: {
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, InfiniteTable, } from '../../../../components/InfiniteTable';
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(InfiniteTable, { columnPinning: {
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, InfiniteTable } from '../../components/InfiniteTable';
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(InfiniteTable, { columnTypes: columnTypes, domProps: tableDOMProps, columns: columns })));
72
+ React.createElement(InfiniteTableGrid, { columnTypes: columnTypes, domProps: tableDOMProps, columns: columns })));
73
73
  };
@@ -1,4 +1,4 @@
1
- import { DataSource, InfiniteTable, } from '../../../../components/InfiniteTable';
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(InfiniteTable, { columnTypes: columnTypes, rowHeight: rowHeight, columnHeaderHeight: headerHeight, domProps: tableDOMProps, columns: columns })));
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, InfiniteTable } from '../../components/InfiniteTable';
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(InfiniteTable, { columnTypes: columnTypes, headerOptions: headerOptions, domProps: tableDOMProps, columns: columnsMap }))));
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<{