@vuu-ui/vuu-table-extras 1.0.2 → 2.0.0-alpha.1
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 +2 -3
- package/cjs/column-menu/ColumnMenu.js.map +1 -1
- package/cjs/column-menu/column-menu-utils.js +3 -18
- 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 +2 -1
- 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/column-settings-panel/useTableAndColumnSettings.js +37 -0
- package/cjs/column-settings-panel/useTableAndColumnSettings.js.map +1 -0
- package/cjs/datasource-stats/DatasourceStats.css.js +1 -1
- package/cjs/index.js +22 -17
- 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 +47 -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 +2 -3
- package/esm/column-menu/ColumnMenu.js.map +1 -1
- package/esm/column-menu/column-menu-utils.js +3 -18
- 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 +2 -1
- 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/column-settings-panel/useTableAndColumnSettings.js +33 -0
- package/esm/column-settings-panel/useTableAndColumnSettings.js.map +1 -0
- package/esm/datasource-stats/DatasourceStats.css.js +1 -1
- package/esm/index.js +10 -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 +44 -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/column-action-types.d.ts +1 -4
- package/types/column-menu/column-menu-utils.d.ts +4 -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 +5 -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/column-settings-panel/useTableAndColumnSettings.d.ts +13 -0
- package/types/index.d.ts +11 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-utils.js","sources":["../../../../packages/vuu-table-extras/src/column-menu/column-menu-utils.tsx"],"sourcesContent":["import {\n Menu,\n MenuItem,\n MenuItemProps,\n MenuPanel,\n MenuProps,\n MenuTrigger,\n} from \"@salt-ds/core\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n TableSettingsPermissions,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n getGroupStatus,\n getSortStatus,\n isNumericColumn,\n logUnhandledMessage,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler, ReactElement } from \"react\";\n\ntype MenuElement = ReactElement<MenuProps, typeof Menu>;\ntype MenuItemElement = ReactElement<MenuItemProps, typeof MenuItem>;\ntype MenuElements = Array<MenuElement | MenuItemElement>;\n\nexport type MenuItemClickHandler = MouseEventHandler<HTMLDivElement>;\n\nexport type DataSourceColumnMenuActionType =\n | \"agg-count\"\n | \"agg-distinct\"\n | \"agg-sum\"\n | \"agg-avg\"\n | \"agg-high\"\n | \"agg-low\"\n | \"sort-asc\"\n | \"sort-dsc\"\n | \"sort-add-asc\"\n | \"sort-add-dsc\"\n | \"remove-sort\"\n | \"group-column\"\n | \"remove-group\"\n | \"add-to-group\"\n | \"remove-from-group\"\n | \"remove-column\";\n\nexport type ColumnDisplayColumnMenuActionType =\n | \"pin-column-left\"\n | \"pin-column-right\"\n | \"unpin-column\"\n | \"hide-column\";\n\nexport type TableSettingsActionType = \"column-settings\" | \"table-settings\";\n\nexport type ColumnMenuActionType =\n | DataSourceColumnMenuActionType\n | ColumnDisplayColumnMenuActionType\n | TableSettingsActionType;\n\nexport const isColumnMenuActionType = (\n value?: string,\n): value is ColumnMenuActionType =>\n value !== undefined &&\n [\n \"agg-count\",\n \"agg-distinct\",\n \"agg-sum\",\n \"agg-avg\",\n \"agg-high\",\n \"agg-low\",\n \"sort-asc\",\n \"sort-dsc\",\n \"sort-add-asc\",\n \"sort-add-dsc\",\n \"remove-sort\",\n \"group-column\",\n \"remove-group\",\n \"add-to-group\",\n \"remove-from-group\",\n \"pin-column-left\",\n \"pin-column-right\",\n \"unpin-column\",\n \"hide-column\",\n \"remove-column\",\n \"column-settings\",\n \"table-settings\",\n ].includes(value);\n\nexport const getColumnMenuActionType = (target: EventTarget | HTMLElement) => {\n const { menuActionId } = (target as HTMLElement).dataset;\n if (isColumnMenuActionType(menuActionId)) {\n return menuActionId;\n } else {\n throw Error(\n \"[vuu-table-extras] column-menu-utils target element is not a valid Column MenuItem\",\n );\n }\n};\n\nexport function buildSortMenu(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElement | null {\n if (!isAllowed || column.sortable === false) {\n return null;\n } else {\n const { name, label = name } = column;\n const menuItems: MenuElements = [];\n const columnSortStatus = getSortStatus(column.name, dataSource.sort);\n\n switch (columnSortStatus) {\n case \"no-sort\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Sort ascending\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Sort descending\n </MenuItem>,\n );\n break;\n case \"single-sort-asc\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Reverse Sort (DSC)\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"remove-sort\"\n key=\"remove-sort\"\n onClick={menuActionClickHandler}\n >\n Remove Sort\n </MenuItem>,\n );\n break;\n case \"single-sort-desc\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Reverse Sort (ASC)\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"remove-sort\"\n key=\"remove-sort\"\n onClick={menuActionClickHandler}\n >\n Remove Sort\n </MenuItem>,\n );\n break;\n\n case \"sort-other-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-add-asc\"\n key=\"sort-add-asc\"\n onClick={menuActionClickHandler}\n >\n Add to sort ASC\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-add-dsc\"\n key=\"sort-add-dsc\"\n onClick={menuActionClickHandler}\n >\n Add to sort DSC\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Ascending\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Descending\n </MenuItem>,\n );\n break;\n\n case \"multi-sort-includes-column-asc\":\n case \"multi-sort-includes-column-desc\":\n break;\n default:\n logUnhandledMessage(\n columnSortStatus,\n \"[vuu-table-extras] column-menu-utils buildSortMenu\",\n );\n }\n\n return (\n <Menu key=\"sort-menu\">\n <MenuTrigger>\n <MenuItem>{`Sort by ${label}`}</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>\n );\n }\n}\n\nexport function buildGroupMenu(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElement | null {\n if (!isAllowed || column.groupable === false) {\n return null;\n } else {\n const menuItems: MenuElements = [];\n const columnGroupStatus = getGroupStatus(column.name, dataSource.groupBy);\n const { name, label = name } = column;\n\n switch (columnGroupStatus) {\n case \"no-groupby\":\n return (\n <MenuItem\n data-menu-action-id=\"group-column\"\n key=\"group-column\"\n onClick={menuActionClickHandler}\n >{`Group by ${label}`}</MenuItem>\n );\n\n case \"single-groupby-other-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"group-column\"\n key=\"group-column\"\n onClick={menuActionClickHandler}\n >{`Group by ${label}`}</MenuItem>,\n <MenuItem\n data-menu-action-id=\"add-to-group\"\n key=\"add-to-group\"\n onClick={menuActionClickHandler}\n >{`Add ${label} to groupby`}</MenuItem>,\n );\n break;\n case \"single-groupby\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-group\"\n key=\"remove-group\"\n onClick={menuActionClickHandler}\n >\n Remove Grouping\n </MenuItem>,\n );\n break;\n\n case \"multi-groupby-other-columns\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"add-to-group\"\n key=\"add-to-group\"\n onClick={menuActionClickHandler}\n >\n Add to grouping\n </MenuItem>,\n );\n\n break;\n\n case \"multi-groupby-includes-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-from-group\"\n key=\"remove-from-group\"\n onClick={menuActionClickHandler}\n >\n Remove from grouping\n </MenuItem>,\n );\n\n break;\n\n default:\n logUnhandledMessage(\n columnGroupStatus,\n \"[vuu-table-extras] column-menu-utils buildGroupMenu\",\n );\n }\n\n return (\n <Menu key=\"group-menu\">\n <MenuTrigger>\n <MenuItem>Group data</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>\n );\n }\n}\n\nexport const buildVisibilityMenuItems = (\n column: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n allowHide = true,\n allowRemove = true,\n): MenuElements | null => {\n if (!allowHide && !allowRemove) {\n return null;\n }\n const menuItems: MenuElements = [];\n const { name, label = name } = column;\n if (allowHide) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"hide-column\"\n key=\"hide-column\"\n onClick={menuActionClickHandler}\n >\n {`Hide ${label} column`}\n </MenuItem>,\n );\n }\n if (allowRemove) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-column\"\n key=\"remove-column\"\n onClick={menuActionClickHandler}\n >\n {`Remove ${label} column`}\n </MenuItem>,\n );\n }\n\n return menuItems;\n};\n\nexport const buildPinMenuItems = (\n column: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElements => {\n if (!isAllowed || column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: MenuElements = [];\n\n const pinLeft = (\n <MenuItem\n data-menu-action-id=\"pin-column-left\"\n key=\"pin-column-left\"\n onClick={menuActionClickHandler}\n >\n Pin left\n </MenuItem>\n );\n\n const pinRight = (\n <MenuItem\n data-menu-action-id=\"pin-column-right\"\n key=\"pin-column-right\"\n onClick={menuActionClickHandler}\n >\n Pin right\n </MenuItem>\n );\n\n if (!pin) {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>\n {pinLeft}\n {pinRight}\n </MenuPanel>\n </Menu>,\n );\n } else {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"unpin-column\"\n key=\"unpin-column\"\n onClick={menuActionClickHandler}\n >\n Unpin\n </MenuItem>,\n );\n if (pin === \"left\" || pin === \"right\") {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>{pin === \"right\" ? pinLeft : pinRight}</MenuPanel>\n </Menu>,\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>\n {pinLeft}\n {pinRight}\n </MenuPanel>\n </Menu>,\n );\n } else {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>{pinRight}</MenuPanel>\n </Menu>,\n );\n }\n }\n\n return menuItems;\n};\n\nexport const buildSettingsMenuItems = (\n _: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n allowColumnSettings = true,\n allowTableSettings: boolean | TableSettingsPermissions = true,\n): MenuElements | null => {\n if (!allowColumnSettings && !allowTableSettings) {\n return null;\n }\n\n const menuItems: MenuElements = [];\n\n if (allowColumnSettings) {\n menuItems.push(\n <MenuItem\n data-icon=\"settings\"\n data-menu-action-id=\"column-settings\"\n key=\"column-settings\"\n onClick={menuActionClickHandler}\n >\n Column settings ...\n </MenuItem>,\n );\n }\n\n if (allowTableSettings) {\n menuItems.push(\n <MenuItem\n data-icon=\"settings\"\n data-menu-action-id=\"table-settings\"\n key=\"table-settings\"\n onClick={menuActionClickHandler}\n >\n Table settings ...\n </MenuItem>,\n );\n }\n\n return menuItems;\n};\n\nexport function buildAggregationMenuItems(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElements | null {\n if (!isAllowed) {\n return null;\n }\n\n const { name, label = name } = column;\n\n if (dataSource.groupBy?.length === 0) {\n return [];\n } else {\n const menuItems: MenuElements = [\n <MenuItem\n data-menu-action-id=\"agg-count\"\n key=\"agg-count\"\n onClick={menuActionClickHandler}\n >\n Count\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-distinct\"\n key=\"agg-distinct\"\n onClick={menuActionClickHandler}\n >\n Distinct\n </MenuItem>,\n ];\n\n if (isNumericColumn(column)) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"agg-sum\"\n key=\"agg-sum\"\n onClick={menuActionClickHandler}\n >\n Sum\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-avg\"\n key=\"agg-avg\"\n onClick={menuActionClickHandler}\n >\n Average\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-high\"\n key=\"agg-high\"\n onClick={menuActionClickHandler}\n >\n High\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-low\"\n key=\"agg-low\"\n onClick={menuActionClickHandler}\n >\n Low\n </MenuItem>,\n );\n }\n\n return [\n <Menu key=\"aggregate-menu\">\n <MenuTrigger>\n <MenuItem>{`Aggregate ${label}`}</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>,\n ];\n }\n}\n"],"names":["getSortStatus","jsx","MenuItem","logUnhandledMessage","Menu","MenuTrigger","MenuPanel","getGroupStatus","isNumericColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"column-menu-utils.js","sources":["../../../../packages/vuu-table-extras/src/column-menu/column-menu-utils.tsx"],"sourcesContent":["import {\n Menu,\n MenuItem,\n MenuItemProps,\n MenuPanel,\n MenuProps,\n MenuTrigger,\n} from \"@salt-ds/core\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n getGroupStatus,\n getSortStatus,\n isNumericColumn,\n logUnhandledMessage,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler, ReactElement } from \"react\";\n\ntype MenuElement = ReactElement<MenuProps, typeof Menu>;\ntype MenuItemElement = ReactElement<MenuItemProps, typeof MenuItem>;\ntype MenuElements = Array<MenuElement | MenuItemElement>;\n\nexport type MenuItemClickHandler = MouseEventHandler<HTMLDivElement>;\n\nexport type DataSourceColumnMenuActionType =\n | \"agg-count\"\n | \"agg-distinct\"\n | \"agg-sum\"\n | \"agg-avg\"\n | \"agg-high\"\n | \"agg-low\"\n | \"sort-asc\"\n | \"sort-dsc\"\n | \"sort-add-asc\"\n | \"sort-add-dsc\"\n | \"remove-sort\"\n | \"group-column\"\n | \"remove-group\"\n | \"add-to-group\"\n | \"remove-from-group\"\n | \"remove-column\";\n\nexport type ColumnDisplayColumnMenuActionType =\n | \"pin-column-left\"\n | \"pin-column-right\"\n | \"unpin-column\"\n | \"hide-column\";\n\nexport type ColumnSettingsActionType = \"column-settings\";\n\nexport type ColumnMenuActionType =\n | DataSourceColumnMenuActionType\n | ColumnDisplayColumnMenuActionType\n | ColumnSettingsActionType;\n\nexport const isColumnMenuActionType = (\n value?: string,\n): value is ColumnMenuActionType =>\n value !== undefined &&\n [\n \"agg-count\",\n \"agg-distinct\",\n \"agg-sum\",\n \"agg-avg\",\n \"agg-high\",\n \"agg-low\",\n \"sort-asc\",\n \"sort-dsc\",\n \"sort-add-asc\",\n \"sort-add-dsc\",\n \"remove-sort\",\n \"group-column\",\n \"remove-group\",\n \"add-to-group\",\n \"remove-from-group\",\n \"pin-column-left\",\n \"pin-column-right\",\n \"unpin-column\",\n \"hide-column\",\n \"remove-column\",\n \"column-settings\",\n ].includes(value);\n\nexport const getColumnMenuActionType = (target: EventTarget | HTMLElement) => {\n const { menuActionId } = (target as HTMLElement).dataset;\n if (isColumnMenuActionType(menuActionId)) {\n return menuActionId;\n } else {\n throw Error(\n \"[vuu-table-extras] column-menu-utils target element is not a valid Column MenuItem\",\n );\n }\n};\n\nexport function buildSortMenu(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElement | null {\n if (!isAllowed || column.sortable === false) {\n return null;\n } else {\n const { name, label = name } = column;\n const menuItems: MenuElements = [];\n const columnSortStatus = getSortStatus(column.name, dataSource.sort);\n\n switch (columnSortStatus) {\n case \"no-sort\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Sort ascending\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Sort descending\n </MenuItem>,\n );\n break;\n case \"single-sort-asc\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Reverse Sort (DSC)\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"remove-sort\"\n key=\"remove-sort\"\n onClick={menuActionClickHandler}\n >\n Remove Sort\n </MenuItem>,\n );\n break;\n case \"single-sort-desc\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Reverse Sort (ASC)\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"remove-sort\"\n key=\"remove-sort\"\n onClick={menuActionClickHandler}\n >\n Remove Sort\n </MenuItem>,\n );\n break;\n\n case \"sort-other-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-add-asc\"\n key=\"sort-add-asc\"\n onClick={menuActionClickHandler}\n >\n Add to sort ASC\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-add-dsc\"\n key=\"sort-add-dsc\"\n onClick={menuActionClickHandler}\n >\n Add to sort DSC\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-asc\"\n key=\"sort-asc\"\n onClick={menuActionClickHandler}\n >\n Ascending\n </MenuItem>,\n );\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"sort-dsc\"\n key=\"sort-dsc\"\n onClick={menuActionClickHandler}\n >\n Descending\n </MenuItem>,\n );\n break;\n\n case \"multi-sort-includes-column-asc\":\n case \"multi-sort-includes-column-desc\":\n break;\n default:\n logUnhandledMessage(\n columnSortStatus,\n \"[vuu-table-extras] column-menu-utils buildSortMenu\",\n );\n }\n\n return (\n <Menu key=\"sort-menu\">\n <MenuTrigger>\n <MenuItem>{`Sort by ${label}`}</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>\n );\n }\n}\n\nexport function buildGroupMenu(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElement | null {\n if (!isAllowed || column.groupable === false) {\n return null;\n } else {\n const menuItems: MenuElements = [];\n const columnGroupStatus = getGroupStatus(column.name, dataSource.groupBy);\n const { name, label = name } = column;\n\n switch (columnGroupStatus) {\n case \"no-groupby\":\n return (\n <MenuItem\n data-menu-action-id=\"group-column\"\n key=\"group-column\"\n onClick={menuActionClickHandler}\n >{`Group by ${label}`}</MenuItem>\n );\n\n case \"single-groupby-other-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"group-column\"\n key=\"group-column\"\n onClick={menuActionClickHandler}\n >{`Group by ${label}`}</MenuItem>,\n <MenuItem\n data-menu-action-id=\"add-to-group\"\n key=\"add-to-group\"\n onClick={menuActionClickHandler}\n >{`Add ${label} to groupby`}</MenuItem>,\n );\n break;\n case \"single-groupby\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-group\"\n key=\"remove-group\"\n onClick={menuActionClickHandler}\n >\n Remove Grouping\n </MenuItem>,\n );\n break;\n\n case \"multi-groupby-other-columns\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"add-to-group\"\n key=\"add-to-group\"\n onClick={menuActionClickHandler}\n >\n Add to grouping\n </MenuItem>,\n );\n\n break;\n\n case \"multi-groupby-includes-column\":\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-from-group\"\n key=\"remove-from-group\"\n onClick={menuActionClickHandler}\n >\n Remove from grouping\n </MenuItem>,\n );\n\n break;\n\n default:\n logUnhandledMessage(\n columnGroupStatus,\n \"[vuu-table-extras] column-menu-utils buildGroupMenu\",\n );\n }\n\n return (\n <Menu key=\"group-menu\">\n <MenuTrigger>\n <MenuItem>Group data</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>\n );\n }\n}\n\nexport const buildVisibilityMenuItems = (\n column: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n allowHide = true,\n allowRemove = true,\n): MenuElements | null => {\n if (!allowHide && !allowRemove) {\n return null;\n }\n const menuItems: MenuElements = [];\n const { name, label = name } = column;\n if (allowHide) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"hide-column\"\n key=\"hide-column\"\n onClick={menuActionClickHandler}\n >\n {`Hide ${label} column`}\n </MenuItem>,\n );\n }\n if (allowRemove) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"remove-column\"\n key=\"remove-column\"\n onClick={menuActionClickHandler}\n >\n {`Remove ${label} column`}\n </MenuItem>,\n );\n }\n\n return menuItems;\n};\n\nexport const buildPinMenuItems = (\n column: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElements => {\n if (!isAllowed || column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: MenuElements = [];\n\n const pinLeft = (\n <MenuItem\n data-menu-action-id=\"pin-column-left\"\n key=\"pin-column-left\"\n onClick={menuActionClickHandler}\n >\n Pin left\n </MenuItem>\n );\n\n const pinRight = (\n <MenuItem\n data-menu-action-id=\"pin-column-right\"\n key=\"pin-column-right\"\n onClick={menuActionClickHandler}\n >\n Pin right\n </MenuItem>\n );\n\n if (!pin) {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>\n {pinLeft}\n {pinRight}\n </MenuPanel>\n </Menu>,\n );\n } else {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"unpin-column\"\n key=\"unpin-column\"\n onClick={menuActionClickHandler}\n >\n Unpin\n </MenuItem>,\n );\n if (pin === \"left\" || pin === \"right\") {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>{pin === \"right\" ? pinLeft : pinRight}</MenuPanel>\n </Menu>,\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>\n {pinLeft}\n {pinRight}\n </MenuPanel>\n </Menu>,\n );\n } else {\n menuItems.push(\n <Menu key=\"pin-menu\">\n <MenuTrigger>\n <MenuItem>Pin Column</MenuItem>\n </MenuTrigger>\n <MenuPanel>{pinRight}</MenuPanel>\n </Menu>,\n );\n }\n }\n\n return menuItems;\n};\n\nexport const buildSettingsMenuItems = (\n _: ColumnDescriptor,\n menuActionClickHandler: MenuItemClickHandler,\n allowColumnSettings = true,\n): MenuElements | null => {\n if (!allowColumnSettings) {\n return null;\n }\n\n const menuItems: MenuElements = [];\n\n if (allowColumnSettings) {\n menuItems.push(\n <MenuItem\n data-icon=\"settings\"\n data-menu-action-id=\"column-settings\"\n key=\"column-settings\"\n onClick={menuActionClickHandler}\n >\n Column settings ...\n </MenuItem>,\n );\n }\n\n return menuItems;\n};\n\nexport function buildAggregationMenuItems(\n column: ColumnDescriptor,\n dataSource: DataSource,\n menuActionClickHandler: MenuItemClickHandler,\n isAllowed = true,\n): MenuElements | null {\n if (!isAllowed) {\n return null;\n }\n\n const { name, label = name } = column;\n\n if (dataSource.groupBy?.length === 0) {\n return [];\n } else {\n const menuItems: MenuElements = [\n <MenuItem\n data-menu-action-id=\"agg-count\"\n key=\"agg-count\"\n onClick={menuActionClickHandler}\n >\n Count\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-distinct\"\n key=\"agg-distinct\"\n onClick={menuActionClickHandler}\n >\n Distinct\n </MenuItem>,\n ];\n\n if (isNumericColumn(column)) {\n menuItems.push(\n <MenuItem\n data-menu-action-id=\"agg-sum\"\n key=\"agg-sum\"\n onClick={menuActionClickHandler}\n >\n Sum\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-avg\"\n key=\"agg-avg\"\n onClick={menuActionClickHandler}\n >\n Average\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-high\"\n key=\"agg-high\"\n onClick={menuActionClickHandler}\n >\n High\n </MenuItem>,\n <MenuItem\n data-menu-action-id=\"agg-low\"\n key=\"agg-low\"\n onClick={menuActionClickHandler}\n >\n Low\n </MenuItem>,\n );\n }\n\n return [\n <Menu key=\"aggregate-menu\">\n <MenuTrigger>\n <MenuItem>{`Aggregate ${label}`}</MenuItem>\n </MenuTrigger>\n <MenuPanel>{menuItems}</MenuPanel>\n </Menu>,\n ];\n }\n}\n"],"names":["getSortStatus","jsx","MenuItem","logUnhandledMessage","Menu","MenuTrigger","MenuPanel","getGroupStatus","isNumericColumn"],"mappings":"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"}
|
|
@@ -59,8 +59,6 @@ const useColumnActions = ({
|
|
|
59
59
|
// 3) Table Admin options ...
|
|
60
60
|
case "column-settings":
|
|
61
61
|
return onDisplaySettingsAction?.({ type: "column-settings", column }), true;
|
|
62
|
-
case "table-settings":
|
|
63
|
-
return onDisplaySettingsAction?.({ type: "table-settings" }), true;
|
|
64
62
|
default:
|
|
65
63
|
vuuUtils.logUnhandledMessage(columnMenuActionType, `[vuu-table-extras] useColumnActions handleContextMenuAction, unhandled columnMenuActionType`);
|
|
66
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnActions.js","sources":["../../../../packages/vuu-table-extras/src/column-menu/useColumnActions.ts"],"sourcesContent":["/* eslint-disable no-sequences */\nimport { MenuActionHandler } from \"@vuu-ui/vuu-context-menu\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDisplayAction,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n addGroupColumn,\n addSortColumn,\n AggregationType,\n logUnhandledMessage,\n removeGroupColumn,\n setAggregations,\n setSortColumn,\n} from \"@vuu-ui/vuu-utils\";\nimport { ColumnMenuActionType } from \"./column-menu-utils\";\nimport { DisplaySettingsAction } from \"./column-action-types\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nexport interface ContextMenuOptions {\n column?: RuntimeColumnDescriptor;\n filter?: Filter;\n sort?: VuuFilter;\n}\nexport interface ContextMenuHookProps {\n dataSource: DataSource;\n onColumnDisplayAction?: (action: ColumnDisplayAction) => void;\n onDisplaySettingsAction?: (action: DisplaySettingsAction) => void;\n}\n\nconst { Average, Count, Distinct, High, Low, Sum } = AggregationType;\n\nexport const useColumnActions = ({\n dataSource,\n onColumnDisplayAction,\n onDisplaySettingsAction,\n}: ContextMenuHookProps) => {\n /** return {boolean} used by caller to determine whether to forward to additional installed context menu handlers */\n const handleContextMenuAction: MenuActionHandler<\n ColumnMenuActionType,\n ColumnDescriptor\n > = (columnMenuActionType, column): boolean => {\n if (column && dataSource) {\n // prettier-ignore\n switch(columnMenuActionType){\n // 1) DataSource operations ...\n case \"sort-asc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-dsc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"D\")), true;\n case \"remove-sort\": return (dataSource.sort = {sortDefs:[]}), true;\n case \"sort-add-asc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-add-dsc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"D\")), true;\n case \"group-column\": return (dataSource.groupBy = [column.name]), true;\n case \"add-to-group\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"remove-group\": return (dataSource.groupBy = []), true;\n case \"remove-from-group\": return (dataSource.groupBy = removeGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"remove-column\": {\n dataSource.columns = dataSource.columns.filter(name => name !== column.name);\n onColumnDisplayAction?.({type: \"removeColumn\", column});\n return true;\n }\n case \"agg-avg\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Average)), true;\n case \"agg-high\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, High)), true;\n case \"agg-low\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Low)), true;\n case \"agg-count\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Count)), true;\n case \"agg-distinct\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Distinct)), true;\n case \"agg-sum\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Sum)), true;\n // 2) Column display options ...\n case \"hide-column\": return onColumnDisplayAction?.({type: \"hideColumn\", column}), true;\n case \"pin-column-left\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: \"left\"}), true;\n case \"pin-column-right\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: \"right\"}), true;\n case \"unpin-column\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: false}), true\n // 3) Table Admin options ...\n case \"column-settings\": return onDisplaySettingsAction?.({type: \"column-settings\", column}), true\n
|
|
1
|
+
{"version":3,"file":"useColumnActions.js","sources":["../../../../packages/vuu-table-extras/src/column-menu/useColumnActions.ts"],"sourcesContent":["/* eslint-disable no-sequences */\nimport { MenuActionHandler } from \"@vuu-ui/vuu-context-menu\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDisplayAction,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n addGroupColumn,\n addSortColumn,\n AggregationType,\n logUnhandledMessage,\n removeGroupColumn,\n setAggregations,\n setSortColumn,\n} from \"@vuu-ui/vuu-utils\";\nimport { ColumnMenuActionType } from \"./column-menu-utils\";\nimport { DisplaySettingsAction } from \"./column-action-types\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\n\nexport interface ContextMenuOptions {\n column?: RuntimeColumnDescriptor;\n filter?: Filter;\n sort?: VuuFilter;\n}\nexport interface ContextMenuHookProps {\n dataSource: DataSource;\n onColumnDisplayAction?: (action: ColumnDisplayAction) => void;\n onDisplaySettingsAction?: (action: DisplaySettingsAction) => void;\n}\n\nconst { Average, Count, Distinct, High, Low, Sum } = AggregationType;\n\nexport const useColumnActions = ({\n dataSource,\n onColumnDisplayAction,\n onDisplaySettingsAction,\n}: ContextMenuHookProps) => {\n /** return {boolean} used by caller to determine whether to forward to additional installed context menu handlers */\n const handleContextMenuAction: MenuActionHandler<\n ColumnMenuActionType,\n ColumnDescriptor\n > = (columnMenuActionType, column): boolean => {\n if (column && dataSource) {\n // prettier-ignore\n switch(columnMenuActionType){\n // 1) DataSource operations ...\n case \"sort-asc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-dsc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"D\")), true;\n case \"remove-sort\": return (dataSource.sort = {sortDefs:[]}), true;\n case \"sort-add-asc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-add-dsc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"D\")), true;\n case \"group-column\": return (dataSource.groupBy = [column.name]), true;\n case \"add-to-group\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"remove-group\": return (dataSource.groupBy = []), true;\n case \"remove-from-group\": return (dataSource.groupBy = removeGroupColumn(dataSource.groupBy ?? [], column)), true;\n case \"remove-column\": {\n dataSource.columns = dataSource.columns.filter(name => name !== column.name);\n onColumnDisplayAction?.({type: \"removeColumn\", column});\n return true;\n }\n case \"agg-avg\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Average)), true;\n case \"agg-high\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, High)), true;\n case \"agg-low\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Low)), true;\n case \"agg-count\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Count)), true;\n case \"agg-distinct\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Distinct)), true;\n case \"agg-sum\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Sum)), true;\n // 2) Column display options ...\n case \"hide-column\": return onColumnDisplayAction?.({type: \"hideColumn\", column}), true;\n case \"pin-column-left\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: \"left\"}), true;\n case \"pin-column-right\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: \"right\"}), true;\n case \"unpin-column\": return onColumnDisplayAction?.({type: \"pinColumn\", column, pin: false}), true\n // 3) Table Admin options ...\n case \"column-settings\": return onDisplaySettingsAction?.({type: \"column-settings\", column}), true\n default:\n logUnhandledMessage(columnMenuActionType, `[vuu-table-extras] useColumnActions handleContextMenuAction, unhandled columnMenuActionType`)\n }\n }\n return false;\n };\n\n return handleContextMenuAction;\n};\n"],"names":["AggregationType","setSortColumn","addSortColumn","addGroupColumn","removeGroupColumn","setAggregations","logUnhandledMessage"],"mappings":"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"}
|
|
@@ -15,11 +15,14 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
|
|
|
15
15
|
var _searchPattern, _selectedColumns;
|
|
16
16
|
const ColumnChangeSource = {
|
|
17
17
|
ColumnPicker: "column-picker",
|
|
18
|
+
ColumnSettings: "column-settings",
|
|
18
19
|
Table: "table"
|
|
19
20
|
};
|
|
20
21
|
const SelectedColumnChangeType = {
|
|
22
|
+
CalculatedColumnAdded: "calculated-column-added",
|
|
21
23
|
ColumnAdded: "column-added",
|
|
22
24
|
ColumnRemoved: "column-removed",
|
|
25
|
+
ColumnUpdated: "column-updated",
|
|
23
26
|
ColumnsReordered: "columns-reordered"
|
|
24
27
|
};
|
|
25
28
|
const isColumnAdded = (change) => change?.type === SelectedColumnChangeType.ColumnAdded;
|
|
@@ -70,6 +73,13 @@ class ColumnModel extends vuuUtils.EventEmitter {
|
|
|
70
73
|
__privateSet(this, _selectedColumns, selectedColumns);
|
|
71
74
|
this.notifyListeners(selectedColumns, source, changeDescriptor);
|
|
72
75
|
}
|
|
76
|
+
getColumn(name) {
|
|
77
|
+
const col = __privateGet(this, _selectedColumns).find((col2) => col2.name === name);
|
|
78
|
+
if (col) {
|
|
79
|
+
return col;
|
|
80
|
+
}
|
|
81
|
+
throw Error(`[ColumnModel] columns does not contain column ${name}`);
|
|
82
|
+
}
|
|
73
83
|
addItemToSelectedColumns(name, source) {
|
|
74
84
|
const column = this.allColumns.find((col) => col.name === name);
|
|
75
85
|
if (column) {
|
|
@@ -106,6 +116,54 @@ class ColumnModel extends vuuUtils.EventEmitter {
|
|
|
106
116
|
{ type: SelectedColumnChangeType.ColumnsReordered }
|
|
107
117
|
);
|
|
108
118
|
}
|
|
119
|
+
updateColumn(column, newColumn = column) {
|
|
120
|
+
const allIndex = this.allColumns.findIndex(
|
|
121
|
+
(col) => col.name === column.name
|
|
122
|
+
);
|
|
123
|
+
const selectedIndex = __privateGet(this, _selectedColumns).findIndex(
|
|
124
|
+
(col) => col.name === column.name
|
|
125
|
+
);
|
|
126
|
+
if (selectedIndex !== -1) {
|
|
127
|
+
if (allIndex === -1) {
|
|
128
|
+
throw Error(
|
|
129
|
+
`[ColumnModel] updateColumn, selected column not in allColumns collection`
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
__privateSet(this, _selectedColumns, __privateGet(this, _selectedColumns).toSpliced(
|
|
133
|
+
selectedIndex,
|
|
134
|
+
1,
|
|
135
|
+
newColumn
|
|
136
|
+
));
|
|
137
|
+
this.allColumns = this.allColumns.toSpliced(allIndex, 1, newColumn);
|
|
138
|
+
this.notifyListeners(__privateGet(this, _selectedColumns), "column-settings", {
|
|
139
|
+
type: SelectedColumnChangeType.ColumnUpdated,
|
|
140
|
+
column
|
|
141
|
+
});
|
|
142
|
+
} else {
|
|
143
|
+
throw Error(
|
|
144
|
+
`[ColumnModel] updateColumn, column ${column.name} not found`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Used when adding a calculated column
|
|
150
|
+
*
|
|
151
|
+
* @param column
|
|
152
|
+
*
|
|
153
|
+
* @param addToSelectedColumns
|
|
154
|
+
*/
|
|
155
|
+
addColumn(column, addToSelectedColumns = false) {
|
|
156
|
+
console.log(`[ColumnModel] add column ${JSON.stringify(column)}`);
|
|
157
|
+
if (addToSelectedColumns) {
|
|
158
|
+
console.log(`add it to selected coliumns`);
|
|
159
|
+
}
|
|
160
|
+
this.allColumns = this.allColumns.concat(column);
|
|
161
|
+
__privateSet(this, _selectedColumns, __privateGet(this, _selectedColumns).concat(column));
|
|
162
|
+
this.notifyListeners(__privateGet(this, _selectedColumns), "column-picker", {
|
|
163
|
+
type: SelectedColumnChangeType.CalculatedColumnAdded,
|
|
164
|
+
column
|
|
165
|
+
});
|
|
166
|
+
}
|
|
109
167
|
}
|
|
110
168
|
_searchPattern = new WeakMap();
|
|
111
169
|
_selectedColumns = new WeakMap();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnModel.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/ColumnModel.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { EventEmitter, reorderColumnItems, ValueOf } from \"@vuu-ui/vuu-utils\";\n\nexport const ColumnChangeSource = {\n ColumnPicker: \"column-picker\",\n Table: \"table\",\n} as const;\nexport type ColumnChangeSource = ValueOf<typeof ColumnChangeSource>;\n\nexport const SelectedColumnChangeType = {\n ColumnAdded: \"column-added\",\n ColumnRemoved: \"column-removed\",\n ColumnsReordered: \"columns-reordered\",\n} as const;\nexport type SelectedColumnChangeType = ValueOf<typeof SelectedColumnChangeType>;\n\nexport interface SelectedColumnChangeColumnAdded {\n type: Extract<SelectedColumnChangeType, \"column-added\">;\n column: ColumnDescriptor;\n}\n\nexport interface SelectedColumnChangeColumnRemoved {\n type: Extract<SelectedColumnChangeType, \"column-removed\">;\n column: ColumnDescriptor;\n}\n\nexport interface SelectedColumnChangeColumnsReordered {\n type: Extract<SelectedColumnChangeType, \"columns-reordered\">;\n}\n\nexport type SelectedColumnChangeDescriptor =\n | SelectedColumnChangeColumnAdded\n | SelectedColumnChangeColumnRemoved\n | SelectedColumnChangeColumnsReordered;\n\nexport const isColumnAdded = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnAdded =>\n change?.type === SelectedColumnChangeType.ColumnAdded;\nexport const isColumnRemoved = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnRemoved =>\n change?.type === SelectedColumnChangeType.ColumnRemoved;\nexport const isColumnsReordered = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnsReordered =>\n change?.type === SelectedColumnChangeType.ColumnsReordered;\n\nexport type ColumnsChangeHandler = (\n columns: readonly ColumnDescriptor[],\n changeSource: ColumnChangeSource,\n changeDescriptor?: SelectedColumnChangeDescriptor,\n) => void;\nexport type ColumnEvents = {\n change: ColumnsChangeHandler;\n render: (o: object) => void;\n};\n\nconst byColumnName = (\n { name: n1, label: l1 = n1 }: ColumnDescriptor,\n { name: n2, label: l2 = n2 }: ColumnDescriptor,\n) => (l1 > l2 ? 1 : l2 > l1 ? -1 : 0);\n\nconst filterColumns = (\n columns: readonly ColumnDescriptor[],\n pattern: string,\n) => {\n if (pattern) {\n const lowerCasePattern = pattern.toLowerCase();\n return columns.filter(\n ({ name, label = name }) =>\n label.toLowerCase().indexOf(lowerCasePattern) !== -1,\n );\n } else {\n return columns;\n }\n};\n\nexport class ColumnModel extends EventEmitter<ColumnEvents> {\n #searchPattern = \"\";\n #selectedColumns: readonly ColumnDescriptor[];\n constructor(\n /**\n * All available columns, including selected columns.\n */\n public readonly allColumns: readonly ColumnDescriptor[],\n /**\n * Columns already selected and rendered in Table.\n */\n\n selectedColumns: ColumnDescriptor[],\n ) {\n super();\n this.#selectedColumns = selectedColumns;\n }\n\n get availableColumns(): ColumnDescriptor[] {\n return filterColumns(this.allColumns, this.#searchPattern)\n .filter(\n ({ name }) =>\n this.#selectedColumns.findIndex((c) => c.name === name) === -1,\n )\n .toSorted(byColumnName);\n }\n\n set searchPattern(pattern: string) {\n const searchPattern = pattern;\n if (searchPattern !== this.#searchPattern) {\n this.#searchPattern = searchPattern;\n this.emit(\"render\", {});\n }\n }\n\n get searchPattern() {\n return this.#searchPattern ?? \"\";\n }\n\n get selectedColumns() {\n return filterColumns(this.#selectedColumns, this.#searchPattern);\n }\n setSelectedColumns(\n selectedColumns: ColumnDescriptor[],\n source: ColumnChangeSource,\n changeDescriptor?: SelectedColumnChangeDescriptor,\n ) {\n this.#selectedColumns = selectedColumns;\n this.notifyListeners(selectedColumns, source, changeDescriptor);\n }\n\n addItemToSelectedColumns(name: string, source: ColumnChangeSource) {\n const column = this.allColumns.find((col) => col.name === name);\n if (column) {\n this.#selectedColumns = this.#selectedColumns.concat(column);\n this.notifyListeners(this.#selectedColumns, source, {\n type: SelectedColumnChangeType.ColumnAdded,\n column,\n });\n } else {\n throw Error(\n `[ColumnModel] addItemToSelectedColumns, column '${name}' not found`,\n );\n }\n }\n removeItemFromSelectedColumns(name: string, source: ColumnChangeSource) {\n const column = this.#selectedColumns.find((col) => col.name === name);\n if (column) {\n const index = this.#selectedColumns.indexOf(column);\n this.#selectedColumns = this.#selectedColumns.toSpliced(index, 1);\n this.notifyListeners(this.#selectedColumns, source, {\n type: SelectedColumnChangeType.ColumnRemoved,\n column,\n });\n } else {\n throw Error(\n `[ColumnModel] removeItemFromSelectedColumns, column '${name}' not found`,\n );\n }\n }\n\n reorderSelectedColumns(\n orderedColumnNames: string[],\n source: ColumnChangeSource,\n ) {\n this.setSelectedColumns(\n reorderColumnItems(this.#selectedColumns, orderedColumnNames),\n source,\n { type: SelectedColumnChangeType.ColumnsReordered },\n );\n }\n\n private notifyListeners: ColumnsChangeHandler = (\n columns,\n source,\n changeType,\n ) => {\n this.emit(\"change\", columns, source, changeType);\n this.emit(\"render\", {});\n };\n}\n"],"names":["EventEmitter","reorderColumnItems"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,cAAA,EAAA,gBAAA;AAGO,MAAM,kBAAqB,GAAA;AAAA,EAChC,YAAc,EAAA,eAAA;AAAA,EACd,KAAO,EAAA;AACT;AAGO,MAAM,wBAA2B,GAAA;AAAA,EACtC,WAAa,EAAA,cAAA;AAAA,EACb,aAAe,EAAA,gBAAA;AAAA,EACf,gBAAkB,EAAA;AACpB;AAsBO,MAAM,aAAgB,GAAA,CAC3B,MAEA,KAAA,MAAA,EAAQ,SAAS,wBAAyB,CAAA;AACrC,MAAM,eAAkB,GAAA,CAC7B,MAEA,KAAA,MAAA,EAAQ,SAAS,wBAAyB,CAAA;AACrC,MAAM,kBAAqB,GAAA,CAChC,MAEA,KAAA,MAAA,EAAQ,SAAS,wBAAyB,CAAA;AAY5C,MAAM,YAAA,GAAe,CACnB,EAAE,IAAA,EAAM,IAAI,KAAO,EAAA,EAAA,GAAK,IACxB,EAAA,EAAE,MAAM,EAAI,EAAA,KAAA,EAAO,KAAK,EAAG,EAAA,KACvB,KAAK,EAAK,GAAA,CAAA,GAAI,EAAK,GAAA,EAAA,GAAK,CAAK,CAAA,GAAA,CAAA;AAEnC,MAAM,aAAA,GAAgB,CACpB,OAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,gBAAA,GAAmB,QAAQ,WAAY,EAAA;AAC7C,IAAA,OAAO,OAAQ,CAAA,MAAA;AAAA,MACb,CAAC,EAAE,IAAA,EAAM,KAAQ,GAAA,IAAA,EACf,KAAA,KAAA,CAAM,WAAY,EAAA,CAAE,OAAQ,CAAA,gBAAgB,CAAM,KAAA,CAAA;AAAA,KACtD;AAAA,GACK,MAAA;AACL,IAAO,OAAA,OAAA;AAAA;AAEX,CAAA;AAEO,MAAM,oBAAoBA,qBAA2B,CAAA;AAAA,EAG1D,WAAA,CAIkB,YAKhB,eACA,EAAA;AACA,IAAM,KAAA,EAAA;AAPU,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AANlB,IAAiB,YAAA,CAAA,IAAA,EAAA,cAAA,EAAA,EAAA,CAAA;AACjB,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AA0FA,IAAA,aAAA,CAAA,IAAA,EAAQ,iBAAwC,EAAA,CAC9C,OACA,EAAA,MAAA,EACA,UACG,KAAA;AACH,MAAA,IAAA,CAAK,IAAK,CAAA,QAAA,EAAU,OAAS,EAAA,MAAA,EAAQ,UAAU,CAAA;AAC/C,MAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,EAAE,CAAA;AAAA,KACxB,CAAA;AApFE,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AAAA;AAC1B,EAEA,IAAI,gBAAuC,GAAA;AACzC,IAAA,OAAO,aAAc,CAAA,IAAA,CAAK,UAAY,EAAA,YAAA,CAAA,IAAA,EAAK,eAAc,CACtD,CAAA,MAAA;AAAA,MACC,CAAC,EAAE,IAAK,EAAA,KACN,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAU,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,IAAS,KAAA,IAAI,CAAM,KAAA,CAAA;AAAA,KAChE,CACC,SAAS,YAAY,CAAA;AAAA;AAC1B,EAEA,IAAI,cAAc,OAAiB,EAAA;AACjC,IAAA,MAAM,aAAgB,GAAA,OAAA;AACtB,IAAI,IAAA,aAAA,KAAkB,mBAAK,cAAgB,CAAA,EAAA;AACzC,MAAA,YAAA,CAAA,IAAA,EAAK,cAAiB,EAAA,aAAA,CAAA;AACtB,MAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,EAAE,CAAA;AAAA;AACxB;AACF,EAEA,IAAI,aAAgB,GAAA;AAClB,IAAA,OAAO,mBAAK,cAAkB,CAAA,IAAA,EAAA;AAAA;AAChC,EAEA,IAAI,eAAkB,GAAA;AACpB,IAAA,OAAO,aAAc,CAAA,YAAA,CAAA,IAAA,EAAK,gBAAkB,CAAA,EAAA,YAAA,CAAA,IAAA,EAAK,cAAc,CAAA,CAAA;AAAA;AACjE,EACA,kBAAA,CACE,eACA,EAAA,MAAA,EACA,gBACA,EAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AACxB,IAAK,IAAA,CAAA,eAAA,CAAgB,eAAiB,EAAA,MAAA,EAAQ,gBAAgB,CAAA;AAAA;AAChE,EAEA,wBAAA,CAAyB,MAAc,MAA4B,EAAA;AACjE,IAAM,MAAA,MAAA,GAAS,KAAK,UAAW,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAC3D,MAAK,IAAA,CAAA,eAAA,CAAgB,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAkB,MAAQ,EAAA;AAAA,QAClD,MAAM,wBAAyB,CAAA,WAAA;AAAA,QAC/B;AAAA,OACD,CAAA;AAAA,KACI,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,mDAAmD,IAAI,CAAA,WAAA;AAAA,OACzD;AAAA;AACF;AACF,EACA,6BAAA,CAA8B,MAAc,MAA4B,EAAA;AACtE,IAAM,MAAA,MAAA,GAAS,mBAAK,gBAAiB,CAAA,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AACpE,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAM,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,OAAA,CAAQ,MAAM,CAAA;AAClD,MAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA;AAChE,MAAK,IAAA,CAAA,eAAA,CAAgB,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAkB,MAAQ,EAAA;AAAA,QAClD,MAAM,wBAAyB,CAAA,aAAA;AAAA,QAC/B;AAAA,OACD,CAAA;AAAA,KACI,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,wDAAwD,IAAI,CAAA,WAAA;AAAA,OAC9D;AAAA;AACF;AACF,EAEA,sBAAA,CACE,oBACA,MACA,EAAA;AACA,IAAK,IAAA,CAAA,kBAAA;AAAA,MACHC,2BAAA,CAAmB,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAkB,kBAAkB,CAAA;AAAA,MAC5D,MAAA;AAAA,MACA,EAAE,IAAM,EAAA,wBAAA,CAAyB,gBAAiB;AAAA,KACpD;AAAA;AAWJ;AAnGE,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"ColumnModel.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/ColumnModel.ts"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { EventEmitter, reorderColumnItems, ValueOf } from \"@vuu-ui/vuu-utils\";\n\nexport const ColumnChangeSource = {\n ColumnPicker: \"column-picker\",\n ColumnSettings: \"column-settings\",\n Table: \"table\",\n} as const;\nexport type ColumnChangeSource = ValueOf<typeof ColumnChangeSource>;\n\nexport const SelectedColumnChangeType = {\n CalculatedColumnAdded: \"calculated-column-added\",\n ColumnAdded: \"column-added\",\n ColumnRemoved: \"column-removed\",\n ColumnUpdated: \"column-updated\",\n ColumnsReordered: \"columns-reordered\",\n} as const;\nexport type SelectedColumnChangeType = ValueOf<typeof SelectedColumnChangeType>;\n\nexport interface SelectedColumnChangeColumnAdded {\n type: Extract<SelectedColumnChangeType, \"column-added\">;\n column: ColumnDescriptor;\n}\nexport interface SelectedColumnChangeCalculatedColumnAdded {\n type: Extract<SelectedColumnChangeType, \"calculated-column-added\">;\n column: ColumnDescriptor;\n}\nexport interface SelectedColumnChangeColumnUpdated {\n type: Extract<SelectedColumnChangeType, \"column-updated\">;\n column: ColumnDescriptor;\n}\n\nexport interface SelectedColumnChangeColumnRemoved {\n type: Extract<SelectedColumnChangeType, \"column-removed\">;\n column: ColumnDescriptor;\n}\n\nexport interface SelectedColumnChangeColumnsReordered {\n type: Extract<SelectedColumnChangeType, \"columns-reordered\">;\n}\n\nexport type SelectedColumnChangeDescriptor =\n | SelectedColumnChangeCalculatedColumnAdded\n | SelectedColumnChangeColumnAdded\n | SelectedColumnChangeColumnRemoved\n | SelectedColumnChangeColumnUpdated\n | SelectedColumnChangeColumnsReordered;\n\nexport const isColumnAdded = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnAdded =>\n change?.type === SelectedColumnChangeType.ColumnAdded;\nexport const isColumnRemoved = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnRemoved =>\n change?.type === SelectedColumnChangeType.ColumnRemoved;\nexport const isColumnUpdated = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnUpdated =>\n change?.type === SelectedColumnChangeType.ColumnUpdated;\nexport const isColumnsReordered = (\n change?: SelectedColumnChangeDescriptor,\n): change is SelectedColumnChangeColumnsReordered =>\n change?.type === SelectedColumnChangeType.ColumnsReordered;\n\nexport type ColumnsChangeHandler = (\n columns: readonly ColumnDescriptor[],\n changeSource: ColumnChangeSource,\n changeDescriptor?: SelectedColumnChangeDescriptor,\n) => void;\nexport type ColumnEvents = {\n change: ColumnsChangeHandler;\n render: (o: object) => void;\n};\n\nconst byColumnName = (\n { name: n1, label: l1 = n1 }: ColumnDescriptor,\n { name: n2, label: l2 = n2 }: ColumnDescriptor,\n) => (l1 > l2 ? 1 : l2 > l1 ? -1 : 0);\n\nconst filterColumns = (\n columns: readonly ColumnDescriptor[],\n pattern: string,\n) => {\n if (pattern) {\n const lowerCasePattern = pattern.toLowerCase();\n return columns.filter(\n ({ name, label = name }) =>\n label.toLowerCase().indexOf(lowerCasePattern) !== -1,\n );\n } else {\n return columns;\n }\n};\n\nexport class ColumnModel extends EventEmitter<ColumnEvents> {\n #searchPattern = \"\";\n #selectedColumns: readonly ColumnDescriptor[];\n constructor(\n /**\n * All available columns, including selected columns.\n */\n public allColumns: readonly ColumnDescriptor[],\n /**\n * Columns already selected and rendered in Table.\n */\n selectedColumns: readonly ColumnDescriptor[],\n ) {\n super();\n this.#selectedColumns = selectedColumns;\n }\n\n get availableColumns(): ColumnDescriptor[] {\n return filterColumns(this.allColumns, this.#searchPattern)\n .filter(\n ({ name }) =>\n this.#selectedColumns.findIndex((c) => c.name === name) === -1,\n )\n .toSorted(byColumnName);\n }\n\n set searchPattern(pattern: string) {\n const searchPattern = pattern;\n if (searchPattern !== this.#searchPattern) {\n this.#searchPattern = searchPattern;\n this.emit(\"render\", {});\n }\n }\n\n get searchPattern() {\n return this.#searchPattern ?? \"\";\n }\n\n get selectedColumns() {\n return filterColumns(this.#selectedColumns, this.#searchPattern);\n }\n setSelectedColumns(\n selectedColumns: ColumnDescriptor[],\n source: ColumnChangeSource,\n changeDescriptor?: SelectedColumnChangeDescriptor,\n ) {\n this.#selectedColumns = selectedColumns;\n this.notifyListeners(selectedColumns, source, changeDescriptor);\n }\n\n getColumn(name: string) {\n const col = this.#selectedColumns.find((col) => col.name === name);\n if (col) {\n return col;\n }\n throw Error(`[ColumnModel] columns does not contain column ${name}`);\n }\n\n addItemToSelectedColumns(name: string, source: ColumnChangeSource) {\n const column = this.allColumns.find((col) => col.name === name);\n if (column) {\n this.#selectedColumns = this.#selectedColumns.concat(column);\n this.notifyListeners(this.#selectedColumns, source, {\n type: SelectedColumnChangeType.ColumnAdded,\n column,\n });\n } else {\n throw Error(\n `[ColumnModel] addItemToSelectedColumns, column '${name}' not found`,\n );\n }\n }\n removeItemFromSelectedColumns(name: string, source: ColumnChangeSource) {\n const column = this.#selectedColumns.find((col) => col.name === name);\n if (column) {\n const index = this.#selectedColumns.indexOf(column);\n this.#selectedColumns = this.#selectedColumns.toSpliced(index, 1);\n this.notifyListeners(this.#selectedColumns, source, {\n type: SelectedColumnChangeType.ColumnRemoved,\n column,\n });\n } else {\n throw Error(\n `[ColumnModel] removeItemFromSelectedColumns, column '${name}' not found`,\n );\n }\n }\n\n reorderSelectedColumns(\n orderedColumnNames: string[],\n source: ColumnChangeSource,\n ) {\n this.setSelectedColumns(\n reorderColumnItems(this.#selectedColumns, orderedColumnNames),\n source,\n { type: SelectedColumnChangeType.ColumnsReordered },\n );\n }\n\n updateColumn(\n currentColumn: ColumnDescriptor,\n newColumn: ColumnDescriptor,\n ): void;\n updateColumn(column: ColumnDescriptor): void;\n updateColumn(column: ColumnDescriptor, newColumn: ColumnDescriptor = column) {\n const allIndex = this.allColumns.findIndex(\n (col) => col.name === column.name,\n );\n const selectedIndex = this.#selectedColumns.findIndex(\n (col) => col.name === column.name,\n );\n\n if (selectedIndex !== -1) {\n if (allIndex === -1) {\n throw Error(\n `[ColumnModel] updateColumn, selected column not in allColumns collection`,\n );\n }\n\n this.#selectedColumns = this.#selectedColumns.toSpliced(\n selectedIndex,\n 1,\n newColumn,\n );\n this.allColumns = this.allColumns.toSpliced(allIndex, 1, newColumn);\n\n this.notifyListeners(this.#selectedColumns, \"column-settings\", {\n type: SelectedColumnChangeType.ColumnUpdated,\n column,\n });\n } else {\n throw Error(\n `[ColumnModel] updateColumn, column ${column.name} not found`,\n );\n }\n }\n\n /**\n * Used when adding a calculated column\n *\n * @param column\n *\n * @param addToSelectedColumns\n */\n addColumn(column: ColumnDescriptor, addToSelectedColumns = false) {\n console.log(`[ColumnModel] add column ${JSON.stringify(column)}`);\n if (addToSelectedColumns) {\n console.log(`add it to selected coliumns`);\n }\n\n this.allColumns = this.allColumns.concat(column);\n this.#selectedColumns = this.#selectedColumns.concat(column);\n\n this.notifyListeners(this.#selectedColumns, \"column-picker\", {\n type: SelectedColumnChangeType.CalculatedColumnAdded,\n column,\n });\n }\n\n private notifyListeners: ColumnsChangeHandler = (\n columns,\n source,\n changeType,\n ) => {\n this.emit(\"change\", columns, source, changeType);\n this.emit(\"render\", {});\n };\n}\n"],"names":["EventEmitter","col","reorderColumnItems"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var columnPickerCss = ".vuuColumnPicker {\n\n --columnpicker-background: var(--vuuColumnPicker-background, var(--salt-container-primary-background));\n background: var(--columnpicker-background);\n container-type: inline-size;\n display: flex; \n flex-direction: column;\n gap: var(--salt-spacing-300);\n height: var(--vuuColumnPicker-height,
|
|
3
|
+
var columnPickerCss = ".vuuColumnPicker {\n\n --label-margin-left: 0px;\n\n --columnpicker-background: var(--vuuColumnPicker-background, var(--salt-container-primary-background));\n background: var(--columnpicker-background);\n container-type: inline-size;\n display: flex; \n flex-direction: column;\n gap: var(--salt-spacing-300);\n height: var(--vuuColumnPicker-height, 100%);\n overflow: hidden;\n padding: var(--salt-spacing-300) 0;\n\n &.vuuColumnPicker-withCalculated {\n --label-margin-left: 8px;\n }\n\n .saltListBox {\n background-color: inherit;\n }\n\n .saltOption {\n align-items: center;\n background-color: inherit;\n border-bottom: var(--vuuColumnListItem-border, solid) 1px\n var(--salt-separable-tertiary-borderColor);\n gap: var(--salt-spacing-200);\n height: calc(var(--salt-size-base) + var(--salt-spacing-200));\n .vuuIcon {\n --vuu-icon-color: var(--salt-content-secondary-foreground);\n }\n\n .vuuCalculatedColumnIcon {\n --vuu-icon-color: var(--salt-content-secondary-foreground);\n left: 32px;\n position: absolute;\n top: 8px;\n }\n\n .vuuHighlight {\n color: var(--vuu-color-blue-40);\n text-decoration: underline;\n }\n\n .vuuColumnPicker-text {\n margin-left: var(--label-margin-left);\n }\n\n }\n\n .vuuColumnPickerListItem-action {\n margin-left: auto;\n visibility: hidden;\n }\n\n .saltOption:hover {\n .vuuColumnPickerListItem-action {\n visibility: visible;\n }\n }\n\n .vuuColumnPicker-search {\n --saltInput-paddingLeft: var(--salt-spacing-300);\n padding: var(--salt-spacing-200) var(--salt-spacing-300) 0 var(--salt-spacing-300);\n }\n\n .vuuColumnPicker-scrollContainer {\n\n flex: 1 1 0px;\n overflow: auto;\n\n\n .vuuColumnPicker-sectionHeader {\n align-items: center;\n background: var(--columnpicker-background);\n display: flex;\n height: 32px;\n padding: 0 var(--salt-spacing-300);\n position: sticky;\n top:0;\n z-index: 1;\n }\n\n .vuuColumnPicker-availableHeader {\n top: 32px;\n }\n\n\n .vuuColumnPicker-availableList {\n .saltOption {\n padding-left: var(--salt-spacing-300);\n }\n }\n\n }\n\n}";
|
|
4
4
|
|
|
5
5
|
module.exports = columnPickerCss;
|
|
6
6
|
//# sourceMappingURL=ColumnPicker.css.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
|
-
var cx = require('clsx');
|
|
6
4
|
var styles = require('@salt-ds/styles');
|
|
7
5
|
var window = require('@salt-ds/window');
|
|
8
6
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
7
|
+
var cx = require('clsx');
|
|
8
|
+
var react = require('react');
|
|
9
9
|
var core = require('@salt-ds/core');
|
|
10
|
-
var useColumnPicker = require('./useColumnPicker.js');
|
|
11
|
-
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
12
10
|
var vuuTable = require('@vuu-ui/vuu-table');
|
|
13
|
-
var
|
|
11
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
14
12
|
var ColumnModel = require('./ColumnModel.js');
|
|
13
|
+
var useColumnPicker = require('./useColumnPicker.js');
|
|
14
|
+
var ColumnPicker$1 = require('./ColumnPicker.css.js');
|
|
15
15
|
|
|
16
16
|
const classBase = "vuuColumnPicker";
|
|
17
17
|
const classBaseListItem = "vuuColumnPickerListItem";
|
|
@@ -33,20 +33,27 @@ const useSorting = (id, index) => {
|
|
|
33
33
|
const SelectedColumnListItem = ({
|
|
34
34
|
className: classNameProp,
|
|
35
35
|
index,
|
|
36
|
-
column
|
|
36
|
+
column,
|
|
37
37
|
onRemove,
|
|
38
38
|
searchPattern = "",
|
|
39
39
|
...optionProps
|
|
40
40
|
}) => {
|
|
41
|
-
const { handleRef, ref } = useSorting(
|
|
42
|
-
const value = vuuUtils.getColumnLabel(
|
|
41
|
+
const { handleRef, ref } = useSorting(column.name, index);
|
|
42
|
+
const value = vuuUtils.getColumnLabel(column);
|
|
43
43
|
const valueWithHighlighting = vuuTable.useHighlighting(value, searchPattern);
|
|
44
|
+
const handleRemoveButtonClick = react.useCallback(
|
|
45
|
+
(e) => {
|
|
46
|
+
e.stopPropagation();
|
|
47
|
+
onRemove?.(e);
|
|
48
|
+
},
|
|
49
|
+
[onRemove]
|
|
50
|
+
);
|
|
44
51
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
45
52
|
core.Option,
|
|
46
53
|
{
|
|
47
54
|
...optionProps,
|
|
48
55
|
className: cx(classNameProp, classBaseListItem),
|
|
49
|
-
"data-name":
|
|
56
|
+
"data-name": column.name,
|
|
50
57
|
ref,
|
|
51
58
|
children: [
|
|
52
59
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -59,6 +66,7 @@ const SelectedColumnListItem = ({
|
|
|
59
66
|
size: 16
|
|
60
67
|
}
|
|
61
68
|
),
|
|
69
|
+
vuuUtils.isCalculatedColumn(column.name) ? /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.Icon, { className: "vuuCalculatedColumnIcon", name: "function" }) : null,
|
|
62
70
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-text`, children: valueWithHighlighting }),
|
|
63
71
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
72
|
vuuUiControls.IconButton,
|
|
@@ -67,7 +75,7 @@ const SelectedColumnListItem = ({
|
|
|
67
75
|
"data-embedded": true,
|
|
68
76
|
appearance: "transparent",
|
|
69
77
|
icon: "cross",
|
|
70
|
-
onClick:
|
|
78
|
+
onClick: handleRemoveButtonClick,
|
|
71
79
|
size: 16
|
|
72
80
|
}
|
|
73
81
|
)
|
|
@@ -108,7 +116,15 @@ const AvailableColumnListItem = ({
|
|
|
108
116
|
}
|
|
109
117
|
);
|
|
110
118
|
};
|
|
111
|
-
const ColumnPicker = react.forwardRef(function ColumnPicker2({
|
|
119
|
+
const ColumnPicker = react.forwardRef(function ColumnPicker2({
|
|
120
|
+
allowCreateCalculatedColumn,
|
|
121
|
+
columnModel,
|
|
122
|
+
className,
|
|
123
|
+
onClickCreateCalculatedColumn,
|
|
124
|
+
onSelectionChange,
|
|
125
|
+
selected = NO_SELECTION,
|
|
126
|
+
...htmlAttributes
|
|
127
|
+
}, forwardedRef) {
|
|
112
128
|
const targetWindow = window.useWindow();
|
|
113
129
|
styles.useComponentCssInjection({
|
|
114
130
|
testId: "vuu-column-picker",
|
|
@@ -152,11 +168,16 @@ const ColumnPicker = react.forwardRef(function ColumnPicker2({ columnModel, clas
|
|
|
152
168
|
}
|
|
153
169
|
}, 300);
|
|
154
170
|
}, [columnModel]);
|
|
171
|
+
const oneOrMoreColumnsIsCalculated = selectedColumns.some(
|
|
172
|
+
(column) => vuuUtils.isCalculatedColumn(column.name)
|
|
173
|
+
);
|
|
155
174
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
156
175
|
"div",
|
|
157
176
|
{
|
|
158
177
|
...htmlAttributes,
|
|
159
|
-
className: cx(classBase, className
|
|
178
|
+
className: cx(classBase, className, {
|
|
179
|
+
[`${classBase}-withCalculated`]: oneOrMoreColumnsIsCalculated
|
|
180
|
+
}),
|
|
160
181
|
ref: forwardedRef,
|
|
161
182
|
children: [
|
|
162
183
|
/* @__PURE__ */ jsxRuntime.jsx("form", { className: `${classBase}-search`, role: "search", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -175,8 +196,9 @@ const ColumnPicker = react.forwardRef(function ColumnPicker2({ columnModel, clas
|
|
|
175
196
|
core.ListBox,
|
|
176
197
|
{
|
|
177
198
|
className: `${classBase}-selectedList`,
|
|
199
|
+
onSelectionChange,
|
|
178
200
|
ref: listRef,
|
|
179
|
-
selected
|
|
201
|
+
selected,
|
|
180
202
|
children: selectedColumns.map((column, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
181
203
|
SelectedColumnListItem,
|
|
182
204
|
{
|
|
@@ -218,7 +240,8 @@ const ColumnPicker = react.forwardRef(function ColumnPicker2({ columnModel, clas
|
|
|
218
240
|
))
|
|
219
241
|
}
|
|
220
242
|
)
|
|
221
|
-
] })
|
|
243
|
+
] }),
|
|
244
|
+
allowCreateCalculatedColumn ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-column-buttons`, children: /* @__PURE__ */ jsxRuntime.jsx(core.Button, { onClick: onClickCreateCalculatedColumn, children: "Create calculated column" }) }) : null
|
|
222
245
|
]
|
|
223
246
|
}
|
|
224
247
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnPicker.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/ColumnPicker.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n MouseEventHandler,\n RefCallback,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n DragDropProvider,\n getColumnLabel,\n useSortable,\n} from \"@vuu-ui/vuu-utils\";\n\nimport { Input, ListBox, Option, OptionProps } from \"@salt-ds/core\";\nimport { ColumPickerHookProps, useColumnPicker } from \"./useColumnPicker\";\nimport { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { useHighlighting } from \"@vuu-ui/vuu-table\";\n\nimport columnPickerCss from \"./ColumnPicker.css\";\nimport { ColumnChangeSource } from \"./ColumnModel\";\n\nconst classBase = \"vuuColumnPicker\";\nexport const classBaseListItem = \"vuuColumnPickerListItem\";\n\nexport interface ColumnPickerProps\n extends ColumPickerHookProps,\n HTMLAttributes<HTMLDivElement> {}\n\nconst searchIcon = <span data-icon=\"search\" />;\nconst NO_SELECTION: string[] = [] as const;\n\nconst useSorting = (id: string, index: number) => {\n const { handleRef: sortableHandleRef, ref: sortableRef } = useSortable({\n id,\n index,\n });\n\n const [handleRef, ref] = useMemo(() => {\n return [sortableHandleRef, sortableRef];\n }, [sortableHandleRef, sortableRef]);\n\n return {\n handleRef,\n ref,\n };\n};\n\nconst SelectedColumnListItem = ({\n className: classNameProp,\n index,\n column: item,\n onRemove,\n searchPattern = \"\",\n ...optionProps\n}: OptionProps & {\n index: number;\n column: ColumnDescriptor;\n onRemove: MouseEventHandler<HTMLButtonElement>;\n searchPattern?: Lowercase<string>;\n}) => {\n const { handleRef, ref } = useSorting(item.name, index);\n const value = getColumnLabel(item as ColumnDescriptor);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <Option\n {...optionProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item.name}\n ref={ref}\n >\n <IconButton\n data-embedded\n appearance=\"transparent\"\n icon=\"draggable\"\n ref={handleRef}\n size={16}\n />\n <span className={`${classBase}-text`}>{valueWithHighlighting}</span>\n <IconButton\n className={`${classBaseListItem}-action`}\n data-embedded\n appearance=\"transparent\"\n icon=\"cross\"\n onClick={onRemove}\n size={16}\n />\n </Option>\n );\n};\n\nconst AvailableColumnListItem = ({\n className: classNameProp,\n index,\n column: item,\n onAdd,\n searchPattern = \"\",\n ...optionProps\n}: OptionProps & {\n index: number;\n column: ColumnDescriptor;\n onAdd: MouseEventHandler<HTMLButtonElement>;\n searchPattern?: Lowercase<string>;\n}) => {\n const value = getColumnLabel(item as ColumnDescriptor);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <Option\n {...optionProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item.name}\n >\n <span className={`${classBase}-text`}>{valueWithHighlighting}</span>\n <IconButton\n className={`${classBaseListItem}-action`}\n data-embedded\n appearance=\"transparent\"\n icon=\"plus\"\n onClick={onAdd}\n size={16}\n />\n </Option>\n );\n};\n\nexport const ColumnPicker = forwardRef(function ColumnPicker(\n { columnModel, className, ...htmlAttributes }: ColumnPickerProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: columnPickerCss,\n window: targetWindow,\n });\n\n const searchCallbackRef = useCallback<RefCallback<HTMLElement>>((el) => {\n setTimeout(() => {\n el?.querySelector(\"input\")?.focus();\n }, 100);\n }, []);\n\n const {\n availableColumns,\n onAddItemToSelectedList,\n onChangeSearchInput,\n onRemoveItemFromSelectedList,\n searchText,\n selectedColumns,\n } = useColumnPicker({\n columnModel: columnModel,\n });\n const listRef = useRef<HTMLDivElement>(null);\n\n const getOptionName = (option?: HTMLElement) => {\n if (option) {\n const { name } = option.dataset;\n if (name) {\n return name;\n }\n }\n throw Error(\"[ColumnPicker] list option has no data-name\");\n };\n\n const handleDragEnd = useCallback(() => {\n setTimeout(() => {\n const listItems =\n listRef.current?.querySelectorAll<HTMLDivElement>(\".saltOption\");\n if (listItems) {\n const orderedColumnNames = Array.from(listItems).map(getOptionName);\n columnModel.reorderSelectedColumns(\n orderedColumnNames,\n ColumnChangeSource.ColumnPicker,\n );\n }\n }, 300);\n }, [columnModel]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n ref={forwardedRef}\n >\n <form className={`${classBase}-search`} role=\"search\">\n <Input\n startAdornment={searchIcon}\n placeholder=\"Find column\"\n ref={searchCallbackRef}\n value={searchText}\n onChange={onChangeSearchInput}\n />\n </form>\n\n <div className={`${classBase}-scrollContainer vuuScrollable`}>\n <div className={`${classBase}-sectionHeader`}>Columns in view</div>\n <DragDropProvider onDragEnd={handleDragEnd}>\n <ListBox\n className={`${classBase}-selectedList`}\n ref={listRef}\n selected={NO_SELECTION}\n >\n {selectedColumns.map((column, index) => (\n <SelectedColumnListItem\n column={column}\n index={index}\n key={column.name}\n onRemove={onRemoveItemFromSelectedList}\n searchPattern={searchText.toLowerCase() as Lowercase<string>}\n value={column}\n />\n ))}\n </ListBox>\n </DragDropProvider>\n\n <div\n className={cx(\n `${classBase}-sectionHeader`,\n `${classBase}-availableHeader`,\n )}\n >\n Available columns\n </div>\n <ListBox\n className={`${classBase}-availableList`}\n selected={NO_SELECTION}\n >\n {availableColumns.map((column, index) => (\n <AvailableColumnListItem\n column={column}\n index={index}\n key={column.name}\n onAdd={onAddItemToSelectedList}\n searchPattern={searchText.toLowerCase() as Lowercase<string>}\n value={column}\n />\n ))}\n </ListBox>\n </div>\n </div>\n );\n});\n"],"names":["jsx","useSortable","useMemo","getColumnLabel","useHighlighting","jsxs","Option","IconButton","forwardRef","ColumnPicker","useWindow","useComponentCssInjection","columnPickerCss","useCallback","useColumnPicker","useRef","ColumnChangeSource","Input","DragDropProvider","ListBox"],"mappings":";;;;;;;;;;;;;;;AA4BA,MAAM,SAAY,GAAA,iBAAA;AACX,MAAM,iBAAoB,GAAA;AAMjC,MAAM,UAAa,mBAAAA,cAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAU,QAAS,EAAA,CAAA;AAC5C,MAAM,eAAyB,EAAC;AAEhC,MAAM,UAAA,GAAa,CAAC,EAAA,EAAY,KAAkB,KAAA;AAChD,EAAA,MAAM,EAAE,SAAW,EAAA,iBAAA,EAAmB,GAAK,EAAA,WAAA,KAAgBC,oBAAY,CAAA;AAAA,IACrE,EAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,GAAG,CAAA,GAAIC,cAAQ,MAAM;AACrC,IAAO,OAAA,CAAC,mBAAmB,WAAW,CAAA;AAAA,GACrC,EAAA,CAAC,iBAAmB,EAAA,WAAW,CAAC,CAAA;AAEnC,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AAEA,MAAM,yBAAyB,CAAC;AAAA,EAC9B,SAAW,EAAA,aAAA;AAAA,EACX,KAAA;AAAA,EACA,MAAQ,EAAA,IAAA;AAAA,EACR,QAAA;AAAA,EACA,aAAgB,GAAA,EAAA;AAAA,EAChB,GAAG;AACL,CAKM,KAAA;AACJ,EAAA,MAAM,EAAE,SAAW,EAAA,GAAA,KAAQ,UAAW,CAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AACtD,EAAM,MAAA,KAAA,GAAQC,wBAAe,IAAwB,CAAA;AACrD,EAAM,MAAA,qBAAA,GAAwBC,wBAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAAC,eAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,aAAA,EAAe,iBAAiB,CAAA;AAAA,MAC9C,aAAW,IAAK,CAAA,IAAA;AAAA,MAChB,GAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAN,cAAA;AAAA,UAACO,wBAAA;AAAA,UAAA;AAAA,YACC,eAAa,EAAA,IAAA;AAAA,YACb,UAAW,EAAA,aAAA;AAAA,YACX,IAAK,EAAA,WAAA;AAAA,YACL,GAAK,EAAA,SAAA;AAAA,YACL,IAAM,EAAA;AAAA;AAAA,SACR;AAAA,uCACC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,SAAU,QAAsB,EAAA,qBAAA,EAAA,CAAA;AAAA,wBAC7DP,cAAA;AAAA,UAACO,wBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,iBAAiB,CAAA,OAAA,CAAA;AAAA,YAC/B,eAAa,EAAA,IAAA;AAAA,YACb,UAAW,EAAA,aAAA;AAAA,YACX,IAAK,EAAA,OAAA;AAAA,YACL,OAAS,EAAA,QAAA;AAAA,YACT,IAAM,EAAA;AAAA;AAAA;AACR;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,SAAW,EAAA,aAAA;AAAA,EACX,KAAA;AAAA,EACA,MAAQ,EAAA,IAAA;AAAA,EACR,KAAA;AAAA,EACA,aAAgB,GAAA,EAAA;AAAA,EAChB,GAAG;AACL,CAKM,KAAA;AACJ,EAAM,MAAA,KAAA,GAAQJ,wBAAe,IAAwB,CAAA;AACrD,EAAM,MAAA,qBAAA,GAAwBC,wBAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAAC,eAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,aAAA,EAAe,iBAAiB,CAAA;AAAA,MAC9C,aAAW,IAAK,CAAA,IAAA;AAAA,MAEhB,QAAA,EAAA;AAAA,wBAAAN,cAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,SAAU,QAAsB,EAAA,qBAAA,EAAA,CAAA;AAAA,wBAC7DA,cAAA;AAAA,UAACO,wBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,iBAAiB,CAAA,OAAA,CAAA;AAAA,YAC/B,eAAa,EAAA,IAAA;AAAA,YACb,UAAW,EAAA,aAAA;AAAA,YACX,IAAK,EAAA,MAAA;AAAA,YACL,OAAS,EAAA,KAAA;AAAA,YACT,IAAM,EAAA;AAAA;AAAA;AACR;AAAA;AAAA,GACF;AAEJ,CAAA;AAEa,MAAA,YAAA,GAAeC,gBAAW,CAAA,SAASC,aAC9C,CAAA,EAAE,aAAa,SAAW,EAAA,GAAG,cAAe,EAAA,EAC5C,YACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,iBAAA,GAAoBC,iBAAsC,CAAA,CAAC,EAAO,KAAA;AACtE,IAAA,UAAA,CAAW,MAAM;AACf,MAAI,EAAA,EAAA,aAAA,CAAc,OAAO,CAAA,EAAG,KAAM,EAAA;AAAA,OACjC,GAAG,CAAA;AAAA,GACR,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA;AAAA,IACJ,gBAAA;AAAA,IACA,uBAAA;AAAA,IACA,mBAAA;AAAA,IACA,4BAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACEC,+BAAgB,CAAA;AAAA,IAClB;AAAA,GACD,CAAA;AACD,EAAM,MAAA,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAE3C,EAAM,MAAA,aAAA,GAAgB,CAAC,MAAyB,KAAA;AAC9C,IAAA,IAAI,MAAQ,EAAA;AACV,MAAM,MAAA,EAAE,IAAK,EAAA,GAAI,MAAO,CAAA,OAAA;AACxB,MAAA,IAAI,IAAM,EAAA;AACR,QAAO,OAAA,IAAA;AAAA;AACT;AAEF,IAAA,MAAM,MAAM,6CAA6C,CAAA;AAAA,GAC3D;AAEA,EAAM,MAAA,aAAA,GAAgBF,kBAAY,MAAM;AACtC,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,MAAM,SACJ,GAAA,OAAA,CAAQ,OAAS,EAAA,gBAAA,CAAiC,aAAa,CAAA;AACjE,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,MAAM,qBAAqB,KAAM,CAAA,IAAA,CAAK,SAAS,CAAA,CAAE,IAAI,aAAa,CAAA;AAClE,QAAY,WAAA,CAAA,sBAAA;AAAA,UACV,kBAAA;AAAA,UACAG,8BAAmB,CAAA;AAAA,SACrB;AAAA;AACF,OACC,GAAG,CAAA;AAAA,GACR,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EACE,uBAAAX,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,GAAK,EAAA,YAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAAL,cAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,OAAA,CAAA,EAAW,MAAK,QAC3C,EAAA,QAAA,kBAAAA,cAAA;AAAA,UAACiB,UAAA;AAAA,UAAA;AAAA,YACC,cAAgB,EAAA,UAAA;AAAA,YAChB,WAAY,EAAA,aAAA;AAAA,YACZ,GAAK,EAAA,iBAAA;AAAA,YACL,KAAO,EAAA,UAAA;AAAA,YACP,QAAU,EAAA;AAAA;AAAA,SAEd,EAAA,CAAA;AAAA,wBAECZ,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAC1B,8BAAA,CAAA,EAAA,QAAA,EAAA;AAAA,0BAAAL,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,kBAAkB,QAAe,EAAA,iBAAA,EAAA,CAAA;AAAA,0BAC7DA,cAAA,CAACkB,yBAAiB,EAAA,EAAA,SAAA,EAAW,aAC3B,EAAA,QAAA,kBAAAlB,cAAA;AAAA,YAACmB,YAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,SAAS,CAAA,aAAA,CAAA;AAAA,cACvB,GAAK,EAAA,OAAA;AAAA,cACL,QAAU,EAAA,YAAA;AAAA,cAET,QAAgB,EAAA,eAAA,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,KAC5B,qBAAAnB,cAAA;AAAA,gBAAC,sBAAA;AAAA,gBAAA;AAAA,kBACC,MAAA;AAAA,kBACA,KAAA;AAAA,kBAEA,QAAU,EAAA,4BAAA;AAAA,kBACV,aAAA,EAAe,WAAW,WAAY,EAAA;AAAA,kBACtC,KAAO,EAAA;AAAA,iBAAA;AAAA,gBAHF,MAAO,CAAA;AAAA,eAKf;AAAA;AAAA,WAEL,EAAA,CAAA;AAAA,0BAEAA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAW,EAAA,EAAA;AAAA,gBACT,GAAG,SAAS,CAAA,cAAA,CAAA;AAAA,gBACZ,GAAG,SAAS,CAAA,gBAAA;AAAA,eACd;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,cAAA;AAAA,YAACmB,YAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,GAAG,SAAS,CAAA,cAAA,CAAA;AAAA,cACvB,QAAU,EAAA,YAAA;AAAA,cAET,QAAiB,EAAA,gBAAA,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,KAC7B,qBAAAnB,cAAA;AAAA,gBAAC,uBAAA;AAAA,gBAAA;AAAA,kBACC,MAAA;AAAA,kBACA,KAAA;AAAA,kBAEA,KAAO,EAAA,uBAAA;AAAA,kBACP,aAAA,EAAe,WAAW,WAAY,EAAA;AAAA,kBACtC,KAAO,EAAA;AAAA,iBAAA;AAAA,gBAHF,MAAO,CAAA;AAAA,eAKf;AAAA;AAAA;AACH,SACF,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ,CAAC;;;;;"}
|
|
1
|
+
{"version":3,"file":"ColumnPicker.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/ColumnPicker.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n DragDropProvider,\n getColumnLabel,\n isCalculatedColumn,\n useSortable,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport {\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n MouseEventHandler,\n RefCallback,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\n\nimport {\n Button,\n Input,\n ListBox,\n ListBoxProps,\n Option,\n OptionProps,\n} from \"@salt-ds/core\";\nimport { useHighlighting } from \"@vuu-ui/vuu-table\";\nimport { Icon, IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { ColumnChangeSource } from \"./ColumnModel\";\nimport { ColumnPickerHookProps, useColumnPicker } from \"./useColumnPicker\";\n\nimport columnPickerCss from \"./ColumnPicker.css\";\n\nconst classBase = \"vuuColumnPicker\";\nexport const classBaseListItem = \"vuuColumnPickerListItem\";\n\nexport interface ColumnPickerProps\n extends ColumnPickerHookProps,\n Pick<ListBoxProps<ColumnDescriptor>, \"selected\" | \"onSelectionChange\">,\n HTMLAttributes<HTMLDivElement> {\n allowCreateCalculatedColumn?: boolean;\n onClickCreateCalculatedColumn?: MouseEventHandler<HTMLButtonElement>;\n}\n\nconst searchIcon = <span data-icon=\"search\" />;\nconst NO_SELECTION: ColumnDescriptor[] = [] as const;\n\nconst useSorting = (id: string, index: number) => {\n const { handleRef: sortableHandleRef, ref: sortableRef } = useSortable({\n id,\n index,\n });\n\n const [handleRef, ref] = useMemo(() => {\n return [sortableHandleRef, sortableRef];\n }, [sortableHandleRef, sortableRef]);\n\n return {\n handleRef,\n ref,\n };\n};\n\nconst SelectedColumnListItem = ({\n className: classNameProp,\n index,\n column,\n onRemove,\n searchPattern = \"\",\n ...optionProps\n}: OptionProps & {\n index: number;\n column: ColumnDescriptor;\n onRemove: MouseEventHandler<HTMLButtonElement>;\n searchPattern?: Lowercase<string>;\n}) => {\n const { handleRef, ref } = useSorting(column.name, index);\n const value = getColumnLabel(column as ColumnDescriptor);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n const handleRemoveButtonClick = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(\n (e) => {\n e.stopPropagation();\n onRemove?.(e);\n },\n [onRemove],\n );\n\n return (\n <Option\n {...optionProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={column.name}\n ref={ref}\n >\n <IconButton\n data-embedded\n appearance=\"transparent\"\n icon=\"draggable\"\n ref={handleRef}\n size={16}\n />\n {isCalculatedColumn(column.name) ? (\n <Icon className=\"vuuCalculatedColumnIcon\" name=\"function\" />\n ) : null}\n <span className={`${classBase}-text`}>{valueWithHighlighting}</span>\n <IconButton\n className={`${classBaseListItem}-action`}\n data-embedded\n appearance=\"transparent\"\n icon=\"cross\"\n onClick={handleRemoveButtonClick}\n size={16}\n />\n </Option>\n );\n};\n\nconst AvailableColumnListItem = ({\n className: classNameProp,\n index,\n column: item,\n onAdd,\n searchPattern = \"\",\n ...optionProps\n}: OptionProps & {\n index: number;\n column: ColumnDescriptor;\n onAdd: MouseEventHandler<HTMLButtonElement>;\n searchPattern?: Lowercase<string>;\n}) => {\n const value = getColumnLabel(item as ColumnDescriptor);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <Option\n {...optionProps}\n className={cx(classNameProp, classBaseListItem)}\n data-name={item.name}\n >\n <span className={`${classBase}-text`}>{valueWithHighlighting}</span>\n <IconButton\n className={`${classBaseListItem}-action`}\n data-embedded\n appearance=\"transparent\"\n icon=\"plus\"\n onClick={onAdd}\n size={16}\n />\n </Option>\n );\n};\n\nexport const ColumnPicker = forwardRef(function ColumnPicker(\n {\n allowCreateCalculatedColumn,\n columnModel,\n className,\n onClickCreateCalculatedColumn,\n onSelectionChange,\n selected = NO_SELECTION,\n ...htmlAttributes\n }: ColumnPickerProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-picker\",\n css: columnPickerCss,\n window: targetWindow,\n });\n\n const searchCallbackRef = useCallback<RefCallback<HTMLElement>>((el) => {\n setTimeout(() => {\n el?.querySelector(\"input\")?.focus();\n }, 100);\n }, []);\n\n const {\n availableColumns,\n onAddItemToSelectedList,\n onChangeSearchInput,\n onRemoveItemFromSelectedList,\n searchText,\n selectedColumns,\n } = useColumnPicker({\n columnModel: columnModel,\n });\n const listRef = useRef<HTMLDivElement>(null);\n\n const getOptionName = (option?: HTMLElement) => {\n if (option) {\n const { name } = option.dataset;\n if (name) {\n return name;\n }\n }\n throw Error(\"[ColumnPicker] list option has no data-name\");\n };\n\n const handleDragEnd = useCallback(() => {\n setTimeout(() => {\n const listItems =\n listRef.current?.querySelectorAll<HTMLDivElement>(\".saltOption\");\n if (listItems) {\n const orderedColumnNames = Array.from(listItems).map(getOptionName);\n columnModel.reorderSelectedColumns(\n orderedColumnNames,\n ColumnChangeSource.ColumnPicker,\n );\n }\n }, 300);\n }, [columnModel]);\n\n const oneOrMoreColumnsIsCalculated = selectedColumns.some((column) =>\n isCalculatedColumn(column.name),\n );\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className, {\n [`${classBase}-withCalculated`]: oneOrMoreColumnsIsCalculated,\n })}\n ref={forwardedRef}\n >\n <form className={`${classBase}-search`} role=\"search\">\n <Input\n startAdornment={searchIcon}\n placeholder=\"Find column\"\n ref={searchCallbackRef}\n value={searchText}\n onChange={onChangeSearchInput}\n />\n </form>\n\n <div className={`${classBase}-scrollContainer vuuScrollable`}>\n <div className={`${classBase}-sectionHeader`}>Columns in view</div>\n <DragDropProvider onDragEnd={handleDragEnd}>\n <ListBox\n className={`${classBase}-selectedList`}\n onSelectionChange={onSelectionChange}\n ref={listRef}\n selected={selected}\n >\n {selectedColumns.map((column, index) => (\n <SelectedColumnListItem\n column={column}\n index={index}\n key={column.name}\n onRemove={onRemoveItemFromSelectedList}\n searchPattern={searchText.toLowerCase() as Lowercase<string>}\n value={column}\n />\n ))}\n </ListBox>\n </DragDropProvider>\n\n <div\n className={cx(\n `${classBase}-sectionHeader`,\n `${classBase}-availableHeader`,\n )}\n >\n Available columns\n </div>\n <ListBox\n className={`${classBase}-availableList`}\n selected={NO_SELECTION}\n >\n {availableColumns.map((column, index) => (\n <AvailableColumnListItem\n column={column}\n index={index}\n key={column.name}\n onAdd={onAddItemToSelectedList}\n searchPattern={searchText.toLowerCase() as Lowercase<string>}\n value={column}\n />\n ))}\n </ListBox>\n </div>\n {allowCreateCalculatedColumn ? (\n <div className={`${classBase}-column-buttons`}>\n <Button onClick={onClickCreateCalculatedColumn}>\n Create calculated column\n </Button>\n </div>\n ) : null}\n </div>\n );\n});\n"],"names":["jsx","useSortable","useMemo","getColumnLabel","useHighlighting","useCallback","jsxs","Option","IconButton","isCalculatedColumn","Icon","forwardRef","ColumnPicker","useWindow","useComponentCssInjection","columnPickerCss","useColumnPicker","useRef","ColumnChangeSource","Input","DragDropProvider","ListBox","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var useTableColumnPicker = require('./useTableColumnPicker.js');
|
|
7
|
+
|
|
8
|
+
const ColumnPickerAction = ({
|
|
9
|
+
appearance = "transparent",
|
|
10
|
+
columnModel,
|
|
11
|
+
icon = "settings",
|
|
12
|
+
sentiment = "neutral",
|
|
13
|
+
...IconButtonProps2
|
|
14
|
+
}) => {
|
|
15
|
+
const { showColumnPicker } = useTableColumnPicker.useTableColumnPicker({ columnModel });
|
|
16
|
+
const handleClick = react.useCallback(() => {
|
|
17
|
+
showColumnPicker();
|
|
18
|
+
}, [showColumnPicker]);
|
|
19
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
20
|
+
vuuUiControls.IconButton,
|
|
21
|
+
{
|
|
22
|
+
...IconButtonProps2,
|
|
23
|
+
appearance,
|
|
24
|
+
"data-action": "table-settings",
|
|
25
|
+
icon,
|
|
26
|
+
onClick: handleClick,
|
|
27
|
+
sentiment,
|
|
28
|
+
size: 20
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.ColumnPickerAction = ColumnPickerAction;
|
|
34
|
+
//# sourceMappingURL=ColumnPickerAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnPickerAction.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/ColumnPickerAction.tsx"],"sourcesContent":["import { IconButton, IconButtonProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { ColumnPickerHookProps } from \"./useColumnPicker\";\nimport { useCallback } from \"react\";\nimport { useTableColumnPicker } from \"./useTableColumnPicker\";\n\nexport interface ColumnPickerActionProps\n extends Partial<IconButtonProps>,\n ColumnPickerHookProps {}\n\nexport const ColumnPickerAction = ({\n appearance = \"transparent\",\n columnModel,\n icon = \"settings\",\n sentiment = \"neutral\",\n ...IconButtonProps\n}: ColumnPickerActionProps) => {\n const { showColumnPicker } = useTableColumnPicker({ columnModel });\n\n const handleClick = useCallback(() => {\n showColumnPicker();\n }, [showColumnPicker]);\n\n return (\n <IconButton\n {...IconButtonProps}\n appearance={appearance}\n data-action=\"table-settings\"\n icon={icon}\n onClick={handleClick}\n sentiment={sentiment}\n size={20}\n />\n );\n};\n"],"names":["IconButtonProps","useTableColumnPicker","useCallback","jsx","IconButton"],"mappings":";;;;;;;AASO,MAAM,qBAAqB,CAAC;AAAA,EACjC,UAAa,GAAA,aAAA;AAAA,EACb,WAAA;AAAA,EACA,IAAO,GAAA,UAAA;AAAA,EACP,SAAY,GAAA,SAAA;AAAA,EACZ,GAAGA;AACL,CAA+B,KAAA;AAC7B,EAAA,MAAM,EAAE,gBAAiB,EAAA,GAAIC,yCAAqB,CAAA,EAAE,aAAa,CAAA;AAEjE,EAAM,MAAA,WAAA,GAAcC,kBAAY,MAAM;AACpC,IAAiB,gBAAA,EAAA;AAAA,GACnB,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EACE,uBAAAC,cAAA;AAAA,IAACC,wBAAA;AAAA,IAAA;AAAA,MACE,GAAGJ,gBAAAA;AAAA,MACJ,UAAA;AAAA,MACA,aAAY,EAAA,gBAAA;AAAA,MACZ,IAAA;AAAA,MACA,OAAS,EAAA,WAAA;AAAA,MACT,SAAA;AAAA,MACA,IAAM,EAAA;AAAA;AAAA,GACR;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnPicker.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/useColumnPicker.tsx"],"sourcesContent":["import { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { queryClosest } from \"@vuu-ui/vuu-utils\";\nimport {\n FormEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n ColumnChangeSource,\n ColumnModel,\n SelectedColumnChangeType,\n} from \"./ColumnModel\";\n\nexport type
|
|
1
|
+
{"version":3,"file":"useColumnPicker.js","sources":["../../../../packages/vuu-table-extras/src/column-picker/useColumnPicker.tsx"],"sourcesContent":["import { ColumnDescriptor, TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { queryClosest } from \"@vuu-ui/vuu-utils\";\nimport {\n FormEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n ColumnChangeSource,\n ColumnModel,\n SelectedColumnChangeType,\n} from \"./ColumnModel\";\n\nexport type ColumnSelectionModel = Extract<\n TableSelectionModel,\n \"none\" | \"single\"\n>;\n\nconst SOURCE = ColumnChangeSource.ColumnPicker;\n\nconst columnName = (target: EventTarget) => {\n const listItem = queryClosest(target, \".saltOption\", true);\n const { name } = listItem.dataset;\n if (name) {\n return name;\n } else {\n throw Error(\n \"[useColumnPicker] column name could not be identified, data-name attribute not found\",\n );\n }\n};\nexport type SelectedColumnsChangeHandler = (\n columns: ColumnDescriptor[],\n changeType: SelectedColumnChangeType,\n) => void;\n\nexport interface ColumnPickerHookProps {\n columnModel: ColumnModel;\n selectionModel?: ColumnSelectionModel;\n}\n\nexport const useColumnPicker = ({\n columnModel: model,\n selectionModel = \"none\",\n}: ColumnPickerHookProps) => {\n const [, forceRender] = useState({});\n useEffect(() => {\n model.on(\"render\", forceRender);\n return () => {\n model.removeListener(\"render\", forceRender);\n };\n }, [model]);\n\n const handleChangeSearchInput = useCallback<FormEventHandler>(\n (evt) => {\n const { value } = evt.target as HTMLInputElement;\n model.searchPattern = value;\n },\n [model],\n );\n\n const handleAddItemToSelectedList = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(\n (e) => model.addItemToSelectedColumns(columnName(e.target), SOURCE),\n [model],\n );\n\n const handleRemoveItemFromSelectedList = useCallback<\n MouseEventHandler<HTMLButtonElement>\n >(\n (e) => model.removeItemFromSelectedColumns(columnName(e.target), SOURCE),\n [model],\n );\n\n return {\n availableColumns: model.availableColumns,\n onAddItemToSelectedList: handleAddItemToSelectedList,\n onRemoveItemFromSelectedList: handleRemoveItemFromSelectedList,\n onChangeSearchInput: handleChangeSearchInput,\n searchText: model.searchPattern,\n selectedColumns: model.selectedColumns,\n };\n};\n"],"names":["ColumnChangeSource","queryClosest","useState","useEffect","useCallback"],"mappings":";;;;;;AAoBA,MAAM,SAASA,8BAAmB,CAAA,YAAA;AAElC,MAAM,UAAA,GAAa,CAAC,MAAwB,KAAA;AAC1C,EAAA,MAAM,QAAW,GAAAC,qBAAA,CAAa,MAAQ,EAAA,aAAA,EAAe,IAAI,CAAA;AACzD,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,QAAS,CAAA,OAAA;AAC1B,EAAA,IAAI,IAAM,EAAA;AACR,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ;AAAA,KACF;AAAA;AAEJ,CAAA;AAWO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,WAAa,EAAA,KAAA;AAAA,EACb,cAAiB,GAAA;AACnB,CAA6B,KAAA;AAC3B,EAAA,MAAM,GAAG,WAAW,CAAI,GAAAC,cAAA,CAAS,EAAE,CAAA;AACnC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAM,KAAA,CAAA,EAAA,CAAG,UAAU,WAAW,CAAA;AAC9B,IAAA,OAAO,MAAM;AACX,MAAM,KAAA,CAAA,cAAA,CAAe,UAAU,WAAW,CAAA;AAAA,KAC5C;AAAA,GACF,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,uBAA0B,GAAAC,iBAAA;AAAA,IAC9B,CAAC,GAAQ,KAAA;AACP,MAAM,MAAA,EAAE,KAAM,EAAA,GAAI,GAAI,CAAA,MAAA;AACtB,MAAA,KAAA,CAAM,aAAgB,GAAA,KAAA;AAAA,KACxB;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,2BAA8B,GAAAA,iBAAA;AAAA,IAGlC,CAAC,MAAM,KAAM,CAAA,wBAAA,CAAyB,WAAW,CAAE,CAAA,MAAM,GAAG,MAAM,CAAA;AAAA,IAClE,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,gCAAmC,GAAAA,iBAAA;AAAA,IAGvC,CAAC,MAAM,KAAM,CAAA,6BAAA,CAA8B,WAAW,CAAE,CAAA,MAAM,GAAG,MAAM,CAAA;AAAA,IACvE,CAAC,KAAK;AAAA,GACR;AAEA,EAAO,OAAA;AAAA,IACL,kBAAkB,KAAM,CAAA,gBAAA;AAAA,IACxB,uBAAyB,EAAA,2BAAA;AAAA,IACzB,4BAA8B,EAAA,gCAAA;AAAA,IAC9B,mBAAqB,EAAA,uBAAA;AAAA,IACrB,YAAY,KAAM,CAAA,aAAA;AAAA,IAClB,iBAAiB,KAAM,CAAA;AAAA,GACzB;AACF;;;;"}
|