@vuu-ui/vuu-table 0.8.87 → 0.8.89
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/Row.js.map +1 -1
- package/cjs/Table.js +0 -4
- package/cjs/Table.js.map +1 -1
- package/cjs/bulk-edit/BulkEditPanel.js +14 -4
- package/cjs/bulk-edit/BulkEditPanel.js.map +1 -1
- package/cjs/bulk-edit/BulkEditRow.js +39 -6
- package/cjs/bulk-edit/BulkEditRow.js.map +1 -1
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
- package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
- package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -1
- package/cjs/column-header-pill/GroupColumnPill.js.map +1 -1
- package/cjs/column-header-pill/SortIndicator.js.map +1 -1
- package/cjs/column-menu/ColumnMenu.js.map +1 -1
- package/cjs/column-resizing/useTableColumnResize.js.map +1 -1
- package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -1
- package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -1
- package/cjs/header-cell/GroupHeaderCell.js.map +1 -1
- package/cjs/header-cell/HeaderCell.css.js +1 -1
- package/cjs/header-cell/HeaderCell.js.map +1 -1
- package/cjs/moving-window.js.map +1 -1
- package/cjs/table-cell/TableCell.js.map +1 -1
- package/cjs/table-cell/TableGroupCell.js.map +1 -1
- package/cjs/table-config.js.map +1 -1
- package/cjs/table-header/HeaderProvider.js.map +1 -1
- package/cjs/table-header/TableHeader.js.map +1 -1
- package/cjs/table-header/useTableHeader.js.map +1 -1
- package/cjs/useCell.js.map +1 -1
- package/cjs/useCellEditing.js.map +1 -1
- package/cjs/useControlledTableNavigation.js.map +1 -1
- package/cjs/useDataSource.js +1 -6
- package/cjs/useDataSource.js.map +1 -1
- package/cjs/useKeyboardNavigation.js.map +1 -1
- package/cjs/useMeasuredHeight.js.map +1 -1
- package/cjs/useRowClassNameGenerators.js.map +1 -1
- package/cjs/useSelection.js.map +1 -1
- package/cjs/useTable.js +0 -2
- package/cjs/useTable.js.map +1 -1
- package/cjs/useTableAndColumnSettings.js.map +1 -1
- package/cjs/useTableContextMenu.js +1 -0
- package/cjs/useTableContextMenu.js.map +1 -1
- package/cjs/useTableModel.js.map +1 -1
- package/cjs/useTableScroll.js.map +1 -1
- package/cjs/useTableViewport.js.map +1 -1
- package/esm/Row.js.map +1 -1
- package/esm/Table.js +0 -4
- package/esm/Table.js.map +1 -1
- package/esm/bulk-edit/BulkEditPanel.js +14 -4
- package/esm/bulk-edit/BulkEditPanel.js.map +1 -1
- package/esm/bulk-edit/BulkEditRow.js +41 -8
- package/esm/bulk-edit/BulkEditRow.js.map +1 -1
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
- package/esm/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
- package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -1
- package/esm/column-header-pill/GroupColumnPill.js.map +1 -1
- package/esm/column-header-pill/SortIndicator.js.map +1 -1
- package/esm/column-menu/ColumnMenu.js.map +1 -1
- package/esm/column-resizing/useTableColumnResize.js.map +1 -1
- package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -1
- package/esm/context-menu/useHandleTableContextMenu.js.map +1 -1
- package/esm/header-cell/GroupHeaderCell.js.map +1 -1
- package/esm/header-cell/HeaderCell.css.js +1 -1
- package/esm/header-cell/HeaderCell.js.map +1 -1
- package/esm/moving-window.js.map +1 -1
- package/esm/table-cell/TableCell.js.map +1 -1
- package/esm/table-cell/TableGroupCell.js.map +1 -1
- package/esm/table-config.js.map +1 -1
- package/esm/table-header/HeaderProvider.js.map +1 -1
- package/esm/table-header/TableHeader.js.map +1 -1
- package/esm/table-header/useTableHeader.js.map +1 -1
- package/esm/useCell.js.map +1 -1
- package/esm/useCellEditing.js.map +1 -1
- package/esm/useControlledTableNavigation.js.map +1 -1
- package/esm/useDataSource.js +2 -6
- package/esm/useDataSource.js.map +1 -1
- package/esm/useKeyboardNavigation.js.map +1 -1
- package/esm/useMeasuredHeight.js.map +1 -1
- package/esm/useRowClassNameGenerators.js.map +1 -1
- package/esm/useSelection.js.map +1 -1
- package/esm/useTable.js +0 -2
- package/esm/useTable.js.map +1 -1
- package/esm/useTableAndColumnSettings.js.map +1 -1
- package/esm/useTableContextMenu.js +1 -0
- package/esm/useTableContextMenu.js.map +1 -1
- package/esm/useTableModel.js.map +1 -1
- package/esm/useTableScroll.js.map +1 -1
- package/esm/useTableViewport.js.map +1 -1
- package/package.json +9 -9
- package/types/Table.d.ts +1 -6
- package/types/bulk-edit/BulkEditPanel.d.ts +4 -1
- package/types/bulk-edit/BulkEditRow.d.ts +3 -1
- package/types/cell-renderers/input-cell/InputCell.d.ts +1 -1
- package/types/column-resizing/useTableColumnResize.d.ts +1 -1
- package/types/context-menu/useHandleTableContextMenu.d.ts +1 -1
- package/types/table-cell/TableCell.d.ts +1 -1
- package/types/table-cell/TableGroupCell.d.ts +1 -1
- package/types/table-header/TableHeader.d.ts +1 -1
- package/types/table-header/useTableHeader.d.ts +1 -1
- package/types/useDataSource.d.ts +2 -5
- package/types/useKeyboardNavigation.d.ts +1 -1
- package/types/useMeasuredHeight.d.ts +1 -1
- package/types/useRowClassNameGenerators.d.ts +1 -1
- package/types/useSelection.d.ts +1 -1
- package/types/useTable.d.ts +2 -2
- package/types/useTableAndColumnSettings.d.ts +1 -1
- package/types/useTableContextMenu.d.ts +1 -1
- package/types/useTableScroll.d.ts +1 -1
- package/types/useTableViewport.d.ts +1 -1
package/cjs/Row.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.js","sources":["../src/Row.tsx"],"sourcesContent":["import { RowProps, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n isGroupColumn,\n isJsonColumn,\n isJsonGroup,\n isNotHidden,\n metadataKeys,\n RowSelected
|
|
1
|
+
{"version":3,"file":"Row.js","sources":["../src/Row.tsx"],"sourcesContent":["import { RowProps, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n isGroupColumn,\n isJsonColumn,\n isJsonGroup,\n isNotHidden,\n metadataKeys,\n RowSelected,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { forwardRef, memo, MouseEvent, useCallback } from \"react\";\nimport { TableCell, TableGroupCell } from \"./table-cell\";\n\nimport rowCss from \"./Row.css\";\nimport { VirtualColSpan } from \"./VirtualColSpan\";\n\nconst { IDX, IS_EXPANDED, SELECTED } = metadataKeys;\nconst classBase = \"vuuTableRow\";\n\n// A dummy Table Row rendered once and not visible. We measure this to\n// determine height of Row(s) and monitor it for size changes (in\n// case of runtime density switch). This allows ListItem height to\n// be controlled purely through CSS.\nexport const RowProxy = forwardRef<HTMLDivElement, { height?: number }>(\n function RowProxy({ height }, forwardedRef) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-row\",\n css: rowCss,\n window: targetWindow,\n });\n\n return (\n <div\n aria-hidden\n className={cx(classBase, `${classBase}-proxy`)}\n ref={forwardedRef}\n style={{ height }}\n />\n );\n },\n);\n\n// export const Row = memo(\nexport const Row = memo(\n ({\n className: classNameProp,\n classNameGenerator,\n columnMap,\n columns,\n highlighted,\n row,\n offset,\n onClick,\n onDataEdited,\n onToggleGroup,\n virtualColSpan = 0,\n zebraStripes = false,\n ...htmlAttributes\n }: RowProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-row\",\n css: rowCss,\n window: targetWindow,\n });\n\n const {\n [IDX]: rowIndex,\n [IS_EXPANDED]: isExpanded,\n [SELECTED]: selectionStatus,\n } = row;\n\n const handleRowClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n const rangeSelect = evt.shiftKey;\n const keepExistingSelection = evt.ctrlKey || evt.metaKey; /* mac only */\n onClick?.(evt, row, rangeSelect, keepExistingSelection);\n },\n [onClick, row],\n );\n\n const { True, First, Last } = RowSelected;\n\n const className = cx(\n classBase,\n classNameProp,\n classNameGenerator?.(row, columnMap),\n {\n [`${classBase}-even`]: zebraStripes && rowIndex % 2 === 0,\n [`${classBase}-expanded`]: isExpanded,\n [`${classBase}-highlighted`]: highlighted,\n [`${classBase}-selected`]: selectionStatus & True,\n [`${classBase}-selectedStart`]: selectionStatus & First,\n [`${classBase}-selectedEnd`]: selectionStatus & Last,\n },\n );\n\n const style = { transform: `translate3d(0px, ${offset}px, 0px)` };\n\n const handleGroupCellClick = useCallback(\n (evt: MouseEvent, column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column) || isJsonGroup(column, row, columnMap)) {\n evt.stopPropagation();\n onToggleGroup?.(row, column);\n }\n },\n [columnMap, onToggleGroup, row],\n );\n\n return (\n <div\n {...htmlAttributes}\n role=\"row\"\n className={className}\n onClick={handleRowClick}\n style={style}\n >\n <span className={`${classBase}-selectionDecorator vuuStickyLeft`} />\n <VirtualColSpan width={virtualColSpan} />\n {columns.filter(isNotHidden).map((column) => {\n const isGroup = isGroupColumn(column);\n const isJsonCell = isJsonColumn(column);\n const Cell = isGroup ? TableGroupCell : TableCell;\n\n return (\n <Cell\n column={column}\n columnMap={columnMap}\n key={column.name}\n onClick={isGroup || isJsonCell ? handleGroupCellClick : undefined}\n onDataEdited={onDataEdited}\n row={row}\n />\n );\n })}\n <span className={`${classBase}-selectionDecorator vuuStickyRight`} />\n </div>\n );\n },\n);\nRow.displayName = \"Row\";\n"],"names":["metadataKeys","forwardRef","RowProxy","useWindow","useComponentCssInjection","rowCss","jsx","memo","useCallback","RowSelected","isGroupColumn","isJsonGroup","jsxs","VirtualColSpan","isNotHidden","isJsonColumn","TableGroupCell","TableCell"],"mappings":"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"}
|
package/cjs/Table.js
CHANGED
|
@@ -35,7 +35,6 @@ const TableCore = ({
|
|
|
35
35
|
onConfigChange,
|
|
36
36
|
onDragStart,
|
|
37
37
|
onDrop,
|
|
38
|
-
onFeatureInvocation,
|
|
39
38
|
onHighlight,
|
|
40
39
|
onRowClick: onRowClickProp,
|
|
41
40
|
onSelect,
|
|
@@ -89,7 +88,6 @@ const TableCore = ({
|
|
|
89
88
|
onConfigChange,
|
|
90
89
|
onDragStart,
|
|
91
90
|
onDrop,
|
|
92
|
-
onFeatureInvocation,
|
|
93
91
|
onHighlight,
|
|
94
92
|
onRowClick: onRowClickProp,
|
|
95
93
|
onSelect,
|
|
@@ -208,7 +206,6 @@ const Table = react.forwardRef(function Table2({
|
|
|
208
206
|
onConfigChange,
|
|
209
207
|
onDragStart,
|
|
210
208
|
onDrop,
|
|
211
|
-
onFeatureInvocation,
|
|
212
209
|
onHighlight,
|
|
213
210
|
onRowClick,
|
|
214
211
|
onSelect,
|
|
@@ -271,7 +268,6 @@ const Table = react.forwardRef(function Table2({
|
|
|
271
268
|
onConfigChange,
|
|
272
269
|
onDragStart,
|
|
273
270
|
onDrop,
|
|
274
|
-
onFeatureInvocation,
|
|
275
271
|
onHighlight,
|
|
276
272
|
onRowClick,
|
|
277
273
|
onSelect,
|
package/cjs/Table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../src/Table.tsx"],"sourcesContent":["import {\n DataSource,\n SchemaColumn,\n SelectionChangeHandler,\n VuuFeatureInvocationMessage\n} from \"@vuu-ui/vuu-data-types\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-popups\";\nimport {\n CustomHeader,\n RowProps,\n TableConfig,\n TableConfigChangeHandler,\n TableRowClickHandler,\n TableRowSelectHandler,\n TableSelectionModel\n} from \"@vuu-ui/vuu-table-types\";\nimport type { DragDropState } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n DragStartHandler,\n MeasuredContainer,\n MeasuredContainerProps,\n MeasuredSize,\n dragStrategy\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { metadataKeys, useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n FC,\n ForwardedRef,\n RefObject,\n forwardRef,\n useRef,\n useState\n} from \"react\";\nimport { Row as DefaultRow, RowProxy } from \"./Row\";\nimport { TableHeader } from \"./table-header\";\nimport { useMeasuredHeight } from \"./useMeasuredHeight\";\nimport { useTable } from \"./useTable\";\nimport { ScrollingAPI } from \"./useTableScroll\";\n\nimport tableCss from \"./Table.css\";\n\nconst classBase = \"vuuTable\";\n\nconst { IDX, RENDER_IDX } = metadataKeys;\n\nexport type TableNavigationStyle = \"none\" | \"cell\" | \"row\";\n\nexport interface TableProps\n extends Omit<MeasuredContainerProps, \"onDragStart\" | \"onDrop\" | \"onSelect\"> {\n Row?: FC<RowProps>;\n allowConfigEditing?: boolean;\n /**\n * Allow column headers to be dragged to re-arrange\n */\n allowDragColumnHeader?: boolean;\n /**\n * Allow rows to be draggable\n */\n allowDragDrop?: boolean | dragStrategy;\n /**\n * required if a fully featured column picker is to be available\n */\n availableColumns?: SchemaColumn[];\n /**\n * Provide configuration settings for Table. At minimun, column\n * descriptors must be provided.\n */\n config: TableConfig;\n dataSource: DataSource;\n disableFocus?: boolean;\n /**\n * Allows additional custom element(s) to be embedded immediately below column headers.\n * Could be used to present inline filters for example.\n * Accepts either a React Element or a Function Component or an array of these. If a React\n * Function Component is used, it will be passed the props described in BaseRowProps.\n */\n customHeader?: CustomHeader | CustomHeader[];\n /**\n * Defined how focus navigation within data cells will be handled by table.\n * Default is cell.\n */\n highlightedIndex?: number;\n navigationStyle?: TableNavigationStyle;\n /**\n * required if a fully featured column picker is to be available.\n * Available columns can be changed by the addition or removal of\n * one or more calculated columns.\n */\n onAvailableColumnsChange?: (columns: SchemaColumn[]) => void;\n /**\n * This callback will be invoked any time a config attribute of TableConfig\n * is changed. By persisting this value and providing it to the Table as a\n * prop, table state can be persisted across sessions.\n */\n onConfigChange?: TableConfigChangeHandler;\n onDragStart?: DragStartHandler;\n onDrop?: (dragDropState: DragDropState) => void;\n /**\n * When a Vuu feature e.g. context menu action, has been invoked, the Vuu server\n * response must be handled. This callback provides that response.\n */\n onFeatureInvocation?: (message: VuuFeatureInvocationMessage) => void;\n\n onHighlight?: (idx: number) => void;\n /**\n * callback invoked when user 'clicks' a table row. CLick triggered either\n * via mouse click or keyboard (default ENTER);\n */\n onRowClick?: TableRowClickHandler;\n onSelect?: TableRowSelectHandler;\n onSelectionChange?: SelectionChangeHandler;\n renderBufferSize?: number;\n /**\n * Pixel height of rows. If specified here, this will take precedence over CSS\n * values and Table will not respond to density changes.\n */\n rowHeight?: number;\n /**\n * imperative API for scrolling table\n */\n scrollingApiRef?: ForwardedRef<ScrollingAPI>;\n\n /**\n * Selection Bookends style the left and right edge of a selection block.\n * They are optional, value defaults to zero.\n * TODO this should just live in CSS\n */\n selectionBookendWidth?: number;\n /**\n * Selection behaviour for Table:\n * `none` selection disabled\n * `single` no more than one row may be selected\n * `extended` (default) multiple rows can be selected\n * `checkbox` same behaviour as extended, with checkbox column for selection\n */\n selectionModel?: TableSelectionModel;\n /**\n * if false, table rendered without headers. Useful when table is being included in a\n * composite component.\n */\n showColumnHeaders?: boolean;\n /**\n * if false, column headers will not display menu icon. Menu items are still available\n * from contexct menu\n */\n showColumnHeaderMenus?: boolean;\n}\n\nconst TableCore = ({\n Row = DefaultRow,\n allowDragColumnHeader = true,\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n customHeader,\n dataSource,\n disableFocus = false,\n highlightedIndex: highlightedIndexProp,\n id: idProp,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize = 5,\n rowHeight,\n scrollingApiRef,\n selectionModel = \"extended\",\n showColumnHeaders = true,\n showColumnHeaderMenus = true,\n size\n}: Omit<TableProps, \"rowHeight\"> & {\n containerRef: RefObject<HTMLDivElement>;\n rowHeight: number;\n size: MeasuredSize;\n}) => {\n const id = useId(idProp);\n const {\n columnMap,\n columns,\n data,\n draggableRow,\n getRowOffset,\n handleContextMenuAction,\n headerHeight,\n headings,\n highlightedIndex,\n menuBuilder,\n onDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onResizeColumn,\n onRowClick,\n onSortColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n tableAttributes,\n tableConfig,\n viewportMeasurements,\n ...tableProps\n } = useTable({\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize: Math.max(5, renderBufferSize),\n rowHeight,\n scrollingApiRef,\n selectionModel,\n size\n });\n\n const contentContainerClassName = cx(`${classBase}-contentContainer`, {\n [`${classBase}-colLines`]: tableAttributes.columnSeparators,\n [`${classBase}-rowLines`]: tableAttributes.rowSeparators,\n [`${classBase}-zebra`]: tableAttributes.zebraStripes\n });\n\n const cssVariables = {\n \"--content-height\": `${viewportMeasurements.contentHeight}px`,\n \"--content-width\": `${viewportMeasurements.contentWidth}px`,\n \"--horizontal-scrollbar-height\": `${viewportMeasurements.horizontalScrollbarHeight}px`,\n \"--pinned-width-left\": `${viewportMeasurements.pinnedWidthLeft}px`,\n \"--pinned-width-right\": `${viewportMeasurements.pinnedWidthRight}px`,\n \"--total-header-height\": `${headerHeight}px`,\n \"--vertical-scrollbar-width\": `${viewportMeasurements.verticalScrollbarWidth}px`,\n \"--viewport-body-height\": `${viewportMeasurements.viewportBodyHeight}px`\n } as CSSProperties;\n\n return (\n <ContextMenuProvider\n menuActionHandler={handleContextMenuAction}\n menuBuilder={menuBuilder}\n >\n <div\n className={`${classBase}-scrollbarContainer`}\n ref={scrollProps.scrollbarContainerRef}\n style={cssVariables}\n >\n <div className={`${classBase}-scrollbarContent`} />\n </div>\n <div\n className={contentContainerClassName}\n ref={scrollProps.contentContainerRef}\n style={cssVariables}\n >\n <div\n {...tableProps}\n className={`${classBase}-table`}\n role=\"table\"\n tabIndex={disableFocus ? undefined : -1}\n >\n {showColumnHeaders ? (\n <TableHeader\n allowDragColumnHeader={allowDragColumnHeader}\n columns={scrollProps.columnsWithinViewport}\n customHeader={customHeader}\n headings={headings}\n onHeightMeasured={onHeaderHeightMeasured}\n onMoveColumn={onMoveColumn}\n onMoveGroupColumn={onMoveGroupColumn}\n onRemoveGroupColumn={onRemoveGroupColumn}\n onResizeColumn={onResizeColumn}\n onSortColumn={onSortColumn}\n showColumnHeaderMenus={showColumnHeaderMenus}\n tableConfig={tableConfig}\n tableId={id}\n virtualColSpan={scrollProps.virtualColSpan}\n />\n ) : null}\n {showColumnHeaders === false || headerHeight > 0 ? (\n <div className={`${classBase}-body`}>\n {data.map((data) => (\n <Row\n aria-rowindex={data[0] + 1}\n classNameGenerator={rowClassNameGenerator}\n columnMap={columnMap}\n columns={scrollProps.columnsWithinViewport}\n highlighted={highlightedIndex === data[IDX]}\n key={data[RENDER_IDX]}\n onClick={onRowClick}\n onDataEdited={onDataEdited}\n row={data}\n offset={getRowOffset(data)}\n onToggleGroup={onToggleGroup}\n virtualColSpan={scrollProps.virtualColSpan}\n zebraStripes={tableAttributes.zebraStripes}\n />\n ))}\n </div>\n ) : null}\n </div>\n </div>\n {draggableRow}\n </ContextMenuProvider>\n );\n};\n\nexport const Table = forwardRef(function Table(\n {\n Row,\n allowDragColumnHeader,\n allowDragDrop,\n availableColumns,\n className: classNameProp,\n config,\n customHeader,\n dataSource,\n disableFocus,\n highlightedIndex,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick,\n onSelect,\n onSelectionChange,\n renderBufferSize,\n rowHeight: rowHeightProp,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showColumnHeaderMenus,\n style: styleProp,\n ...htmlAttributes\n }: TableProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: tableCss,\n window: targetWindow\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState<MeasuredSize>();\n\n const { rowHeight, rowRef } = useMeasuredHeight({ height: rowHeightProp });\n\n if (config === undefined) {\n throw Error(\n \"vuu Table requires config prop. Minimum config is list of Column Descriptors\"\n );\n }\n if (dataSource === undefined) {\n throw Error(\"vuu Table requires dataSource prop\");\n }\n\n // TODO render TableHeader here and measure before row construction begins\n // TODO we could have MeasuredContainer render a Provider and make size available via a context hook ?\n return (\n <MeasuredContainer\n {...htmlAttributes}\n className={cx(classBase, classNameProp)}\n id={id}\n onResize={setSize}\n ref={useForkRef(containerRef, forwardedRef)}\n style={\n {\n \"--row-height-prop\": rowHeight > 0 ? `${rowHeight}px` : undefined\n } as CSSProperties\n }\n >\n <RowProxy ref={rowRef} height={rowHeightProp} />\n\n {size && rowHeight ? (\n <TableCore\n Row={Row}\n allowDragColumnHeader={allowDragColumnHeader}\n allowDragDrop={allowDragDrop}\n availableColumns={availableColumns}\n config={config}\n containerRef={containerRef}\n customHeader={customHeader}\n dataSource={dataSource}\n disableFocus={disableFocus}\n highlightedIndex={highlightedIndex}\n id={id}\n navigationStyle={navigationStyle}\n onAvailableColumnsChange={onAvailableColumnsChange}\n onConfigChange={onConfigChange}\n onDragStart={onDragStart}\n onDrop={onDrop}\n onFeatureInvocation={onFeatureInvocation}\n onHighlight={onHighlight}\n onRowClick={onRowClick}\n onSelect={onSelect}\n onSelectionChange={onSelectionChange}\n renderBufferSize={renderBufferSize}\n rowHeight={rowHeight}\n scrollingApiRef={scrollingApiRef}\n selectionModel={selectionModel}\n showColumnHeaders={showColumnHeaders}\n showColumnHeaderMenus={showColumnHeaderMenus}\n size={size}\n />\n ) : null}\n </MeasuredContainer>\n );\n});\n"],"names":["metadataKeys","Row","DefaultRow","useId","useTable","jsxs","ContextMenuProvider","jsx","TableHeader","data","forwardRef","Table","useWindow","useComponentCssInjection","tableCss","useRef","useState","useMeasuredHeight","MeasuredContainer","useForkRef","RowProxy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../src/Table.tsx"],"sourcesContent":["import {\n DataSource,\n SchemaColumn,\n SelectionChangeHandler,\n} from \"@vuu-ui/vuu-data-types\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-popups\";\nimport {\n CustomHeader,\n RowProps,\n TableConfig,\n TableConfigChangeHandler,\n TableRowClickHandler,\n TableRowSelectHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport type { DragDropState } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n DragStartHandler,\n MeasuredContainer,\n MeasuredContainerProps,\n MeasuredSize,\n dragStrategy,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { metadataKeys, useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n FC,\n ForwardedRef,\n RefObject,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\nimport { Row as DefaultRow, RowProxy } from \"./Row\";\nimport { TableHeader } from \"./table-header\";\nimport { useMeasuredHeight } from \"./useMeasuredHeight\";\nimport { useTable } from \"./useTable\";\nimport { ScrollingAPI } from \"./useTableScroll\";\n\nimport tableCss from \"./Table.css\";\n\nconst classBase = \"vuuTable\";\n\nconst { IDX, RENDER_IDX } = metadataKeys;\n\nexport type TableNavigationStyle = \"none\" | \"cell\" | \"row\";\n\nexport interface TableProps\n extends Omit<MeasuredContainerProps, \"onDragStart\" | \"onDrop\" | \"onSelect\"> {\n Row?: FC<RowProps>;\n allowConfigEditing?: boolean;\n /**\n * Allow column headers to be dragged to re-arrange\n */\n allowDragColumnHeader?: boolean;\n /**\n * Allow rows to be draggable\n */\n allowDragDrop?: boolean | dragStrategy;\n /**\n * required if a fully featured column picker is to be available\n */\n availableColumns?: SchemaColumn[];\n /**\n * Provide configuration settings for Table. At minimun, column\n * descriptors must be provided.\n */\n config: TableConfig;\n dataSource: DataSource;\n disableFocus?: boolean;\n /**\n * Allows additional custom element(s) to be embedded immediately below column headers.\n * Could be used to present inline filters for example.\n * Accepts either a React Element or a Function Component or an array of these. If a React\n * Function Component is used, it will be passed the props described in BaseRowProps.\n */\n customHeader?: CustomHeader | CustomHeader[];\n /**\n * Defined how focus navigation within data cells will be handled by table.\n * Default is cell.\n */\n highlightedIndex?: number;\n navigationStyle?: TableNavigationStyle;\n /**\n * required if a fully featured column picker is to be available.\n * Available columns can be changed by the addition or removal of\n * one or more calculated columns.\n */\n onAvailableColumnsChange?: (columns: SchemaColumn[]) => void;\n /**\n * This callback will be invoked any time a config attribute of TableConfig\n * is changed. By persisting this value and providing it to the Table as a\n * prop, table state can be persisted across sessions.\n */\n onConfigChange?: TableConfigChangeHandler;\n onDragStart?: DragStartHandler;\n onDrop?: (dragDropState: DragDropState) => void;\n\n onHighlight?: (idx: number) => void;\n /**\n * callback invoked when user 'clicks' a table row. CLick triggered either\n * via mouse click or keyboard (default ENTER);\n */\n onRowClick?: TableRowClickHandler;\n onSelect?: TableRowSelectHandler;\n onSelectionChange?: SelectionChangeHandler;\n renderBufferSize?: number;\n /**\n * Pixel height of rows. If specified here, this will take precedence over CSS\n * values and Table will not respond to density changes.\n */\n rowHeight?: number;\n /**\n * imperative API for scrolling table\n */\n scrollingApiRef?: ForwardedRef<ScrollingAPI>;\n\n /**\n * Selection Bookends style the left and right edge of a selection block.\n * They are optional, value defaults to zero.\n * TODO this should just live in CSS\n */\n selectionBookendWidth?: number;\n /**\n * Selection behaviour for Table:\n * `none` selection disabled\n * `single` no more than one row may be selected\n * `extended` (default) multiple rows can be selected\n * `checkbox` same behaviour as extended, with checkbox column for selection\n */\n selectionModel?: TableSelectionModel;\n /**\n * if false, table rendered without headers. Useful when table is being included in a\n * composite component.\n */\n showColumnHeaders?: boolean;\n /**\n * if false, column headers will not display menu icon. Menu items are still available\n * from contexct menu\n */\n showColumnHeaderMenus?: boolean;\n}\n\nconst TableCore = ({\n Row = DefaultRow,\n allowDragColumnHeader = true,\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n customHeader,\n dataSource,\n disableFocus = false,\n highlightedIndex: highlightedIndexProp,\n id: idProp,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize = 5,\n rowHeight,\n scrollingApiRef,\n selectionModel = \"extended\",\n showColumnHeaders = true,\n showColumnHeaderMenus = true,\n size,\n}: Omit<TableProps, \"rowHeight\"> & {\n containerRef: RefObject<HTMLDivElement>;\n rowHeight: number;\n size: MeasuredSize;\n}) => {\n const id = useId(idProp);\n const {\n columnMap,\n columns,\n data,\n draggableRow,\n getRowOffset,\n handleContextMenuAction,\n headerHeight,\n headings,\n highlightedIndex,\n menuBuilder,\n onDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onResizeColumn,\n onRowClick,\n onSortColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n tableAttributes,\n tableConfig,\n viewportMeasurements,\n ...tableProps\n } = useTable({\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize: Math.max(5, renderBufferSize),\n rowHeight,\n scrollingApiRef,\n selectionModel,\n size,\n });\n\n const contentContainerClassName = cx(`${classBase}-contentContainer`, {\n [`${classBase}-colLines`]: tableAttributes.columnSeparators,\n [`${classBase}-rowLines`]: tableAttributes.rowSeparators,\n [`${classBase}-zebra`]: tableAttributes.zebraStripes,\n });\n\n const cssVariables = {\n \"--content-height\": `${viewportMeasurements.contentHeight}px`,\n \"--content-width\": `${viewportMeasurements.contentWidth}px`,\n \"--horizontal-scrollbar-height\": `${viewportMeasurements.horizontalScrollbarHeight}px`,\n \"--pinned-width-left\": `${viewportMeasurements.pinnedWidthLeft}px`,\n \"--pinned-width-right\": `${viewportMeasurements.pinnedWidthRight}px`,\n \"--total-header-height\": `${headerHeight}px`,\n \"--vertical-scrollbar-width\": `${viewportMeasurements.verticalScrollbarWidth}px`,\n \"--viewport-body-height\": `${viewportMeasurements.viewportBodyHeight}px`,\n } as CSSProperties;\n\n return (\n <ContextMenuProvider\n menuActionHandler={handleContextMenuAction}\n menuBuilder={menuBuilder}\n >\n <div\n className={`${classBase}-scrollbarContainer`}\n ref={scrollProps.scrollbarContainerRef}\n style={cssVariables}\n >\n <div className={`${classBase}-scrollbarContent`} />\n </div>\n <div\n className={contentContainerClassName}\n ref={scrollProps.contentContainerRef}\n style={cssVariables}\n >\n <div\n {...tableProps}\n className={`${classBase}-table`}\n role=\"table\"\n tabIndex={disableFocus ? undefined : -1}\n >\n {showColumnHeaders ? (\n <TableHeader\n allowDragColumnHeader={allowDragColumnHeader}\n columns={scrollProps.columnsWithinViewport}\n customHeader={customHeader}\n headings={headings}\n onHeightMeasured={onHeaderHeightMeasured}\n onMoveColumn={onMoveColumn}\n onMoveGroupColumn={onMoveGroupColumn}\n onRemoveGroupColumn={onRemoveGroupColumn}\n onResizeColumn={onResizeColumn}\n onSortColumn={onSortColumn}\n showColumnHeaderMenus={showColumnHeaderMenus}\n tableConfig={tableConfig}\n tableId={id}\n virtualColSpan={scrollProps.virtualColSpan}\n />\n ) : null}\n {showColumnHeaders === false || headerHeight > 0 ? (\n <div className={`${classBase}-body`}>\n {data.map((data) => (\n <Row\n aria-rowindex={data[0] + 1}\n classNameGenerator={rowClassNameGenerator}\n columnMap={columnMap}\n columns={scrollProps.columnsWithinViewport}\n highlighted={highlightedIndex === data[IDX]}\n key={data[RENDER_IDX]}\n onClick={onRowClick}\n onDataEdited={onDataEdited}\n row={data}\n offset={getRowOffset(data)}\n onToggleGroup={onToggleGroup}\n virtualColSpan={scrollProps.virtualColSpan}\n zebraStripes={tableAttributes.zebraStripes}\n />\n ))}\n </div>\n ) : null}\n </div>\n </div>\n {draggableRow}\n </ContextMenuProvider>\n );\n};\n\nexport const Table = forwardRef(function Table(\n {\n Row,\n allowDragColumnHeader,\n allowDragDrop,\n availableColumns,\n className: classNameProp,\n config,\n customHeader,\n dataSource,\n disableFocus,\n highlightedIndex,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick,\n onSelect,\n onSelectionChange,\n renderBufferSize,\n rowHeight: rowHeightProp,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showColumnHeaderMenus,\n style: styleProp,\n ...htmlAttributes\n }: TableProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: tableCss,\n window: targetWindow,\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState<MeasuredSize>();\n\n const { rowHeight, rowRef } = useMeasuredHeight({ height: rowHeightProp });\n\n if (config === undefined) {\n throw Error(\n \"vuu Table requires config prop. Minimum config is list of Column Descriptors\",\n );\n }\n if (dataSource === undefined) {\n throw Error(\"vuu Table requires dataSource prop\");\n }\n\n // TODO render TableHeader here and measure before row construction begins\n // TODO we could have MeasuredContainer render a Provider and make size available via a context hook ?\n return (\n <MeasuredContainer\n {...htmlAttributes}\n className={cx(classBase, classNameProp)}\n id={id}\n onResize={setSize}\n ref={useForkRef(containerRef, forwardedRef)}\n style={\n {\n \"--row-height-prop\": rowHeight > 0 ? `${rowHeight}px` : undefined,\n } as CSSProperties\n }\n >\n <RowProxy ref={rowRef} height={rowHeightProp} />\n\n {size && rowHeight ? (\n <TableCore\n Row={Row}\n allowDragColumnHeader={allowDragColumnHeader}\n allowDragDrop={allowDragDrop}\n availableColumns={availableColumns}\n config={config}\n containerRef={containerRef}\n customHeader={customHeader}\n dataSource={dataSource}\n disableFocus={disableFocus}\n highlightedIndex={highlightedIndex}\n id={id}\n navigationStyle={navigationStyle}\n onAvailableColumnsChange={onAvailableColumnsChange}\n onConfigChange={onConfigChange}\n onDragStart={onDragStart}\n onDrop={onDrop}\n onHighlight={onHighlight}\n onRowClick={onRowClick}\n onSelect={onSelect}\n onSelectionChange={onSelectionChange}\n renderBufferSize={renderBufferSize}\n rowHeight={rowHeight}\n scrollingApiRef={scrollingApiRef}\n selectionModel={selectionModel}\n showColumnHeaders={showColumnHeaders}\n showColumnHeaderMenus={showColumnHeaderMenus}\n size={size}\n />\n ) : null}\n </MeasuredContainer>\n );\n});\n"],"names":["metadataKeys","Row","DefaultRow","useId","useTable","jsxs","ContextMenuProvider","jsx","TableHeader","data","forwardRef","Table","useWindow","useComponentCssInjection","tableCss","useRef","useState","useMeasuredHeight","MeasuredContainer","useForkRef","RowProxy"],"mappings":"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"}
|
|
@@ -12,7 +12,9 @@ var BulkEditPanel$1 = require('./BulkEditPanel.css.js');
|
|
|
12
12
|
const classBase = "vuuBulkEditPanel";
|
|
13
13
|
const BulkEditPanel = ({
|
|
14
14
|
className,
|
|
15
|
+
columns,
|
|
15
16
|
dataSource,
|
|
17
|
+
parentDs,
|
|
16
18
|
...htmlAttributes
|
|
17
19
|
}) => {
|
|
18
20
|
const targetWindow = window.useWindow();
|
|
@@ -30,18 +32,26 @@ const BulkEditPanel = ({
|
|
|
30
32
|
type: "VIEW_PORT_RPC_CALL"
|
|
31
33
|
});
|
|
32
34
|
};
|
|
33
|
-
return /* @__PURE__ */ jsxRuntime.jsx(BulkEditRow.BulkEditRow, { onChange });
|
|
34
|
-
}, [dataSource]);
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BulkEditRow.BulkEditRow, { onChange, dataSource: parentDs });
|
|
36
|
+
}, [dataSource, parentDs]);
|
|
35
37
|
const config = react.useMemo(() => {
|
|
36
38
|
return {
|
|
37
|
-
columns:
|
|
39
|
+
columns: columns ? columns.map((col) => {
|
|
40
|
+
return {
|
|
41
|
+
editable: col.editableBulk === "bulk",
|
|
42
|
+
hidden: col.editableBulk === false,
|
|
43
|
+
name: col.name,
|
|
44
|
+
serverDataType: col.serverDataType ?? "string",
|
|
45
|
+
type: col.name === "date" ? col.type : "string"
|
|
46
|
+
};
|
|
47
|
+
}) : dataSource.columns.map((name) => ({
|
|
38
48
|
editable: true,
|
|
39
49
|
name,
|
|
40
50
|
serverDataType: "string"
|
|
41
51
|
})),
|
|
42
52
|
rowSeparators: true
|
|
43
53
|
};
|
|
44
|
-
}, [dataSource]);
|
|
54
|
+
}, [columns, dataSource.columns]);
|
|
45
55
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
46
56
|
"div",
|
|
47
57
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditPanel.js","sources":["../../src/bulk-edit/BulkEditPanel.tsx"],"sourcesContent":["import { DataSource, RpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRpcViewportRequest } from \"@vuu-ui/vuu-protocol-types\";\nimport type { TableConfig } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { Table } from \"../Table\";\nimport { BulkEditRow, type EditValueChangeHandler } from \"./BulkEditRow\";\n\nimport bulkEditPanelCss from \"./BulkEditPanel.css\";\n\nconst classBase = \"vuuBulkEditPanel\";\n\nexport interface BulkEditPanelProps extends HTMLAttributes<HTMLDivElement> {\n dataSource: DataSource;\n response?: RpcResponse;\n mainTableName?: string;\n}\n\nexport const BulkEditPanel = ({\n className,\n dataSource,\n ...htmlAttributes\n}: BulkEditPanelProps): JSX.Element => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-cell\",\n css: bulkEditPanelCss,\n window: targetWindow
|
|
1
|
+
{"version":3,"file":"BulkEditPanel.js","sources":["../../src/bulk-edit/BulkEditPanel.tsx"],"sourcesContent":["import { DataSource, RpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRpcViewportRequest } from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor, TableConfig } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, useMemo } from \"react\";\nimport { Table } from \"../Table\";\nimport { BulkEditRow, type EditValueChangeHandler } from \"./BulkEditRow\";\n\nimport bulkEditPanelCss from \"./BulkEditPanel.css\";\n\nconst classBase = \"vuuBulkEditPanel\";\n\nexport interface BulkEditPanelProps extends HTMLAttributes<HTMLDivElement> {\n columns?: ColumnDescriptor[];\n dataSource: DataSource;\n response?: RpcResponse;\n mainTableName?: string;\n parentDs: DataSource;\n}\n\nexport const BulkEditPanel = ({\n className,\n columns,\n dataSource,\n parentDs,\n ...htmlAttributes\n}: BulkEditPanelProps): JSX.Element => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-cell\",\n css: bulkEditPanelCss,\n window: targetWindow,\n });\n\n const bulkEditRow = useMemo(() => {\n const onChange: EditValueChangeHandler = (column, value) => {\n dataSource.rpcCall?.({\n namedParams: { column: column.name, value },\n params: [],\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_RPC_CALL\",\n } as Omit<VuuRpcViewportRequest, \"vpId\">);\n };\n return <BulkEditRow onChange={onChange} dataSource={parentDs} />;\n }, [dataSource, parentDs]);\n\n const config: TableConfig = useMemo(() => {\n return {\n columns: columns\n ? columns.map((col) => {\n return {\n editable: col.editableBulk === \"bulk\",\n hidden: col.editableBulk === false,\n name: col.name,\n serverDataType: col.serverDataType ?? \"string\",\n type: col.name === \"date\" ? col.type : \"string\",\n };\n })\n : dataSource.columns.map((name) => ({\n editable: true,\n name,\n serverDataType: \"string\",\n })),\n rowSeparators: true,\n };\n }, [columns, dataSource.columns]);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(classBase, className)}\n style={{ display: \"flex\", flexDirection: \"column\" }}\n >\n <div className={`${classBase}-toolbar`} />\n <div className={`${classBase}-table`}>\n <Table\n allowDragColumnHeader={false}\n config={config}\n customHeader={bulkEditRow}\n dataSource={dataSource}\n height={400}\n width={600}\n showColumnHeaderMenus={false}\n selectionModel=\"none\"\n />\n </div>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","bulkEditPanelCss","useMemo","jsx","BulkEditRow","jsxs","Table"],"mappings":"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"}
|
|
@@ -16,20 +16,24 @@ const InputProps = {
|
|
|
16
16
|
placeholder: "Enter value",
|
|
17
17
|
variant: "primary"
|
|
18
18
|
};
|
|
19
|
-
const BulkEditRow = ({
|
|
19
|
+
const BulkEditRow = ({
|
|
20
|
+
dataSource,
|
|
21
|
+
onChange,
|
|
22
|
+
...htmlAttributes
|
|
23
|
+
}) => {
|
|
20
24
|
const targetWindow = window.useWindow();
|
|
21
25
|
styles.useComponentCssInjection({
|
|
22
26
|
testId: "vuu-bulk-edit-row",
|
|
23
27
|
css: BulkEditRow$1,
|
|
24
28
|
window: targetWindow
|
|
25
29
|
});
|
|
30
|
+
const fieldRef = react.useRef("");
|
|
26
31
|
const { columns, virtualColSpan = 0 } = HeaderProvider.useHeaderProps();
|
|
27
32
|
const onCommit = react.useCallback(
|
|
28
33
|
(evt, value) => {
|
|
29
34
|
if (value !== void 0 && String(value).trim() !== "") {
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
const columnName = field.dataset.field;
|
|
35
|
+
const columnName = fieldRef.current;
|
|
36
|
+
if (columnName) {
|
|
33
37
|
const column = columns.find((c) => c.name === columnName);
|
|
34
38
|
if (column) {
|
|
35
39
|
onChange(column, value);
|
|
@@ -39,14 +43,43 @@ const BulkEditRow = ({ onChange, ...htmlAttributes }) => {
|
|
|
39
43
|
},
|
|
40
44
|
[columns, onChange]
|
|
41
45
|
);
|
|
42
|
-
|
|
46
|
+
const handleFocus = react.useCallback((evt) => {
|
|
47
|
+
const field = vuuUtils.queryClosest(evt.target, "[data-field]");
|
|
48
|
+
if (field) {
|
|
49
|
+
const columnName = field.dataset.field;
|
|
50
|
+
if (columnName) {
|
|
51
|
+
fieldRef.current = columnName;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}, []);
|
|
55
|
+
const getSuggestions = react.useCallback(
|
|
56
|
+
([, column, pattern]) => {
|
|
57
|
+
const a = dataSource.getTypeaheadSuggestions(column, pattern);
|
|
58
|
+
console.log(a);
|
|
59
|
+
return a;
|
|
60
|
+
},
|
|
61
|
+
[dataSource]
|
|
62
|
+
);
|
|
63
|
+
const suggestionProvider = react.useMemo(() => {
|
|
64
|
+
if (vuuUtils.isTypeaheadSuggestionProvider(dataSource)) {
|
|
65
|
+
return () => getSuggestions;
|
|
66
|
+
}
|
|
67
|
+
}, [dataSource, getSuggestions]);
|
|
68
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlAttributes, className: classBase, onFocus: handleFocus, children: [
|
|
43
69
|
/* @__PURE__ */ jsxRuntime.jsx(VirtualColSpan.VirtualColSpan, { width: virtualColSpan }),
|
|
44
70
|
columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
45
71
|
"div",
|
|
46
72
|
{
|
|
47
73
|
className: `${classBase}-filter`,
|
|
74
|
+
"data-field": column.name,
|
|
48
75
|
style: { width: column.width },
|
|
49
|
-
children: vuuDataReact.getDataItemEditControl({
|
|
76
|
+
children: vuuDataReact.getDataItemEditControl({
|
|
77
|
+
InputProps,
|
|
78
|
+
column,
|
|
79
|
+
onCommit,
|
|
80
|
+
suggestionProvider,
|
|
81
|
+
table: dataSource.table
|
|
82
|
+
})
|
|
50
83
|
},
|
|
51
84
|
column.name
|
|
52
85
|
))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditRow.js","sources":["../../src/bulk-edit/BulkEditRow.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {
|
|
1
|
+
{"version":3,"file":"BulkEditRow.js","sources":["../../src/bulk-edit/BulkEditRow.tsx"],"sourcesContent":["import { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport {\n DataSource,\n SuggestionFetcher,\n TypeaheadSuggestionProvider,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TypeaheadParams } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n CommitHandler,\n isTypeaheadSuggestionProvider,\n queryClosest,\n} from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useCallback, useMemo, useRef } from \"react\";\nimport { VirtualColSpan } from \"../VirtualColSpan\";\nimport { useHeaderProps } from \"../table-header\";\nimport bulkEditRowCss from \"./BulkEditRow.css\";\n\nconst classBase = \"vuuBulkEditRow\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: string,\n) => void;\nexport interface BulkEditProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n dataSource: DataSource;\n onChange: EditValueChangeHandler;\n}\n\nconst InputProps: Partial<InputProps> = {\n placeholder: \"Enter value\",\n variant: \"primary\",\n};\n\nexport const BulkEditRow = ({\n dataSource,\n onChange,\n ...htmlAttributes\n}: BulkEditProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-bulk-edit-row\",\n css: bulkEditRowCss,\n window: targetWindow,\n });\n\n const fieldRef = useRef(\"\");\n\n const { columns, virtualColSpan = 0 } = useHeaderProps();\n\n const onCommit = useCallback<\n CommitHandler<HTMLInputElement, string | undefined>\n >(\n (evt, value) => {\n if (value !== undefined && String(value).trim() !== \"\") {\n const columnName = fieldRef.current;\n if (columnName) {\n const column = columns.find((c) => c.name === columnName);\n if (column) {\n onChange(column, value);\n }\n }\n }\n },\n [columns, onChange],\n );\n\n const handleFocus = useCallback((evt) => {\n const field = queryClosest(evt.target, \"[data-field]\");\n if (field) {\n const columnName = field.dataset.field;\n if (columnName) {\n fieldRef.current = columnName;\n }\n }\n }, []);\n\n const getSuggestions = useCallback<SuggestionFetcher>(\n ([, column, pattern]: TypeaheadParams) => {\n const a = (\n dataSource as TypeaheadSuggestionProvider\n ).getTypeaheadSuggestions(column, pattern);\n console.log(a);\n return a;\n },\n [dataSource],\n );\n\n const suggestionProvider = useMemo(() => {\n if (isTypeaheadSuggestionProvider(dataSource)) {\n return () => getSuggestions;\n }\n }, [dataSource, getSuggestions]);\n\n return (\n <div {...htmlAttributes} className={classBase} onFocus={handleFocus}>\n <VirtualColSpan width={virtualColSpan} />\n {columns.map((column) => (\n <div\n className={`${classBase}-filter`}\n data-field={column.name}\n key={column.name}\n style={{ width: column.width }}\n >\n {getDataItemEditControl({\n InputProps,\n column,\n onCommit,\n suggestionProvider,\n table: dataSource.table,\n })}\n </div>\n ))}\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","bulkEditRowCss","useRef","useHeaderProps","useCallback","queryClosest","useMemo","isTypeaheadSuggestionProvider","jsx","VirtualColSpan","getDataItemEditControl"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxCell.js","sources":["../../../src/cell-renderers/checkbox-cell/CheckboxCell.tsx"],"sourcesContent":["import { memo, useCallback } from \"react\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { WarnCommit } from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n registerComponent
|
|
1
|
+
{"version":3,"file":"CheckboxCell.js","sources":["../../../src/cell-renderers/checkbox-cell/CheckboxCell.tsx"],"sourcesContent":["import { memo, useCallback } from \"react\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { WarnCommit } from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\n\nexport const CheckboxCell: React.FC<TableCellRendererProps> = memo(\n ({ column, columnMap, onCommit = WarnCommit, row }) => {\n const dataIdx = columnMap[column.name];\n const isChecked = !!row[dataIdx];\n\n const handleCommit = useCallback(\n (value) => async (evt: React.MouseEvent) => {\n const res = await onCommit(value);\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onCommit],\n );\n\n return column.editable ? (\n <Checkbox checked={isChecked} onClick={handleCommit(!isChecked)} />\n ) : (\n <Checkbox checked={isChecked} disabled={true} />\n );\n },\n dataColumnAndKeyUnchanged,\n);\nCheckboxCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\"checkbox-cell\", CheckboxCell, \"cell-renderer\", {\n serverDataType: \"boolean\",\n});\n"],"names":["memo","WarnCommit","useCallback","dispatchCustomEvent","jsx","Checkbox","dataColumnAndKeyUnchanged","registerComponent"],"mappings":";;;;;;;;AAUO,MAAM,YAAiD,GAAAA,UAAA;AAAA,EAC5D,CAAC,EAAE,MAAA,EAAQ,WAAW,QAAW,GAAAC,wBAAA,EAAY,KAAU,KAAA;AACrD,IAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,IAAA,MAAM,SAAY,GAAA,CAAC,CAAC,GAAA,CAAI,OAAO,CAAA,CAAA;AAE/B,IAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,MACnB,CAAC,KAAU,KAAA,OAAO,GAA0B,KAAA;AAC1C,QAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,KAAK,CAAA,CAAA;AAChC,QAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,UAAoBC,4BAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,SAC7D;AACA,QAAO,OAAA,GAAA,CAAA;AAAA,OACT;AAAA,MACA,CAAC,QAAQ,CAAA;AAAA,KACX,CAAA;AAEA,IAAA,OAAO,OAAO,QACZ,mBAAAC,cAAA,CAACC,aAAS,EAAA,EAAA,OAAA,EAAS,WAAW,OAAS,EAAA,YAAA,CAAa,CAAC,SAAS,GAAG,CAEjE,mBAAAD,cAAA,CAACC,iBAAS,OAAS,EAAA,SAAA,EAAW,UAAU,IAAM,EAAA,CAAA,CAAA;AAAA,GAElD;AAAA,EACAC,kCAAA;AACF,EAAA;AACA,YAAA,CAAa,WAAc,GAAA,cAAA,CAAA;AAE3BC,0BAAkB,CAAA,eAAA,EAAiB,cAAc,eAAiB,EAAA;AAAA,EAChE,cAAgB,EAAA,SAAA;AAClB,CAAC,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxRowSelectorCell.js","sources":["../../../src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { isRowSelected, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxRowSelectorCss from \"./CheckboxRowSelectorCell.css\";\n\nexport const CheckboxRowSelectorCell: React.FC<TableCellRendererProps> = ({\n row
|
|
1
|
+
{"version":3,"file":"CheckboxRowSelectorCell.js","sources":["../../../src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { isRowSelected, registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxRowSelectorCss from \"./CheckboxRowSelectorCell.css\";\n\nexport const CheckboxRowSelectorCell: React.FC<TableCellRendererProps> = ({\n row,\n}) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-row-selector-cell\",\n css: checkboxRowSelectorCss,\n window: targetWindow,\n });\n\n const isChecked = isRowSelected(row);\n\n return <Checkbox checked={isChecked} className=\"vuuCheckboxRowSelector\" />;\n};\nCheckboxRowSelectorCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\n \"checkbox-row-selector-cell\",\n CheckboxRowSelectorCell,\n \"cell-renderer\",\n {\n serverDataType: \"boolean\",\n },\n);\n"],"names":["useWindow","useComponentCssInjection","checkboxRowSelectorCss","isRowSelected","jsx","Checkbox","registerComponent"],"mappings":";;;;;;;;;AAQO,MAAM,0BAA4D,CAAC;AAAA,EACxE,GAAA;AACF,CAAM,KAAA;AACJ,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gCAAA;AAAA,IACR,GAAK,EAAAC,yBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAYC,uBAAc,GAAG,CAAA,CAAA;AAEnC,EAAA,uBAAQC,cAAA,CAAAC,aAAA,EAAA,EAAS,OAAS,EAAA,SAAA,EAAW,WAAU,wBAAyB,EAAA,CAAA,CAAA;AAC1E,EAAA;AACA,uBAAA,CAAwB,WAAc,GAAA,cAAA,CAAA;AAEtCC,0BAAA;AAAA,EACE,4BAAA;AAAA,EACA,uBAAA;AAAA,EACA,eAAA;AAAA,EACA;AAAA,IACE,cAAgB,EAAA,SAAA;AAAA,GAClB;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputCell.js","sources":["../../../src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Input } from \"@salt-ds/core\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nconst WarnCommit = (): Promise<true> => {\n console.warn(\n \"onCommit handler has not been provided to InputCell cell renderer\"
|
|
1
|
+
{"version":3,"file":"InputCell.js","sources":["../../../src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Input } from \"@salt-ds/core\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nconst WarnCommit = (): Promise<true> => {\n console.warn(\n \"onCommit handler has not been provided to InputCell cell renderer\",\n );\n return Promise.resolve(true);\n};\nexport const InputCell = ({\n column,\n columnMap,\n onCommit = WarnCommit,\n row,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const dataValue = row[dataIdx] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n initialValue: dataValue,\n onCommit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["useWindow","useComponentCssInjection","inputCellCss","useEditableText","jsx","Input","registerComponent"],"mappings":";;;;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA,CAAA;AAElB,MAAM,aAAa,MAAqB;AACtC,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN,mEAAA;AAAA,GACF,CAAA;AACA,EAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAC7B,CAAA,CAAA;AACO,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAW,GAAA,UAAA;AAAA,EACX,GAAA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,IAAI,OAAO,CAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA,CAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAcC,6BAAgB,CAAA;AAAA,IACvD,YAAc,EAAA,SAAA;AAAA,IACd,QAAA;AAAA,IACA,6BAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzBC,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzBA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EACE,uBAAAA,cAAA;AAAA,IAACC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA,CAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA,cAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,EAAA;AAEAC,0BAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA,KAAA;AACjB,CAAC,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleCell.js","sources":["../../../src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps
|
|
1
|
+
{"version":3,"file":"ToggleCell.js","sources":["../../../src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { CycleStateCommitHandler, WarnCommit } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n isTypeDescriptor,\n isValueListRenderer,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport { memo, useCallback } from \"react\";\nimport { CycleStateButton } from \"@vuu-ui/vuu-ui-controls\";\n\nimport toggleCellCss from \"./ToggleCell.css\";\n\nconst classBase = \"vuuTableToggleCell\";\n\nconst getValueList = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isValueListRenderer(type.renderer)) {\n return type.renderer.values;\n } else {\n throw Error(\n `useLookupValues column ${name} has not been configured with a values list`,\n );\n }\n};\n\nexport const ToggleCell = memo(function ToggleCell({\n column,\n columnMap,\n onCommit = WarnCommit,\n row,\n}: TableCellRendererProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toggle-cell\",\n css: toggleCellCss,\n window: targetWindow,\n });\n\n const values = getValueList(column);\n const dataIdx = columnMap[column.name];\n const value = row[dataIdx] as string;\n\n const handleCommit = useCallback<CycleStateCommitHandler>(\n (evt, value) => {\n return onCommit(value).then((response) => {\n if (response === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return response;\n });\n },\n [onCommit],\n );\n\n return (\n <CycleStateButton\n className={cx(classBase, `${classBase}-${column.name}`)}\n onCommit={handleCommit}\n value={value}\n values={values}\n variant=\"cta\"\n >\n {value}\n </CycleStateButton>\n );\n}, dataColumnAndKeyUnchanged);\n\nregisterComponent(\"toggle-cell\", ToggleCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["isTypeDescriptor","isValueListRenderer","memo","ToggleCell","WarnCommit","useWindow","useComponentCssInjection","toggleCellCss","useCallback","value","dispatchCustomEvent","jsx","CycleStateButton","dataColumnAndKeyUnchanged","registerComponent"],"mappings":";;;;;;;;;;;AAqBA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAIA,0BAAiB,IAAI,CAAA,IAAKC,4BAAoB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAChE,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA,CAAA;AAAA,GAChB,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,0BAA0B,IAAI,CAAA,2CAAA,CAAA;AAAA,KAChC,CAAA;AAAA,GACF;AACF,CAAA,CAAA;AAEa,MAAA,UAAA,GAAaC,UAAK,CAAA,SAASC,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAW,GAAAC,wBAAA;AAAA,EACX,GAAA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA,CAAA;AAClC,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,EAAM,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA,CAAA;AAEzB,EAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,IACnB,CAAC,KAAKC,MAAU,KAAA;AACd,MAAA,OAAO,QAASA,CAAAA,MAAK,CAAE,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA;AACxC,QAAA,IAAI,aAAa,IAAM,EAAA;AACrB,UAAoBC,4BAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,SAC7D;AACA,QAAO,OAAA,QAAA,CAAA;AAAA,OACR,CAAA,CAAA;AAAA,KACH;AAAA,IACA,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,8BAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA;AAAA,MACtD,QAAU,EAAA,YAAA;AAAA,MACV,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAQ,EAAA,KAAA;AAAA,MAEP,QAAA,EAAA,KAAA;AAAA,KAAA;AAAA,GACH,CAAA;AAEJ,CAAA,EAAGC,kCAAyB,EAAA;AAE5BC,0BAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA,KAAA;AACjB,CAAC,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeaderPill.js","sources":["../../src/column-header-pill/ColumnHeaderPill.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, MouseEvent, useCallback } from \"react\";\n\nimport columnHeaderPillCss from \"./ColumnHeaderPill.css\";\n\nexport interface ColumnHeaderPillProps extends HTMLAttributes<HTMLDivElement> {\n column: RuntimeColumnDescriptor;\n removable?: boolean;\n onRemove?: (column: RuntimeColumnDescriptor) => void;\n}\n\nconst classBase = \"vuuColumnHeaderPill\";\n\nexport const ColumnHeaderPill = ({\n children,\n className,\n column,\n onRemove,\n removable,\n ...htmlAttributes\n}: ColumnHeaderPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-header-pill\",\n css: columnHeaderPillCss,\n window: targetWindow
|
|
1
|
+
{"version":3,"file":"ColumnHeaderPill.js","sources":["../../src/column-header-pill/ColumnHeaderPill.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, MouseEvent, useCallback } from \"react\";\n\nimport columnHeaderPillCss from \"./ColumnHeaderPill.css\";\n\nexport interface ColumnHeaderPillProps extends HTMLAttributes<HTMLDivElement> {\n column: RuntimeColumnDescriptor;\n removable?: boolean;\n onRemove?: (column: RuntimeColumnDescriptor) => void;\n}\n\nconst classBase = \"vuuColumnHeaderPill\";\n\nexport const ColumnHeaderPill = ({\n children,\n className,\n column,\n onRemove,\n removable,\n ...htmlAttributes\n}: ColumnHeaderPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-header-pill\",\n css: columnHeaderPillCss,\n window: targetWindow,\n });\n\n if (removable && typeof onRemove !== \"function\") {\n throw Error(\n \"ColumnHeaderPill onRemove prop must be provided if Pill is removable\",\n );\n }\n\n const handleClickRemove = useCallback(\n (evt: MouseEvent<HTMLSpanElement>) => {\n evt.preventDefault();\n evt.stopPropagation();\n onRemove?.(column);\n },\n [column, onRemove],\n );\n\n return (\n <div {...htmlAttributes} className={cx(classBase, className)}>\n {children}\n {removable ? (\n <span\n className={`${classBase}-removeButton`}\n role=\"button\"\n data-icon=\"cross\"\n onClick={handleClickRemove}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","columnHeaderPillCss","useCallback","jsxs","jsx"],"mappings":";;;;;;;;;AAcA,MAAM,SAAY,GAAA,qBAAA,CAAA;AAEX,MAAM,mBAAmB,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG,cAAA;AACL,CAA6B,KAAA;AAC3B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,kBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,SAAA,IAAa,OAAO,QAAA,KAAa,UAAY,EAAA;AAC/C,IAAM,MAAA,KAAA;AAAA,MACJ,sEAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAA,MAAM,iBAAoB,GAAAC,iBAAA;AAAA,IACxB,CAAC,GAAqC,KAAA;AACpC,MAAA,GAAA,CAAI,cAAe,EAAA,CAAA;AACnB,MAAA,GAAA,CAAI,eAAgB,EAAA,CAAA;AACpB,MAAA,QAAA,GAAW,MAAM,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,QAAQ,QAAQ,CAAA;AAAA,GACnB,CAAA;AAEA,EACE,uBAAAC,eAAA,CAAC,SAAK,GAAG,cAAA,EAAgB,WAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CACxD,EAAA,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,SACC,mBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,aAAA,CAAA;AAAA,QACvB,IAAK,EAAA,QAAA;AAAA,QACL,WAAU,EAAA,OAAA;AAAA,QACV,OAAS,EAAA,iBAAA;AAAA,OAAA;AAAA,KAET,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupColumnPill.js","sources":["../../src/column-header-pill/GroupColumnPill.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { ColumnHeaderPill, ColumnHeaderPillProps } from \"./ColumnHeaderPill\";\n\nimport groupColumnPillCss from \"./GroupColumnPill.css\";\n\nexport interface GroupColumnPillProps extends ColumnHeaderPillProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const GroupColumnPill = ({\n column,\n ...columnHeaderProps\n}: GroupColumnPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-column-pill\",\n css: groupColumnPillCss,\n window: targetWindow
|
|
1
|
+
{"version":3,"file":"GroupColumnPill.js","sources":["../../src/column-header-pill/GroupColumnPill.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { ColumnHeaderPill, ColumnHeaderPillProps } from \"./ColumnHeaderPill\";\n\nimport groupColumnPillCss from \"./GroupColumnPill.css\";\n\nexport interface GroupColumnPillProps extends ColumnHeaderPillProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const GroupColumnPill = ({\n column,\n ...columnHeaderProps\n}: GroupColumnPillProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-group-column-pill\",\n css: groupColumnPillCss,\n window: targetWindow,\n });\n\n const { name, sorted } = column;\n const icon =\n typeof sorted === \"number\"\n ? sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : sorted === \"A\"\n ? \"arrow-up\"\n : sorted === \"D\"\n ? \"arrow-down\"\n : undefined;\n\n return (\n <ColumnHeaderPill {...columnHeaderProps} column={column}>\n <span className=\"vuuGroupColumnPill-label\">{name}</span>\n {icon !== undefined ? <span data-icon={icon} /> : null}\n {typeof sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","groupColumnPillCss","jsxs","ColumnHeaderPill","jsx"],"mappings":";;;;;;;;AAYO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,MAAA;AAAA,EACA,GAAG,iBAAA;AACL,CAA4B,KAAA;AAC1B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,MAAA,CAAA;AACzB,EAAA,MAAM,IACJ,GAAA,OAAO,MAAW,KAAA,QAAA,GACd,MAAS,GAAA,CAAA,GACP,YACA,GAAA,UAAA,GACF,MAAW,KAAA,GAAA,GACT,UACA,GAAA,MAAA,KAAW,MACT,YACA,GAAA,KAAA,CAAA,CAAA;AAEV,EAAA,uBACGC,eAAA,CAAAC,iCAAA,EAAA,EAAkB,GAAG,iBAAA,EAAmB,MACvC,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,0BAAA,EAA4B,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA,IAChD,SAAS,KAAY,CAAA,mBAAAA,cAAA,CAAC,MAAK,EAAA,EAAA,WAAA,EAAW,MAAM,CAAK,GAAA,IAAA;AAAA,IACjD,OAAO,MAAW,KAAA,QAAA,mBAChBA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAM,CAAA,EAAE,CACpD,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortIndicator.js","sources":["../../src/column-header-pill/SortIndicator.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnHeaderPill } from \"./ColumnHeaderPill\";\n\nimport sortIndicatorCss from \"./SortIndicator.css\";\n\nexport interface SortIndicatorProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const SortIndicator = ({ column }: SortIndicatorProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-sort-indicator\",\n css: sortIndicatorCss,\n window: targetWindow
|
|
1
|
+
{"version":3,"file":"SortIndicator.js","sources":["../../src/column-header-pill/SortIndicator.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnHeaderPill } from \"./ColumnHeaderPill\";\n\nimport sortIndicatorCss from \"./SortIndicator.css\";\n\nexport interface SortIndicatorProps {\n column: RuntimeColumnDescriptor;\n}\n\nexport const SortIndicator = ({ column }: SortIndicatorProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-sort-indicator\",\n css: sortIndicatorCss,\n window: targetWindow,\n });\n\n if (!column.sorted) {\n return null;\n }\n\n const icon =\n typeof column.sorted === \"number\"\n ? column.sorted < 0\n ? \"arrow-down\"\n : \"arrow-up\"\n : column.sorted === \"A\"\n ? \"arrow-up\"\n : \"arrow-down\";\n\n return (\n <ColumnHeaderPill column={column}>\n <span data-icon={icon} />\n {typeof column.sorted === \"number\" ? (\n <span className={\"vuuSortPosition\"}>{Math.abs(column.sorted)}</span>\n ) : null}\n </ColumnHeaderPill>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","sortIndicatorCss","jsxs","ColumnHeaderPill","jsx"],"mappings":";;;;;;;;AAWO,MAAM,aAAgB,GAAA,CAAC,EAAE,MAAA,EAAiC,KAAA;AAC/D,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAAC,eAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,IACJ,GAAA,OAAO,MAAO,CAAA,MAAA,KAAW,QACrB,GAAA,MAAA,CAAO,MAAS,GAAA,CAAA,GACd,YACA,GAAA,UAAA,GACF,MAAO,CAAA,MAAA,KAAW,MAChB,UACA,GAAA,YAAA,CAAA;AAER,EACE,uBAAAC,eAAA,CAACC,qCAAiB,MAChB,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAA,MAAA,EAAA,EAAK,aAAW,IAAM,EAAA,CAAA;AAAA,IACtB,OAAO,MAAA,CAAO,MAAW,KAAA,QAAA,mBACvBA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,iBAAA,EAAoB,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,MAAO,CAAA,MAAM,GAAE,CAC3D,GAAA,IAAA;AAAA,GACN,EAAA,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnMenu.js","sources":["../../src/column-menu/ColumnMenu.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport columnMenuCss from \"./ColumnMenu.css\";\n\nconst classBase = \"vuuColumnMenu\";\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: RuntimeColumnDescriptor;\n}\n\nexport const ColumnMenu = ({ className, column }: ColumnMenuProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-menu\",\n css: columnMenuCss,\n window: targetWindow
|
|
1
|
+
{"version":3,"file":"ColumnMenu.js","sources":["../../src/column-menu/ColumnMenu.tsx"],"sourcesContent":["import { RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes } from \"react\";\nimport cx from \"clsx\";\n\nimport columnMenuCss from \"./ColumnMenu.css\";\n\nconst classBase = \"vuuColumnMenu\";\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: RuntimeColumnDescriptor;\n}\n\nexport const ColumnMenu = ({ className, column }: ColumnMenuProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-menu\",\n css: columnMenuCss,\n window: targetWindow,\n });\n\n return (\n <PopupMenu\n className={cx(classBase, className)}\n data-embedded\n menuLocation=\"column-menu\"\n menuOptions={{ column }}\n />\n );\n};\n"],"names":["useWindow","useComponentCssInjection","columnMenuCss","jsx","PopupMenu"],"mappings":";;;;;;;;;AASA,MAAM,SAAY,GAAA,eAAA,CAAA;AAKX,MAAM,UAAa,GAAA,CAAC,EAAE,SAAA,EAAW,QAA8B,KAAA;AACpE,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAS,CAAA;AAAA,MAClC,eAAa,EAAA,IAAA;AAAA,MACb,YAAa,EAAA,aAAA;AAAA,MACb,WAAA,EAAa,EAAE,MAAO,EAAA;AAAA,KAAA;AAAA,GACxB,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumnResize.js","sources":["../../src/column-resizing/useTableColumnResize.tsx"],"sourcesContent":["import {\n Heading,\n ResizePhase,\n RuntimeColumnDescriptor
|
|
1
|
+
{"version":3,"file":"useTableColumnResize.js","sources":["../../src/column-resizing/useTableColumnResize.tsx"],"sourcesContent":["import {\n Heading,\n ResizePhase,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { RefObject, useCallback, useRef, useState } from \"react\";\n\nexport type ResizeHandler = (evt: MouseEvent, moveBy: number) => void;\nexport interface CellResizeHookProps {\n column: RuntimeColumnDescriptor | Heading;\n onResize?: (phase: ResizePhase, columnName: string, width?: number) => void;\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport interface CellResizeHookResult {\n isResizing: boolean;\n onDrag: (evt: MouseEvent, moveBy: number, totalDistanceMoved: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n onDragEnd: (evt: MouseEvent) => void;\n}\n\nexport const useTableColumnResize = ({\n column,\n onResize,\n rootRef,\n}: CellResizeHookProps): CellResizeHookResult => {\n const widthRef = useRef({ start: 0, now: 0 });\n\n const [isResizing, setResizing] = useState(false);\n const { name } = column;\n\n const handleResizeStart = useCallback(() => {\n if (onResize && rootRef.current) {\n const { current: width } = widthRef;\n const { width: measuredWidth } = rootRef.current.getBoundingClientRect();\n width.start = width.now = Math.round(measuredWidth);\n setResizing(true);\n onResize?.(\"begin\", name);\n }\n }, [name, onResize, rootRef]);\n\n const handleResize = useCallback(\n (_evt: MouseEvent, moveBy: number, totalDistanceMoved) => {\n if (rootRef.current) {\n if (onResize) {\n const { current: width } = widthRef;\n const newWidth = width.start + totalDistanceMoved;\n if (newWidth !== width.now && newWidth > 0) {\n onResize(\"resize\", name, newWidth);\n width.now = newWidth;\n }\n }\n }\n },\n [name, onResize, rootRef],\n );\n\n const handleResizeEnd = useCallback(() => {\n if (onResize) {\n const { current: width } = widthRef;\n onResize(\"end\", name, width.now);\n setTimeout(() => {\n // clickHandler in HeaderCell checks isResizing before firing. Because onMouseUp\n // fires before click, we need to delay setting isResizing back to false, just\n // long enough that the click ghandler will have fired.\n setResizing(false);\n }, 80);\n }\n }, [name, onResize]);\n\n return {\n isResizing,\n onDrag: handleResize,\n onDragStart: handleResizeStart,\n onDragEnd: handleResizeEnd,\n };\n};\n"],"names":["useRef","useState","useCallback"],"mappings":";;;;AAqBO,MAAM,uBAAuB,CAAC;AAAA,EACnC,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AACF,CAAiD,KAAA;AAC/C,EAAA,MAAM,WAAWA,YAAO,CAAA,EAAE,OAAO,CAAG,EAAA,GAAA,EAAK,GAAG,CAAA,CAAA;AAE5C,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA,CAAA;AAChD,EAAM,MAAA,EAAE,MAAS,GAAA,MAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoBC,kBAAY,MAAM;AAC1C,IAAI,IAAA,QAAA,IAAY,QAAQ,OAAS,EAAA;AAC/B,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,MAAA,MAAM,EAAE,KAAO,EAAA,aAAA,EAAkB,GAAA,OAAA,CAAQ,QAAQ,qBAAsB,EAAA,CAAA;AACvE,MAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,GAAM,GAAA,IAAA,CAAK,MAAM,aAAa,CAAA,CAAA;AAClD,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,MAAA,QAAA,GAAW,SAAS,IAAI,CAAA,CAAA;AAAA,KAC1B;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO,CAAC,CAAA,CAAA;AAE5B,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,IAAkB,EAAA,MAAA,EAAgB,kBAAuB,KAAA;AACxD,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,UAAM,MAAA,QAAA,GAAW,MAAM,KAAQ,GAAA,kBAAA,CAAA;AAC/B,UAAA,IAAI,QAAa,KAAA,KAAA,CAAM,GAAO,IAAA,QAAA,GAAW,CAAG,EAAA;AAC1C,YAAS,QAAA,CAAA,QAAA,EAAU,MAAM,QAAQ,CAAA,CAAA;AACjC,YAAA,KAAA,CAAM,GAAM,GAAA,QAAA,CAAA;AAAA,WACd;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,IAAM,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkBA,kBAAY,MAAM;AACxC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,QAAA,CAAA;AAC3B,MAAS,QAAA,CAAA,KAAA,EAAO,IAAM,EAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC/B,MAAA,UAAA,CAAW,MAAM;AAIf,QAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,SAChB,EAAE,CAAA,CAAA;AAAA,KACP;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,QAAQ,CAAC,CAAA,CAAA;AAEnB,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,MAAQ,EAAA,YAAA;AAAA,IACR,WAAa,EAAA,iBAAA;AAAA,IACb,SAAW,EAAA,eAAA;AAAA,GACb,CAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildContextMenuDescriptors.js","sources":["../../src/context-menu/buildContextMenuDescriptors.ts"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n DataSource,\n MenuBuilder\n} from \"@vuu-ui/vuu-data-types\";\nimport { RuntimeColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-table-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\n\nexport type ContextMenuLocation = \"header\" | \"filter\" | \"grid\";\n\ntype MaybeColumn = { column?: RuntimeColumnDescriptor };\n\nexport const buildContextMenuDescriptors =\n (dataSource?: DataSource): MenuBuilder =>\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource === undefined) {\n return descriptors;\n }\n //TODO which should it be ?\n if (location === \"header\" || location === \"column-menu\") {\n descriptors.push(\n ...buildSortMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(\n ...buildGroupMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(\n ...buildAggregationMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(...buildColumnDisplayMenuItems(options as MaybeColumn));\n descriptors.push({\n action: \"column-settings\",\n icon: \"settings\",\n label: `Column Settings ...`,\n options\n });\n descriptors.push({\n action: \"table-settings\",\n icon: \"settings\",\n label: `DataGrid Settings ...`,\n options\n });\n }\n\n // if (options?.selectedRowCount){\n // // TODO pass the table name\n // const rpcActions = getRpcActions();\n // for (let {label, method} of rpcActions){\n // descriptors.push({action: Action.RpcCall, label, options: {method}})\n // }\n // }\n\n return descriptors;\n };\n\nfunction buildSortMenuItems(\n options: MaybeColumn,\n { sort: { sortDefs } }: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const hasSort = sortDefs.length > 0;\n\n if (column.sorted === \"A\") {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-dsc\",\n options\n });\n } else if (column.sorted === \"D\") {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-asc\",\n options\n });\n } else if (typeof column.sorted === \"number\") {\n if (column.sorted > 0) {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-add-dsc\",\n options\n });\n } else {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-add-asc\",\n options\n });\n }\n\n // removing the last column from a sort would be a no-op, so pointless\n if (hasSort && Math.abs(column.sorted) < sortDefs.length) {\n menuItems.push({\n label: \"Remove from sort\",\n action: \"sort-remove\",\n options\n });\n }\n\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options }\n ]\n });\n } else if (hasSort) {\n menuItems.push({\n label: \"Add to sort\",\n children: [\n { label: \"Ascending\", action: \"sort-add-asc\", options },\n { label: \"Descending\", action: \"sort-add-dsc\", options }\n ]\n });\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options }\n ]\n });\n } else {\n menuItems.push({\n label: \"Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options }\n ]\n });\n }\n return menuItems;\n}\n\nfunction buildAggregationMenuItems(\n options: MaybeColumn,\n dataSource: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined || dataSource.groupBy.length === 0) {\n return [];\n }\n const { name, label = name } = column;\n\n return [\n {\n label: `Aggregate ${label}`,\n children: [\n { label: \"Count\", action: \"agg-count\", options },\n { label: \"Distinct\", action: \"agg-distinct\", options }\n ].concat(\n isNumericColumn(column)\n ? [\n { label: \"Sum\", action: \"agg-sum\", options },\n { label: \"Avg\", action: \"agg-avg\", options },\n { label: \"High\", action: \"agg-high\", options },\n { label: \"Low\", action: \"agg-low\", options }\n ]\n : []\n )\n }\n ];\n}\n\nconst pinColumn = (options: unknown, pinLocation: PinLocation) =>\n ({\n label: `Pin ${pinLocation}`,\n action: `column-pin-${pinLocation}`,\n options\n }) as ContextMenuItemDescriptor;\n\nconst pinLeft = (options: unknown) => pinColumn(options, \"left\");\nconst pinFloating = (options: unknown) => pinColumn(options, \"floating\");\nconst pinRight = (options: unknown) => pinColumn(options, \"right\");\n\nfunction buildColumnDisplayMenuItems(\n options: MaybeColumn\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: ContextMenuItemDescriptor[] = [\n {\n label: `Hide column`,\n action: \"column-hide\",\n options\n },\n {\n label: `Remove column`,\n action: \"column-remove\",\n options\n }\n ];\n\n if (pin === undefined) {\n menuItems.push({\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options), pinRight(options)]\n });\n } else if (pin === \"left\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinFloating(options), pinRight(options)]\n }\n );\n } else if (pin === \"right\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options)]\n }\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinRight(options)]\n }\n );\n }\n\n return menuItems;\n}\n\nfunction buildGroupMenuItems(\n options: MaybeColumn,\n { groupBy }: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const { name, label = name } = column;\n\n if (groupBy.length === 0) {\n menuItems.push({\n label: `Group by ${label}`,\n action: \"group\",\n options\n });\n } else {\n menuItems.push({\n label: `Add ${label} to group by`,\n action: \"group-add\",\n options\n });\n }\n\n return menuItems;\n}\n"],"names":["isNumericColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buildContextMenuDescriptors.js","sources":["../../src/context-menu/buildContextMenuDescriptors.ts"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n DataSource,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { RuntimeColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-table-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\n\nexport type ContextMenuLocation = \"header\" | \"filter\" | \"grid\";\n\ntype MaybeColumn = { column?: RuntimeColumnDescriptor };\n\nexport const buildContextMenuDescriptors =\n (dataSource?: DataSource): MenuBuilder =>\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource === undefined) {\n return descriptors;\n }\n //TODO which should it be ?\n if (location === \"header\" || location === \"column-menu\") {\n descriptors.push(\n ...buildSortMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildGroupMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(\n ...buildAggregationMenuItems(options as MaybeColumn, dataSource),\n );\n descriptors.push(...buildColumnDisplayMenuItems(options as MaybeColumn));\n descriptors.push({\n action: \"column-settings\",\n icon: \"settings\",\n label: `Column Settings ...`,\n options,\n });\n descriptors.push({\n action: \"table-settings\",\n icon: \"settings\",\n label: `DataGrid Settings ...`,\n options,\n });\n }\n\n // if (options?.selectedRowCount){\n // // TODO pass the table name\n // const rpcActions = getRpcActions();\n // for (let {label, method} of rpcActions){\n // descriptors.push({action: Action.RpcCall, label, options: {method}})\n // }\n // }\n\n return descriptors;\n };\n\nfunction buildSortMenuItems(\n options: MaybeColumn,\n { sort: { sortDefs } }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const hasSort = sortDefs.length > 0;\n\n if (column.sorted === \"A\") {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-dsc\",\n options,\n });\n } else if (column.sorted === \"D\") {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-asc\",\n options,\n });\n } else if (typeof column.sorted === \"number\") {\n if (column.sorted > 0) {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-add-dsc\",\n options,\n });\n } else {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-add-asc\",\n options,\n });\n }\n\n // removing the last column from a sort would be a no-op, so pointless\n if (hasSort && Math.abs(column.sorted) < sortDefs.length) {\n menuItems.push({\n label: \"Remove from sort\",\n action: \"sort-remove\",\n options,\n });\n }\n\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else if (hasSort) {\n menuItems.push({\n label: \"Add to sort\",\n children: [\n { label: \"Ascending\", action: \"sort-add-asc\", options },\n { label: \"Descending\", action: \"sort-add-dsc\", options },\n ],\n });\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else {\n menuItems.push({\n label: \"Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n }\n return menuItems;\n}\n\nfunction buildAggregationMenuItems(\n options: MaybeColumn,\n dataSource: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined || dataSource.groupBy.length === 0) {\n return [];\n }\n const { name, label = name } = column;\n\n return [\n {\n label: `Aggregate ${label}`,\n children: [\n { label: \"Count\", action: \"agg-count\", options },\n { label: \"Distinct\", action: \"agg-distinct\", options },\n ].concat(\n isNumericColumn(column)\n ? [\n { label: \"Sum\", action: \"agg-sum\", options },\n { label: \"Avg\", action: \"agg-avg\", options },\n { label: \"High\", action: \"agg-high\", options },\n { label: \"Low\", action: \"agg-low\", options },\n ]\n : [],\n ),\n },\n ];\n}\n\nconst pinColumn = (options: unknown, pinLocation: PinLocation) =>\n ({\n label: `Pin ${pinLocation}`,\n action: `column-pin-${pinLocation}`,\n options,\n }) as ContextMenuItemDescriptor;\n\nconst pinLeft = (options: unknown) => pinColumn(options, \"left\");\nconst pinFloating = (options: unknown) => pinColumn(options, \"floating\");\nconst pinRight = (options: unknown) => pinColumn(options, \"right\");\n\nfunction buildColumnDisplayMenuItems(\n options: MaybeColumn,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: ContextMenuItemDescriptor[] = [\n {\n label: `Hide column`,\n action: \"column-hide\",\n options,\n },\n {\n label: `Remove column`,\n action: \"column-remove\",\n options,\n },\n ];\n\n if (pin === undefined) {\n menuItems.push({\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options), pinRight(options)],\n });\n } else if (pin === \"left\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinFloating(options), pinRight(options)],\n },\n );\n } else if (pin === \"right\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options)],\n },\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinRight(options)],\n },\n );\n }\n\n return menuItems;\n}\n\nfunction buildGroupMenuItems(\n options: MaybeColumn,\n { groupBy }: DataSource,\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const { name, label = name } = column;\n\n if (groupBy.length === 0) {\n menuItems.push({\n label: `Group by ${label}`,\n action: \"group\",\n options,\n });\n } else {\n menuItems.push({\n label: `Add ${label} to group by`,\n action: \"group-add\",\n options,\n });\n }\n\n return menuItems;\n}\n"],"names":["isNumericColumn"],"mappings":"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"}
|