@adaptabletools/adaptable 20.1.1 → 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.
- package/package.json +1 -1
- package/src/Utilities/Services/DataService.js +1 -0
- 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/ColumnFilterInput.js +3 -0
- 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 +38 -15
- package/src/components/Dashboard/DashboardToolbar.js +2 -2
- 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 +1 -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/tsconfig.esm.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptabletools/adaptable",
|
|
3
|
-
"version": "20.1.
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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) => {
|
|
@@ -109,6 +109,9 @@ export const ColumnFilterInput = ({ type, value, onChange: onChangeProp, onClear
|
|
|
109
109
|
if (isNaN(numericValue)) {
|
|
110
110
|
numericValue = null;
|
|
111
111
|
liveValue = null;
|
|
112
|
+
if (value === '-') {
|
|
113
|
+
liveValue = value;
|
|
114
|
+
}
|
|
112
115
|
}
|
|
113
116
|
else {
|
|
114
117
|
const prevValueHasSeparator = prevValue.includes('.');
|
|
@@ -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 ?
|
|
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,
|
|
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<{
|