@vuu-ui/vuu-table-extras 0.0.26
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/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/cell-edit-validators/CaseValidator.js +24 -0
- package/cjs/cell-edit-validators/CaseValidator.js.map +1 -0
- package/cjs/cell-edit-validators/PatternValidator.js +26 -0
- package/cjs/cell-edit-validators/PatternValidator.js.map +1 -0
- package/cjs/cell-renderers/background-cell/BackgroundCell.css.js +6 -0
- package/cjs/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
- package/cjs/cell-renderers/background-cell/BackgroundCell.js +79 -0
- package/cjs/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +6 -0
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +67 -0
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
- package/cjs/cell-renderers/background-cell/BackgroundKeyframes.css.js +6 -0
- package/cjs/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
- package/cjs/cell-renderers/background-cell/useDirection.js +20 -0
- package/cjs/cell-renderers/background-cell/useDirection.js.map +1 -0
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.css.js +6 -0
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js +65 -0
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
- package/cjs/cell-renderers/lookup-cell/LookupCell.js +26 -0
- package/cjs/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.css.js +6 -0
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js +62 -0
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
- package/cjs/cell-renderers/progress-cell/ProgressCell.css.js +6 -0
- package/cjs/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
- package/cjs/cell-renderers/progress-cell/ProgressCell.js +69 -0
- package/cjs/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
- package/cjs/column-expression-input/ColumnExpressionInput.css.js +6 -0
- package/cjs/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
- package/cjs/column-expression-input/ColumnExpressionInput.js +39 -0
- package/cjs/column-expression-input/ColumnExpressionInput.js.map +1 -0
- package/cjs/column-expression-input/column-function-descriptors.js +307 -0
- package/cjs/column-expression-input/column-function-descriptors.js.map +1 -0
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +29 -0
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +469 -0
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
- package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js +61 -0
- package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
- package/cjs/column-expression-input/column-language-parser/generated/column-parser.js +21 -0
- package/cjs/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
- package/cjs/column-expression-input/functionDocInfo.js +39 -0
- package/cjs/column-expression-input/functionDocInfo.js.map +1 -0
- package/cjs/column-expression-input/highlighting.js +16 -0
- package/cjs/column-expression-input/highlighting.js.map +1 -0
- package/cjs/column-expression-input/theme.js +63 -0
- package/cjs/column-expression-input/theme.js.map +1 -0
- package/cjs/column-expression-input/useColumnAutoComplete.js +358 -0
- package/cjs/column-expression-input/useColumnAutoComplete.js.map +1 -0
- package/cjs/column-expression-input/useColumnExpressionEditor.js +131 -0
- package/cjs/column-expression-input/useColumnExpressionEditor.js.map +1 -0
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js +212 -0
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
- package/cjs/column-expression-panel/ColumnExpressionPanel.js +87 -0
- package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +1 -0
- package/cjs/column-expression-panel/useColumnExpression.js +69 -0
- package/cjs/column-expression-panel/useColumnExpression.js.map +1 -0
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js +97 -0
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js +107 -0
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js +90 -0
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.css.js +6 -0
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js +49 -0
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
- package/cjs/column-list/ColumnList.css.js +6 -0
- package/cjs/column-list/ColumnList.css.js.map +1 -0
- package/cjs/column-list/ColumnList.js +115 -0
- package/cjs/column-list/ColumnList.js.map +1 -0
- package/cjs/column-settings/ColumnNameLabel.css.js +6 -0
- package/cjs/column-settings/ColumnNameLabel.css.js.map +1 -0
- package/cjs/column-settings/ColumnNameLabel.js +45 -0
- package/cjs/column-settings/ColumnNameLabel.js.map +1 -0
- package/cjs/column-settings/ColumnSettingsPanel.css.js +6 -0
- package/cjs/column-settings/ColumnSettingsPanel.css.js.map +1 -0
- package/cjs/column-settings/ColumnSettingsPanel.js +195 -0
- package/cjs/column-settings/ColumnSettingsPanel.js.map +1 -0
- package/cjs/column-settings/useColumnSettings.js +235 -0
- package/cjs/column-settings/useColumnSettings.js.map +1 -0
- package/cjs/datasource-stats/DatasourceStats.css.js +6 -0
- package/cjs/datasource-stats/DatasourceStats.css.js.map +1 -0
- package/cjs/datasource-stats/DatasourceStats.js +48 -0
- package/cjs/datasource-stats/DatasourceStats.js.map +1 -0
- package/cjs/index.js +54 -0
- package/cjs/index.js.map +1 -0
- package/cjs/table-settings/TableSettingsPanel.css.js +6 -0
- package/cjs/table-settings/TableSettingsPanel.css.js.map +1 -0
- package/cjs/table-settings/TableSettingsPanel.js +123 -0
- package/cjs/table-settings/TableSettingsPanel.js.map +1 -0
- package/cjs/table-settings/useTableSettings.js +182 -0
- package/cjs/table-settings/useTableSettings.js.map +1 -0
- package/esm/cell-edit-validators/CaseValidator.js +22 -0
- package/esm/cell-edit-validators/CaseValidator.js.map +1 -0
- package/esm/cell-edit-validators/PatternValidator.js +24 -0
- package/esm/cell-edit-validators/PatternValidator.js.map +1 -0
- package/esm/cell-renderers/background-cell/BackgroundCell.css.js +4 -0
- package/esm/cell-renderers/background-cell/BackgroundCell.css.js.map +1 -0
- package/esm/cell-renderers/background-cell/BackgroundCell.js +77 -0
- package/esm/cell-renderers/background-cell/BackgroundCell.js.map +1 -0
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js +4 -0
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.css.js.map +1 -0
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js +65 -0
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -0
- package/esm/cell-renderers/background-cell/BackgroundKeyframes.css.js +4 -0
- package/esm/cell-renderers/background-cell/BackgroundKeyframes.css.js.map +1 -0
- package/esm/cell-renderers/background-cell/useDirection.js +18 -0
- package/esm/cell-renderers/background-cell/useDirection.js.map +1 -0
- package/esm/cell-renderers/dropdown-cell/DropdownCell.css.js +4 -0
- package/esm/cell-renderers/dropdown-cell/DropdownCell.css.js.map +1 -0
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js +63 -0
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -0
- package/esm/cell-renderers/lookup-cell/LookupCell.js +24 -0
- package/esm/cell-renderers/lookup-cell/LookupCell.js.map +1 -0
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.css.js +4 -0
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.css.js.map +1 -0
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js +60 -0
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -0
- package/esm/cell-renderers/progress-cell/ProgressCell.css.js +4 -0
- package/esm/cell-renderers/progress-cell/ProgressCell.css.js.map +1 -0
- package/esm/cell-renderers/progress-cell/ProgressCell.js +67 -0
- package/esm/cell-renderers/progress-cell/ProgressCell.js.map +1 -0
- package/esm/column-expression-input/ColumnExpressionInput.css.js +4 -0
- package/esm/column-expression-input/ColumnExpressionInput.css.js.map +1 -0
- package/esm/column-expression-input/ColumnExpressionInput.js +37 -0
- package/esm/column-expression-input/ColumnExpressionInput.js.map +1 -0
- package/esm/column-expression-input/column-function-descriptors.js +305 -0
- package/esm/column-expression-input/column-function-descriptors.js.map +1 -0
- package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js +27 -0
- package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -0
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +467 -0
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -0
- package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js +56 -0
- package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -0
- package/esm/column-expression-input/column-language-parser/generated/column-parser.js +19 -0
- package/esm/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -0
- package/esm/column-expression-input/functionDocInfo.js +37 -0
- package/esm/column-expression-input/functionDocInfo.js.map +1 -0
- package/esm/column-expression-input/highlighting.js +14 -0
- package/esm/column-expression-input/highlighting.js.map +1 -0
- package/esm/column-expression-input/theme.js +61 -0
- package/esm/column-expression-input/theme.js.map +1 -0
- package/esm/column-expression-input/useColumnAutoComplete.js +356 -0
- package/esm/column-expression-input/useColumnAutoComplete.js.map +1 -0
- package/esm/column-expression-input/useColumnExpressionEditor.js +129 -0
- package/esm/column-expression-input/useColumnExpressionEditor.js.map +1 -0
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js +210 -0
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -0
- package/esm/column-expression-panel/ColumnExpressionPanel.js +85 -0
- package/esm/column-expression-panel/ColumnExpressionPanel.js.map +1 -0
- package/esm/column-expression-panel/useColumnExpression.js +67 -0
- package/esm/column-expression-panel/useColumnExpression.js.map +1 -0
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js +95 -0
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -0
- package/esm/column-formatting-settings/ColumnFormattingPanel.js +105 -0
- package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -0
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js +88 -0
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -0
- package/esm/column-formatting-settings/LongTypeFormattingSettings.css.js +4 -0
- package/esm/column-formatting-settings/LongTypeFormattingSettings.css.js.map +1 -0
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js +47 -0
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -0
- package/esm/column-list/ColumnList.css.js +4 -0
- package/esm/column-list/ColumnList.css.js.map +1 -0
- package/esm/column-list/ColumnList.js +113 -0
- package/esm/column-list/ColumnList.js.map +1 -0
- package/esm/column-settings/ColumnNameLabel.css.js +4 -0
- package/esm/column-settings/ColumnNameLabel.css.js.map +1 -0
- package/esm/column-settings/ColumnNameLabel.js +43 -0
- package/esm/column-settings/ColumnNameLabel.js.map +1 -0
- package/esm/column-settings/ColumnSettingsPanel.css.js +4 -0
- package/esm/column-settings/ColumnSettingsPanel.css.js.map +1 -0
- package/esm/column-settings/ColumnSettingsPanel.js +193 -0
- package/esm/column-settings/ColumnSettingsPanel.js.map +1 -0
- package/esm/column-settings/useColumnSettings.js +233 -0
- package/esm/column-settings/useColumnSettings.js.map +1 -0
- package/esm/datasource-stats/DatasourceStats.css.js +4 -0
- package/esm/datasource-stats/DatasourceStats.css.js.map +1 -0
- package/esm/datasource-stats/DatasourceStats.js +46 -0
- package/esm/datasource-stats/DatasourceStats.js.map +1 -0
- package/esm/index.js +24 -0
- package/esm/index.js.map +1 -0
- package/esm/table-settings/TableSettingsPanel.css.js +4 -0
- package/esm/table-settings/TableSettingsPanel.css.js.map +1 -0
- package/esm/table-settings/TableSettingsPanel.js +121 -0
- package/esm/table-settings/TableSettingsPanel.js.map +1 -0
- package/esm/table-settings/useTableSettings.js +180 -0
- package/esm/table-settings/useTableSettings.js.map +1 -0
- package/package.json +47 -0
- package/types/cell-edit-validators/CaseValidator.d.ts +2 -0
- package/types/cell-edit-validators/PatternValidator.d.ts +2 -0
- package/types/cell-edit-validators/index.d.ts +2 -0
- package/types/cell-renderers/background-cell/BackgroundCell.d.ts +3 -0
- package/types/cell-renderers/background-cell/BackgroundCellConfigurationEditor.d.ts +3 -0
- package/types/cell-renderers/background-cell/index.d.ts +2 -0
- package/types/cell-renderers/background-cell/useDirection.d.ts +3 -0
- package/types/cell-renderers/dropdown-cell/DropdownCell.d.ts +3 -0
- package/types/cell-renderers/dropdown-cell/index.d.ts +1 -0
- package/types/cell-renderers/index.d.ts +5 -0
- package/types/cell-renderers/lookup-cell/LookupCell.d.ts +3 -0
- package/types/cell-renderers/lookup-cell/index.d.ts +1 -0
- package/types/cell-renderers/pct-progress-cell/PctProgressCell.d.ts +3 -0
- package/types/cell-renderers/pct-progress-cell/index.d.ts +1 -0
- package/types/cell-renderers/progress-cell/ProgressCell.d.ts +1 -0
- package/types/cell-renderers/progress-cell/index.d.ts +1 -0
- package/types/column-expression-input/ColumnExpressionInput.d.ts +10 -0
- package/types/column-expression-input/column-function-descriptors.d.ts +15 -0
- package/types/column-expression-input/column-language-parser/ColumnExpressionLanguage.d.ts +2 -0
- package/types/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.d.ts +58 -0
- package/types/column-expression-input/column-language-parser/column-expression-parse-utils.d.ts +5 -0
- package/types/column-expression-input/column-language-parser/generated/column-parser.d.ts +2 -0
- package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts +24 -0
- package/types/column-expression-input/column-language-parser/index.d.ts +3 -0
- package/types/column-expression-input/column-language-parser/test.d.mts +1 -0
- package/types/column-expression-input/functionDocInfo.d.ts +2 -0
- package/types/column-expression-input/highlighting.d.ts +1 -0
- package/types/column-expression-input/index.d.ts +4 -0
- package/types/column-expression-input/theme.d.ts +1 -0
- package/types/column-expression-input/useColumnAutoComplete.d.ts +6 -0
- package/types/column-expression-input/useColumnExpressionEditor.d.ts +25 -0
- package/types/column-expression-input/useColumnExpressionSuggestionProvider.d.ts +8 -0
- package/types/column-expression-panel/ColumnExpressionPanel.d.ts +13 -0
- package/types/column-expression-panel/index.d.ts +1 -0
- package/types/column-expression-panel/useColumnExpression.d.ts +10 -0
- package/types/column-formatting-settings/BaseNumericFormattingSettings.d.ts +3 -0
- package/types/column-formatting-settings/ColumnFormattingPanel.d.ts +9 -0
- package/types/column-formatting-settings/DateTimeFormattingSettings.d.ts +3 -0
- package/types/column-formatting-settings/LongTypeFormattingSettings.d.ts +3 -0
- package/types/column-formatting-settings/index.d.ts +3 -0
- package/types/column-list/ColumnList.d.ts +12 -0
- package/types/column-list/index.d.ts +1 -0
- package/types/column-settings/ColumnNameLabel.d.ts +7 -0
- package/types/column-settings/ColumnSettingsPanel.d.ts +3 -0
- package/types/column-settings/index.d.ts +1 -0
- package/types/column-settings/useColumnSettings.d.ts +22 -0
- package/types/datasource-stats/DatasourceStats.d.ts +7 -0
- package/types/datasource-stats/index.d.ts +1 -0
- package/types/index.d.ts +9 -0
- package/types/table-settings/TableSettingsPanel.d.ts +8 -0
- package/types/table-settings/index.d.ts +2 -0
- package/types/table-settings/useTableSettings.d.ts +18 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { FormField, FormFieldLabel, ToggleButtonGroup, ToggleButton, Button } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import { ColumnList } from '../column-list/ColumnList.js';
|
|
6
|
+
import { useTableSettings } from './useTableSettings.js';
|
|
7
|
+
import { VuuInput, Icon } from '@vuu-ui/vuu-ui-controls';
|
|
8
|
+
import tableSettingsPanelCss from './TableSettingsPanel.css.js';
|
|
9
|
+
|
|
10
|
+
const classBase = "vuuTableSettingsPanel";
|
|
11
|
+
const TableSettingsPanel = ({
|
|
12
|
+
allowColumnLabelCase = true,
|
|
13
|
+
allowColumnDefaultWidth = true,
|
|
14
|
+
allowGridRowStyling = true,
|
|
15
|
+
availableColumns,
|
|
16
|
+
onAddCalculatedColumn,
|
|
17
|
+
onConfigChange,
|
|
18
|
+
onDataSourceConfigChange,
|
|
19
|
+
onNavigateToColumn,
|
|
20
|
+
tableConfig: tableConfigProp
|
|
21
|
+
}) => {
|
|
22
|
+
const targetWindow = useWindow();
|
|
23
|
+
useComponentCssInjection({
|
|
24
|
+
testId: "vuu-table-settings-panel",
|
|
25
|
+
css: tableSettingsPanelCss,
|
|
26
|
+
window: targetWindow
|
|
27
|
+
});
|
|
28
|
+
const {
|
|
29
|
+
columnItems,
|
|
30
|
+
columnLabelsValue,
|
|
31
|
+
onChangeColumnLabels,
|
|
32
|
+
onChangeTableAttribute,
|
|
33
|
+
onColumnChange,
|
|
34
|
+
onCommitColumnWidth,
|
|
35
|
+
onMoveListItem,
|
|
36
|
+
tableConfig
|
|
37
|
+
} = useTableSettings({
|
|
38
|
+
availableColumns,
|
|
39
|
+
onConfigChange,
|
|
40
|
+
onDataSourceConfigChange,
|
|
41
|
+
tableConfig: tableConfigProp
|
|
42
|
+
});
|
|
43
|
+
return /* @__PURE__ */ jsxs("div", { className: classBase, children: [
|
|
44
|
+
allowColumnLabelCase || allowColumnDefaultWidth || allowGridRowStyling ? /* @__PURE__ */ jsx("div", { className: `${classBase}-header`, children: /* @__PURE__ */ jsx("span", { children: "Column Settings" }) }) : null,
|
|
45
|
+
allowColumnDefaultWidth ? /* @__PURE__ */ jsxs(FormField, { children: [
|
|
46
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Column Width" }),
|
|
47
|
+
/* @__PURE__ */ jsx(
|
|
48
|
+
VuuInput,
|
|
49
|
+
{
|
|
50
|
+
className: "vuuInput",
|
|
51
|
+
"data-embedded": true,
|
|
52
|
+
onCommit: onCommitColumnWidth
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
] }) : null,
|
|
56
|
+
allowColumnLabelCase ? /* @__PURE__ */ jsxs(FormField, { children: [
|
|
57
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Column Labels" }),
|
|
58
|
+
/* @__PURE__ */ jsxs(
|
|
59
|
+
ToggleButtonGroup,
|
|
60
|
+
{
|
|
61
|
+
className: "vuuToggleButtonGroup",
|
|
62
|
+
onChange: onChangeColumnLabels,
|
|
63
|
+
value: columnLabelsValue,
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx(ToggleButton, { className: "vuuIconToggleButton", value: 0, children: /* @__PURE__ */ jsx(Icon, { name: "text-strikethrough", size: 48 }) }),
|
|
66
|
+
/* @__PURE__ */ jsx(ToggleButton, { className: "vuuIconToggleButton", value: 1, children: /* @__PURE__ */ jsx(Icon, { name: "text-Tt", size: 48 }) }),
|
|
67
|
+
/* @__PURE__ */ jsx(ToggleButton, { className: "vuuIconToggleButton", value: 2, children: /* @__PURE__ */ jsx(Icon, { name: "text-T", size: 48 }) })
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
] }) : null,
|
|
72
|
+
allowGridRowStyling ? /* @__PURE__ */ jsxs(FormField, { children: [
|
|
73
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Grid separators" }),
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { className: "saltToggleButtonGroup vuuStateButtonGroup saltToggleButtonGroup-horizontal", children: [
|
|
75
|
+
/* @__PURE__ */ jsx(
|
|
76
|
+
ToggleButton,
|
|
77
|
+
{
|
|
78
|
+
selected: tableConfig.zebraStripes ?? false,
|
|
79
|
+
onChange: onChangeTableAttribute,
|
|
80
|
+
value: "zebraStripes",
|
|
81
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "row-striping", size: 16 })
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsx(
|
|
85
|
+
ToggleButton,
|
|
86
|
+
{
|
|
87
|
+
selected: tableConfig.rowSeparators ?? false,
|
|
88
|
+
onChange: onChangeTableAttribute,
|
|
89
|
+
value: "rowSeparators",
|
|
90
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "row-lines", size: 16 })
|
|
91
|
+
}
|
|
92
|
+
),
|
|
93
|
+
/* @__PURE__ */ jsx(
|
|
94
|
+
ToggleButton,
|
|
95
|
+
{
|
|
96
|
+
selected: tableConfig.columnSeparators ?? false,
|
|
97
|
+
onChange: onChangeTableAttribute,
|
|
98
|
+
value: "columnSeparators",
|
|
99
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "col-lines", size: 16 })
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
] })
|
|
103
|
+
] }) : null,
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
ColumnList,
|
|
106
|
+
{
|
|
107
|
+
columnItems,
|
|
108
|
+
onChange: onColumnChange,
|
|
109
|
+
onMoveListItem,
|
|
110
|
+
onNavigateToColumn
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
/* @__PURE__ */ jsxs("div", { className: `${classBase}-calculatedButtonbar`, children: [
|
|
114
|
+
/* @__PURE__ */ jsx(Button, { "data-icon": "plus", onClick: onAddCalculatedColumn }),
|
|
115
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}-calculatedLabel`, children: "Add calculated column" })
|
|
116
|
+
] })
|
|
117
|
+
] });
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export { TableSettingsPanel };
|
|
121
|
+
//# sourceMappingURL=TableSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableSettingsPanel.js","sources":["../../src/table-settings/TableSettingsPanel.tsx"],"sourcesContent":["import {\n Button,\n FormField,\n FormFieldLabel,\n ToggleButton,\n ToggleButtonGroup,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { TableSettingsProps } from \"@vuu-ui/vuu-table-types\";\nimport { ColumnList } from \"../column-list\";\nimport { useTableSettings } from \"./useTableSettings\";\nimport { Icon } from \"@vuu-ui/vuu-ui-controls\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\n\nimport tableSettingsPanelCss from \"./TableSettingsPanel.css\";\n\nconst classBase = \"vuuTableSettingsPanel\";\n\n/**\n The TableSettingsPanel assumes 'ownership' of the tableSettings.\n It updates the settings in state locally and notifies caller of\n every change via onChange callback\n */\nexport const TableSettingsPanel = ({\n allowColumnLabelCase = true,\n allowColumnDefaultWidth = true,\n allowGridRowStyling = true,\n availableColumns,\n onAddCalculatedColumn,\n onConfigChange,\n onDataSourceConfigChange,\n onNavigateToColumn,\n tableConfig: tableConfigProp,\n}: TableSettingsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-settings-panel\",\n css: tableSettingsPanelCss,\n window: targetWindow,\n });\n\n const {\n columnItems,\n columnLabelsValue,\n onChangeColumnLabels,\n onChangeTableAttribute,\n onColumnChange,\n onCommitColumnWidth,\n onMoveListItem,\n tableConfig,\n } = useTableSettings({\n availableColumns,\n onConfigChange,\n onDataSourceConfigChange,\n tableConfig: tableConfigProp,\n });\n\n return (\n <div className={classBase}>\n {allowColumnLabelCase ||\n allowColumnDefaultWidth ||\n allowGridRowStyling ? (\n <div className={`${classBase}-header`}>\n <span>Column Settings</span>\n </div>\n ) : null}\n\n {allowColumnDefaultWidth ? (\n <FormField>\n <FormFieldLabel>Column Width</FormFieldLabel>\n <VuuInput\n className=\"vuuInput\"\n data-embedded\n onCommit={onCommitColumnWidth}\n />\n </FormField>\n ) : null}\n\n {allowColumnLabelCase ? (\n <FormField>\n <FormFieldLabel>Column Labels</FormFieldLabel>\n <ToggleButtonGroup\n className=\"vuuToggleButtonGroup\"\n onChange={onChangeColumnLabels}\n value={columnLabelsValue}\n >\n <ToggleButton className=\"vuuIconToggleButton\" value={0}>\n <Icon name=\"text-strikethrough\" size={48} />\n </ToggleButton>\n <ToggleButton className=\"vuuIconToggleButton\" value={1}>\n <Icon name=\"text-Tt\" size={48} />\n </ToggleButton>\n <ToggleButton className=\"vuuIconToggleButton\" value={2}>\n <Icon name=\"text-T\" size={48} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n ) : null}\n\n {allowGridRowStyling ? (\n <FormField>\n <FormFieldLabel>Grid separators</FormFieldLabel>\n <div className=\"saltToggleButtonGroup vuuStateButtonGroup saltToggleButtonGroup-horizontal\">\n <ToggleButton\n selected={tableConfig.zebraStripes ?? false}\n onChange={onChangeTableAttribute}\n value=\"zebraStripes\"\n >\n <Icon name=\"row-striping\" size={16} />\n </ToggleButton>\n <ToggleButton\n selected={tableConfig.rowSeparators ?? false}\n onChange={onChangeTableAttribute}\n value=\"rowSeparators\"\n >\n <Icon name=\"row-lines\" size={16} />\n </ToggleButton>\n <ToggleButton\n selected={tableConfig.columnSeparators ?? false}\n onChange={onChangeTableAttribute}\n value=\"columnSeparators\"\n >\n <Icon name=\"col-lines\" size={16} />\n </ToggleButton>\n </div>\n </FormField>\n ) : null}\n\n <ColumnList\n columnItems={columnItems}\n onChange={onColumnChange}\n onMoveListItem={onMoveListItem}\n onNavigateToColumn={onNavigateToColumn}\n />\n\n <div className={`${classBase}-calculatedButtonbar`}>\n <Button data-icon=\"plus\" onClick={onAddCalculatedColumn} />\n <span className={`${classBase}-calculatedLabel`}>\n Add calculated column\n </span>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAiBA,MAAM,SAAY,GAAA,uBAAA,CAAA;AAOX,MAAM,qBAAqB,CAAC;AAAA,EACjC,oBAAuB,GAAA,IAAA;AAAA,EACvB,uBAA0B,GAAA,IAAA;AAAA,EAC1B,mBAAsB,GAAA,IAAA;AAAA,EACtB,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,cAAA;AAAA,EACA,wBAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAa,EAAA,eAAA;AACf,CAA0B,KAAA;AACxB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAA,qBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,sBAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,MACE,gBAAiB,CAAA;AAAA,IACnB,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,wBAAA;AAAA,IACA,WAAa,EAAA,eAAA;AAAA,GACd,CAAA,CAAA;AAED,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACb,EAAA,QAAA,EAAA;AAAA,IAAA,oBAAA,IACD,uBACA,IAAA,mBAAA,mBACG,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,OAAA,CAAA,EAC1B,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,QAAe,EAAA,iBAAA,EAAA,CAAA,EACvB,CACE,GAAA,IAAA;AAAA,IAEH,uBAAA,wBACE,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAe,QAAY,EAAA,cAAA,EAAA,CAAA;AAAA,sBAC5B,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,UAAA;AAAA,UACV,eAAa,EAAA,IAAA;AAAA,UACb,QAAU,EAAA,mBAAA;AAAA,SAAA;AAAA,OACZ;AAAA,KAAA,EACF,CACE,GAAA,IAAA;AAAA,IAEH,oBAAA,wBACE,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAe,QAAa,EAAA,eAAA,EAAA,CAAA;AAAA,sBAC7B,IAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,sBAAA;AAAA,UACV,QAAU,EAAA,oBAAA;AAAA,UACV,KAAO,EAAA,iBAAA;AAAA,UAEP,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,YAAA,EAAA,EAAa,SAAU,EAAA,qBAAA,EAAsB,KAAO,EAAA,CAAA,EACnD,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,oBAAA,EAAqB,IAAM,EAAA,EAAA,EAAI,CAC5C,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,YAAA,EAAA,EAAa,SAAU,EAAA,qBAAA,EAAsB,KAAO,EAAA,CAAA,EACnD,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,SAAA,EAAU,IAAM,EAAA,EAAA,EAAI,CACjC,EAAA,CAAA;AAAA,4BACC,GAAA,CAAA,YAAA,EAAA,EAAa,SAAU,EAAA,qBAAA,EAAsB,KAAO,EAAA,CAAA,EACnD,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,QAAA,EAAS,IAAM,EAAA,EAAA,EAAI,CAChC,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OACF;AAAA,KAAA,EACF,CACE,GAAA,IAAA;AAAA,IAEH,mBAAA,wBACE,SACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAe,QAAe,EAAA,iBAAA,EAAA,CAAA;AAAA,sBAC/B,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,4EACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,YAAY,YAAgB,IAAA,KAAA;AAAA,YACtC,QAAU,EAAA,sBAAA;AAAA,YACV,KAAM,EAAA,cAAA;AAAA,YAEN,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,cAAA,EAAe,MAAM,EAAI,EAAA,CAAA;AAAA,WAAA;AAAA,SACtC;AAAA,wBACA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,YAAY,aAAiB,IAAA,KAAA;AAAA,YACvC,QAAU,EAAA,sBAAA;AAAA,YACV,KAAM,EAAA,eAAA;AAAA,YAEN,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,WAAA,EAAY,MAAM,EAAI,EAAA,CAAA;AAAA,WAAA;AAAA,SACnC;AAAA,wBACA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,YAAY,gBAAoB,IAAA,KAAA;AAAA,YAC1C,QAAU,EAAA,sBAAA;AAAA,YACV,KAAM,EAAA,kBAAA;AAAA,YAEN,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,IAAK,EAAA,WAAA,EAAY,MAAM,EAAI,EAAA,CAAA;AAAA,WAAA;AAAA,SACnC;AAAA,OACF,EAAA,CAAA;AAAA,KAAA,EACF,CACE,GAAA,IAAA;AAAA,oBAEJ,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,QAAU,EAAA,cAAA;AAAA,QACV,cAAA;AAAA,QACA,kBAAA;AAAA,OAAA;AAAA,KACF;AAAA,oBAEC,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,oBAAA,CAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,WAAA,EAAU,MAAO,EAAA,OAAA,EAAS,qBAAuB,EAAA,CAAA;AAAA,0BACxD,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,oBAAoB,QAEjD,EAAA,uBAAA,EAAA,CAAA;AAAA,KACF,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { updateTableConfig } from '@vuu-ui/vuu-table';
|
|
2
|
+
import { moveItem, subscribedOnly, addColumnToSubscribedColumns, queryClosest, useLayoutEffectSkipFirst, isCalculatedColumn } from '@vuu-ui/vuu-utils';
|
|
3
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
const sortOrderFromAvailableColumns = (availableColumns, columns) => {
|
|
6
|
+
const sortedColumns = [];
|
|
7
|
+
for (const { name } of availableColumns) {
|
|
8
|
+
const column = columns.find((col) => col.name === name);
|
|
9
|
+
if (column) {
|
|
10
|
+
sortedColumns.push(column);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return sortedColumns;
|
|
14
|
+
};
|
|
15
|
+
const buildColumnItems = (availableColumns, configuredColumns) => {
|
|
16
|
+
return availableColumns.map(({ name, serverDataType }) => {
|
|
17
|
+
const configuredColumn = configuredColumns.find((col) => col.name === name);
|
|
18
|
+
return {
|
|
19
|
+
hidden: configuredColumn?.hidden,
|
|
20
|
+
isCalculated: isCalculatedColumn(name),
|
|
21
|
+
label: configuredColumn?.label,
|
|
22
|
+
name,
|
|
23
|
+
serverDataType,
|
|
24
|
+
subscribed: configuredColumn !== void 0
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const useTableSettings = ({
|
|
29
|
+
availableColumns: availableColumnsProp,
|
|
30
|
+
onConfigChange,
|
|
31
|
+
onDataSourceConfigChange,
|
|
32
|
+
tableConfig: tableConfigProp
|
|
33
|
+
}) => {
|
|
34
|
+
const [{ availableColumns, tableConfig }, setColumnState] = useState({
|
|
35
|
+
availableColumns: availableColumnsProp,
|
|
36
|
+
tableConfig: tableConfigProp
|
|
37
|
+
});
|
|
38
|
+
const columnItems = useMemo(
|
|
39
|
+
() => buildColumnItems(availableColumns, tableConfig.columns),
|
|
40
|
+
[availableColumns, tableConfig.columns]
|
|
41
|
+
);
|
|
42
|
+
const handleMoveListItem = useCallback(
|
|
43
|
+
(fromIndex, toIndex) => {
|
|
44
|
+
setColumnState((state) => {
|
|
45
|
+
const newAvailableColumns = moveItem(
|
|
46
|
+
state.availableColumns,
|
|
47
|
+
fromIndex,
|
|
48
|
+
toIndex
|
|
49
|
+
);
|
|
50
|
+
const newColumns = sortOrderFromAvailableColumns(
|
|
51
|
+
newAvailableColumns,
|
|
52
|
+
tableConfig.columns
|
|
53
|
+
);
|
|
54
|
+
return {
|
|
55
|
+
availableColumns: newAvailableColumns,
|
|
56
|
+
tableConfig: {
|
|
57
|
+
...state.tableConfig,
|
|
58
|
+
columns: newColumns
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
[tableConfig.columns]
|
|
64
|
+
);
|
|
65
|
+
const handleColumnChange = useCallback(
|
|
66
|
+
(name, property, value) => {
|
|
67
|
+
const columnItem = columnItems.find((col) => col.name === name);
|
|
68
|
+
if (property === "subscribed") {
|
|
69
|
+
if (columnItem?.subscribed) {
|
|
70
|
+
const subscribedColumns = tableConfig.columns.filter((col) => col.name !== name).map((col) => col.name);
|
|
71
|
+
setColumnState((state) => ({
|
|
72
|
+
...state,
|
|
73
|
+
tableConfig: {
|
|
74
|
+
...tableConfig,
|
|
75
|
+
columns: tableConfig.columns.filter(
|
|
76
|
+
subscribedOnly(subscribedColumns)
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
onDataSourceConfigChange({
|
|
81
|
+
columns: subscribedColumns
|
|
82
|
+
});
|
|
83
|
+
} else {
|
|
84
|
+
const newConfig = {
|
|
85
|
+
...tableConfig,
|
|
86
|
+
columns: addColumnToSubscribedColumns(
|
|
87
|
+
tableConfig.columns,
|
|
88
|
+
availableColumns,
|
|
89
|
+
name
|
|
90
|
+
)
|
|
91
|
+
};
|
|
92
|
+
setColumnState((state) => ({
|
|
93
|
+
...state,
|
|
94
|
+
tableConfig: newConfig
|
|
95
|
+
}));
|
|
96
|
+
const subscribedColumns = newConfig.columns.map((col) => col.name);
|
|
97
|
+
onDataSourceConfigChange({
|
|
98
|
+
columns: subscribedColumns
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
} else if (columnItem?.subscribed) {
|
|
102
|
+
const column = tableConfig.columns.find((col) => col.name === name);
|
|
103
|
+
if (column) {
|
|
104
|
+
const newConfig = updateTableConfig(tableConfig, {
|
|
105
|
+
type: "column-prop",
|
|
106
|
+
property,
|
|
107
|
+
column,
|
|
108
|
+
value
|
|
109
|
+
});
|
|
110
|
+
setColumnState((state) => ({
|
|
111
|
+
...state,
|
|
112
|
+
tableConfig: newConfig
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
[availableColumns, columnItems, onDataSourceConfigChange, tableConfig]
|
|
118
|
+
);
|
|
119
|
+
const handleChangeColumnLabels = useCallback((evt) => {
|
|
120
|
+
const button = queryClosest(evt.target, "button");
|
|
121
|
+
if (button) {
|
|
122
|
+
const value = parseInt(button.value);
|
|
123
|
+
const columnFormatHeader = value === 0 ? void 0 : value === 1 ? "capitalize" : "uppercase";
|
|
124
|
+
setColumnState((state) => ({
|
|
125
|
+
...state,
|
|
126
|
+
tableConfig: {
|
|
127
|
+
...state.tableConfig,
|
|
128
|
+
columnFormatHeader
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
}, []);
|
|
133
|
+
const handleChangeTableAttribute = useCallback(
|
|
134
|
+
(evt) => {
|
|
135
|
+
const button = queryClosest(evt.target, "button");
|
|
136
|
+
if (button) {
|
|
137
|
+
const { ariaPressed, value } = button;
|
|
138
|
+
console.log({ ariaPressed, value, button });
|
|
139
|
+
setColumnState((state) => ({
|
|
140
|
+
...state,
|
|
141
|
+
tableConfig: {
|
|
142
|
+
...state.tableConfig,
|
|
143
|
+
[value]: ariaPressed !== "true"
|
|
144
|
+
}
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
[]
|
|
149
|
+
);
|
|
150
|
+
const handleCommitColumnWidth = useCallback((_, value) => {
|
|
151
|
+
const columnDefaultWidth = parseInt(value);
|
|
152
|
+
if (!isNaN(columnDefaultWidth)) {
|
|
153
|
+
setColumnState((state) => ({
|
|
154
|
+
...state,
|
|
155
|
+
tableConfig: {
|
|
156
|
+
...state.tableConfig,
|
|
157
|
+
columnDefaultWidth
|
|
158
|
+
}
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
console.log({ value });
|
|
162
|
+
}, []);
|
|
163
|
+
useLayoutEffectSkipFirst(() => {
|
|
164
|
+
onConfigChange?.(tableConfig);
|
|
165
|
+
}, [onConfigChange, tableConfig]);
|
|
166
|
+
const columnLabelsValue = tableConfig.columnFormatHeader === void 0 ? 0 : tableConfig.columnFormatHeader === "capitalize" ? 1 : 2;
|
|
167
|
+
return {
|
|
168
|
+
columnItems,
|
|
169
|
+
columnLabelsValue,
|
|
170
|
+
onChangeColumnLabels: handleChangeColumnLabels,
|
|
171
|
+
onChangeTableAttribute: handleChangeTableAttribute,
|
|
172
|
+
onColumnChange: handleColumnChange,
|
|
173
|
+
onCommitColumnWidth: handleCommitColumnWidth,
|
|
174
|
+
onMoveListItem: handleMoveListItem,
|
|
175
|
+
tableConfig
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export { useTableSettings };
|
|
180
|
+
//# sourceMappingURL=useTableSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTableSettings.js","sources":["../../src/table-settings/useTableSettings.ts"],"sourcesContent":["import { SchemaColumn } from \"@vuu-ui/vuu-data-types\";\nimport { updateTableConfig } from \"@vuu-ui/vuu-table\";\nimport {\n ColumnDescriptor,\n TableConfig,\n TableSettingsProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n addColumnToSubscribedColumns,\n queryClosest,\n isCalculatedColumn,\n moveItem,\n subscribedOnly,\n useLayoutEffectSkipFirst,\n} from \"@vuu-ui/vuu-utils\";\nimport { Commithandler } from \"@vuu-ui/vuu-ui-controls/src\";\nimport {\n MouseEvent,\n SyntheticEvent,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport { ColumnChangeHandler } from \"../column-list\";\n\nconst sortOrderFromAvailableColumns = (\n availableColumns: SchemaColumn[],\n columns: ColumnDescriptor[]\n) => {\n const sortedColumns: ColumnDescriptor[] = [];\n for (const { name } of availableColumns) {\n const column = columns.find((col) => col.name === name);\n if (column) {\n sortedColumns.push(column);\n }\n }\n return sortedColumns;\n};\n\nexport type ColumnItem = Pick<\n ColumnDescriptor,\n \"hidden\" | \"label\" | \"name\" | \"serverDataType\"\n> & {\n isCalculated: boolean;\n subscribed: boolean;\n};\n\nconst buildColumnItems = (\n availableColumns: SchemaColumn[],\n configuredColumns: ColumnDescriptor[]\n): ColumnItem[] => {\n return availableColumns.map<ColumnItem>(({ name, serverDataType }) => {\n const configuredColumn = configuredColumns.find((col) => col.name === name);\n return {\n hidden: configuredColumn?.hidden,\n isCalculated: isCalculatedColumn(name),\n label: configuredColumn?.label,\n name,\n serverDataType,\n subscribed: configuredColumn !== undefined,\n };\n });\n};\n\ntype ColumnState = {\n availableColumns: SchemaColumn[];\n tableConfig: TableConfig;\n};\n\nexport const useTableSettings = ({\n availableColumns: availableColumnsProp,\n onConfigChange,\n onDataSourceConfigChange,\n tableConfig: tableConfigProp,\n}: Omit<TableSettingsProps, \"onAddCalculatedColumn\">) => {\n const [{ availableColumns, tableConfig }, setColumnState] =\n useState<ColumnState>({\n availableColumns: availableColumnsProp,\n tableConfig: tableConfigProp,\n });\n\n const columnItems = useMemo(\n () => buildColumnItems(availableColumns, tableConfig.columns),\n [availableColumns, tableConfig.columns]\n );\n\n const handleMoveListItem = useCallback(\n (fromIndex: number, toIndex: number) => {\n setColumnState((state) => {\n const newAvailableColumns = moveItem(\n state.availableColumns,\n fromIndex,\n toIndex\n );\n const newColumns = sortOrderFromAvailableColumns(\n newAvailableColumns,\n tableConfig.columns\n );\n\n return {\n availableColumns: newAvailableColumns,\n tableConfig: {\n ...state.tableConfig,\n columns: newColumns,\n },\n };\n });\n },\n [tableConfig.columns]\n );\n\n const handleColumnChange = useCallback<ColumnChangeHandler>(\n (name, property, value) => {\n // to be applied immediately\n const columnItem = columnItems.find((col) => col.name === name);\n if (property === \"subscribed\") {\n if (columnItem?.subscribed) {\n const subscribedColumns = tableConfig.columns\n .filter((col) => col.name !== name)\n .map((col) => col.name);\n setColumnState((state) => ({\n ...state,\n tableConfig: {\n ...tableConfig,\n columns: tableConfig.columns.filter(\n subscribedOnly(subscribedColumns)\n ),\n },\n }));\n onDataSourceConfigChange({\n columns: subscribedColumns,\n });\n } else {\n const newConfig = {\n ...tableConfig,\n columns: addColumnToSubscribedColumns(\n tableConfig.columns,\n availableColumns,\n name\n ),\n };\n setColumnState((state) => ({\n ...state,\n tableConfig: newConfig,\n }));\n\n const subscribedColumns = newConfig.columns.map((col) => col.name);\n\n onDataSourceConfigChange({\n columns: subscribedColumns,\n });\n }\n } else if (columnItem?.subscribed) {\n const column = tableConfig.columns.find((col) => col.name === name);\n if (column) {\n const newConfig = updateTableConfig(tableConfig, {\n type: \"column-prop\",\n property,\n column,\n value,\n });\n setColumnState((state) => ({\n ...state,\n tableConfig: newConfig,\n }));\n }\n }\n },\n [availableColumns, columnItems, onDataSourceConfigChange, tableConfig]\n );\n\n const handleChangeColumnLabels = useCallback((evt: SyntheticEvent) => {\n const button = queryClosest<HTMLButtonElement>(evt.target, \"button\");\n if (button) {\n const value = parseInt(button.value);\n const columnFormatHeader =\n value === 0 ? undefined : value === 1 ? \"capitalize\" : \"uppercase\";\n setColumnState((state) => ({\n ...state,\n tableConfig: {\n ...state.tableConfig,\n columnFormatHeader,\n },\n }));\n }\n }, []);\n\n const handleChangeTableAttribute = useCallback(\n (evt: MouseEvent<HTMLButtonElement>) => {\n const button = queryClosest<HTMLButtonElement>(evt.target, \"button\");\n if (button) {\n const { ariaPressed, value } = button;\n console.log({ ariaPressed, value, button });\n setColumnState((state) => ({\n ...state,\n tableConfig: {\n ...state.tableConfig,\n [value]: ariaPressed !== \"true\",\n },\n }));\n }\n },\n []\n );\n\n const handleCommitColumnWidth = useCallback<Commithandler>((_, value) => {\n const columnDefaultWidth = parseInt(value);\n if (!isNaN(columnDefaultWidth)) {\n setColumnState((state) => ({\n ...state,\n tableConfig: {\n ...state.tableConfig,\n columnDefaultWidth,\n },\n }));\n }\n console.log({ value });\n }, []);\n\n useLayoutEffectSkipFirst(() => {\n onConfigChange?.(tableConfig);\n }, [onConfigChange, tableConfig]);\n\n const columnLabelsValue =\n tableConfig.columnFormatHeader === undefined\n ? 0\n : tableConfig.columnFormatHeader === \"capitalize\"\n ? 1\n : 2;\n\n return {\n columnItems,\n columnLabelsValue,\n onChangeColumnLabels: handleChangeColumnLabels,\n onChangeTableAttribute: handleChangeTableAttribute,\n onColumnChange: handleColumnChange,\n onCommitColumnWidth: handleCommitColumnWidth,\n onMoveListItem: handleMoveListItem,\n tableConfig,\n };\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.0.26",
|
|
3
|
+
"author": "heswell",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"devDependencies": {
|
|
6
|
+
"@vuu-ui/vuu-filter-types": "0.0.26",
|
|
7
|
+
"@vuu-ui/vuu-protocol-types": "0.0.26"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@vuu-ui/vuu-codemirror": "0.0.26",
|
|
11
|
+
"@vuu-ui/vuu-data-react": "0.0.26",
|
|
12
|
+
"@vuu-ui/vuu-data-types": "0.0.26",
|
|
13
|
+
"@vuu-ui/vuu-table-types": "0.0.26",
|
|
14
|
+
"@vuu-ui/vuu-layout": "0.0.26",
|
|
15
|
+
"@vuu-ui/vuu-popups": "0.0.26",
|
|
16
|
+
"@vuu-ui/vuu-table": "0.0.26",
|
|
17
|
+
"@vuu-ui/vuu-utils": "0.0.26",
|
|
18
|
+
"@vuu-ui/vuu-ui-controls": "0.0.26",
|
|
19
|
+
"@lezer/lr": "1.3.4",
|
|
20
|
+
"@salt-ds/core": "1.17.0",
|
|
21
|
+
"@salt-ds/styles": "0.2.1",
|
|
22
|
+
"@salt-ds/window": "0.1.1"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"clsx": "^2.0.0",
|
|
26
|
+
"react": ">=17.0.2",
|
|
27
|
+
"react-dom": ">=17.0.2"
|
|
28
|
+
},
|
|
29
|
+
"type": "module",
|
|
30
|
+
"files": [
|
|
31
|
+
"README.md",
|
|
32
|
+
"esm",
|
|
33
|
+
"cjs",
|
|
34
|
+
"/types"
|
|
35
|
+
],
|
|
36
|
+
"exports": {
|
|
37
|
+
".": {
|
|
38
|
+
"require": "./cjs/index.js",
|
|
39
|
+
"import": "./esm/index.js",
|
|
40
|
+
"types": "./types/index.d.ts"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"main": "cjs/index.js",
|
|
44
|
+
"module": "esm/index.js",
|
|
45
|
+
"name": "@vuu-ui/vuu-table-extras",
|
|
46
|
+
"types": "types/index.d.ts"
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DropdownCell";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./LookupCell";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./PctProgressCell";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ProgressCell";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { HTMLAttributes } from "react";
|
|
2
|
+
import { ColumnDefinitionExpression } from "./column-language-parser";
|
|
3
|
+
import { ExpressionSuggestionConsumer } from "./useColumnExpressionEditor";
|
|
4
|
+
export type ColumnExpressionSubmitHandler = (source: string, expression: ColumnDefinitionExpression | undefined) => void;
|
|
5
|
+
export interface ColumnExpressionInputProps extends ExpressionSuggestionConsumer, Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
6
|
+
onChange?: (source: string) => void;
|
|
7
|
+
onSubmitExpression?: ColumnExpressionSubmitHandler;
|
|
8
|
+
source?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const ColumnExpressionInput: import("react").MemoExoticComponent<({ onChange, onSubmitExpression, source, suggestionProvider, }: ColumnExpressionInputProps) => JSX.Element>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type ColumnFunctionDescriptor = {
|
|
2
|
+
accepts: "string" | "number" | "boolean" | "any" | Array<"string" | "number" | "boolean">;
|
|
3
|
+
description: string;
|
|
4
|
+
example: {
|
|
5
|
+
expression: string;
|
|
6
|
+
result: string;
|
|
7
|
+
};
|
|
8
|
+
name: string;
|
|
9
|
+
params: {
|
|
10
|
+
count?: number;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
type: "string" | "number" | "boolean" | "variable";
|
|
14
|
+
};
|
|
15
|
+
export declare const columnFunctionDescriptors: ColumnFunctionDescriptor[];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Tree } from "@vuu-ui/vuu-codemirror";
|
|
2
|
+
import { RelationalExpression } from "./generated/column-parser.terms";
|
|
3
|
+
type expressionType = "arithmeticExpression" | "booleanCondition" | "booleanLiteralExpression" | "callExpression" | "colExpression" | "conditionalExpression" | "numericLiteralExpression" | "relationalExpression" | "stringLiteralExpression" | "unknown";
|
|
4
|
+
type arithmeticOp = "*" | "/" | "+" | "-" | "unknown";
|
|
5
|
+
type booleanOp = "and" | "or";
|
|
6
|
+
type relationalOp = "=" | "!=" | ">" | ">=" | "<" | "<=" | "unknown";
|
|
7
|
+
export interface Expression {
|
|
8
|
+
type: expressionType;
|
|
9
|
+
expressions?: Expression[];
|
|
10
|
+
toJSON?: () => unknown;
|
|
11
|
+
value?: string | number | boolean;
|
|
12
|
+
}
|
|
13
|
+
interface BooleanLiteralExpression {
|
|
14
|
+
type: "booleanLiteralExpression";
|
|
15
|
+
value: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface NumericLiteralExpression {
|
|
18
|
+
type: "numericLiteralExpression";
|
|
19
|
+
value: number;
|
|
20
|
+
}
|
|
21
|
+
interface StringLiteralExpression {
|
|
22
|
+
type: "stringLiteralExpression";
|
|
23
|
+
value: string;
|
|
24
|
+
}
|
|
25
|
+
interface ArithmeticExpression extends Expression {
|
|
26
|
+
expressions: [Expression, Expression];
|
|
27
|
+
op: arithmeticOp;
|
|
28
|
+
type: "arithmeticExpression";
|
|
29
|
+
}
|
|
30
|
+
interface BooleanCondition extends Expression {
|
|
31
|
+
expressions: Expression[];
|
|
32
|
+
op: booleanOp;
|
|
33
|
+
type: "booleanCondition";
|
|
34
|
+
}
|
|
35
|
+
interface RelationalExpression extends Expression {
|
|
36
|
+
expressions: Expression[];
|
|
37
|
+
op: relationalOp;
|
|
38
|
+
type: "relationalExpression";
|
|
39
|
+
}
|
|
40
|
+
interface ColExpression extends Expression {
|
|
41
|
+
column?: string;
|
|
42
|
+
type: "colExpression";
|
|
43
|
+
}
|
|
44
|
+
interface CallExpression extends Expression {
|
|
45
|
+
arguments: Expression[];
|
|
46
|
+
functionName?: string;
|
|
47
|
+
type: "callExpression";
|
|
48
|
+
}
|
|
49
|
+
type ConditionExpression = RelationalExpression | BooleanCondition;
|
|
50
|
+
interface ConditionalExpression extends Expression {
|
|
51
|
+
type: "conditionalExpression";
|
|
52
|
+
condition: ConditionExpression;
|
|
53
|
+
truthyExpression: Expression;
|
|
54
|
+
falsyExpression: Expression;
|
|
55
|
+
}
|
|
56
|
+
export type ColumnDefinitionExpression = ArithmeticExpression | BooleanLiteralExpression | CallExpression | ColExpression | ConditionalExpression | NumericLiteralExpression | StringLiteralExpression;
|
|
57
|
+
export declare const walkTree: (tree: Tree, source: string) => ColumnDefinitionExpression;
|
|
58
|
+
export {};
|
package/types/column-expression-input/column-language-parser/column-expression-parse-utils.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SyntaxNode } from "@vuu-ui/vuu-codemirror";
|
|
2
|
+
export declare const ColumnNamedTerms: readonly string[];
|
|
3
|
+
export declare const isCompleteExpression: (src: string) => boolean;
|
|
4
|
+
export declare const lastNamedChild: (node: SyntaxNode) => SyntaxNode | null;
|
|
5
|
+
export declare const isCompleteRelationalExpression: (node?: SyntaxNode) => boolean;
|
package/types/column-expression-input/column-language-parser/generated/column-parser.terms.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const ColumnDefinitionExpression: 1;
|
|
2
|
+
export const Column: 2;
|
|
3
|
+
export const Number: 3;
|
|
4
|
+
export const String: 4;
|
|
5
|
+
export const True: 5;
|
|
6
|
+
export const False: 6;
|
|
7
|
+
export const ParenthesizedExpression: 7;
|
|
8
|
+
export const OpenBrace: 8;
|
|
9
|
+
export const CloseBrace: 9;
|
|
10
|
+
export const ArithmeticExpression: 10;
|
|
11
|
+
export const Divide: 11;
|
|
12
|
+
export const Times: 12;
|
|
13
|
+
export const Plus: 13;
|
|
14
|
+
export const Minus: 14;
|
|
15
|
+
export const ConditionalExpression: 15;
|
|
16
|
+
export const If: 16;
|
|
17
|
+
export const RelationalExpression: 17;
|
|
18
|
+
export const RelationalOperator: 18;
|
|
19
|
+
export const AndCondition: 19;
|
|
20
|
+
export const OrCondition: 20;
|
|
21
|
+
export const Comma: 21;
|
|
22
|
+
export const CallExpression: 22;
|
|
23
|
+
export const Function: 23;
|
|
24
|
+
export const ArgList: 24;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function walkTree(tree: any, source: any): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const vuuHighlighting: import("@codemirror/state").Extension;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const vuuTheme: import("@codemirror/state").Extension;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CompletionSource } from "@vuu-ui/vuu-codemirror";
|
|
2
|
+
import { MutableRefObject } from "react";
|
|
3
|
+
import { IExpressionSuggestionProvider } from "./useColumnExpressionEditor";
|
|
4
|
+
export type ApplyCompletion = (mode?: "add" | "replace") => void;
|
|
5
|
+
export type Operator = "";
|
|
6
|
+
export declare const useColumnAutoComplete: (suggestionProvider: IExpressionSuggestionProvider, onSubmit: MutableRefObject<ApplyCompletion>) => CompletionSource;
|