@adaptabletools/adaptable 22.0.0-canary.9 → 22.0.1-canary.0

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 (180) hide show
  1. package/index.css +1157 -1319
  2. package/index.css.map +1 -1
  3. package/index.d.ts +8 -8
  4. package/index.js +8 -8
  5. package/package.json +1 -4
  6. package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -0
  7. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +2 -2
  8. package/src/AdaptableState/Common/AdaptableColumn.d.ts +3 -3
  9. package/src/AdaptableState/Common/AdaptableForm.d.ts +1 -1
  10. package/src/AdaptableState/Common/AggregationColumns.d.ts +1 -0
  11. package/src/AdaptableState/Common/AggregationColumns.js +1 -0
  12. package/src/AdaptableState/Common/DataUpdateConfig.d.ts +15 -5
  13. package/src/AdaptableState/Common/TransposeConfig.d.ts +4 -9
  14. package/src/AdaptableState/InitialState.d.ts +1 -1
  15. package/src/AdaptableState/UserInterfaceState.d.ts +1 -1
  16. package/src/Api/ColumnApi.d.ts +1 -1
  17. package/src/Api/GridApi.d.ts +8 -0
  18. package/src/Api/Implementation/ApiBase.d.ts +1 -1
  19. package/src/Api/Implementation/ApiBase.js +1 -1
  20. package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -1
  21. package/src/Api/Implementation/ColumnApiImpl.js +4 -4
  22. package/src/Api/Implementation/GridApiImpl.d.ts +2 -0
  23. package/src/Api/Implementation/GridApiImpl.js +9 -5
  24. package/src/Api/Implementation/LayoutHelpers.js +1 -1
  25. package/src/Api/Implementation/RowFormApiImpl.d.ts +1 -0
  26. package/src/Api/Implementation/RowFormApiImpl.js +13 -0
  27. package/src/Api/Internal/ActionColumnInternalApi.js +2 -19
  28. package/src/Api/Internal/ColumnInternalApi.d.ts +1 -1
  29. package/src/Api/Internal/ColumnInternalApi.js +5 -3
  30. package/src/Api/Internal/EventInternalApi.js +1 -1
  31. package/src/Api/Internal/ExportInternalApi.js +1 -1
  32. package/src/Api/RowFormApi.d.ts +5 -0
  33. package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +1 -1
  34. package/src/Redux/Store/AdaptableReduxMerger.js +5 -6
  35. package/src/Strategy/CellSummaryModule.d.ts +1 -0
  36. package/src/Strategy/CellSummaryModule.js +3 -0
  37. package/src/Strategy/FormatColumnModule.js +2 -2
  38. package/src/Strategy/LayoutModule.js +23 -19
  39. package/src/Strategy/PlusMinusModule.d.ts +1 -0
  40. package/src/Strategy/PlusMinusModule.js +8 -2
  41. package/src/Strategy/StyledColumnModule.js +14 -6
  42. package/src/Strategy/TeamSharingModule.js +2 -2
  43. package/src/Strategy/Utilities/FormatColumn/{getFormatColumnSettingsTargetItems.d.ts → getFormatColumnRowTargetItems.d.ts} +1 -1
  44. package/src/Strategy/Utilities/FormatColumn/getFormatColumnRowTargetItems.js +22 -0
  45. package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsViewItems.js +5 -13
  46. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +1 -1
  47. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +1 -1
  48. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +1 -1
  49. package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +1 -1
  50. package/src/Utilities/Extensions/StringExtensions.js +1 -1
  51. package/src/Utilities/Helpers/AdaptableHelper.js +2 -2
  52. package/src/Utilities/Helpers/FormatHelper.js +1 -1
  53. package/src/Utilities/Hooks/index.d.ts +1 -2
  54. package/src/Utilities/Hooks/index.js +1 -2
  55. package/src/Utilities/Services/LicenseService/index.js +1 -1
  56. package/src/Utilities/Services/RowSummaryService.d.ts +1 -1
  57. package/src/Utilities/Services/RowSummaryService.js +2 -2
  58. package/src/Utilities/getScopeViewItems.js +1 -1
  59. package/src/Utilities/only.d.ts +18 -0
  60. package/src/Utilities/only.js +40 -0
  61. package/src/Utilities/utils/chunk.d.ts +6 -0
  62. package/src/Utilities/utils/chunk.js +17 -0
  63. package/src/Utilities/utils/clamp.d.ts +5 -0
  64. package/src/Utilities/utils/clamp.js +7 -0
  65. package/src/Utilities/utils/cloneDeepWith.d.ts +9 -0
  66. package/src/Utilities/utils/cloneDeepWith.js +67 -0
  67. package/src/Utilities/utils/debounce.d.ts +20 -0
  68. package/src/Utilities/utils/debounce.js +121 -0
  69. package/src/Utilities/utils/flatten.d.ts +5 -0
  70. package/src/Utilities/utils/flatten.js +7 -0
  71. package/src/Utilities/utils/flattenDeep.d.ts +5 -0
  72. package/src/Utilities/utils/flattenDeep.js +7 -0
  73. package/src/Utilities/utils/get.d.ts +6 -0
  74. package/src/Utilities/utils/get.js +35 -0
  75. package/src/Utilities/utils/index.d.ts +22 -0
  76. package/src/Utilities/utils/index.js +22 -0
  77. package/src/Utilities/utils/isArray.d.ts +6 -0
  78. package/src/Utilities/utils/isArray.js +6 -0
  79. package/src/Utilities/utils/isEqual.d.ts +5 -0
  80. package/src/Utilities/utils/isEqual.js +124 -0
  81. package/src/Utilities/utils/isObject.d.ts +6 -0
  82. package/src/Utilities/utils/isObject.js +9 -0
  83. package/src/Utilities/utils/isPlainObject.d.ts +6 -0
  84. package/src/Utilities/utils/isPlainObject.js +17 -0
  85. package/src/Utilities/utils/kebabCase.d.ts +5 -0
  86. package/src/Utilities/utils/kebabCase.js +8 -0
  87. package/src/Utilities/utils/merge.d.ts +11 -0
  88. package/src/Utilities/utils/merge.js +40 -0
  89. package/src/Utilities/utils/mergeWith.d.ts +7 -0
  90. package/src/Utilities/utils/mergeWith.js +46 -0
  91. package/src/Utilities/utils/orderBy.d.ts +8 -0
  92. package/src/Utilities/utils/orderBy.js +30 -0
  93. package/src/Utilities/utils/parseInt.d.ts +6 -0
  94. package/src/Utilities/utils/parseInt.js +9 -0
  95. package/src/Utilities/utils/sentenceCase.d.ts +6 -0
  96. package/src/Utilities/utils/sentenceCase.js +15 -0
  97. package/src/Utilities/utils/startCase.d.ts +5 -0
  98. package/src/Utilities/utils/startCase.js +11 -0
  99. package/src/Utilities/utils/throttle.d.ts +17 -0
  100. package/src/Utilities/utils/throttle.js +19 -0
  101. package/src/Utilities/utils/toNumber.d.ts +5 -0
  102. package/src/Utilities/utils/toNumber.js +39 -0
  103. package/src/Utilities/utils/uniq.d.ts +7 -0
  104. package/src/Utilities/utils/uniq.js +9 -0
  105. package/src/Utilities/utils/uniqBy.d.ts +8 -0
  106. package/src/Utilities/utils/uniqBy.js +22 -0
  107. package/src/Utilities/utils/words.d.ts +7 -0
  108. package/src/Utilities/utils/words.js +10 -0
  109. package/src/Utilities/weightedAverage.d.ts +11 -0
  110. package/src/Utilities/weightedAverage.js +60 -46
  111. package/src/View/AdaptableComputedCSSVarsContext.js +1 -1
  112. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +1 -1
  113. package/src/View/Alert/Wizard/AlertButtonsEditor.js +1 -1
  114. package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
  115. package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +1 -1
  116. package/src/View/Components/ColumnFilter/components/ColumnFilterInputList.js +1 -1
  117. package/src/View/Components/ColumnFilter/components/FloatingFilterInputList.js +1 -1
  118. package/src/View/Components/RangesComponent.js +1 -1
  119. package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
  120. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +1 -1
  121. package/src/View/Components/ToolPanel/CustomToolPanelContent.js +1 -1
  122. package/src/View/Components/ValueSelector/index.js +7 -2
  123. package/src/View/Dashboard/CustomDashboardButton.js +1 -1
  124. package/src/View/Dashboard/Dashboard.js +1 -1
  125. package/src/View/Dashboard/DashboardPopup.js +4 -3
  126. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +1 -1
  127. package/src/View/DataSet/DataSetViewPanel.d.ts +1 -1
  128. package/src/View/Export/Wizard/NewReportWizard.js +8 -8
  129. package/src/View/Filter/FilterViewPanel.d.ts +1 -1
  130. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +19 -10
  131. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +1 -1
  132. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +2 -2
  133. package/src/View/FormatColumn/Wizard/FormatColumnRowScopeWizardSection.d.ts +8 -0
  134. package/src/View/FormatColumn/Wizard/FormatColumnRowScopeWizardSection.js +80 -0
  135. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +22 -61
  136. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +22 -8
  137. package/src/View/GridFilter/GridFilterViewPanel.js +3 -3
  138. package/src/View/Layout/LayoutViewPanel.js +1 -1
  139. package/src/View/Layout/TransposedPopup.js +0 -1
  140. package/src/View/Layout/Wizard/sections/ColumnsSection.js +1 -1
  141. package/src/View/Note/NoteEditor.js +1 -1
  142. package/src/View/QuickSearch/useQuickSearchDebounced.js +1 -1
  143. package/src/View/SpecialColumnSettingsWizardStep.js +1 -1
  144. package/src/View/StyledColumn/Wizard/StyledColumnBadgeRowsSection.d.ts +8 -0
  145. package/src/View/StyledColumn/Wizard/{StyledColumnWizardSettingsSection.js → StyledColumnBadgeRowsSection.js} +19 -19
  146. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +10 -11
  147. package/src/View/SystemStatus/SystemStatusViewPanel.d.ts +1 -1
  148. package/src/View/Theme/ThemeEditor.js +1 -1
  149. package/src/View/Theme/ThemeField.js +1 -1
  150. package/src/View/Wizard/OnePageAdaptableWizard.js +1 -1
  151. package/src/View/Wizard/OnePageWizards.js +1 -1
  152. package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
  153. package/src/agGrid/AdaptableAgGrid.js +29 -7
  154. package/src/agGrid/AgGridAdapter.js +4 -4
  155. package/src/agGrid/AgGridColumnAdapter.js +11 -4
  156. package/src/agGrid/AgGridExportAdapter.d.ts +2 -2
  157. package/src/agGrid/AgGridExportAdapter.js +7 -6
  158. package/src/agGrid/cellRenderers/PercentBarRenderer.js +17 -5
  159. package/src/components/ColorPicker/ColorPicker.js +1 -1
  160. package/src/components/DropdownButton/renderItem.js +1 -1
  161. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +1 -1
  162. package/src/components/FormLayout/index.js +1 -1
  163. package/src/components/OverlayTrigger/index.js +1 -1
  164. package/src/components/Select/Select.js +4 -0
  165. package/src/env.js +2 -2
  166. package/src/layout-manager/src/isLayoutEqual.js +1 -1
  167. package/src/metamodel/adaptable.metamodel.d.ts +12 -1
  168. package/src/metamodel/adaptable.metamodel.js +1 -1
  169. package/src/migration/VersionUpgrade22.js +9 -0
  170. package/themes/dark.css +2 -3
  171. package/themes/light.css +1 -1
  172. package/tsconfig.esm.tsbuildinfo +1 -1
  173. package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsTargetItems.js +0 -12
  174. package/src/Utilities/Hooks/useAdaptableState.d.ts +0 -3
  175. package/src/Utilities/Hooks/useAdaptableState.js +0 -39
  176. package/src/View/FormatColumn/Wizard/FormatColumnTargetWizardSection.d.ts +0 -8
  177. package/src/View/FormatColumn/Wizard/FormatColumnTargetWizardSection.js +0 -31
  178. package/src/View/StyledColumn/Wizard/StyledColumnWizardSettingsSection.d.ts +0 -8
  179. /package/src/View/FormatColumn/Wizard/{FormatColumnScopeWizardSection.d.ts → FormatColumnColumnScopeWizardSection.d.ts} +0 -0
  180. /package/src/View/FormatColumn/Wizard/{FormatColumnScopeWizardSection.js → FormatColumnColumnScopeWizardSection.js} +0 -0
