@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.
- package/index.css +1157 -1319
- package/index.css.map +1 -1
- package/index.d.ts +8 -8
- package/index.js +8 -8
- package/package.json +1 -4
- package/src/AdaptableInterfaces/IAdaptable.d.ts +1 -0
- package/src/AdaptableOptions/UserInterfaceOptions.d.ts +2 -2
- package/src/AdaptableState/Common/AdaptableColumn.d.ts +3 -3
- package/src/AdaptableState/Common/AdaptableForm.d.ts +1 -1
- package/src/AdaptableState/Common/AggregationColumns.d.ts +1 -0
- package/src/AdaptableState/Common/AggregationColumns.js +1 -0
- package/src/AdaptableState/Common/DataUpdateConfig.d.ts +15 -5
- package/src/AdaptableState/Common/TransposeConfig.d.ts +4 -9
- package/src/AdaptableState/InitialState.d.ts +1 -1
- package/src/AdaptableState/UserInterfaceState.d.ts +1 -1
- package/src/Api/ColumnApi.d.ts +1 -1
- package/src/Api/GridApi.d.ts +8 -0
- package/src/Api/Implementation/ApiBase.d.ts +1 -1
- package/src/Api/Implementation/ApiBase.js +1 -1
- package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -1
- package/src/Api/Implementation/ColumnApiImpl.js +4 -4
- package/src/Api/Implementation/GridApiImpl.d.ts +2 -0
- package/src/Api/Implementation/GridApiImpl.js +9 -5
- package/src/Api/Implementation/LayoutHelpers.js +1 -1
- package/src/Api/Implementation/RowFormApiImpl.d.ts +1 -0
- package/src/Api/Implementation/RowFormApiImpl.js +13 -0
- package/src/Api/Internal/ActionColumnInternalApi.js +2 -19
- package/src/Api/Internal/ColumnInternalApi.d.ts +1 -1
- package/src/Api/Internal/ColumnInternalApi.js +5 -3
- package/src/Api/Internal/EventInternalApi.js +1 -1
- package/src/Api/Internal/ExportInternalApi.js +1 -1
- package/src/Api/RowFormApi.d.ts +5 -0
- package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +1 -1
- package/src/Redux/Store/AdaptableReduxMerger.js +5 -6
- package/src/Strategy/CellSummaryModule.d.ts +1 -0
- package/src/Strategy/CellSummaryModule.js +3 -0
- package/src/Strategy/FormatColumnModule.js +2 -2
- package/src/Strategy/LayoutModule.js +23 -19
- package/src/Strategy/PlusMinusModule.d.ts +1 -0
- package/src/Strategy/PlusMinusModule.js +8 -2
- package/src/Strategy/StyledColumnModule.js +14 -6
- package/src/Strategy/TeamSharingModule.js +2 -2
- package/src/Strategy/Utilities/FormatColumn/{getFormatColumnSettingsTargetItems.d.ts → getFormatColumnRowTargetItems.d.ts} +1 -1
- package/src/Strategy/Utilities/FormatColumn/getFormatColumnRowTargetItems.js +22 -0
- package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsViewItems.js +5 -13
- package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +1 -1
- package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +1 -1
- package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +1 -1
- package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +1 -1
- package/src/Utilities/Extensions/StringExtensions.js +1 -1
- package/src/Utilities/Helpers/AdaptableHelper.js +2 -2
- package/src/Utilities/Helpers/FormatHelper.js +1 -1
- package/src/Utilities/Hooks/index.d.ts +1 -2
- package/src/Utilities/Hooks/index.js +1 -2
- package/src/Utilities/Services/LicenseService/index.js +1 -1
- package/src/Utilities/Services/RowSummaryService.d.ts +1 -1
- package/src/Utilities/Services/RowSummaryService.js +2 -2
- package/src/Utilities/getScopeViewItems.js +1 -1
- package/src/Utilities/only.d.ts +18 -0
- package/src/Utilities/only.js +40 -0
- package/src/Utilities/utils/chunk.d.ts +6 -0
- package/src/Utilities/utils/chunk.js +17 -0
- package/src/Utilities/utils/clamp.d.ts +5 -0
- package/src/Utilities/utils/clamp.js +7 -0
- package/src/Utilities/utils/cloneDeepWith.d.ts +9 -0
- package/src/Utilities/utils/cloneDeepWith.js +67 -0
- package/src/Utilities/utils/debounce.d.ts +20 -0
- package/src/Utilities/utils/debounce.js +121 -0
- package/src/Utilities/utils/flatten.d.ts +5 -0
- package/src/Utilities/utils/flatten.js +7 -0
- package/src/Utilities/utils/flattenDeep.d.ts +5 -0
- package/src/Utilities/utils/flattenDeep.js +7 -0
- package/src/Utilities/utils/get.d.ts +6 -0
- package/src/Utilities/utils/get.js +35 -0
- package/src/Utilities/utils/index.d.ts +22 -0
- package/src/Utilities/utils/index.js +22 -0
- package/src/Utilities/utils/isArray.d.ts +6 -0
- package/src/Utilities/utils/isArray.js +6 -0
- package/src/Utilities/utils/isEqual.d.ts +5 -0
- package/src/Utilities/utils/isEqual.js +124 -0
- package/src/Utilities/utils/isObject.d.ts +6 -0
- package/src/Utilities/utils/isObject.js +9 -0
- package/src/Utilities/utils/isPlainObject.d.ts +6 -0
- package/src/Utilities/utils/isPlainObject.js +17 -0
- package/src/Utilities/utils/kebabCase.d.ts +5 -0
- package/src/Utilities/utils/kebabCase.js +8 -0
- package/src/Utilities/utils/merge.d.ts +11 -0
- package/src/Utilities/utils/merge.js +40 -0
- package/src/Utilities/utils/mergeWith.d.ts +7 -0
- package/src/Utilities/utils/mergeWith.js +46 -0
- package/src/Utilities/utils/orderBy.d.ts +8 -0
- package/src/Utilities/utils/orderBy.js +30 -0
- package/src/Utilities/utils/parseInt.d.ts +6 -0
- package/src/Utilities/utils/parseInt.js +9 -0
- package/src/Utilities/utils/sentenceCase.d.ts +6 -0
- package/src/Utilities/utils/sentenceCase.js +15 -0
- package/src/Utilities/utils/startCase.d.ts +5 -0
- package/src/Utilities/utils/startCase.js +11 -0
- package/src/Utilities/utils/throttle.d.ts +17 -0
- package/src/Utilities/utils/throttle.js +19 -0
- package/src/Utilities/utils/toNumber.d.ts +5 -0
- package/src/Utilities/utils/toNumber.js +39 -0
- package/src/Utilities/utils/uniq.d.ts +7 -0
- package/src/Utilities/utils/uniq.js +9 -0
- package/src/Utilities/utils/uniqBy.d.ts +8 -0
- package/src/Utilities/utils/uniqBy.js +22 -0
- package/src/Utilities/utils/words.d.ts +7 -0
- package/src/Utilities/utils/words.js +10 -0
- package/src/Utilities/weightedAverage.d.ts +11 -0
- package/src/Utilities/weightedAverage.js +60 -46
- package/src/View/AdaptableComputedCSSVarsContext.js +1 -1
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +1 -1
- package/src/View/Alert/Wizard/AlertButtonsEditor.js +1 -1
- package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
- package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +1 -1
- package/src/View/Components/ColumnFilter/components/ColumnFilterInputList.js +1 -1
- package/src/View/Components/ColumnFilter/components/FloatingFilterInputList.js +1 -1
- package/src/View/Components/RangesComponent.js +1 -1
- package/src/View/Components/Selectors/PermittedValuesSelector.js +1 -1
- package/src/View/Components/ToolPanel/AdaptableToolPanel.js +1 -1
- package/src/View/Components/ToolPanel/CustomToolPanelContent.js +1 -1
- package/src/View/Components/ValueSelector/index.js +7 -2
- package/src/View/Dashboard/CustomDashboardButton.js +1 -1
- package/src/View/Dashboard/Dashboard.js +1 -1
- package/src/View/Dashboard/DashboardPopup.js +4 -3
- package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +1 -1
- package/src/View/DataSet/DataSetViewPanel.d.ts +1 -1
- package/src/View/Export/Wizard/NewReportWizard.js +8 -8
- package/src/View/Filter/FilterViewPanel.d.ts +1 -1
- package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +19 -10
- package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +1 -1
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +2 -2
- package/src/View/FormatColumn/Wizard/FormatColumnRowScopeWizardSection.d.ts +8 -0
- package/src/View/FormatColumn/Wizard/FormatColumnRowScopeWizardSection.js +80 -0
- package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +22 -61
- package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +22 -8
- package/src/View/GridFilter/GridFilterViewPanel.js +3 -3
- package/src/View/Layout/LayoutViewPanel.js +1 -1
- package/src/View/Layout/TransposedPopup.js +0 -1
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +1 -1
- package/src/View/Note/NoteEditor.js +1 -1
- package/src/View/QuickSearch/useQuickSearchDebounced.js +1 -1
- package/src/View/SpecialColumnSettingsWizardStep.js +1 -1
- package/src/View/StyledColumn/Wizard/StyledColumnBadgeRowsSection.d.ts +8 -0
- package/src/View/StyledColumn/Wizard/{StyledColumnWizardSettingsSection.js → StyledColumnBadgeRowsSection.js} +19 -19
- package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +10 -11
- package/src/View/SystemStatus/SystemStatusViewPanel.d.ts +1 -1
- package/src/View/Theme/ThemeEditor.js +1 -1
- package/src/View/Theme/ThemeField.js +1 -1
- package/src/View/Wizard/OnePageAdaptableWizard.js +1 -1
- package/src/View/Wizard/OnePageWizards.js +1 -1
- package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
- package/src/agGrid/AdaptableAgGrid.js +29 -7
- package/src/agGrid/AgGridAdapter.js +4 -4
- package/src/agGrid/AgGridColumnAdapter.js +11 -4
- package/src/agGrid/AgGridExportAdapter.d.ts +2 -2
- package/src/agGrid/AgGridExportAdapter.js +7 -6
- package/src/agGrid/cellRenderers/PercentBarRenderer.js +17 -5
- package/src/components/ColorPicker/ColorPicker.js +1 -1
- package/src/components/DropdownButton/renderItem.js +1 -1
- package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +1 -1
- package/src/components/FormLayout/index.js +1 -1
- package/src/components/OverlayTrigger/index.js +1 -1
- package/src/components/Select/Select.js +4 -0
- package/src/env.js +2 -2
- package/src/layout-manager/src/isLayoutEqual.js +1 -1
- package/src/metamodel/adaptable.metamodel.d.ts +12 -1
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/migration/VersionUpgrade22.js +9 -0
- package/themes/dark.css +2 -3
- package/themes/light.css +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsTargetItems.js +0 -12
- package/src/Utilities/Hooks/useAdaptableState.d.ts +0 -3
- package/src/Utilities/Hooks/useAdaptableState.js +0 -39
- package/src/View/FormatColumn/Wizard/FormatColumnTargetWizardSection.d.ts +0 -8
- package/src/View/FormatColumn/Wizard/FormatColumnTargetWizardSection.js +0 -31
- package/src/View/StyledColumn/Wizard/StyledColumnWizardSettingsSection.d.ts +0 -8
- /package/src/View/FormatColumn/Wizard/{FormatColumnScopeWizardSection.d.ts → FormatColumnColumnScopeWizardSection.d.ts} +0 -0
- /package/src/View/FormatColumn/Wizard/{FormatColumnScopeWizardSection.js → FormatColumnColumnScopeWizardSection.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import toNumber from '
|
|
1
|
+
import toNumber from './utils/toNumber';
|
|
2
2
|
export const getNumericValue = (input) => {
|
|
3
3
|
if (typeof input === 'number') {
|
|
4
4
|
return input;
|
|
@@ -6,55 +6,69 @@ export const getNumericValue = (input) => {
|
|
|
6
6
|
const numericValue = toNumber(input);
|
|
7
7
|
return isNaN(numericValue) ? null : numericValue;
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
21
|
-
return leafNodes;
|
|
22
|
-
}
|
|
9
|
+
/**
|
|
10
|
+
* Computes a weighted average aggregation: Σ(value × weight) / Σ(weight)
|
|
11
|
+
*
|
|
12
|
+
* AG Grid calls agg functions bottom-up through the group hierarchy. For each group:
|
|
13
|
+
* - Leaf children contribute their raw value × weight
|
|
14
|
+
* - Sub-group children already have partial sums from a previous pass,
|
|
15
|
+
* so we combine those directly instead of re-traversing to leaves
|
|
16
|
+
*
|
|
17
|
+
* The returned object stores partial sums ([columnId] and [weightColumnId])
|
|
18
|
+
* so parent groups can combine sub-group results correctly.
|
|
19
|
+
*/
|
|
23
20
|
export const weightedAverage = (params, columnId, weightColumnId) => {
|
|
24
|
-
const { api: gridApi, rowNode: groupRowNode } = params;
|
|
25
|
-
|
|
26
|
-
let
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
const { api: gridApi, rowNode: groupRowNode, values } = params;
|
|
22
|
+
// numerator: Σ(value × weight)
|
|
23
|
+
let weightedValueSum = 0;
|
|
24
|
+
// denominator: Σ(weight)
|
|
25
|
+
let totalWeight = 0;
|
|
26
|
+
// params.values already respects suppressAggFilteredOnly.
|
|
27
|
+
// We need the matching child nodes only for leaf rows (to look up weight column values).
|
|
28
|
+
const childNodes = getMatchingChildNodes(groupRowNode, values.length);
|
|
29
|
+
for (let i = 0; i < values.length; i++) {
|
|
30
|
+
const value = values[i];
|
|
31
|
+
if (value != null && typeof value === 'object') {
|
|
32
|
+
// sub-group: partial sums already computed by a previous aggregation pass
|
|
33
|
+
weightedValueSum += value[columnId] ?? 0;
|
|
34
|
+
totalWeight += value[weightColumnId] ?? 0;
|
|
37
35
|
}
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
else {
|
|
37
|
+
// leaf row: compute value × weight from cell data
|
|
38
|
+
const childNode = childNodes[i];
|
|
39
|
+
if (!childNode) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// values might be strings during editing
|
|
43
|
+
const columnValue = getNumericValue(value);
|
|
44
|
+
const weightValue = getNumericValue(gridApi.getCellValue({ colKey: weightColumnId, rowNode: childNode }));
|
|
45
|
+
if (weightValue !== null) {
|
|
46
|
+
totalWeight += weightValue;
|
|
47
|
+
}
|
|
48
|
+
if (columnValue !== null && weightValue !== null) {
|
|
49
|
+
weightedValueSum += columnValue * weightValue;
|
|
50
|
+
}
|
|
40
51
|
}
|
|
41
|
-
});
|
|
42
|
-
let result = columnValueSum / weightedColumnValueSum;
|
|
43
|
-
// 0 / 0 = NaN
|
|
44
|
-
if (isNaN(result)) {
|
|
45
|
-
result = 0;
|
|
46
52
|
}
|
|
53
|
+
const result = totalWeight !== 0 ? weightedValueSum / totalWeight : 0;
|
|
47
54
|
return {
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
toNumber: function () {
|
|
55
|
-
return result;
|
|
56
|
-
},
|
|
57
|
-
[columnId]: columnValueSum,
|
|
58
|
-
[weightColumnId]: weightedColumnValueSum,
|
|
55
|
+
// toString/toNumber let AG Grid's default cell renderer display and sort the value
|
|
56
|
+
toString: () => String(result),
|
|
57
|
+
toNumber: () => result,
|
|
58
|
+
// partial sums stored so parent groups can combine sub-group results
|
|
59
|
+
[columnId]: weightedValueSum,
|
|
60
|
+
[weightColumnId]: totalWeight,
|
|
59
61
|
};
|
|
60
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Returns the child node list that corresponds to params.values.
|
|
65
|
+
* When suppressAggFilteredOnly is false, params.values comes from childrenAfterFilter.
|
|
66
|
+
* When true, it comes from childrenAfterGroup (all children).
|
|
67
|
+
* We match by length to pick the right list without checking the grid option directly.
|
|
68
|
+
*/
|
|
69
|
+
function getMatchingChildNodes(groupRowNode, valueCount) {
|
|
70
|
+
if (groupRowNode.childrenAfterFilter?.length === valueCount) {
|
|
71
|
+
return groupRowNode.childrenAfterFilter;
|
|
72
|
+
}
|
|
73
|
+
return groupRowNode.childrenAfterGroup ?? [];
|
|
74
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { CSSNumericVariableWatch } from '../components/Select/CSSNumericVariableWatch';
|
|
3
|
-
import debounce from '
|
|
3
|
+
import debounce from '../Utilities/utils/debounce';
|
|
4
4
|
import { useMemo } from 'react';
|
|
5
5
|
const computedCSSVarNames = [
|
|
6
6
|
'--ab-cmp-select-menu__max-width',
|
|
@@ -8,7 +8,7 @@ import { useRef, useState } from 'react';
|
|
|
8
8
|
import StringExtensions from '../../../Utilities/Extensions/StringExtensions';
|
|
9
9
|
import { DataSource, InfiniteTableGrid, } from '../../../components/InfiniteTable';
|
|
10
10
|
import { Box, Flex } from '../../../components/Flex';
|
|
11
|
-
import throttle from '
|
|
11
|
+
import throttle from '../../../Utilities/utils/throttle';
|
|
12
12
|
import { twMerge } from '../../../twMerge';
|
|
13
13
|
const dataTypes = [
|
|
14
14
|
{
|
|
@@ -8,7 +8,7 @@ import StringExtensions from '../../../Utilities/Extensions/StringExtensions';
|
|
|
8
8
|
import { AdaptableIconSelector } from '../../Components/AdaptableIconSelector';
|
|
9
9
|
import { Select } from '../../../components/Select';
|
|
10
10
|
import { Box, Flex } from '../../../components/Flex';
|
|
11
|
-
import
|
|
11
|
+
import sentenceCase from '../../../Utilities/utils/sentenceCase';
|
|
12
12
|
function renderCommand(command) {
|
|
13
13
|
switch (command) {
|
|
14
14
|
case 'highlight-cell':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useSelector } from 'react-redux';
|
|
3
|
-
import isEqual from '
|
|
3
|
+
import isEqual from '../../../../Utilities/utils/isEqual';
|
|
4
4
|
import * as InternalRedux from '../../../../Redux/ActionsReducers/InternalRedux';
|
|
5
5
|
import { useAdaptable } from '../../../AdaptableContext';
|
|
6
6
|
export const PreviewChartSection = (props) => {
|
|
@@ -4,7 +4,7 @@ import AdaptableInput from '../../AdaptableInput';
|
|
|
4
4
|
import { AdaptableDateInlineInput } from '../../AdaptableInput/AdaptableDateInlineInput';
|
|
5
5
|
import { PermittedValuesSelector } from '../../Selectors/PermittedValuesSelector';
|
|
6
6
|
import { useAdaptable } from '../../../AdaptableContext';
|
|
7
|
-
import debounce from '
|
|
7
|
+
import debounce from '../../../../Utilities/utils/debounce';
|
|
8
8
|
import { useCallback } from 'react';
|
|
9
9
|
function debounceOrImmediate(fn, time) {
|
|
10
10
|
return time && time > 0 ? debounce(fn, time) : fn;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import debounce from '../../../../Utilities/utils/debounce';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { getOperatorMatchingInputs } from '../../../../components/ExpressionEditor/QueryBuilder/utils';
|
|
4
4
|
import Panel from '../../../../components/Panel';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import debounce from '../../../../Utilities/utils/debounce';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { getOperatorMatchingInputs } from '../../../../components/ExpressionEditor/QueryBuilder/utils';
|
|
4
4
|
import { mapColumnDataTypeToExpressionFunctionType } from '../../../../Utilities/adaptableQlUtils';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ColorPicker } from '../../components/ColorPicker';
|
|
3
|
-
import clamp from '
|
|
3
|
+
import clamp from '../../Utilities/utils/clamp';
|
|
4
4
|
import { CheckBox } from '../../components/CheckBox';
|
|
5
5
|
import FormLayout, { FormRow } from '../../components/FormLayout';
|
|
6
6
|
import { NumberInput } from '../../components/Input/NumberInput';
|
|
@@ -98,5 +98,5 @@ export const PermittedValuesSelector = function (props) {
|
|
|
98
98
|
reload();
|
|
99
99
|
}
|
|
100
100
|
};
|
|
101
|
-
return (React.createElement(Select, { "aria-label": "Permitted Values Selector", searchable: props.searchable, 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
|
+
return (React.createElement(Select, { "aria-label": "Permitted Values Selector", searchable: props.searchable ?? 'menulist', 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 }));
|
|
102
102
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import kebabCase from '
|
|
2
|
+
import kebabCase from '../../../Utilities/utils/kebabCase';
|
|
3
3
|
import * as ToolPanelRedux from '../../../Redux/ActionsReducers/ToolPanelRedux';
|
|
4
4
|
import { connect } from 'react-redux';
|
|
5
5
|
import ArrayExtensions from '../../../Utilities/Extensions/ArrayExtensions';
|
|
@@ -3,7 +3,7 @@ import { useLayoutEffect, useRef, useState } from 'react';
|
|
|
3
3
|
import { useAdaptable } from '../../AdaptableContext';
|
|
4
4
|
import { createUuid } from '../../../components/utils/uuid';
|
|
5
5
|
import SimpleButton from '../../../components/SimpleButton';
|
|
6
|
-
import kebabCase from '
|
|
6
|
+
import kebabCase from '../../../Utilities/utils/kebabCase';
|
|
7
7
|
export const CustomToolPanelContent = (props) => {
|
|
8
8
|
const { customToolPanel } = props;
|
|
9
9
|
const { api } = useAdaptable();
|
|
@@ -159,7 +159,12 @@ export const renderSelectionSection = (props) => {
|
|
|
159
159
|
const { value, options, disabled, singleSelect, toLabel, toIdentifier, } = props;
|
|
160
160
|
const selectionBox = (React.createElement(Box, { className: "twa:flex twa:flex-col twa:gap-2 twa:py-2" },
|
|
161
161
|
React.createElement(Box, { className: clsx('twa:flex twa:flex-row', 'twa:border-b twa:border-primarydark/30 twa:rounded-standard') },
|
|
162
|
-
React.createElement(
|
|
162
|
+
singleSelect ? (React.createElement(Box, { className: "twa:flex twa:flex-row twa:text-3 twa:font-normal" },
|
|
163
|
+
"(",
|
|
164
|
+
value.length,
|
|
165
|
+
" of ",
|
|
166
|
+
options.length,
|
|
167
|
+
" selected)")) : (React.createElement(CheckBox, { className: "twa:ml-0.5 twa:font-bold", checked: !value.length ? false : value.length === options.length ? true : null, onChange: (checked) => {
|
|
163
168
|
if (checked) {
|
|
164
169
|
props.onSelectAll();
|
|
165
170
|
}
|
|
@@ -174,7 +179,7 @@ export const renderSelectionSection = (props) => {
|
|
|
174
179
|
value.length,
|
|
175
180
|
" of ",
|
|
176
181
|
options.length,
|
|
177
|
-
" selected)"))),
|
|
182
|
+
" selected)")))),
|
|
178
183
|
React.createElement("div", { className: "twa:flex-1" }),
|
|
179
184
|
React.createElement(Box, { className: "twa:mr-2 twa:text-2 twa:font-normal" }, props.showOnlySelectedCheckbox))));
|
|
180
185
|
return React.createElement(Box, { className: clsx(`${baseClassName}__header `) }, selectionBox);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import SimpleButton from '../../components/SimpleButton';
|
|
4
|
-
import kebabCase from '
|
|
4
|
+
import kebabCase from '../../Utilities/utils/kebabCase';
|
|
5
5
|
export const CustomDashboardButton = (props) => {
|
|
6
6
|
const { button } = props;
|
|
7
7
|
const [componentRevision, setComponentRevision] = useState(1);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import kebabCase from '
|
|
1
|
+
import kebabCase from '../../Utilities/utils/kebabCase';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { connect } from 'react-redux';
|
|
4
4
|
import { Dashboard as DashboardUI, DashboardTab as DashboardTabUI, } from '../../components/Dashboard';
|
|
@@ -71,9 +71,10 @@ class DashboardPopupComponent extends React.Component {
|
|
|
71
71
|
React.createElement(Card, null,
|
|
72
72
|
React.createElement(Card.Title, { gap: 8 }, "Display Settings"),
|
|
73
73
|
React.createElement(Card.Body, { gap: 2, className: "twa:p-2" },
|
|
74
|
-
React.createElement(
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
React.createElement("div", { className: "twa:flex twa:flex-row twa:items-center twa:justify-start twa:gap-3" },
|
|
75
|
+
React.createElement(ToggleButton, { className: "twa:w-24", onChange: (visible) => this.props.onSetDashboardHidden(!visible), checked: !this.props.IsHidden, "data-name": "dashboard-visibility" }, this.props.IsHidden ? 'Hidden' : 'Visible'),
|
|
76
|
+
this.props.DashboardState.Tabs?.length > 0 ? (React.createElement(ToggleButton, { disabled: this.props.IsFloating, className: "twa:w-24", onChange: (expanded) => this.props.onSetDashboardCollapsed(!expanded), checked: !this.props.IsCollapsed, "data-name": "expand-state" }, this.props.IsCollapsed ? 'Collapsed' : 'Expanded')) : null,
|
|
77
|
+
this.props.api.optionsApi.getDashboardOptions().canFloat ? (React.createElement(ToggleButton, { className: "twa:w-24", onChange: (pinned) => this.props.onSetDashboardFloating(!pinned), checked: !this.props.IsFloating, "data-name": "floating" }, this.props.IsFloating ? 'Floating' : 'Pinned')) : null))))),
|
|
77
78
|
React.createElement(Card, { className: "twa:flex-1 twa:overflow-hidden", gap: 0 },
|
|
78
79
|
React.createElement(Card.Title, null, "Contents"),
|
|
79
80
|
React.createElement(Card.Body, { className: "twa:p-2" },
|
|
@@ -16,8 +16,8 @@ declare class DataSetViewPanelComponent extends React.Component<DataSetViewPanel
|
|
|
16
16
|
onSelectedDataSetChanged(dataSetName: string): void;
|
|
17
17
|
}
|
|
18
18
|
export declare let DataSetViewPanelControl: import("react-redux").ConnectedComponent<typeof DataSetViewPanelComponent, {
|
|
19
|
-
ref?: React.Ref<DataSetViewPanelComponent>;
|
|
20
19
|
key?: React.Key | null | undefined;
|
|
20
|
+
ref?: React.Ref<DataSetViewPanelComponent>;
|
|
21
21
|
context?: React.Context<import("react-redux").ReactReduxContextValue<any, import("redux").UnknownAction>>;
|
|
22
22
|
store?: import("redux").Store;
|
|
23
23
|
}>;
|
|
@@ -35,6 +35,14 @@ export const NewReportWizard = (props) => {
|
|
|
35
35
|
props.onFinishWizard(report);
|
|
36
36
|
};
|
|
37
37
|
return (React.createElement(OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: report, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
|
|
38
|
+
{
|
|
39
|
+
title: 'Name',
|
|
40
|
+
details: 'Enter the name of the Report',
|
|
41
|
+
isValid: isValidReportName,
|
|
42
|
+
renderSummary: renderReportNameSummary,
|
|
43
|
+
render: () => (React.createElement(Box, { className: "twa:p-2" },
|
|
44
|
+
React.createElement(ReportNameWizardSection, { onChange: setReport }))),
|
|
45
|
+
},
|
|
38
46
|
{
|
|
39
47
|
title: 'Columns',
|
|
40
48
|
details: 'Choose the Columns you want to include in the Report',
|
|
@@ -48,14 +56,6 @@ export const NewReportWizard = (props) => {
|
|
|
48
56
|
renderSummary: renderReportRowsSummary,
|
|
49
57
|
render: () => React.createElement(ReportRowsWizardSection, { onChange: setReport }),
|
|
50
58
|
},
|
|
51
|
-
{
|
|
52
|
-
title: 'Name',
|
|
53
|
-
details: 'Enter the name of the Report',
|
|
54
|
-
isValid: isValidReportName,
|
|
55
|
-
renderSummary: renderReportNameSummary,
|
|
56
|
-
render: () => (React.createElement(Box, { className: "twa:p-2" },
|
|
57
|
-
React.createElement(ReportNameWizardSection, { onChange: setReport }))),
|
|
58
|
-
},
|
|
59
59
|
{
|
|
60
60
|
details: 'Select Report Tags',
|
|
61
61
|
title: 'Tags',
|
|
@@ -18,8 +18,8 @@ declare class FilterViewPanelComponent extends React.Component<FilterViewPanelCo
|
|
|
18
18
|
private onClearFilters;
|
|
19
19
|
}
|
|
20
20
|
export declare const FilterViewPanelControl: import("react-redux").ConnectedComponent<typeof FilterViewPanelComponent, {
|
|
21
|
-
ref?: React.Ref<FilterViewPanelComponent>;
|
|
22
21
|
key?: React.Key | null | undefined;
|
|
22
|
+
ref?: React.Ref<FilterViewPanelComponent>;
|
|
23
23
|
context?: React.Context<import("react-redux").ReactReduxContextValue<any, import("redux").UnknownAction>>;
|
|
24
24
|
store?: import("redux").Store;
|
|
25
25
|
}>;
|
|
@@ -80,15 +80,12 @@ export const FlashingAlertSettingsWizardSection = (props) => {
|
|
|
80
80
|
React.createElement(Tabs.Content, null,
|
|
81
81
|
React.createElement(FormLayout, null,
|
|
82
82
|
React.createElement(FormRow, { label: "Name" },
|
|
83
|
-
React.createElement(Input, { "data-name": "flashing-cell-name", className: "twa:flex-1 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: flashingCell.Name ?? '' })),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
React.createElement(CheckBox, { "data-name": "flashing-target-aggFuncCell", onChange: (checked) => handleTargetChange('aggFuncCell', checked), checked: flashingCell?.FlashTarget === 'aggFuncCell' ||
|
|
90
|
-
flashingCell?.FlashTarget?.includes?.('aggFuncCell'), tabIndex: -1 }, "Aggregated Function Cell")),
|
|
91
|
-
React.createElement(FormRow, { label: "Duration" },
|
|
83
|
+
React.createElement(Input, { "data-name": "flashing-cell-name", className: "twa:flex-1 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: flashingCell.Name ?? '' }))))),
|
|
84
|
+
React.createElement(Tabs, { autoFocus: false, className: "twa:p-2" },
|
|
85
|
+
React.createElement(Tabs.Tab, null, "Flash Duration"),
|
|
86
|
+
React.createElement(Tabs.Content, null,
|
|
87
|
+
React.createElement(FormLayout, null,
|
|
88
|
+
React.createElement(FormRow, { label: "" },
|
|
92
89
|
React.createElement(Flex, { alignItems: "center" },
|
|
93
90
|
React.createElement(CheckBox, { "data-name": "duration-always", checked: duration === 'always', onChange: (checked) => handleTypeChange(checked ? 'always' : 'number'), className: "twa:mr-4", tabIndex: -1 }, "Always"),
|
|
94
91
|
duration !== 'always' && (React.createElement(React.Fragment, null,
|
|
@@ -96,5 +93,17 @@ export const FlashingAlertSettingsWizardSection = (props) => {
|
|
|
96
93
|
const value = event.target.value;
|
|
97
94
|
setDuration(isNaN(Number(value)) ? 500 : Number(value));
|
|
98
95
|
} }),
|
|
99
|
-
React.createElement(Box, { className: "twa:text-2" }, "ms"))))))))
|
|
96
|
+
React.createElement(Box, { className: "twa:text-2" }, "ms")))))))),
|
|
97
|
+
' ',
|
|
98
|
+
React.createElement(Tabs, { autoFocus: false, className: "twa:p-2" },
|
|
99
|
+
React.createElement(Tabs.Tab, null, "Flash Target"),
|
|
100
|
+
React.createElement(Tabs.Content, null,
|
|
101
|
+
React.createElement(FormLayout, null,
|
|
102
|
+
React.createElement(FormRow, { label: "" },
|
|
103
|
+
React.createElement(CheckBox, { "data-name": "flashing-target", onChange: (checked) => handleTargetChange('cell', checked), className: "twa:mr-3", checked: flashingCell?.FlashTarget === 'cell' ||
|
|
104
|
+
flashingCell?.FlashTarget?.includes?.('cell'), tabIndex: -1 }, "Cell"),
|
|
105
|
+
React.createElement(CheckBox, { "data-name": "flashing-target-row", className: "twa:mr-3", onChange: (checked) => handleTargetChange('row', checked), checked: flashingCell?.FlashTarget === 'row' ||
|
|
106
|
+
flashingCell?.FlashTarget?.includes?.('row'), tabIndex: -1 }, "Row"),
|
|
107
|
+
React.createElement(CheckBox, { "data-name": "flashing-target-aggFuncCell", onChange: (checked) => handleTargetChange('aggFuncCell', checked), checked: flashingCell?.FlashTarget === 'aggFuncCell' ||
|
|
108
|
+
flashingCell?.FlashTarget?.includes?.('aggFuncCell'), tabIndex: -1 }, "Aggregated Function Cell")))))));
|
|
100
109
|
};
|
|
@@ -73,7 +73,7 @@ export const FlashingCellWizard = (props) => {
|
|
|
73
73
|
isValid: isScopeValid,
|
|
74
74
|
render: () => React.createElement(FlashingAlertScopeWizardSection, { onChange: setFlashingCell }),
|
|
75
75
|
renderSummary: renderScopeSummary,
|
|
76
|
-
title: '
|
|
76
|
+
title: 'Columns',
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
details: 'Build the Rules for when Cells should Flash',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import uniq from '
|
|
3
|
-
import clamp from '
|
|
2
|
+
import uniq from '../../../Utilities/utils/uniq';
|
|
3
|
+
import clamp from '../../../Utilities/utils/clamp';
|
|
4
4
|
import HelpBlock from '../../../components/HelpBlock';
|
|
5
5
|
import Input from '../../../components/Input';
|
|
6
6
|
import SimpleButton from '../../../components/SimpleButton';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { FormatColumn } from '../../../AdaptableState/FormatColumnState';
|
|
3
|
+
type FormatColumnRowScopeWizardSectionProps = {
|
|
4
|
+
onChange: (data: FormatColumn) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare const renderFormatColumnRowScopeSummary: (data: FormatColumn) => React.JSX.Element;
|
|
7
|
+
export declare const FormatColumnRowScopeWizardSection: (props: FormatColumnRowScopeWizardSectionProps) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import FormLayout, { FormRow } from '../../../components/FormLayout';
|
|
3
|
+
import { CheckBox } from '../../../components/CheckBox';
|
|
4
|
+
import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
|
|
5
|
+
import { Tag } from '../../../components/Tag';
|
|
6
|
+
import { Box, Flex } from '../../../components/Flex';
|
|
7
|
+
import { Tabs } from '../../../components/Tabs';
|
|
8
|
+
export const renderFormatColumnRowScopeSummary = (data) => {
|
|
9
|
+
return (React.createElement(Box, { className: "twa:p-2" },
|
|
10
|
+
React.createElement(Box, { className: "twa:mt-3" },
|
|
11
|
+
"Data Rows ",
|
|
12
|
+
React.createElement(Tag, null, data.RowScope?.ExcludeDataRows ? 'no' : 'yes')),
|
|
13
|
+
' ',
|
|
14
|
+
React.createElement(Box, { className: "twa:mt-3" },
|
|
15
|
+
"Group Rows ",
|
|
16
|
+
React.createElement(Tag, null, data.RowScope?.ExcludeGroupRows ? 'no' : 'yes')),
|
|
17
|
+
React.createElement(Box, { className: "twa:mt-3" },
|
|
18
|
+
"Summary Rows ",
|
|
19
|
+
React.createElement(Tag, null, data.RowScope?.ExcludeSummaryRows ? 'no' : 'yes')),
|
|
20
|
+
React.createElement(Box, { className: "twa:mt-3" },
|
|
21
|
+
"Total Rows ",
|
|
22
|
+
React.createElement(Tag, null, data.RowScope?.ExcludeTotalRows ? 'no' : 'yes'))));
|
|
23
|
+
};
|
|
24
|
+
export const FormatColumnRowScopeWizardSection = (props) => {
|
|
25
|
+
const { data } = useOnePageAdaptableWizardContext();
|
|
26
|
+
const onExcludeDataRowsChanged = (includeDataRows) => {
|
|
27
|
+
props.onChange({
|
|
28
|
+
...data,
|
|
29
|
+
RowScope: {
|
|
30
|
+
...data.RowScope,
|
|
31
|
+
ExcludeDataRows: !includeDataRows,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
const onExcludeGroupedRowsChanged = (includeGroupedRows) => {
|
|
36
|
+
props.onChange({
|
|
37
|
+
...data,
|
|
38
|
+
RowScope: {
|
|
39
|
+
...data.RowScope,
|
|
40
|
+
ExcludeGroupRows: !includeGroupedRows,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const onExcludeSummaryRowsChanged = (includeSummaryRows) => {
|
|
45
|
+
props.onChange({
|
|
46
|
+
...data,
|
|
47
|
+
RowScope: {
|
|
48
|
+
...data.RowScope,
|
|
49
|
+
ExcludeSummaryRows: !includeSummaryRows,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
const onExcludeTotalRowsChanged = (includeTotalRows) => {
|
|
54
|
+
props.onChange({
|
|
55
|
+
...data,
|
|
56
|
+
RowScope: {
|
|
57
|
+
...data.RowScope,
|
|
58
|
+
ExcludeTotalRows: !includeTotalRows,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
return (React.createElement(Flex, { flexDirection: "column", style: { height: '100%' } },
|
|
63
|
+
React.createElement(Tabs, { className: "twa:mb-3" },
|
|
64
|
+
React.createElement(Tabs.Tab, null, "Row Types"),
|
|
65
|
+
React.createElement(Tabs.Content, null,
|
|
66
|
+
React.createElement(Flex, { flexDirection: "row" },
|
|
67
|
+
React.createElement(FormLayout, null, data.Target === 'cell' && (React.createElement(React.Fragment, null,
|
|
68
|
+
React.createElement(FormRow, { label: "Data (leaf) Rows:" },
|
|
69
|
+
React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
|
|
70
|
+
React.createElement(CheckBox, { "data-name": "include-data-rows-checkbox", checked: !data.RowScope?.ExcludeDataRows, onChange: onExcludeDataRowsChanged, className: "twa:mr-2" }))),
|
|
71
|
+
React.createElement(FormRow, { label: "Group Rows:" },
|
|
72
|
+
React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
|
|
73
|
+
React.createElement(CheckBox, { "data-name": "include-grouped-rows-checkbox", checked: !data.RowScope?.ExcludeGroupRows, onChange: onExcludeGroupedRowsChanged, className: "twa:mr-2" }))),
|
|
74
|
+
React.createElement(FormRow, { label: "Summary Rows:" },
|
|
75
|
+
React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
|
|
76
|
+
React.createElement(CheckBox, { "data-name": "include-summary-rows-checkbox", checked: !data.RowScope?.ExcludeSummaryRows, onChange: onExcludeSummaryRowsChanged, className: "twa:mr-2" }))),
|
|
77
|
+
React.createElement(FormRow, { label: "Total Rows:" },
|
|
78
|
+
React.createElement(Flex, { alignItems: "center", className: "twa:ml-2" },
|
|
79
|
+
React.createElement(CheckBox, { "data-name": "include-total-rows-checkbox", checked: !data.RowScope?.ExcludeTotalRows, onChange: onExcludeTotalRowsChanged, className: "twa:mr-2" })))))))))));
|
|
80
|
+
};
|