@vuu-ui/vuu-table-extras 1.0.3 → 2.0.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/cjs/{column-expression-panel/ColumnExpressionPanel.js → calculated-column/CalculatedColumnPanel.js} +13 -13
- package/cjs/calculated-column/CalculatedColumnPanel.js.map +1 -0
- package/cjs/{column-expression-panel/useColumnExpression.js → calculated-column/useCalculatedColumnPanel.js} +12 -10
- package/cjs/calculated-column/useCalculatedColumnPanel.js.map +1 -0
- package/cjs/calculated-column/useEditCalculatedColumn.js +138 -0
- package/cjs/calculated-column/useEditCalculatedColumn.js.map +1 -0
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js +1 -0
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js +1 -0
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/cjs/column-menu/ColumnMenu.js +3 -15
- package/cjs/column-menu/ColumnMenu.js.map +1 -1
- package/cjs/column-menu/column-menu-utils.js +1 -38
- package/cjs/column-menu/column-menu-utils.js.map +1 -1
- package/cjs/column-menu/useColumnActions.js +0 -2
- package/cjs/column-menu/useColumnActions.js.map +1 -1
- package/cjs/column-picker/ColumnModel.js +58 -0
- package/cjs/column-picker/ColumnModel.js.map +1 -1
- package/cjs/column-picker/ColumnPicker.css.js +1 -1
- package/cjs/column-picker/ColumnPicker.js +37 -14
- package/cjs/column-picker/ColumnPicker.js.map +1 -1
- package/cjs/column-picker/ColumnPickerAction.js +34 -0
- package/cjs/column-picker/ColumnPickerAction.js.map +1 -0
- package/cjs/column-picker/useColumnPicker.js.map +1 -1
- package/cjs/column-picker/useTableColumnPicker.js +35 -0
- package/cjs/column-picker/useTableColumnPicker.js.map +1 -0
- package/cjs/column-settings-panel/ColumnNameLabel.js.map +1 -0
- package/cjs/{table-column-settings → column-settings-panel}/ColumnSettingsPanel.css.js +1 -1
- package/cjs/column-settings-panel/ColumnSettingsPanel.js +161 -0
- package/cjs/column-settings-panel/ColumnSettingsPanel.js.map +1 -0
- package/cjs/{table-column-settings → column-settings-panel}/useColumnSettings.js +42 -79
- package/cjs/column-settings-panel/useColumnSettings.js.map +1 -0
- package/cjs/datasource-stats/DatasourceStats.css.js +1 -1
- package/cjs/index.js +20 -19
- package/cjs/index.js.map +1 -1
- package/cjs/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +6 -0
- package/cjs/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +1 -0
- package/cjs/tabbed-table-config-panel/TabbedTableConfigPanel.js +90 -0
- package/cjs/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +1 -0
- package/cjs/tabbed-table-config-panel/TabbedTableSettingsAction.js +44 -0
- package/cjs/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +1 -0
- package/cjs/tabbed-table-config-panel/useTabbedTableConfigPanel.js +49 -0
- package/cjs/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +1 -0
- package/cjs/table-footer/TableFooter.css.js +6 -0
- package/cjs/table-footer/TableFooter.css.js.map +1 -0
- package/cjs/table-footer/TableFooter.js +34 -0
- package/cjs/table-footer/TableFooter.js.map +1 -0
- package/cjs/{table-column-settings → table-settings-panel}/TableSettingsPanel.css.js +1 -1
- package/cjs/{table-column-settings → table-settings-panel}/TableSettingsPanel.js +12 -47
- package/cjs/table-settings-panel/TableSettingsPanel.js.map +1 -0
- package/cjs/table-settings-panel/useTableSettings.js +60 -0
- package/cjs/table-settings-panel/useTableSettings.js.map +1 -0
- package/esm/{column-expression-panel/ColumnExpressionPanel.js → calculated-column/CalculatedColumnPanel.js} +13 -13
- package/esm/calculated-column/CalculatedColumnPanel.js.map +1 -0
- package/esm/{column-expression-panel/useColumnExpression.js → calculated-column/useCalculatedColumnPanel.js} +12 -10
- package/esm/calculated-column/useCalculatedColumnPanel.js.map +1 -0
- package/esm/calculated-column/useEditCalculatedColumn.js +136 -0
- package/esm/calculated-column/useEditCalculatedColumn.js.map +1 -0
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js +1 -0
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
- package/esm/column-formatting-settings/ColumnFormattingPanel.js +1 -0
- package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/esm/column-menu/ColumnMenu.js +4 -16
- package/esm/column-menu/ColumnMenu.js.map +1 -1
- package/esm/column-menu/column-menu-utils.js +2 -38
- package/esm/column-menu/column-menu-utils.js.map +1 -1
- package/esm/column-menu/useColumnActions.js +0 -2
- package/esm/column-menu/useColumnActions.js.map +1 -1
- package/esm/column-picker/ColumnModel.js +58 -0
- package/esm/column-picker/ColumnModel.js.map +1 -1
- package/esm/column-picker/ColumnPicker.css.js +1 -1
- package/esm/column-picker/ColumnPicker.js +39 -16
- package/esm/column-picker/ColumnPicker.js.map +1 -1
- package/esm/column-picker/ColumnPickerAction.js +32 -0
- package/esm/column-picker/ColumnPickerAction.js.map +1 -0
- package/esm/column-picker/useColumnPicker.js.map +1 -1
- package/esm/column-picker/useTableColumnPicker.js +33 -0
- package/esm/column-picker/useTableColumnPicker.js.map +1 -0
- package/esm/column-settings-panel/ColumnNameLabel.js.map +1 -0
- package/esm/{table-column-settings → column-settings-panel}/ColumnSettingsPanel.css.js +1 -1
- package/esm/column-settings-panel/ColumnSettingsPanel.js +159 -0
- package/esm/column-settings-panel/ColumnSettingsPanel.js.map +1 -0
- package/esm/{table-column-settings → column-settings-panel}/useColumnSettings.js +44 -81
- package/esm/column-settings-panel/useColumnSettings.js.map +1 -0
- package/esm/datasource-stats/DatasourceStats.css.js +1 -1
- package/esm/index.js +9 -7
- package/esm/index.js.map +1 -1
- package/esm/tabbed-table-config-panel/TabbedTableConfigPanel.css.js +4 -0
- package/esm/tabbed-table-config-panel/TabbedTableConfigPanel.css.js.map +1 -0
- package/esm/tabbed-table-config-panel/TabbedTableConfigPanel.js +88 -0
- package/esm/tabbed-table-config-panel/TabbedTableConfigPanel.js.map +1 -0
- package/esm/tabbed-table-config-panel/TabbedTableSettingsAction.js +42 -0
- package/esm/tabbed-table-config-panel/TabbedTableSettingsAction.js.map +1 -0
- package/esm/tabbed-table-config-panel/useTabbedTableConfigPanel.js +47 -0
- package/esm/tabbed-table-config-panel/useTabbedTableConfigPanel.js.map +1 -0
- package/esm/table-footer/TableFooter.css.js +4 -0
- package/esm/table-footer/TableFooter.css.js.map +1 -0
- package/esm/table-footer/TableFooter.js +31 -0
- package/esm/table-footer/TableFooter.js.map +1 -0
- package/esm/{table-column-settings → table-settings-panel}/TableSettingsPanel.css.js +1 -1
- package/esm/{table-column-settings → table-settings-panel}/TableSettingsPanel.js +13 -48
- package/esm/table-settings-panel/TableSettingsPanel.js.map +1 -0
- package/esm/table-settings-panel/useTableSettings.js +58 -0
- package/esm/table-settings-panel/useTableSettings.js.map +1 -0
- package/package.json +12 -11
- package/types/calculated-column/CalculatedColumnPanel.d.ts +12 -0
- package/types/calculated-column/useCalculatedColumnPanel.d.ts +10 -0
- package/types/calculated-column/useEditCalculatedColumn.d.ts +13 -0
- package/types/column-menu/ColumnMenu.d.ts +1 -1
- package/types/column-menu/column-action-types.d.ts +1 -4
- package/types/column-menu/column-menu-utils.d.ts +3 -4
- package/types/column-picker/ColumnModel.d.ts +26 -3
- package/types/column-picker/ColumnPicker.d.ts +7 -3
- package/types/column-picker/ColumnPickerAction.d.ts +5 -0
- package/types/column-picker/useColumnPicker.d.ts +4 -4
- package/types/column-picker/useTableColumnPicker.d.ts +7 -0
- package/types/column-picker/useTableColumnPickerDeprecated.d.ts +14 -0
- package/types/{table-column-settings → column-settings-panel}/ColumnNameLabel.d.ts +1 -1
- package/types/column-settings-panel/ColumnSettingsPanel.d.ts +5 -0
- package/types/{table-column-settings → column-settings-panel}/useColumnSettings.d.ts +14 -7
- package/types/index.d.ts +10 -9
- package/types/tabbed-table-config-panel/TabbedTableConfigPanel.d.ts +17 -0
- package/types/tabbed-table-config-panel/TabbedTableSettingsAction.d.ts +7 -0
- package/types/tabbed-table-config-panel/useTabbedTableConfigPanel.d.ts +13 -0
- package/types/table-footer/TableFooter.d.ts +9 -0
- package/types/table-settings-panel/TableSettingsPanel.d.ts +22 -0
- package/types/table-settings-panel/useTableSettings.d.ts +14 -0
- package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +0 -1
- package/cjs/column-expression-panel/useColumnExpression.js.map +0 -1
- package/cjs/column-list/ColumnList.css.js +0 -6
- package/cjs/column-list/ColumnList.css.js.map +0 -1
- package/cjs/column-list/ColumnList.js +0 -218
- package/cjs/column-list/ColumnList.js.map +0 -1
- package/cjs/column-list/useColumnList.js +0 -66
- package/cjs/column-list/useColumnList.js.map +0 -1
- package/cjs/table-column-settings/ColumnNameLabel.js.map +0 -1
- package/cjs/table-column-settings/ColumnSettingsPanel.js +0 -202
- package/cjs/table-column-settings/ColumnSettingsPanel.js.map +0 -1
- package/cjs/table-column-settings/TableSettingsPanel.js.map +0 -1
- package/cjs/table-column-settings/useColumnSettings.js.map +0 -1
- package/cjs/table-column-settings/useTableAndColumnSettings.js +0 -129
- package/cjs/table-column-settings/useTableAndColumnSettings.js.map +0 -1
- package/cjs/table-column-settings/useTableSettings.js +0 -176
- package/cjs/table-column-settings/useTableSettings.js.map +0 -1
- package/esm/column-expression-panel/ColumnExpressionPanel.js.map +0 -1
- package/esm/column-expression-panel/useColumnExpression.js.map +0 -1
- package/esm/column-list/ColumnList.css.js +0 -4
- package/esm/column-list/ColumnList.css.js.map +0 -1
- package/esm/column-list/ColumnList.js +0 -214
- package/esm/column-list/ColumnList.js.map +0 -1
- package/esm/column-list/useColumnList.js +0 -64
- package/esm/column-list/useColumnList.js.map +0 -1
- package/esm/table-column-settings/ColumnNameLabel.js.map +0 -1
- package/esm/table-column-settings/ColumnSettingsPanel.js +0 -200
- package/esm/table-column-settings/ColumnSettingsPanel.js.map +0 -1
- package/esm/table-column-settings/TableSettingsPanel.js.map +0 -1
- package/esm/table-column-settings/useColumnSettings.js.map +0 -1
- package/esm/table-column-settings/useTableAndColumnSettings.js +0 -125
- package/esm/table-column-settings/useTableAndColumnSettings.js.map +0 -1
- package/esm/table-column-settings/useTableSettings.js +0 -174
- package/esm/table-column-settings/useTableSettings.js.map +0 -1
- package/types/column-expression-panel/ColumnExpressionPanel.d.ts +0 -13
- package/types/column-expression-panel/index.d.ts +0 -1
- package/types/column-expression-panel/useColumnExpression.d.ts +0 -10
- package/types/column-list/ColumnList.d.ts +0 -11
- package/types/column-list/index.d.ts +0 -2
- package/types/column-list/useColumnList.d.ts +0 -22
- package/types/table-column-settings/ColumnSettingsPanel.d.ts +0 -2
- package/types/table-column-settings/TableSettingsPanel.d.ts +0 -9
- package/types/table-column-settings/useTableAndColumnSettings.d.ts +0 -18
- package/types/table-column-settings/useTableSettings.d.ts +0 -18
- /package/cjs/{table-column-settings → column-settings-panel}/ColumnNameLabel.css.js +0 -0
- /package/cjs/{table-column-settings → column-settings-panel}/ColumnNameLabel.css.js.map +0 -0
- /package/cjs/{table-column-settings → column-settings-panel}/ColumnNameLabel.js +0 -0
- /package/cjs/{table-column-settings → column-settings-panel}/ColumnSettingsPanel.css.js.map +0 -0
- /package/cjs/{table-column-settings → table-settings-panel}/TableSettingsPanel.css.js.map +0 -0
- /package/esm/{table-column-settings → column-settings-panel}/ColumnNameLabel.css.js +0 -0
- /package/esm/{table-column-settings → column-settings-panel}/ColumnNameLabel.css.js.map +0 -0
- /package/esm/{table-column-settings → column-settings-panel}/ColumnNameLabel.js +0 -0
- /package/esm/{table-column-settings → column-settings-panel}/ColumnSettingsPanel.css.js.map +0 -0
- /package/esm/{table-column-settings → table-settings-panel}/TableSettingsPanel.css.js.map +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
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 { VuuInput, Icon } from '@vuu-ui/vuu-ui-controls';
|
|
6
|
+
import { getDefaultAlignment, isCalculatedColumn, getCalculatedColumnDetails } from '@vuu-ui/vuu-utils';
|
|
7
|
+
import { ColumnFormattingPanel } from '../column-formatting-settings/ColumnFormattingPanel.js';
|
|
8
|
+
import 'react';
|
|
9
|
+
import { ColumnNameLabel } from './ColumnNameLabel.js';
|
|
10
|
+
import { useColumnSettings } from './useColumnSettings.js';
|
|
11
|
+
import colunSettingsPanelCss from './ColumnSettingsPanel.css.js';
|
|
12
|
+
|
|
13
|
+
const classBase = "vuuColumnSettingsPanel";
|
|
14
|
+
const getColumnLabel = (column) => {
|
|
15
|
+
const { name, label } = column;
|
|
16
|
+
if (isCalculatedColumn(name)) {
|
|
17
|
+
return label ?? getCalculatedColumnDetails(column).name;
|
|
18
|
+
} else {
|
|
19
|
+
return label ?? name;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const ColumnSettingsPanel = ({
|
|
23
|
+
column: columnProp,
|
|
24
|
+
columnModel,
|
|
25
|
+
onClickEditCalculatedColumn,
|
|
26
|
+
onConfigChange
|
|
27
|
+
}) => {
|
|
28
|
+
const targetWindow = useWindow();
|
|
29
|
+
useComponentCssInjection({
|
|
30
|
+
testId: "vuu-column-settings-panel",
|
|
31
|
+
css: colunSettingsPanelCss,
|
|
32
|
+
window: targetWindow
|
|
33
|
+
});
|
|
34
|
+
const isNewCalculatedColumn = columnProp.name === "::";
|
|
35
|
+
const {
|
|
36
|
+
availableRenderers,
|
|
37
|
+
column,
|
|
38
|
+
navigateNextColumn,
|
|
39
|
+
navigatePrevColumn,
|
|
40
|
+
onChange,
|
|
41
|
+
onChangeFormatting,
|
|
42
|
+
onChangeRendering,
|
|
43
|
+
onChangeToggleButton,
|
|
44
|
+
onChangeType,
|
|
45
|
+
onInputCommit
|
|
46
|
+
} = useColumnSettings({
|
|
47
|
+
column: columnProp,
|
|
48
|
+
columnModel,
|
|
49
|
+
onConfigChange
|
|
50
|
+
});
|
|
51
|
+
const {
|
|
52
|
+
serverDataType,
|
|
53
|
+
align = getDefaultAlignment(serverDataType),
|
|
54
|
+
pin,
|
|
55
|
+
width = ""
|
|
56
|
+
} = column;
|
|
57
|
+
return /* @__PURE__ */ jsxs("div", { className: classBase, children: [
|
|
58
|
+
/* @__PURE__ */ jsx("div", { className: `${classBase}-header`, children: /* @__PURE__ */ jsx(
|
|
59
|
+
ColumnNameLabel,
|
|
60
|
+
{
|
|
61
|
+
column,
|
|
62
|
+
onClick: onClickEditCalculatedColumn
|
|
63
|
+
}
|
|
64
|
+
) }),
|
|
65
|
+
/* @__PURE__ */ jsxs(FormField, { "data-field": "column-label", children: [
|
|
66
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Column Label" }),
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
VuuInput,
|
|
69
|
+
{
|
|
70
|
+
bordered: true,
|
|
71
|
+
className: "vuuInput",
|
|
72
|
+
"data-embedded": true,
|
|
73
|
+
onChange,
|
|
74
|
+
onCommit: onInputCommit,
|
|
75
|
+
value: getColumnLabel(column)
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsxs(FormField, { "data-field": "column-width", children: [
|
|
80
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Column Width" }),
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
VuuInput,
|
|
83
|
+
{
|
|
84
|
+
bordered: true,
|
|
85
|
+
className: "vuuInput",
|
|
86
|
+
"data-embedded": true,
|
|
87
|
+
onChange,
|
|
88
|
+
value: width,
|
|
89
|
+
onCommit: onInputCommit
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ jsxs(FormField, { "data-field": "column-alignment", children: [
|
|
94
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Alignment" }),
|
|
95
|
+
/* @__PURE__ */ jsxs(ToggleButtonGroup, { onChange: onChangeToggleButton, value: align, children: [
|
|
96
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "left", children: /* @__PURE__ */ jsx(Icon, { name: "align-left", size: 16 }) }),
|
|
97
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "right", children: /* @__PURE__ */ jsx(Icon, { name: "align-right", size: 16 }) })
|
|
98
|
+
] })
|
|
99
|
+
] }),
|
|
100
|
+
/* @__PURE__ */ jsxs(FormField, { "data-field": "column-pin", children: [
|
|
101
|
+
/* @__PURE__ */ jsx(FormFieldLabel, { children: "Pin Column" }),
|
|
102
|
+
/* @__PURE__ */ jsxs(
|
|
103
|
+
ToggleButtonGroup,
|
|
104
|
+
{
|
|
105
|
+
onChange: onChangeToggleButton,
|
|
106
|
+
value: pin || "false",
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "left", children: /* @__PURE__ */ jsx(Icon, { name: "pin-left", size: 16 }) }),
|
|
109
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "floating", children: /* @__PURE__ */ jsx(Icon, { name: "pin-float", size: 16 }) }),
|
|
110
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "right", children: /* @__PURE__ */ jsx(Icon, { name: "pin-right", size: 16 }) }),
|
|
111
|
+
/* @__PURE__ */ jsx(ToggleButton, { value: "", children: /* @__PURE__ */ jsx(Icon, { name: "cross-circle", size: 16 }) })
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
ColumnFormattingPanel,
|
|
118
|
+
{
|
|
119
|
+
availableRenderers,
|
|
120
|
+
column,
|
|
121
|
+
onChangeFormatting,
|
|
122
|
+
onChangeRendering,
|
|
123
|
+
onChangeColumnType: onChangeType
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
/* @__PURE__ */ jsxs(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
className: `${classBase}-buttonBar`,
|
|
130
|
+
"data-align": isNewCalculatedColumn ? "right" : void 0,
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsx(
|
|
133
|
+
Button,
|
|
134
|
+
{
|
|
135
|
+
className: `${classBase}-buttonNavPrev`,
|
|
136
|
+
variant: "secondary",
|
|
137
|
+
"data-icon": "arrow-left",
|
|
138
|
+
onClick: navigatePrevColumn,
|
|
139
|
+
children: "PREVIOUS"
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
/* @__PURE__ */ jsx(
|
|
143
|
+
Button,
|
|
144
|
+
{
|
|
145
|
+
className: `${classBase}-buttonNavNext`,
|
|
146
|
+
variant: "secondary",
|
|
147
|
+
"data-icon": "arrow-right",
|
|
148
|
+
onClick: navigateNextColumn,
|
|
149
|
+
children: "NEXT"
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
)
|
|
155
|
+
] });
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export { ColumnSettingsPanel };
|
|
159
|
+
//# sourceMappingURL=ColumnSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnSettingsPanel.js","sources":["../../../../packages/vuu-table-extras/src/column-settings-panel/ColumnSettingsPanel.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 { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getCalculatedColumnDetails,\n getDefaultAlignment,\n isCalculatedColumn,\n} from \"@vuu-ui/vuu-utils\";\nimport { ColumnFormattingPanel } from \"../column-formatting-settings\";\nimport { ColumnNameLabel } from \"./ColumnNameLabel\";\nimport { ColumnSettingsProps, useColumnSettings } from \"./useColumnSettings\";\n\nimport colunSettingsPanelCss from \"./ColumnSettingsPanel.css\";\n\nconst classBase = \"vuuColumnSettingsPanel\";\n\nconst getColumnLabel = (column: ColumnDescriptor) => {\n const { name, label } = column;\n if (isCalculatedColumn(name)) {\n return label ?? getCalculatedColumnDetails(column).name;\n } else {\n return label ?? name;\n }\n};\n\nexport interface ColumnSettinsPanelProps extends ColumnSettingsProps {\n onClickEditCalculatedColumn?: () => void;\n}\n\nexport const ColumnSettingsPanel = ({\n column: columnProp,\n columnModel,\n onClickEditCalculatedColumn,\n onConfigChange,\n}: ColumnSettinsPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-settings-panel\",\n css: colunSettingsPanelCss,\n window: targetWindow,\n });\n\n const isNewCalculatedColumn = columnProp.name === \"::\";\n const {\n availableRenderers,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onChange,\n onChangeFormatting,\n onChangeRendering,\n onChangeToggleButton,\n onChangeType,\n onInputCommit,\n } = useColumnSettings({\n column: columnProp,\n columnModel,\n onConfigChange,\n });\n\n const {\n serverDataType,\n align = getDefaultAlignment(serverDataType),\n pin,\n width = \"\",\n } = column;\n\n return (\n <div className={classBase}>\n <div className={`${classBase}-header`}>\n <ColumnNameLabel\n column={column}\n onClick={onClickEditCalculatedColumn}\n />\n </div>\n\n <FormField data-field=\"column-label\">\n <FormFieldLabel>Column Label</FormFieldLabel>\n <VuuInput\n bordered\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n onCommit={onInputCommit}\n value={getColumnLabel(column)}\n />\n </FormField>\n\n <FormField data-field=\"column-width\">\n <FormFieldLabel>Column Width</FormFieldLabel>\n <VuuInput\n bordered\n className=\"vuuInput\"\n data-embedded\n onChange={onChange}\n value={width}\n onCommit={onInputCommit}\n />\n </FormField>\n <FormField data-field=\"column-alignment\">\n <FormFieldLabel>Alignment</FormFieldLabel>\n <ToggleButtonGroup onChange={onChangeToggleButton} value={align}>\n <ToggleButton value=\"left\">\n <Icon name=\"align-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"align-right\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <FormField data-field=\"column-pin\">\n <FormFieldLabel>Pin Column</FormFieldLabel>\n <ToggleButtonGroup\n onChange={onChangeToggleButton}\n value={pin || \"false\"}\n >\n <ToggleButton value=\"left\">\n <Icon name=\"pin-left\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"floating\">\n <Icon name=\"pin-float\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"right\">\n <Icon name=\"pin-right\" size={16} />\n </ToggleButton>\n <ToggleButton value=\"\">\n <Icon name=\"cross-circle\" size={16} />\n </ToggleButton>\n </ToggleButtonGroup>\n </FormField>\n <ColumnFormattingPanel\n availableRenderers={availableRenderers}\n column={column}\n onChangeFormatting={onChangeFormatting}\n onChangeRendering={onChangeRendering}\n onChangeColumnType={onChangeType}\n />\n\n <div\n className={`${classBase}-buttonBar`}\n data-align={isNewCalculatedColumn ? \"right\" : undefined}\n >\n <Button\n className={`${classBase}-buttonNavPrev`}\n variant=\"secondary\"\n data-icon=\"arrow-left\"\n onClick={navigatePrevColumn}\n >\n PREVIOUS\n </Button>\n <Button\n className={`${classBase}-buttonNavNext`}\n variant=\"secondary\"\n data-icon=\"arrow-right\"\n onClick={navigateNextColumn}\n >\n NEXT\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { queryClosest, getFieldName, isValidPinLocation, isValidColumnAlignment, setCalculatedColumnName, updateColumnFormatting, updateColumnType,
|
|
2
|
-
import { useState,
|
|
1
|
+
import { queryClosest, getFieldName, isValidPinLocation, isValidColumnAlignment, setCalculatedColumnName, updateColumnRenderProps, updateColumnFormatting, updateColumnType, getServerDataType, getRegisteredCellRenderers } from '@vuu-ui/vuu-utils';
|
|
2
|
+
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
3
3
|
|
|
4
4
|
const integerCellRenderers = [
|
|
5
5
|
{
|
|
@@ -31,7 +31,8 @@ const stringCellRenderers = [
|
|
|
31
31
|
];
|
|
32
32
|
const booleanCellRenderers = [];
|
|
33
33
|
const getAvailableCellRenderers = (column) => {
|
|
34
|
-
|
|
34
|
+
const serverDataType = getServerDataType(column);
|
|
35
|
+
switch (serverDataType) {
|
|
35
36
|
case "char":
|
|
36
37
|
case "string":
|
|
37
38
|
return stringCellRenderers.concat(getRegisteredCellRenderers("string"));
|
|
@@ -55,49 +56,19 @@ const getAvailableCellRenderers = (column) => {
|
|
|
55
56
|
return stringCellRenderers;
|
|
56
57
|
}
|
|
57
58
|
};
|
|
58
|
-
const getColumn = (columns, column) => {
|
|
59
|
-
if (column.name === "::") {
|
|
60
|
-
return column;
|
|
61
|
-
} else {
|
|
62
|
-
const col = columns.find((col2) => col2.name === column.name);
|
|
63
|
-
if (col) {
|
|
64
|
-
return col;
|
|
65
|
-
}
|
|
66
|
-
throw Error(`columns does not contain column ${name}`);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
const replaceColumn = (tableConfig, column) => ({
|
|
70
|
-
...tableConfig,
|
|
71
|
-
columns: tableConfig.columns.map(
|
|
72
|
-
(col) => col.name === column.name ? column : col
|
|
73
|
-
)
|
|
74
|
-
});
|
|
75
59
|
const useColumnSettings = ({
|
|
76
60
|
column: columnProp,
|
|
77
|
-
|
|
78
|
-
onConfigChange,
|
|
79
|
-
onCreateCalculatedColumn,
|
|
80
|
-
tableConfig
|
|
61
|
+
columnModel
|
|
81
62
|
}) => {
|
|
82
63
|
const [column, setColumn] = useState(
|
|
83
|
-
getColumn(
|
|
64
|
+
columnModel.getColumn(columnProp.name)
|
|
84
65
|
);
|
|
85
|
-
const columnRef = useRef(column);
|
|
86
|
-
const [inEditMode, setEditMode] = useState(column.name === "::");
|
|
87
|
-
const handleEditCalculatedcolumn = useCallback(() => {
|
|
88
|
-
columnRef.current = column;
|
|
89
|
-
setEditMode(true);
|
|
90
|
-
}, [column]);
|
|
91
66
|
useEffect(() => {
|
|
92
67
|
setColumn(columnProp);
|
|
93
|
-
setEditMode(columnProp.name === "::");
|
|
94
68
|
}, [columnProp]);
|
|
95
69
|
const availableRenderers = useMemo(() => {
|
|
96
70
|
return getAvailableCellRenderers(column);
|
|
97
71
|
}, [column]);
|
|
98
|
-
const handleInputCommit = useCallback(() => {
|
|
99
|
-
onConfigChange(replaceColumn(tableConfig, column));
|
|
100
|
-
}, [column, onConfigChange, tableConfig]);
|
|
101
72
|
const handleChangeToggleButton = useCallback(
|
|
102
73
|
(evt) => {
|
|
103
74
|
const button = queryClosest(evt.target, "button");
|
|
@@ -109,10 +80,10 @@ const useColumnSettings = ({
|
|
|
109
80
|
if (isValidColumnAlignment(value)) {
|
|
110
81
|
const newColumn = {
|
|
111
82
|
...column,
|
|
112
|
-
align: value
|
|
83
|
+
align: value
|
|
113
84
|
};
|
|
114
85
|
setColumn(newColumn);
|
|
115
|
-
|
|
86
|
+
columnModel.updateColumn(newColumn);
|
|
116
87
|
}
|
|
117
88
|
break;
|
|
118
89
|
case "column-pin":
|
|
@@ -122,13 +93,13 @@ const useColumnSettings = ({
|
|
|
122
93
|
pin: value || void 0
|
|
123
94
|
};
|
|
124
95
|
setColumn(newColumn);
|
|
125
|
-
|
|
96
|
+
columnModel.updateColumn(newColumn);
|
|
126
97
|
break;
|
|
127
98
|
}
|
|
128
99
|
}
|
|
129
100
|
}
|
|
130
101
|
},
|
|
131
|
-
[column,
|
|
102
|
+
[column, columnModel]
|
|
132
103
|
);
|
|
133
104
|
const handleChange = useCallback((evt) => {
|
|
134
105
|
const input = evt.target;
|
|
@@ -142,28 +113,51 @@ const useColumnSettings = ({
|
|
|
142
113
|
setColumn((state) => setCalculatedColumnName(state, value));
|
|
143
114
|
break;
|
|
144
115
|
case "column-width":
|
|
145
|
-
|
|
116
|
+
{
|
|
117
|
+
const numericValue = parseInt(value, 10);
|
|
118
|
+
if (isNaN(numericValue)) {
|
|
119
|
+
setColumn((state) => ({ ...state, width: void 0 }));
|
|
120
|
+
} else {
|
|
121
|
+
setColumn((state) => ({ ...state, width: numericValue }));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
146
124
|
break;
|
|
147
125
|
}
|
|
148
126
|
}, []);
|
|
149
|
-
const
|
|
150
|
-
|
|
127
|
+
const handleInputCommit = useCallback(() => {
|
|
128
|
+
columnModel.updateColumn(column);
|
|
129
|
+
}, [column, columnModel]);
|
|
130
|
+
const handleChangeCalculatedColumnName = useCallback((name) => {
|
|
131
|
+
setColumn((state) => ({ ...state, name }));
|
|
151
132
|
}, []);
|
|
133
|
+
const handleChangeRendering = useCallback(
|
|
134
|
+
(renderProps) => {
|
|
135
|
+
if (renderProps) {
|
|
136
|
+
const newColumn = updateColumnRenderProps(
|
|
137
|
+
column,
|
|
138
|
+
renderProps
|
|
139
|
+
);
|
|
140
|
+
setColumn(newColumn);
|
|
141
|
+
columnModel.updateColumn(newColumn);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
[column, columnModel]
|
|
145
|
+
);
|
|
152
146
|
const handleChangeFormatting = useCallback(
|
|
153
147
|
(formatting) => {
|
|
154
148
|
const newColumn = updateColumnFormatting(column, formatting);
|
|
155
149
|
setColumn(newColumn);
|
|
156
|
-
|
|
150
|
+
columnModel.updateColumn(newColumn);
|
|
157
151
|
},
|
|
158
|
-
[column,
|
|
152
|
+
[column, columnModel]
|
|
159
153
|
);
|
|
160
154
|
const handleChangeType = useCallback(
|
|
161
155
|
(type) => {
|
|
162
156
|
const updatedColumn = updateColumnType(column, type);
|
|
163
157
|
setColumn(updatedColumn);
|
|
164
|
-
|
|
158
|
+
columnModel.updateColumn(updatedColumn);
|
|
165
159
|
},
|
|
166
|
-
[column,
|
|
160
|
+
[column, columnModel]
|
|
167
161
|
);
|
|
168
162
|
const handleChangeServerDataType = useCallback(
|
|
169
163
|
(serverDataType) => {
|
|
@@ -171,29 +165,15 @@ const useColumnSettings = ({
|
|
|
171
165
|
},
|
|
172
166
|
[]
|
|
173
167
|
);
|
|
174
|
-
const handleChangeRendering = useCallback(
|
|
175
|
-
(renderProps) => {
|
|
176
|
-
if (renderProps) {
|
|
177
|
-
const newColumn = updateColumnRenderProps(
|
|
178
|
-
column,
|
|
179
|
-
renderProps
|
|
180
|
-
);
|
|
181
|
-
setColumn(newColumn);
|
|
182
|
-
onConfigChange(replaceColumn(tableConfig, newColumn));
|
|
183
|
-
}
|
|
184
|
-
},
|
|
185
|
-
[column, onConfigChange, tableConfig]
|
|
186
|
-
);
|
|
187
168
|
const navigateColumn = useCallback(
|
|
188
169
|
({ moveBy }) => {
|
|
189
|
-
const
|
|
190
|
-
const
|
|
191
|
-
const newColumn = columns[index];
|
|
170
|
+
const index = columnModel.selectedColumns.indexOf(column) + moveBy;
|
|
171
|
+
const newColumn = columnModel.selectedColumns[index];
|
|
192
172
|
if (newColumn) {
|
|
193
173
|
setColumn(newColumn);
|
|
194
174
|
}
|
|
195
175
|
},
|
|
196
|
-
[column,
|
|
176
|
+
[column, columnModel]
|
|
197
177
|
);
|
|
198
178
|
const navigateNextColumn = useCallback(() => {
|
|
199
179
|
navigateColumn({ moveBy: 1 });
|
|
@@ -201,26 +181,11 @@ const useColumnSettings = ({
|
|
|
201
181
|
const navigatePrevColumn = useCallback(() => {
|
|
202
182
|
navigateColumn({ moveBy: -1 });
|
|
203
183
|
}, [navigateColumn]);
|
|
204
|
-
const handleSaveCalculatedColumn = useCallback(() => {
|
|
205
|
-
onCreateCalculatedColumn(column);
|
|
206
|
-
}, [column, onCreateCalculatedColumn]);
|
|
207
|
-
const handleCancelEdit = useCallback(() => {
|
|
208
|
-
if (columnProp.name === "::") {
|
|
209
|
-
onCancelCreateColumn();
|
|
210
|
-
} else {
|
|
211
|
-
if (columnRef.current !== void 0 && columnRef.current !== column) {
|
|
212
|
-
setColumn(columnRef.current);
|
|
213
|
-
}
|
|
214
|
-
setEditMode(false);
|
|
215
|
-
}
|
|
216
|
-
}, [column, columnProp.name, onCancelCreateColumn]);
|
|
217
184
|
return {
|
|
218
185
|
availableRenderers,
|
|
219
|
-
editCalculatedColumn: inEditMode,
|
|
220
186
|
column,
|
|
221
187
|
navigateNextColumn,
|
|
222
188
|
navigatePrevColumn,
|
|
223
|
-
onCancel: handleCancelEdit,
|
|
224
189
|
onChange: handleChange,
|
|
225
190
|
onChangeCalculatedColumnName: handleChangeCalculatedColumnName,
|
|
226
191
|
onChangeFormatting: handleChangeFormatting,
|
|
@@ -228,9 +193,7 @@ const useColumnSettings = ({
|
|
|
228
193
|
onChangeServerDataType: handleChangeServerDataType,
|
|
229
194
|
onChangeToggleButton: handleChangeToggleButton,
|
|
230
195
|
onChangeType: handleChangeType,
|
|
231
|
-
|
|
232
|
-
onInputCommit: handleInputCommit,
|
|
233
|
-
onSave: handleSaveCalculatedColumn
|
|
196
|
+
onInputCommit: handleInputCommit
|
|
234
197
|
};
|
|
235
198
|
};
|
|
236
199
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnSettings.js","sources":["../../../../packages/vuu-table-extras/src/column-settings-panel/useColumnSettings.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n TableConfig,\n ColumnTypeFormatting,\n} from \"@vuu-ui/vuu-table-types\";\n\nimport {\n CellRendererDescriptor,\n ColumnRenderPropsChangeHandler,\n getFieldName,\n getRegisteredCellRenderers,\n isValidColumnAlignment,\n isValidPinLocation,\n setCalculatedColumnName,\n updateColumnRenderProps,\n updateColumnFormatting,\n updateColumnType,\n queryClosest,\n getServerDataType,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuColumnDataType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n FormEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { DataValueTypeSimple } from \"@vuu-ui/vuu-data-types\";\nimport { ColumnModel } from \"../column-picker/ColumnModel\";\n\n/**\n * Describes the props for a Column Configuration Editor, for which\n * an implementation is provided in vuu-table-extras\n */\nexport interface ColumnSettingsProps {\n column: ColumnDescriptor;\n columnModel: ColumnModel;\n onConfigChange?: (config: TableConfig) => void;\n vuuTable?: VuuTable;\n}\n\nconst integerCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type integer\",\n label: \"Default Renderer (int, long)\",\n name: \"default-int\",\n },\n];\nconst doubleCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type double\",\n label: \"Default Renderer (double)\",\n name: \"default-double\",\n },\n];\nconst decimalCellRenderers: CellRendererDescriptor[] = [\n {\n description:\n \"Default formatter for columns with data type decimal (2,4,6 or 8)\",\n label: \"Default Renderer (decimal)\",\n name: \"default-decimal\",\n },\n];\n\nconst stringCellRenderers: CellRendererDescriptor[] = [\n {\n description: \"Default formatter for columns with data type string\",\n label: \"Default Renderer (string)\",\n name: \"default-string\",\n },\n];\n\nconst booleanCellRenderers: CellRendererDescriptor[] = [];\n\nconst getAvailableCellRenderers = (\n column: ColumnDescriptor,\n): CellRendererDescriptor[] => {\n const serverDataType = getServerDataType(column);\n switch (serverDataType) {\n case \"char\":\n case \"string\":\n return stringCellRenderers.concat(getRegisteredCellRenderers(\"string\"));\n case \"int\":\n case \"long\":\n return integerCellRenderers.concat(getRegisteredCellRenderers(\"int\"));\n case \"double\":\n return doubleCellRenderers.concat(\n getRegisteredCellRenderers(column.serverDataType),\n );\n case \"scaleddecimal2\":\n case \"scaleddecimal4\":\n case \"scaleddecimal6\":\n case \"scaleddecimal8\":\n return decimalCellRenderers.concat(\n getRegisteredCellRenderers(column.serverDataType),\n );\n case \"boolean\":\n return booleanCellRenderers.concat(getRegisteredCellRenderers(\"boolean\"));\n default:\n return stringCellRenderers;\n }\n};\n\nexport const useColumnSettings = ({\n column: columnProp,\n columnModel,\n}: Omit<ColumnSettingsProps, \"vuuTable\">) => {\n const [column, setColumn] = useState<ColumnDescriptor>(\n columnModel.getColumn(columnProp.name),\n );\n\n useEffect(() => {\n setColumn(columnProp);\n }, [columnProp]);\n\n const availableRenderers = useMemo(() => {\n return getAvailableCellRenderers(column);\n }, [column]);\n\n const handleChangeToggleButton = useCallback<FormEventHandler>(\n (evt) => {\n const button = queryClosest<HTMLButtonElement>(evt.target, \"button\");\n if (button) {\n const fieldName = getFieldName(button);\n const { value } = button;\n switch (fieldName) {\n case \"column-alignment\":\n if (isValidColumnAlignment(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n align: value,\n };\n setColumn(newColumn);\n columnModel.updateColumn(newColumn);\n }\n break;\n case \"column-pin\":\n if (isValidPinLocation(value)) {\n const newColumn: ColumnDescriptor = {\n ...column,\n pin: value || undefined,\n };\n setColumn(newColumn);\n columnModel.updateColumn(newColumn);\n\n break;\n }\n }\n }\n },\n [column, columnModel],\n );\n\n const handleChange = useCallback<FormEventHandler>((evt) => {\n const input = evt.target as HTMLInputElement;\n const fieldName = getFieldName(input);\n const { value } = input;\n switch (fieldName) {\n case \"column-label\":\n setColumn((state) => ({ ...state, label: value }));\n break;\n case \"column-name\":\n setColumn((state) => setCalculatedColumnName(state, value));\n break;\n case \"column-width\":\n {\n const numericValue = parseInt(value, 10);\n if (isNaN(numericValue)) {\n setColumn((state) => ({ ...state, width: undefined }));\n } else {\n setColumn((state) => ({ ...state, width: numericValue }));\n }\n }\n break;\n }\n }, []);\n\n const handleInputCommit = useCallback(() => {\n columnModel.updateColumn(column);\n }, [column, columnModel]);\n\n const handleChangeCalculatedColumnName = useCallback((name: string) => {\n setColumn((state) => ({ ...state, name }));\n }, []);\n\n const handleChangeRendering = useCallback<ColumnRenderPropsChangeHandler>(\n (renderProps) => {\n if (renderProps) {\n const newColumn: ColumnDescriptor = updateColumnRenderProps(\n column,\n renderProps,\n );\n setColumn(newColumn);\n columnModel.updateColumn(newColumn);\n }\n },\n [column, columnModel],\n );\n\n const handleChangeFormatting = useCallback(\n (formatting: ColumnTypeFormatting) => {\n const newColumn = updateColumnFormatting(column, formatting);\n setColumn(newColumn);\n columnModel.updateColumn(newColumn);\n },\n [column, columnModel],\n );\n\n const handleChangeType = useCallback(\n (type: DataValueTypeSimple) => {\n const updatedColumn = updateColumnType(column, type);\n setColumn(updatedColumn);\n columnModel.updateColumn(updatedColumn);\n },\n [column, columnModel],\n );\n\n // Changing the server data type applies only to calculated columns\n const handleChangeServerDataType = useCallback(\n (serverDataType: VuuColumnDataType) => {\n setColumn((col) => ({ ...col, serverDataType }));\n },\n [],\n );\n\n const navigateColumn = useCallback(\n ({ moveBy }: { moveBy: number }) => {\n const index = columnModel.selectedColumns.indexOf(column) + moveBy;\n const newColumn = columnModel.selectedColumns[index];\n if (newColumn) {\n setColumn(newColumn);\n }\n },\n [column, columnModel],\n );\n const navigateNextColumn = useCallback(() => {\n navigateColumn({ moveBy: 1 });\n }, [navigateColumn]);\n\n const navigatePrevColumn = useCallback(() => {\n navigateColumn({ moveBy: -1 });\n }, [navigateColumn]);\n\n return {\n availableRenderers,\n column,\n navigateNextColumn,\n navigatePrevColumn,\n onChange: handleChange,\n onChangeCalculatedColumnName: handleChangeCalculatedColumnName,\n onChangeFormatting: handleChangeFormatting,\n onChangeRendering: handleChangeRendering,\n onChangeServerDataType: handleChangeServerDataType,\n onChangeToggleButton: handleChangeToggleButton,\n onChangeType: handleChangeType,\n onInputCommit: handleInputCommit,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var dataSourceStats = ".vuuDatasourceStats {\n --datasourceStats-background: var(--vuuDatasourceStats-background);\n align-items: center;\n background: var(--datasourceStats-background, var(--salt-container-secondary-background));\n display: grid;\n font-size: var(--vuuDatasourceStats-fontSize, 10px);\n gap: var(--vuuDatasourceStats-gap, var(--salt-spacing-100));\n grid-template-areas: \"panel-start panel-center panel-end\";\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-rows: auto;\n height: var(--vuuDatasourceStats-height, 100%);\n padding: 0 var(--salt-spacing-200);\n\n &.vuuDatasourceStats-withSelection {\n --datasourceStats-background: var(--vuuDatasourceStats-withSelection-background, var(--vuuDatasourceStats-background));\n }\n\n .vuuDatasourceStats-statsPanel {\n align-items: center;\n display: flex;\n gap: var(--salt-spacing-100);\n width: fit-content;\n }\n\n .vuuDatasourceStats-rowStats {\n justify-self: flex-start;\n grid-area: panel-start;\n }\n .vuuDatasourceStats-selected {\n margin-left: var(--salt-spacing-100);\n }\n\n .vuuDatasourceStats-range {\n white-space: nowrap;\n }\n\n .vuuDatasourceStats-label {\n color: var(--salt-content-secondary-foreground);\n white-space: nowrap;\n }\n
|
|
1
|
+
var dataSourceStats = ".vuuDatasourceStats {\n --datasourceStats-background: var(--vuuDatasourceStats-background);\n align-items: center;\n background: var(--datasourceStats-background, var(--salt-container-secondary-background));\n display: grid;\n font-size: var(--vuuDatasourceStats-fontSize, 10px);\n gap: var(--vuuDatasourceStats-gap, var(--salt-spacing-100));\n grid-template-areas: \"panel-start panel-center panel-end\";\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-rows: auto;\n height: var(--vuuDatasourceStats-height, 100%);\n padding: 0 var(--salt-spacing-200);\n\n &.vuuDatasourceStats-withSelection {\n --datasourceStats-background: var(--vuuDatasourceStats-withSelection-background, var(--vuuDatasourceStats-background));\n }\n\n .vuuDatasourceStats-statsPanel {\n align-items: center;\n display: flex;\n gap: var(--salt-spacing-100);\n width: fit-content;\n }\n\n .vuuDatasourceStats-rowStats {\n justify-self: flex-start;\n grid-area: panel-start;\n }\n .vuuDatasourceStats-selected {\n margin-left: var(--salt-spacing-100);\n }\n\n .vuuDatasourceStats-range {\n white-space: nowrap;\n }\n\n .vuuDatasourceStats-label {\n color: var(--salt-content-secondary-foreground);\n white-space: nowrap;\n }\n .vuuDatasourceStats-range {\n white-space: nowrap;\n }\n\n .vuuDatasourceStats-value {\n color: var(--salt-content-primary-foreground);\n }\n .vuuDatasourceStats-tooltray {\n justify-self: end;;\n margin: 0 var(--salt-spacing-200);\n grid-area: panel-end;\n }\n\n}\n\n";
|
|
2
2
|
|
|
3
3
|
export { dataSourceStats as default };
|
|
4
4
|
//# sourceMappingURL=DatasourceStats.css.js.map
|
package/esm/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { CalculatedColumnPanel } from './calculated-column/CalculatedColumnPanel.js';
|
|
1
2
|
export { CaseValidator } from './cell-edit-validators/CaseValidator.js';
|
|
2
3
|
export { PatternValidator } from './cell-edit-validators/PatternValidator.js';
|
|
3
4
|
export { BackgroundCell } from './cell-renderers/background-cell/BackgroundCell.js';
|
|
@@ -13,22 +14,23 @@ export { walkTree } from './column-expression-input/column-language-parser/Colum
|
|
|
13
14
|
export { ColumnNamedTerms, isCompleteExpression, isCompleteRelationalExpression, lastNamedChild } from './column-expression-input/column-language-parser/column-expression-parse-utils.js';
|
|
14
15
|
export { useColumnExpressionEditor } from './column-expression-input/useColumnExpressionEditor.js';
|
|
15
16
|
export { useColumnExpressionSuggestionProvider } from './column-expression-input/useColumnExpressionSuggestionProvider.js';
|
|
16
|
-
export { ColumnExpressionPanel } from './column-expression-panel/ColumnExpressionPanel.js';
|
|
17
17
|
export { ColumnFormattingPanel } from './column-formatting-settings/ColumnFormattingPanel.js';
|
|
18
18
|
export { BaseNumericFormattingSettings } from './column-formatting-settings/BaseNumericFormattingSettings.js';
|
|
19
19
|
export { DateTimeFormattingSettings } from './column-formatting-settings/DateTimeFormattingSettings.js';
|
|
20
|
-
export { ColumnList, classBase, classBaseListItem } from './column-list/ColumnList.js';
|
|
21
20
|
export { ColumnMenu } from './column-menu/ColumnMenu.js';
|
|
22
21
|
export { useColumnActions } from './column-menu/useColumnActions.js';
|
|
23
22
|
export { ColumnChangeSource, ColumnModel, SelectedColumnChangeType, isColumnAdded, isColumnRemoved, isColumnsReordered } from './column-picker/ColumnModel.js';
|
|
24
23
|
export { ColumnPicker } from './column-picker/ColumnPicker.js';
|
|
24
|
+
export { ColumnPickerAction } from './column-picker/ColumnPickerAction.js';
|
|
25
|
+
export { useTableColumnPicker } from './column-picker/useTableColumnPicker.js';
|
|
26
|
+
export { ColumnSettingsPanel } from './column-settings-panel/ColumnSettingsPanel.js';
|
|
27
|
+
export { useColumnSettings } from './column-settings-panel/useColumnSettings.js';
|
|
25
28
|
export { DataSourceStats } from './datasource-stats/DatasourceStats.js';
|
|
26
29
|
export { FreezeControl } from './freeze-control/FreezeControl.js';
|
|
27
30
|
export { FrozenBanner } from './freeze-control/FrozenBanner.js';
|
|
28
|
-
export {
|
|
29
|
-
export {
|
|
30
|
-
export {
|
|
31
|
-
export { columnSettingsFromColumnMenuPermissions, tableSettingsFromColumnMenuPermissions, useTableAndColumnSettings } from './table-column-settings/useTableAndColumnSettings.js';
|
|
32
|
-
export { useTableSettings } from './table-column-settings/useTableSettings.js';
|
|
31
|
+
export { TabbedTableConfigPanel } from './tabbed-table-config-panel/TabbedTableConfigPanel.js';
|
|
32
|
+
export { TabbedTableSettingsAction } from './tabbed-table-config-panel/TabbedTableSettingsAction.js';
|
|
33
|
+
export { TableFooter, TableFooterTray } from './table-footer/TableFooter.js';
|
|
33
34
|
export { TableProvider, useTableContext } from './table-provider/TableProvider.js';
|
|
35
|
+
export { TableSettingsPanel, defaultTableSettingsPermissions } from './table-settings-panel/TableSettingsPanel.js';
|
|
34
36
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var css = ".vuuTabbedTableConfigPanel {\n\n --tabs-height: 25px;\n\n inset: 0;\n position: absolute;\n .saltTabsNext {\n height: 100%;\n .saltTabListNext {\n border-bottom: solid var(--salt-separable-secondary-borderColor) 1px;\n height: var(--tabs-height);\n }\n\n .saltTabNextPanel {\n height: calc(100% - var(--tabs-height));\n }\n }\n}";
|
|
2
|
+
|
|
3
|
+
export { css as default };
|
|
4
|
+
//# sourceMappingURL=TabbedTableConfigPanel.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabbedTableConfigPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { TabsNext, TabListNext, TabNext, TabNextTrigger, TabNextPanel } from '@salt-ds/lab';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import cx from 'clsx';
|
|
6
|
+
import { useState, useCallback } from 'react';
|
|
7
|
+
import { useEditCalculatedColumn } from '../calculated-column/useEditCalculatedColumn.js';
|
|
8
|
+
import { ColumnPicker } from '../column-picker/ColumnPicker.js';
|
|
9
|
+
import { ColumnSettingsPanel } from '../column-settings-panel/ColumnSettingsPanel.js';
|
|
10
|
+
import { TableSettingsPanel } from '../table-settings-panel/TableSettingsPanel.js';
|
|
11
|
+
import css from './TabbedTableConfigPanel.css.js';
|
|
12
|
+
|
|
13
|
+
const classBase = "vuuTabbedTableConfigPanel";
|
|
14
|
+
const TabbedTableConfigPanel = ({
|
|
15
|
+
allowCreateCalculatedColumn = false,
|
|
16
|
+
className,
|
|
17
|
+
columnModel,
|
|
18
|
+
config,
|
|
19
|
+
onDisplayAttributeChange,
|
|
20
|
+
selectedTab = "table-settings",
|
|
21
|
+
vuuTable,
|
|
22
|
+
...htmlAttributes
|
|
23
|
+
}) => {
|
|
24
|
+
const targetWindow = useWindow();
|
|
25
|
+
useComponentCssInjection({
|
|
26
|
+
testId: "vuu-tabbed-table-config-panel",
|
|
27
|
+
css,
|
|
28
|
+
window: targetWindow
|
|
29
|
+
});
|
|
30
|
+
const [columns, setColumns] = useState([]);
|
|
31
|
+
const [value, setValue] = useState(selectedTab);
|
|
32
|
+
const handleChange = useCallback(
|
|
33
|
+
(_e, value2) => {
|
|
34
|
+
setValue(value2);
|
|
35
|
+
},
|
|
36
|
+
[]
|
|
37
|
+
);
|
|
38
|
+
const handleSelectionChange = useCallback(
|
|
39
|
+
(_e, selectedItems) => {
|
|
40
|
+
setColumns(selectedItems);
|
|
41
|
+
},
|
|
42
|
+
[]
|
|
43
|
+
);
|
|
44
|
+
const handleSaveCalculatedColumn = useCallback((column) => {
|
|
45
|
+
setColumns([column]);
|
|
46
|
+
}, []);
|
|
47
|
+
const { onCreateCalculatedColumn, onEditCalculatedColumn } = useEditCalculatedColumn({
|
|
48
|
+
columnModel,
|
|
49
|
+
calculatedColumn: columns[0],
|
|
50
|
+
onSaveColumn: handleSaveCalculatedColumn,
|
|
51
|
+
vuuTable
|
|
52
|
+
});
|
|
53
|
+
return /* @__PURE__ */ jsx("div", { ...htmlAttributes, className: cx(classBase, className), children: /* @__PURE__ */ jsxs(TabsNext, { onChange: handleChange, value, children: [
|
|
54
|
+
/* @__PURE__ */ jsxs(TabListNext, { appearance: "transparent", children: [
|
|
55
|
+
/* @__PURE__ */ jsx(TabNext, { value: "table-settings", children: /* @__PURE__ */ jsx(TabNextTrigger, { children: "Table settings" }) }),
|
|
56
|
+
/* @__PURE__ */ jsx(TabNext, { value: "table-columns", children: /* @__PURE__ */ jsx(TabNextTrigger, { children: "Table columns" }) }),
|
|
57
|
+
/* @__PURE__ */ jsx(TabNext, { disabled: columns.length === 0, value: "column-settings", children: /* @__PURE__ */ jsx(TabNextTrigger, { children: "Column settings" }) })
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ jsx(TabNextPanel, { value: "table-settings", children: /* @__PURE__ */ jsx(
|
|
60
|
+
TableSettingsPanel,
|
|
61
|
+
{
|
|
62
|
+
onDisplayAttributeChange,
|
|
63
|
+
tableDisplayAttributes: config
|
|
64
|
+
}
|
|
65
|
+
) }),
|
|
66
|
+
/* @__PURE__ */ jsx(TabNextPanel, { value: "table-columns", children: /* @__PURE__ */ jsx(
|
|
67
|
+
ColumnPicker,
|
|
68
|
+
{
|
|
69
|
+
allowCreateCalculatedColumn,
|
|
70
|
+
columnModel,
|
|
71
|
+
onClickCreateCalculatedColumn: onCreateCalculatedColumn,
|
|
72
|
+
onSelectionChange: handleSelectionChange,
|
|
73
|
+
selected: columns
|
|
74
|
+
}
|
|
75
|
+
) }),
|
|
76
|
+
/* @__PURE__ */ jsx(TabNextPanel, { value: "column-settings", children: columns.length > 0 ? /* @__PURE__ */ jsx(
|
|
77
|
+
ColumnSettingsPanel,
|
|
78
|
+
{
|
|
79
|
+
column: columns[0],
|
|
80
|
+
columnModel,
|
|
81
|
+
onClickEditCalculatedColumn: onEditCalculatedColumn
|
|
82
|
+
}
|
|
83
|
+
) : null })
|
|
84
|
+
] }) });
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export { TabbedTableConfigPanel };
|
|
88
|
+
//# sourceMappingURL=TabbedTableConfigPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabbedTableConfigPanel.js","sources":["../../../../packages/vuu-table-extras/src/tabbed-table-config-panel/TabbedTableConfigPanel.tsx"],"sourcesContent":["import {\n TabListNext,\n TabNext,\n TabNextPanel,\n TabNextTrigger,\n TabsNext,\n} from \"@salt-ds/lab\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport type { TableProps } from \"@vuu-ui/vuu-table\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, SyntheticEvent, useCallback, useState } from \"react\";\nimport { useEditCalculatedColumn } from \"../calculated-column/useEditCalculatedColumn\";\nimport { ColumnPicker, ColumnPickerProps } from \"../column-picker/ColumnPicker\";\nimport { ColumnSettingsPanel } from \"../column-settings-panel/ColumnSettingsPanel\";\nimport {\n TableSettingsPanel,\n TableSettingsPanelProps,\n} from \"../table-settings-panel/TableSettingsPanel\";\n\nimport css from \"./TabbedTableConfigPanel.css\";\n\nconst TabLabels = {\n \"table-settings\": \"Table\",\n \"table-columns\": \"Columns\",\n} as const;\n\ntype TabName = keyof typeof TabLabels;\n\nconst classBase = \"vuuTabbedTableConfigPanel\";\nexport interface TabbedTableConfigPanelProps\n extends ColumnPickerProps,\n Pick<TableSettingsPanelProps, \"onDisplayAttributeChange\">,\n Pick<TableProps, \"config\">,\n HTMLAttributes<HTMLDivElement> {\n allowCreateCalculatedColumn?: boolean;\n selectedTab?: TabName;\n vuuTable?: VuuTable;\n}\n\nexport const TabbedTableConfigPanel = ({\n allowCreateCalculatedColumn = false,\n className,\n columnModel,\n config,\n onDisplayAttributeChange,\n selectedTab = \"table-settings\",\n vuuTable,\n ...htmlAttributes\n}: TabbedTableConfigPanelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tabbed-table-config-panel\",\n css,\n window: targetWindow,\n });\n\n const [columns, setColumns] = useState<ColumnDescriptor[]>([]);\n\n const [value, setValue] = useState<string>(selectedTab);\n const handleChange = useCallback(\n (_e: SyntheticEvent | null, value: string) => {\n setValue(value);\n },\n [],\n );\n\n const handleSelectionChange = useCallback(\n (_e: SyntheticEvent, selectedItems: ColumnDescriptor[]) => {\n setColumns(selectedItems);\n },\n [],\n );\n\n const handleSaveCalculatedColumn = useCallback((column: ColumnDescriptor) => {\n setColumns([column]);\n }, []);\n\n const { onCreateCalculatedColumn, onEditCalculatedColumn } =\n useEditCalculatedColumn({\n columnModel,\n calculatedColumn: columns[0],\n onSaveColumn: handleSaveCalculatedColumn,\n vuuTable,\n });\n\n return (\n <div {...htmlAttributes} className={cx(classBase, className)}>\n <TabsNext onChange={handleChange} value={value}>\n <TabListNext appearance=\"transparent\">\n <TabNext value=\"table-settings\">\n <TabNextTrigger>Table settings</TabNextTrigger>\n </TabNext>\n <TabNext value=\"table-columns\">\n <TabNextTrigger>Table columns</TabNextTrigger>\n </TabNext>\n <TabNext disabled={columns.length === 0} value=\"column-settings\">\n <TabNextTrigger>Column settings</TabNextTrigger>\n </TabNext>\n </TabListNext>\n <TabNextPanel value=\"table-settings\">\n <TableSettingsPanel\n onDisplayAttributeChange={onDisplayAttributeChange}\n tableDisplayAttributes={config}\n />\n </TabNextPanel>\n <TabNextPanel value=\"table-columns\">\n <ColumnPicker\n allowCreateCalculatedColumn={allowCreateCalculatedColumn}\n columnModel={columnModel}\n onClickCreateCalculatedColumn={onCreateCalculatedColumn}\n onSelectionChange={handleSelectionChange}\n selected={columns}\n />\n </TabNextPanel>\n <TabNextPanel value=\"column-settings\">\n {columns.length > 0 ? (\n <ColumnSettingsPanel\n column={columns[0]}\n columnModel={columnModel}\n onClickEditCalculatedColumn={onEditCalculatedColumn}\n />\n ) : null}\n </TabNextPanel>\n </TabsNext>\n </div>\n );\n};\n"],"names":["value"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { IconButton } from '@vuu-ui/vuu-ui-controls';
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import { useTabbedTableConfigPanel } from './useTabbedTableConfigPanel.js';
|
|
5
|
+
|
|
6
|
+
const TabbedTableSettingsAction = ({
|
|
7
|
+
allowCreateCalculatedColumn,
|
|
8
|
+
appearance = "transparent",
|
|
9
|
+
columnModel,
|
|
10
|
+
config,
|
|
11
|
+
icon = "settings",
|
|
12
|
+
onDisplayAttributeChange,
|
|
13
|
+
sentiment = "neutral",
|
|
14
|
+
vuuTable,
|
|
15
|
+
...IconButtonProps2
|
|
16
|
+
}) => {
|
|
17
|
+
const { showTabbedTableConfigPanel } = useTabbedTableConfigPanel({
|
|
18
|
+
allowCreateCalculatedColumn,
|
|
19
|
+
columnModel,
|
|
20
|
+
config,
|
|
21
|
+
onDisplayAttributeChange,
|
|
22
|
+
vuuTable
|
|
23
|
+
});
|
|
24
|
+
const handleClick = useCallback(() => {
|
|
25
|
+
showTabbedTableConfigPanel();
|
|
26
|
+
}, [showTabbedTableConfigPanel]);
|
|
27
|
+
return /* @__PURE__ */ jsx(
|
|
28
|
+
IconButton,
|
|
29
|
+
{
|
|
30
|
+
...IconButtonProps2,
|
|
31
|
+
appearance,
|
|
32
|
+
"data-action": "table-settings",
|
|
33
|
+
icon,
|
|
34
|
+
onClick: handleClick,
|
|
35
|
+
sentiment,
|
|
36
|
+
size: 20
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { TabbedTableSettingsAction };
|
|
42
|
+
//# sourceMappingURL=TabbedTableSettingsAction.js.map
|