@@ -1,30 +1,22 @@
1
1
  import * as React from 'react';
2
2
  import FormLayout, { FormRow } from '../../../components/FormLayout';
3
- import { CheckBox } from '../../../components/CheckBox';
4
3
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
5
4
  import { Tag } from '../../../components/Tag';
6
5
  import Radio, { RadioGroup } from '../../../components/Radio';
7
6
  import { Box, Flex } from '../../../components/Flex';
8
7
  import { Tabs } from '../../../components/Tabs';
9
8
  import Input from '../../../components/Input';
9
+ import { TypeRadio } from '../../Wizard/TypeRadio';
10
10
  export const renderFormatColumnSettingsSummary = (data) => {
11
11
  return (React.createElement(Box, { className: "twa:p-2" },
12
12
  React.createElement(Box, { className: "twa:mt-3" },
13
13
  "Name ",
14
14
  React.createElement(Tag, null, data.Name)),
15
15
  React.createElement(Box, { className: "twa:mt-3" },
16
- "Data Rows ",
17
- React.createElement(Tag, null, data.RowScope?.ExcludeDataRows ? 'no' : 'yes')),
16
+ "Target",
17
+ ' ',
18
+ React.createElement(Tag, null, !data.Target || data.Target === 'cell' ? 'Column Cells' : 'Column Header')),
18
19
  ' ',
19
- React.createElement(Box, { className: "twa:mt-3" },
20
- "Group Rows ",
21
- React.createElement(Tag, null, data.RowScope?.ExcludeGroupRows ? 'no' : 'yes')),
22
- React.createElement(Box, { className: "twa:mt-3" },
23
- "Summary Rows ",
24
- React.createElement(Tag, null, data.RowScope?.ExcludeSummaryRows ? 'no' : 'yes')),
25
- React.createElement(Box, { className: "twa:mt-3" },
26
- "Total Rows ",
27
- React.createElement(Tag, null, data.RowScope?.ExcludeTotalRows ? 'no' : 'yes')),
28
20
  React.createElement(Box, { className: "twa:mt-3" },
29
21
  "Apply on Column Groups:",
30
22
  ' ',
@@ -33,49 +25,22 @@ export const renderFormatColumnSettingsSummary = (data) => {
33
25
  : data.ColumnGroupScope))));
34
26
  };
35
27
  export const FormatColumnSettingsWizardSection = (props) => {
36
- const { data } = useOnePageAdaptableWizardContext();
37
- const onNameChange = (event) => {
38
- props.onChange({
39
- ...data,
40
- Name: event.target.value,
41
- });
42
- };
43
- const onExcludeDataRowsChanged = (ExcludeDataRows) => {
44
- props.onChange({
45
- ...data,
46
- RowScope: {
47
- ...data.RowScope,
48
- ExcludeDataRows,
49
- },
50
- });
51
- };
52
- const onExcludeGroupedRowsChanged = (ExcludeGroupedRows) => {
28
+ const { data, api } = useOnePageAdaptableWizardContext();
29
+ const currentTarget = data.Target ? data.Target : 'cell';
30
+ const handleTargetChange = (target) => {
31
+ // Update the formatColumn object
53
32
  props.onChange({
54
33
  ...data,
55
- RowScope: {
56
- ...data.RowScope,
57
- ExcludeGroupRows: ExcludeGroupedRows,
58
- },
34
+ Target: target,
59
35
  });
60
36
  };
61
- const onExcludeSummaryRowsChanged = (ExcludeSummaryRows) => {
62
- props.onChange({
63
- ...data,
64
- RowScope: {
65
- ...data.RowScope,
66
- ExcludeSummaryRows,
67
- },
68
- });
69
- };
70
- const onExcludeTotalRowsChanged = (ExcludeTotalRows) => {
37
+ const onNameChange = (event) => {
71
38
  props.onChange({
72
39
  ...data,
73
- RowScope: {
74
- ...data.RowScope,
75
- ExcludeTotalRows,
76
- },
40
+ Name: event.target.value,
77
41
  });
78
42
  };
43
+ const behaviourSpellingVariant = api.internalApi.getCorrectEnglishVariant('Behaviour');
79
44
  return (React.createElement(Flex, { flexDirection: "column", style: { height: '100%' } },
80
45
  React.createElement(Tabs, { className: "twa:mb-3" },
81
46
  React.createElement(Tabs.Tab, null, "Settings"),
@@ -84,24 +49,20 @@ export const FormatColumnSettingsWizardSection = (props) => {
84
49
  React.createElement(FormLayout, { className: "twa:max-w-[300px] twa:w-full" },
85
50
  React.createElement(FormRow, { label: "Name" },
86
51
  React.createElement(Input, { className: "twa:w-full", "data-name": "format-column-name", onChange: onNameChange, value: data?.Name ?? '' })))))),
52
+ React.createElement(Tabs, { className: "twa:mb-3" },
53
+ React.createElement(Tabs.Tab, null, "Target"),
54
+ React.createElement(Tabs.Content, null,
55
+ React.createElement(Flex, { flexDirection: "column" },
56
+ React.createElement(TypeRadio, { "data-name": "target-column-cell", text: 'Column Cells', description: "Column Cells are styled and formatted", checked: currentTarget === 'cell', onClick: () => handleTargetChange('cell') }),
57
+ React.createElement(TypeRadio, { "data-name": "target-column-header", text: 'Column Header', description: "The Column Header is styled (Note: Conditions are not available for Column Headers)", checked: currentTarget === 'columnHeader', onClick: () => handleTargetChange('columnHeader') })))),
87
58
  React.createElement(Tabs, null,
88
- React.createElement(Tabs.Tab, null, "Configuration"),
59
+ React.createElement(Tabs.Tab, null,
60
+ "Column Group ",
61
+ behaviourSpellingVariant,
62
+ " "),
89
63
  React.createElement(Tabs.Content, null,
90
64
  React.createElement(Flex, { flexDirection: "row" },
91
65
  React.createElement(FormLayout, null,
92
- data.Target === 'cell' && (React.createElement(React.Fragment, null,
93
- React.createElement(FormRow, { label: "Exclude Data Rows:" },
94
- React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
95
- React.createElement(CheckBox, { "data-name": "exclude-data-rows-checkbox", checked: data.RowScope?.ExcludeDataRows, onChange: onExcludeDataRowsChanged, className: "twa:mr-2" }))),
96
- React.createElement(FormRow, { label: "Exclude Group Rows:" },
97
- React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
98
- React.createElement(CheckBox, { "data-name": "exclude-grouped-rows-checkbox", checked: data.RowScope?.ExcludeGroupRows, onChange: onExcludeGroupedRowsChanged, className: "twa:mr-2" }))),
99
- React.createElement(FormRow, { label: "Exclude Row Summaries:" },
100
- React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
101
- React.createElement(CheckBox, { "data-name": "exclude-summary-rows-checkbox", checked: data.RowScope?.ExcludeSummaryRows, onChange: onExcludeSummaryRowsChanged, className: "twa:mr-2" }))),
102
- React.createElement(FormRow, { label: "Exclude Total Rows:" },
103
- React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
104
- React.createElement(CheckBox, { "data-name": "exclude-total-rows-checkbox", checked: data.RowScope?.ExcludeTotalRows, onChange: onExcludeTotalRowsChanged, className: "twa:mr-2" }))))),
105
66
  React.createElement(FormRow, { label: "Apply on Column Group:" },
106
67
  React.createElement(RadioGroup, { value: data.ColumnGroupScope || 'Both', name: "columnGroupScope", orientation: "horizontal", onRadioChange: (columnGroupScope) => {
107
68
  props.onChange({
@@ -2,7 +2,10 @@ import * as React from 'react';
2
2
  import { useState } from 'react';
3
3
  import { OnePageAdaptableWizard, OnePageWizardSummary } from '../../Wizard/OnePageAdaptableWizard';
4
4
  import { cloneObject } from '../../../Utilities/Helpers/Helper';
5
- import { FormatColumnScopeWizardSection, renderFormatColumnScopeSummary, } from './FormatColumnScopeWizardSection';
5
+ import { FormatColumnScopeWizardSection, renderFormatColumnScopeSummary, } from './FormatColumnColumnScopeWizardSection';
6
+ import { FormatColumnRowScopeWizardSection, renderFormatColumnRowScopeSummary,
7
+ // renderFormatColumnRowScopeSummary,
8
+ } from './FormatColumnRowScopeWizardSection';
6
9
  import { FormatColumnStyleWizardSection, isFormatColumnStyleValid, renderFormatColumnStyleWizardSummary, } from './FormatColumnStyleWizardSection';
7
10
  import { FormatColumnFormatWizardSection, getFormatDisplayTypeForScope, renderFormatColumnFormatSummary, } from './FormatColumnFormatWizardSection';
8
11
  import { useAdaptable } from '../../AdaptableContext';
@@ -17,11 +20,22 @@ import { isAdaptableRuleValid } from '../../Components/EntityRulesEditor/Utiliti
17
20
  import { FormatColumnRuleWizardSection } from './FormatColumnRuleWizardSection';
18
21
  import { DEFAULT_PREDICATE_ID_FOR_FORMAT_COLUMN } from './constants';
19
22
  import { isObjectEmpty } from '../../../Utilities/Extensions/ObjectExtensions';
20
- import { FormatColumnTargetWizardSection, renderFormatColumnTargetSummary, } from './FormatColumnTargetWizardSection';
21
23
  import { Box, Flex } from '../../../components/Flex';
22
24
  const adjustDisplayFormat = (fc, api) => {
23
25
  const formatColumn = { ...fc };
24
26
  let formatDataType = getFormatDisplayTypeForScope(formatColumn.Scope, api);
27
+ // Add RowScope and Target defaults for Format Columns that have been created in Initial State
28
+ if (!formatColumn.RowScope) {
29
+ formatColumn.RowScope = {
30
+ ExcludeDataRows: false,
31
+ ExcludeGroupRows: false,
32
+ ExcludeSummaryRows: false,
33
+ ExcludeTotalRows: false,
34
+ };
35
+ }
36
+ if (!formatColumn.Target) {
37
+ formatColumn.Target = 'cell';
38
+ }
25
39
  if (formatColumn.Target === 'columnHeader') {
26
40
  // Column Headers are always text
27
41
  formatDataType = 'text';
@@ -96,7 +110,7 @@ export function FormatColumnWizard(props) {
96
110
  return (React.createElement(OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, modal: props.modal, data: formatColumn, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
97
111
  {
98
112
  title: 'Settings',
99
- details: 'Enter Name and set Additional Properties',
113
+ details: 'Enter Name and other Properties',
100
114
  isValid: (formatColumnData) => {
101
115
  if (!formatColumnData.Name) {
102
116
  return 'Format Column Name cannot be blank';
@@ -113,7 +127,7 @@ export function FormatColumnWizard(props) {
113
127
  },
114
128
  },
115
129
  {
116
- title: 'Scope',
130
+ title: 'Columns',
117
131
  details: 'Select which Columns will be formatted',
118
132
  isValid: isScopeValid,
119
133
  renderSummary: renderFormatColumnScopeSummary,
@@ -123,12 +137,12 @@ export function FormatColumnWizard(props) {
123
137
  },
124
138
  },
125
139
  {
126
- title: 'Target',
127
- details: 'Select which Columns Elements will be formatted',
128
- renderSummary: renderFormatColumnTargetSummary,
140
+ title: 'Rows',
141
+ details: 'Select which Rows will be formatted',
142
+ renderSummary: renderFormatColumnRowScopeSummary,
129
143
  render: () => {
130
144
  return (React.createElement(Flex, { flexDirection: "column", className: "twa:p-2 twa:h-full" },
131
- React.createElement(FormatColumnTargetWizardSection, { onChange: setFormatColumn })));
145
+ React.createElement(FormatColumnRowScopeWizardSection, { onChange: setFormatColumn })));
132
146
  },
133
147
  },
134
148
  {
@@ -21,14 +21,14 @@ const QueryViewPanelComponent = (props) => {
21
21
  const disabled = isReadOnly || isSuspended || gridFilterAccessLevel === 'ReadOnly';
22
22
  const buttonExpand = (React.createElement(ButtonExpand, { disabled: disabled, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", className: "twa:ml-1" }));
23
23
  const renderExpressionLabel = () => {
24
- const baseClasses = 'twa:font-mono twa:text-xs twa:py-1.5 twa:px-2 twa:overflow-hidden twa:text-ellipsis twa:whitespace-nowrap twa:bg-white twa:rounded twa:cursor-pointer twa:h-7 twa:leading-4';
24
+ const baseClasses = 'twa:font-mono twa:text-s twa:py-2 twa:px-2 twa:overflow-hidden twa:text-ellipsis twa:whitespace-nowrap twa:bg-defaultbackground twa:text-text-on-defaultbackground twa:rounded twa:cursor-pointer twa:leading-4 twa:flex twa:items-center';
25
25
  const placeholderClasses = 'twa:text-gray-400 twa:italic';
26
26
  const labelClassName = clsx(baseClasses, {
27
27
  [placeholderClasses]: !expression,
28
28
  });
29
29
  const expressionLabel = (React.createElement(Tooltip, { label: expression || 'Click to edit Grid Filter' },
30
- React.createElement(Box, { className: clsx('twa:flex-1 twa:h-full twa:min-w-0', labelClassName), "data-name": "grid-filter-input", onClick: onExpand }, expression || 'Grid Filter')));
31
- return (React.createElement(FieldWrap, { className: "twa:flex-1 twa:min-w-0 twa:overflow-visible" },
30
+ React.createElement(Box, { className: clsx('twa:flex-1 twa:h-full twa:min-w-0', labelClassName), "data-name": "grid-filter-input", onClick: onExpand }, expression || 'Grid Filter...')));
31
+ return (React.createElement(FieldWrap, { className: "twa:flex-1 twa:min-w-0 twa:min-h-input twa:overflow-visible" },
32
32
  buttonExpand,
33
33
  expressionLabel,
34
34
  gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter" }))));
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import * as PopupRedux from '../../Redux/ActionsReducers/PopupRedux';
3
3
  import { connect } from 'react-redux';
4
- import isEqual from 'lodash/isEqual';
4
+ import isEqual from '../../Utilities/utils/isEqual';
5
5
  import { Select } from '../../components/Select';
6
6
  import join from '../../components/utils/join';
7
7
  import * as LayoutRedux from '../../Redux/ActionsReducers/LayoutRedux';
@@ -80,7 +80,6 @@ export const TransposedPopup = (props) => {
80
80
  const transposeConfig = {
81
81
  transposedColumnId: rawConfig.transposedColumnId ?? primaryKey,
82
82
  hideTransposedColumn: rawConfig.hideTransposedColumn ?? true,
83
- autosize: rawConfig.autosize ?? true,
84
83
  columnsToTranspose: rawConfig.columnsToTranspose,
85
84
  rowsToTranspose: rawConfig.rowsToTranspose,
86
85
  };
@@ -365,7 +365,7 @@ export const ColumnsSection = (props) => {
365
365
  const visibleIds = layout.TableColumns.filter((colId) => {
366
366
  return (layout.ColumnVisibility?.[colId] !== false &&
367
367
  adaptable.api.columnApi.isSelectionColumn(colId) === false &&
368
- !adaptable.api.columnApi.internalApi.isAlwaysHiddenColumn(colId));
368
+ !adaptable.api.columnApi.internalApi.isColumnUIHidden(colId));
369
369
  });
370
370
  const currentlyDisplayedColumnIds = searchInputValue
371
371
  ? currentOrder
@@ -1,4 +1,4 @@
1
- import throttle from 'lodash/throttle';
1
+ import throttle from '../../Utilities/utils/throttle';
2
2
  import * as React from 'react';
3
3
  import Textarea from '../../components/Textarea';
4
4
  import SimpleButton from '../../components/SimpleButton';
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useState, useMemo } from 'react';
2
- import debounce from 'lodash/debounce';
2
+ import debounce from '../../Utilities/utils/debounce';
3
3
  import { QUICK_SEARCH_DEBOUNCE_TIME } from '../../Utilities/Constants/GeneralConstants';
4
4
  export const useQuickSearchDebounced = (props) => {
5
5
  const [searchText, setSearchText] = useState(props.QuickSearchText ?? '');
@@ -1,4 +1,4 @@
1
- import chunk from 'lodash/chunk';
1
+ import chunk from '../Utilities/utils/chunk';
2
2
  import * as React from 'react';
3
3
  import { CheckBox } from '../components/CheckBox';
4
4
  import FormLayout, { FormRow } from '../components/FormLayout';
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { StyledColumn } from '../../../types';
3
+ type StyledColumnBadgeRowsSectionProps = {
4
+ onChange: (data: StyledColumn) => void;
5
+ };
6
+ export declare const renderStyledColumnBadgeRowsSummary: (data: StyledColumn) => React.JSX.Element;
7
+ export declare const StyledColumnBadgeRowsSection: (props: StyledColumnBadgeRowsSectionProps) => React.JSX.Element;
8
+ export {};
@@ -5,7 +5,7 @@ import { Tabs } from '../../../components/Tabs';
5
5
  import { Tag } from '../../../components/Tag';
6
6
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
7
7
  import { Flex, Box } from '../../../components/Flex';
8
- export const renderStyledColumnWizardSettingsSummary = (data) => {
8
+ export const renderStyledColumnBadgeRowsSummary = (data) => {
9
9
  const badgeStyle = data;
10
10
  return (React.createElement(Box, { className: "twa:p-2" },
11
11
  React.createElement(Box, { className: "twa:mt-3" },
@@ -22,80 +22,80 @@ export const renderStyledColumnWizardSettingsSummary = (data) => {
22
22
  "Total Rows ",
23
23
  React.createElement(Tag, null, badgeStyle.RowScope?.ExcludeTotalRows ? 'no' : 'yes'))));
24
24
  };
25
- export const StyledColumnWizardSettingsSection = (props) => {
25
+ export const StyledColumnBadgeRowsSection = (props) => {
26
26
  const { data } = useOnePageAdaptableWizardContext();
27
- const onExcludeDataRowsChanged = (ExcludeDataRows) => {
27
+ const onExcludeDataRowsChanged = (includeDataRows) => {
28
28
  props.onChange({
29
29
  ...data,
30
30
  BadgeStyle: {
31
31
  ...data.BadgeStyle,
32
32
  RowScope: {
33
33
  ...data.BadgeStyle.RowScope,
34
- ExcludeDataRows,
34
+ ExcludeDataRows: !includeDataRows,
35
35
  },
36
36
  },
37
37
  });
38
38
  };
39
- const onExcludeGroupedRowsChanged = (ExcludeGroupedRows) => {
39
+ const onExcludeGroupedRowsChanged = (includeGroupedRows) => {
40
40
  props.onChange({
41
41
  ...data,
42
42
  BadgeStyle: {
43
43
  ...data.BadgeStyle,
44
44
  RowScope: {
45
45
  ...data.BadgeStyle.RowScope,
46
- ExcludeGroupRows: ExcludeGroupedRows,
46
+ ExcludeGroupRows: !includeGroupedRows,
47
47
  },
48
48
  },
49
49
  });
50
50
  };
51
- const onExcludeSummaryRowsChanged = (ExcludeSummaryRows) => {
51
+ const onExcludeSummaryRowsChanged = (includeSummaryRows) => {
52
52
  props.onChange({
53
53
  ...data,
54
54
  BadgeStyle: {
55
55
  ...data.BadgeStyle,
56
56
  RowScope: {
57
57
  ...data.BadgeStyle.RowScope,
58
- ExcludeSummaryRows,
58
+ ExcludeSummaryRows: !includeSummaryRows,
59
59
  },
60
60
  },
61
61
  });
62
62
  };
63
- const onExcludeTotalRowsChanged = (ExcludeTotalRows) => {
63
+ const onExcludeTotalRowsChanged = (includeTotalRows) => {
64
64
  props.onChange({
65
65
  ...data,
66
66
  BadgeStyle: {
67
67
  ...data.BadgeStyle,
68
68
  RowScope: {
69
69
  ...data.BadgeStyle.RowScope,
70
- ExcludeTotalRows,
70
+ ExcludeTotalRows: !includeTotalRows,
71
71
  },
72
72
  },
73
73
  });
74
74
  };
75
75
  return (React.createElement(Tabs, null,
76
- React.createElement(Tabs.Tab, null, "Settings"),
76
+ React.createElement(Tabs.Tab, null, "Row Types"),
77
77
  React.createElement(Tabs.Content, null,
78
78
  React.createElement(Flex, { flexDirection: "row" },
79
79
  React.createElement(FormLayout, null,
80
- React.createElement(FormRow, { label: "Exclude Data Rows:" },
80
+ React.createElement(FormRow, { label: "Data (leaf) Rows:" },
81
81
  React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
82
82
  React.createElement(CheckBox, { "data-name": "exclude-data-rows-checkbox", className: "twa:mr-2", checked:
83
83
  // @ts-ignore
84
- data.BadgeStyle.RowScope?.ExcludeDataRows, onChange: onExcludeDataRowsChanged }))),
85
- React.createElement(FormRow, { label: "Exclude Group Rows:" },
84
+ !data.BadgeStyle.RowScope?.ExcludeDataRows, onChange: onExcludeDataRowsChanged }))),
85
+ React.createElement(FormRow, { label: "Group Rows:" },
86
86
  React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
87
87
  React.createElement(CheckBox, { className: "twa:mr-2", "data-name": "exclude-grouped-rows-checkbox", checked:
88
88
  // @ts-ignore
89
- data.BadgeStyle.RowScope?.ExcludeGroupRows, onChange: onExcludeGroupedRowsChanged }))),
90
- React.createElement(FormRow, { label: "Exclude Row Summaries:" },
89
+ !data.BadgeStyle.RowScope?.ExcludeGroupRows, onChange: onExcludeGroupedRowsChanged }))),
90
+ React.createElement(FormRow, { label: "Summary Rows:" },
91
91
  React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
92
92
  React.createElement(CheckBox, { "data-name": "exclude-summary-rows-checkbox", className: "twa:mr-2", checked:
93
93
  // @ts-ignore
94
- data.BadgeStyle.RowScope?.ExcludeSummaryRows, onChange: onExcludeSummaryRowsChanged }))),
94
+ !data.BadgeStyle.RowScope?.ExcludeSummaryRows, onChange: onExcludeSummaryRowsChanged }))),
95
95
  ' ',
96
- React.createElement(FormRow, { label: "Exclude Total Rows:" },
96
+ React.createElement(FormRow, { label: "Total Rows:" },
97
97
  React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
98
98
  React.createElement(CheckBox, { "data-name": "exclude-total-rows-checkbox", className: "twa:mr-2", checked:
99
99
  // @ts-ignore
100
- data.BadgeStyle.RowScope?.ExcludeTotalRows, onChange: onExcludeTotalRowsChanged }))))))));
100
+ !data.BadgeStyle.RowScope?.ExcludeTotalRows, onChange: onExcludeTotalRowsChanged }))))))));
101
101
  };
@@ -8,7 +8,7 @@ import { renderStyledColumnTypeSummary, StyledColumnWizardTypeSection, } from '.
8
8
  import { isValidStyledColumnColumn, renderStyledColumnColumnSummary, StyledColumnWizardColumnSection, } from './StyledColumnWizardColumnSection';
9
9
  import { renderStyledColumnStyleSummary, StyledColumnWizardStyleSection, } from './StyledColumnWizardStyleSection';
10
10
  import { cloneObject } from '../../../Utilities/Helpers/Helper';
11
- import { renderStyledColumnWizardSettingsSummary, StyledColumnWizardSettingsSection, } from './StyledColumnWizardSettingsSection';
11
+ import { renderStyledColumnBadgeRowsSummary, StyledColumnBadgeRowsSection, } from './StyledColumnBadgeRowsSection';
12
12
  import { StyledColumnSparklineSettingsSection } from './StyledColumnSparklineSettingsSection';
13
13
  import { ObjectTagsWizardSection, renderObjectTagsSummary, } from '../../Wizard/ObjectTagsWizardSection';
14
14
  import { renderBadgeSummary, StyledColumnBadgeSection } from './StyledColumnBadgeSection';
@@ -48,15 +48,6 @@ export const StyledColumnWizard = (props) => {
48
48
  }
49
49
  props.onFinishWizard(styledColumn);
50
50
  };
51
- const AdditionalSettingSection = {
52
- details: 'Apply Additional Settings',
53
- renderSummary: renderStyledColumnWizardSettingsSummary,
54
- render: () => {
55
- return (React.createElement(Box, { className: "twa:p-2" },
56
- React.createElement(StyledColumnWizardSettingsSection, { onChange: setStyledColumn })));
57
- },
58
- title: 'Settings',
59
- };
60
51
  const specificSteps = [];
61
52
  if (styledColumn.SparklineStyle) {
62
53
  specificSteps.push({
@@ -93,6 +84,15 @@ export const StyledColumnWizard = (props) => {
93
84
  );
94
85
  }
95
86
  else if (styledColumn.BadgeStyle) {
87
+ specificSteps.push({
88
+ details: 'Select the Rows where the Badge will be applied',
89
+ renderSummary: renderStyledColumnBadgeRowsSummary,
90
+ render: () => {
91
+ return (React.createElement(Box, { className: "twa:p-2" },
92
+ React.createElement(StyledColumnBadgeRowsSection, { onChange: setStyledColumn })));
93
+ },
94
+ title: 'Rows',
95
+ });
96
96
  specificSteps.push({
97
97
  title: 'Badges',
98
98
  details: 'Create Badge Styles',
@@ -110,7 +110,6 @@ export const StyledColumnWizard = (props) => {
110
110
  render: () => (React.createElement(Box, { className: "twa:p-2" },
111
111
  React.createElement(StyledColumnBadgeSection, { onChange: setStyledColumn }))),
112
112
  });
113
- specificSteps.push(AdditionalSettingSection);
114
113
  }
115
114
  return (React.createElement(OnePageAdaptableWizard, { defaultCurrentSectionName: defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: styledColumn, onFinish: handleFinish, onHide: props.onCloseWizard, sections: [
116
115
  {
@@ -9,8 +9,8 @@ declare class SystemStatusViewPanelComponent extends React.Component<SystemStatu
9
9
  render(): React.JSX.Element;
10
10
  }
11
11
  export declare let SystemStatusViewPanel: import("react-redux").ConnectedComponent<typeof SystemStatusViewPanelComponent, {
12
- ref?: React.Ref<SystemStatusViewPanelComponent>;
13
12
  key?: React.Key | null | undefined;
13
+ ref?: React.Ref<SystemStatusViewPanelComponent>;
14
14
  context?: React.Context<import("react-redux").ReactReduxContextValue<any, import("redux").UnknownAction>>;
15
15
  store?: import("redux").Store;
16
16
  }>;
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import FormLayout, { FormRow } from '../../components/FormLayout';
3
3
  import { useAdaptable } from '../AdaptableContext';
4
4
  import AdaptableInput from '../Components/AdaptableInput';
5
- import throttle from 'lodash/throttle';
5
+ import throttle from '../../Utilities/utils/throttle';
6
6
  import SimpleButton from '../../components/SimpleButton';
7
7
  import Panel from '../../components/Panel';
8
8
  import { Field } from './ThemeField';
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import throttle from 'lodash/throttle';
2
+ import throttle from '../../Utilities/utils/throttle';
3
3
  import { useAdaptable } from '../AdaptableContext';
4
4
  import { getVariableColor } from '../../Utilities/Helpers/StyleHelper';
5
5
  import { FormRow } from '../../components/FormLayout';
@@ -7,7 +7,7 @@ import { useAdaptable } from '../AdaptableContext';
7
7
  import { Tabs } from '../../components/Tabs';
8
8
  import { NamedQueryContext, } from '../../components/ExpressionEditor/NamedQueryContext';
9
9
  import { OnePageWizard, useOnePageWizardContext } from './OnePageWizards';
10
- import kebabCase from 'lodash/kebabCase';
10
+ import kebabCase from '../../Utilities/utils/kebabCase';
11
11
  import { Box } from '../../components/Flex';
12
12
  import { twMerge } from '../../twMerge';
13
13
  export const SummaryTag = (props) => (React.createElement(Box, { ...props }));
@@ -156,7 +156,7 @@ export const OnePageWizard = (props) => {
156
156
  } },
157
157
  React.createElement(KeyHint, { className: "twa:mr-2 twa:inline-block twa:text-color-accent-foreground" }, navIndex),
158
158
  React.createElement("div", { className: "twa:flex-1" }, section.title),
159
- React.createElement(Icon, { name: "error", className: clsx('twa:ml-2', validSectionsMap.get(index) !== true ? 'twa:visible' : 'twa:hidden') })));
159
+ React.createElement(Icon, { name: "error", className: clsx('twa:ml-2', validSectionsMap.get(index) !== true ? 'twa:visible' : 'twa:invisible') })));
160
160
  }),
161
161
  selectedFeedback,
162
162
  React.createElement(Box, { className: "twa:flex-1" }),
@@ -223,6 +223,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
223
223
  redrawBody(): void;
224
224
  refreshHeader(): void;
225
225
  redrawRows(rowNodes?: IRowNode[]): void;
226
+ refreshGridHeader(): void;
226
227
  redrawRow(rowNode: IRowNode): void;
227
228
  refreshCell(rowNode: IRowNode, column: string | any, forceUpdate: boolean, suppressFlash?: boolean): void;
228
229
  refreshCells(rowNode: IRowNode, columns: (string | Column)[], forceUpdate: boolean, suppressFlash?: boolean): void;
@@ -1,5 +1,5 @@
1
- import throttle from 'lodash/throttle';
2
- import debounce from 'lodash/debounce';
1
+ import throttle from '../Utilities/utils/throttle';
2
+ import debounce from '../Utilities/utils/debounce';
3
3
  import { createGrid, LocalEventService, } from 'ag-grid-enterprise';
4
4
  import { AdaptableLogger } from './AdaptableLogger';
5
5
  import { PrimaryKeyDocsLink } from '../Utilities/Constants/DocumentationLinkConstants';
@@ -78,7 +78,7 @@ import { AgGridOptionsService } from './AgGridOptionsService';
78
78
  import { parseDateValue } from '../Utilities/Helpers/DateHelper';
79
79
  import { AgGridColumnAdapter } from './AgGridColumnAdapter';
80
80
  import getScrollbarSize from '../Utilities/getScrollbarSize';
81
- import { WEIGHTED_AVERAGE_AGG_FN_NAME, } from '../AdaptableState/Common/AggregationColumns';
81
+ import { ONLY_AGG_FN_NAME, WEIGHTED_AVERAGE_AGG_FN_NAME, } from '../AdaptableState/Common/AggregationColumns';
82
82
  import { RowFormService } from '../Utilities/Services/RowFormService';
83
83
  import { FilterOnDataChangeOptions } from '../AdaptableState/Common/Enums';
84
84
  import { ADAPTABLE_PUBLISH_TIMESTAMP } from '../EnvVars';
@@ -87,6 +87,7 @@ import { ensureLoadingScreenPortalElement } from '../components/Modal';
87
87
  import { AdaptableLoadingScreen } from '../View/Components/Popups/AdaptableLoadingScreen';
88
88
  import { createElement } from 'react';
89
89
  import { createAgStatusPanelComponent } from '../Utilities/createAgStatusPanelComponent';
90
+ import { only } from '../Utilities/only';
90
91
  import { weightedAverage } from '../Utilities/weightedAverage';
91
92
  import { ROW_SUMMARY_ROW_ID } from '../AdaptableState/Common/RowSummary';
92
93
  import { FlashingCellService } from '../Utilities/Services/FlashingCellService';
@@ -1080,6 +1081,9 @@ export class AdaptableAgGrid {
1080
1081
  */
1081
1082
  this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'aggFuncs', (original_aggFuncs) => {
1082
1083
  const aggregationFunctions = original_aggFuncs || {};
1084
+ aggregationFunctions[ONLY_AGG_FN_NAME] = (params) => {
1085
+ return only(params);
1086
+ };
1083
1087
  aggregationFunctions[WEIGHTED_AVERAGE_AGG_FN_NAME] = (params) => {
1084
1088
  const columnId = params.column.getColId();
1085
1089
  const adaptableAggFunc = this.getActiveAdaptableAggFuncForCol(columnId);
@@ -1462,6 +1466,18 @@ export class AdaptableAgGrid {
1462
1466
  caseSensitive: !!this.adaptableOptions.quickSearchOptions.isQuickSearchCaseSensitive,
1463
1467
  };
1464
1468
  });
1469
+ /**
1470
+ * suppressOverlays
1471
+ */
1472
+ this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'suppressOverlays', (original_suppressOverlays) => {
1473
+ // we want to suppress the exporting overlay because having it enabled will turn api.exportDataAsExcel() and api.exportDataAsCsv() into async operations,
1474
+ // see #export_data_synchronously
1475
+ let suppressOverlays = original_suppressOverlays || [];
1476
+ if (!suppressOverlays.includes('exporting')) {
1477
+ suppressOverlays.push('exporting');
1478
+ }
1479
+ return suppressOverlays;
1480
+ });
1465
1481
  }
1466
1482
  /**
1467
1483
  * Either initializes the AG Grid instance or delegates it to the framework wrappers (React/Anglar)
@@ -2244,6 +2260,9 @@ export class AdaptableAgGrid {
2244
2260
  this.logger.consoleError('AG Grid redrawRows failed to locate some row nodes.', rowNodes, ex);
2245
2261
  }
2246
2262
  }
2263
+ refreshGridHeader() {
2264
+ this.agGridAdapter.getAgGridApi().refreshHeader();
2265
+ }
2247
2266
  redrawRow(rowNode) {
2248
2267
  this.redrawRows([rowNode]);
2249
2268
  }
@@ -2541,12 +2560,15 @@ export class AdaptableAgGrid {
2541
2560
  updatedRows: [],
2542
2561
  removedRows: [],
2543
2562
  };
2544
- if (!dataRowConfig || !dataRowConfig.dataRows) {
2563
+ if (!dataRowConfig) {
2564
+ return result;
2565
+ }
2566
+ if (!dataRowConfig.addRows || !dataRowConfig.updateRows || !dataRowConfig.deleteRows) {
2545
2567
  return result;
2546
2568
  }
2547
- const addDataRows = dataRowConfig.dataRows.add;
2548
- const updateDataRows = dataRowConfig.dataRows.update;
2549
- const removeDataRows = dataRowConfig.dataRows.delete;
2569
+ const addDataRows = dataRowConfig.addRows;
2570
+ const updateDataRows = dataRowConfig.updateRows;
2571
+ const removeDataRows = dataRowConfig.deleteRows;
2550
2572
  if (this.hasAutogeneratedPrimaryKey) {
2551
2573
  this.addSyntheticPrimaryKeyIfMissing(addDataRows);
2552
2574
  }
@@ -471,8 +471,8 @@ export class AgGridAdapter {
471
471
  ? 'number'
472
472
  : this.deriveAdaptableColumnDataType(agGridColumn, false);
473
473
  const isTreeColumn = this.isTreeColumn(isGeneratedRowGroupColumn);
474
- const alwaysHidden = this.adaptableApi.columnApi.internalApi.isAlwaysHiddenColumn(colDef);
475
- const visible = !alwaysHidden || agGridColumn.isVisible();
474
+ const isUIHiddenColumn = this.adaptableApi.columnApi.internalApi.isColumnUIHidden(colDef);
475
+ const visible = !isUIHiddenColumn || agGridColumn.isVisible();
476
476
  const isGenerated = isGeneratedRowGroupColumn || isGeneratedPivotResultColumn || isGeneratedSelectionColumn;
477
477
  const abColumn = {
478
478
  Uuid: createUuid(),
@@ -482,9 +482,9 @@ export class AgGridAdapter {
482
482
  resizable: colDef.resizable !== false,
483
483
  friendlyName: friendlyName,
484
484
  isPrimaryKey: ColumnId === pkColumn,
485
- dataType: dataType,
485
+ dataType,
486
486
  visible,
487
- alwaysHidden,
487
+ isUIHiddenColumn,
488
488
  readOnly: this.isColumnReadonly(colDef),
489
489
  columnGroup: ColumnGroup,
490
490
  fieldOnly: isGenerated ? false : this.isColumnFieldonly(colDef),
@@ -1,5 +1,5 @@
1
- import kebabCase from 'lodash/kebabCase';
2
- import merge from 'lodash/merge';
1
+ import kebabCase from '../Utilities/utils/kebabCase';
2
+ import merge from '../Utilities/utils/merge';
3
3
  import { convertAdaptableStyleToCSS, getVariableColor, normalizeStyleForAgGrid, } from '../Utilities/Helpers/StyleHelper';
4
4
  import StringExtensions from '../Utilities/Extensions/StringExtensions';
5
5
  import { ACTION_COLUMN_TYPE, CALCULATED_COLUMN_TYPE, FDC3_COLUMN_TYPE, FREE_TEXT_COLUMN_TYPE, } from '../AdaptableState/Common/AdaptableColumn';
@@ -533,8 +533,15 @@ export class AgGridColumnAdapter {
533
533
  returnValue = params.value;
534
534
  }
535
535
  if (textOptions.includes('PercentageValue')) {
536
- const clampedValue = Helper.clamp(params.value, min, max);
537
- const percentageValue = ((clampedValue - min) / (max - min)) * 100;
536
+ let percentageValue;
537
+ if (styledColumn.PercentBarStyle.ColumnComparison) {
538
+ const absMax = Math.abs(max);
539
+ percentageValue = absMax === 0 ? 0 : (Number(params.value) / absMax) * 100;
540
+ }
541
+ else {
542
+ const clampedValue = Helper.clamp(params.value, min, max);
543
+ percentageValue = ((clampedValue - min) / (max - min)) * 100;
544
+ }
538
545
  returnValue += ' ' + `(${percentageValue.toFixed(0)}%)`;
539
546
  }
540
547
  return returnValue ? returnValue : params.value;