@coveord/plasma-mantine 52.19.0 → 52.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +34 -33
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/browser-preview/BrowserPreview.d.ts +16 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.d.ts.map +1 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.js +106 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.js.map +1 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.styles.d.ts +12 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.styles.d.ts.map +1 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.styles.js +35 -0
- package/dist/cjs/components/browser-preview/BrowserPreview.styles.js.map +1 -0
- package/dist/cjs/components/browser-preview/index.d.ts +2 -0
- package/dist/cjs/components/browser-preview/index.d.ts.map +1 -0
- package/dist/cjs/components/browser-preview/index.js +8 -0
- package/dist/cjs/components/browser-preview/index.js.map +1 -0
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js +1 -0
- package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
- package/dist/cjs/components/table/Table.d.ts.map +1 -1
- package/dist/cjs/components/table/Table.js +8 -2
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/cjs/components/table/Table.styles.d.ts.map +1 -1
- package/dist/cjs/components/table/Table.styles.js +2 -1
- package/dist/cjs/components/table/Table.styles.js.map +1 -1
- package/dist/cjs/components/table/Table.types.d.ts +5 -1
- package/dist/cjs/components/table/Table.types.d.ts.map +1 -1
- package/dist/cjs/components/table/layouts/RowLayout.d.ts.map +1 -1
- package/dist/cjs/components/table/layouts/RowLayout.js +6 -1
- package/dist/cjs/components/table/layouts/RowLayout.js.map +1 -1
- package/dist/cjs/components/table/table-actions/TableActions.styles.js +3 -1
- package/dist/cjs/components/table/table-actions/TableActions.styles.js.map +1 -1
- package/dist/cjs/hooks/useRowSelection.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/browser-preview/BrowserPreview.d.ts +16 -0
- package/dist/esm/components/browser-preview/BrowserPreview.d.ts.map +1 -0
- package/dist/esm/components/browser-preview/BrowserPreview.js +95 -0
- package/dist/esm/components/browser-preview/BrowserPreview.js.map +1 -0
- package/dist/esm/components/browser-preview/BrowserPreview.styles.d.ts +12 -0
- package/dist/esm/components/browser-preview/BrowserPreview.styles.d.ts.map +1 -0
- package/dist/esm/components/browser-preview/BrowserPreview.styles.js +25 -0
- package/dist/esm/components/browser-preview/BrowserPreview.styles.js.map +1 -0
- package/dist/esm/components/browser-preview/index.d.ts +2 -0
- package/dist/esm/components/browser-preview/index.d.ts.map +1 -0
- package/dist/esm/components/browser-preview/index.js +3 -0
- package/dist/esm/components/browser-preview/index.js.map +1 -0
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js +1 -0
- package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
- package/dist/esm/components/table/Table.d.ts.map +1 -1
- package/dist/esm/components/table/Table.js +8 -2
- package/dist/esm/components/table/Table.js.map +1 -1
- package/dist/esm/components/table/Table.styles.d.ts.map +1 -1
- package/dist/esm/components/table/Table.styles.js +2 -1
- package/dist/esm/components/table/Table.styles.js.map +1 -1
- package/dist/esm/components/table/Table.types.d.ts +5 -1
- package/dist/esm/components/table/Table.types.d.ts.map +1 -1
- package/dist/esm/components/table/Table.types.js.map +1 -1
- package/dist/esm/components/table/layouts/RowLayout.d.ts.map +1 -1
- package/dist/esm/components/table/layouts/RowLayout.js +6 -1
- package/dist/esm/components/table/layouts/RowLayout.js.map +1 -1
- package/dist/esm/components/table/table-actions/TableActions.styles.js +3 -1
- package/dist/esm/components/table/table-actions/TableActions.styles.js.map +1 -1
- package/dist/esm/hooks/useRowSelection.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/browser-preview/BrowserPreview.styles.ts +14 -0
- package/src/components/browser-preview/BrowserPreview.tsx +72 -0
- package/src/components/browser-preview/__tests__/BrowserPreview.spec.tsx +35 -0
- package/src/components/browser-preview/index.ts +1 -0
- package/src/components/index.ts +1 -0
- package/src/components/inline-confirm/InlineConfirmPrompt.tsx +1 -1
- package/src/components/table/Table.styles.ts +2 -0
- package/src/components/table/Table.tsx +5 -2
- package/src/components/table/Table.types.ts +5 -1
- package/src/components/table/layouts/RowLayout.tsx +5 -2
- package/src/components/table/table-actions/TableActions.styles.ts +1 -1
- package/src/hooks/useRowSelection.ts +4 -4
- package/src/index.ts +1 -0
|
@@ -15,11 +15,16 @@ import { Th } from "../table-header/Th";
|
|
|
15
15
|
import { TableLoading } from "../table-loading/TableLoading";
|
|
16
16
|
import useStyles from "./RowLayout.styles";
|
|
17
17
|
var RowLayoutHeader = function(param) {
|
|
18
|
-
var table = param.table;
|
|
18
|
+
var table = param.table, classNames = param.classNames, styles = param.styles, unstyled = param.unstyled;
|
|
19
19
|
var _useTable = useTable(), multiRowSelectionEnabled = _useTable.multiRowSelectionEnabled, disableRowSelection = _useTable.disableRowSelection;
|
|
20
20
|
var classes = useStyles({
|
|
21
21
|
disableRowSelection: disableRowSelection,
|
|
22
22
|
multiRowSelectionEnabled: multiRowSelectionEnabled
|
|
23
|
+
}, {
|
|
24
|
+
name: "RowLayout",
|
|
25
|
+
classNames: classNames,
|
|
26
|
+
styles: styles,
|
|
27
|
+
unstyled: unstyled
|
|
23
28
|
}).classes;
|
|
24
29
|
var headers = table.getHeaderGroups().map(function(headerGroup) {
|
|
25
30
|
return /*#__PURE__*/ _jsx("tr", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/table/layouts/RowLayout.tsx"],"sourcesContent":["import {ListSize16Px} from '@coveord/plasma-react-icons';\nimport {Box, Collapse} from '@mantine/core';\nimport {flexRender} from '@tanstack/react-table';\nimport {defaultColumnSizing} from '@tanstack/table-core';\nimport {Fragment, type MouseEvent} from 'react';\nimport {TableLayout} from '../Table.types';\nimport {useTable} from '../TableContext';\nimport {TableCollapsibleColumn} from '../table-column/TableCollapsibleColumn';\nimport {TableSelectableColumn} from '../table-column/TableSelectableColumn';\nimport {Th} from '../table-header/Th';\nimport {TableLoading} from '../table-loading/TableLoading';\nimport useStyles from './RowLayout.styles';\nimport {TableLayoutProps} from './RowLayout.types'; // TODO https://coveord.atlassian.net/browse/ADUI-9182\n\nconst RowLayoutHeader = <T,>({table}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes} = useStyles({disableRowSelection, multiRowSelectionEnabled});\n const headers = table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className={classes.headerColumns}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ));\n return <>{headers}</>;\n};\n\nconst RowLayoutBody = <T,>({\n table,\n doubleClickAction,\n getExpandChildren,\n loading,\n keepSelection,\n classNames,\n styles,\n unstyled,\n ...others\n}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes, cx} = useStyles(\n {disableRowSelection, multiRowSelectionEnabled},\n {name: 'RowLayout', classNames, styles, unstyled},\n );\n\n const toggleCollapsible = (el: HTMLTableRowElement) => {\n const cell = el.children[el.children.length - 1] as HTMLTableCellElement;\n cell.querySelector('button').click();\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n const isSelected = !!row.getIsSelected();\n const shouldKeepSelection = keepSelection && isSelected;\n const onClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (rowChildren) {\n toggleCollapsible(event.currentTarget);\n }\n if (!disableRowSelection && !multiRowSelectionEnabled && !shouldKeepSelection) {\n row.toggleSelected();\n }\n };\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={onClick}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {\n [classes.rowSelected]: isSelected,\n [classes.rowUnselectable]: disableRowSelection,\n })}\n aria-selected={isSelected}\n data-testid={row.id}\n >\n {row.getVisibleCells().map((cell) => {\n const columnSizing = {\n ...defaultColumnSizing,\n size: cell.column.columnDef.size,\n minSize: cell.column.columnDef.minSize,\n maxSize: cell.column.columnDef.maxSize,\n };\n\n const onCollapsibleCellClick = (event: MouseEvent<HTMLTableCellElement>) => {\n if (cell.column.id === TableSelectableColumn.id && !disableRowSelection) {\n event.stopPropagation();\n row.getToggleSelectedHandler();\n }\n };\n return (\n <td\n key={cell.id}\n data-testid={cell.id}\n style={{\n width: columnSizing.size ?? 'auto',\n minWidth: columnSizing.minSize,\n maxWidth: columnSizing.maxSize,\n }}\n className={cx(classes.cell, {\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n onClick={onCollapsibleCellClick}\n >\n <TableLoading visible={loading}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableLoading>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={table.getAllColumns().length}\n style={{\n padding: 0,\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box className={classes.collapsible} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return <>{rows}</>;\n};\n\nexport const RowLayout: TableLayout = {\n name: 'Rows',\n icon: ListSize16Px,\n Header: RowLayoutHeader,\n Body: RowLayoutBody,\n};\n"],"names":["ListSize16Px","Box","Collapse","flexRender","defaultColumnSizing","Fragment","useTable","TableCollapsibleColumn","TableSelectableColumn","Th","TableLoading","useStyles","RowLayoutHeader","table","multiRowSelectionEnabled","disableRowSelection","classes","headers","getHeaderGroups","map","headerGroup","tr","className","headerColumns","columnHeader","header","id","RowLayoutBody","doubleClickAction","getExpandChildren","loading","keepSelection","classNames","styles","unstyled","others","name","cx","toggleCollapsible","el","cell","children","length","querySelector","click","rows","getRowModel","row","rowChildren","original","isSelected","getIsSelected","shouldKeepSelection","onClick","event","currentTarget","toggleSelected","onDoubleClick","rowSelected","rowUnselectable","aria-selected","data-testid","getVisibleCells","columnSizing","size","column","columnDef","minSize","maxSize","onCollapsibleCellClick","stopPropagation","getToggleSelectedHandler","td","style","width","minWidth","maxWidth","rowCollapsibleButtonCell","visible","getContext","colSpan","getAllColumns","padding","in","getIsExpanded","collapsible","px","py","RowLayout","icon","Header","Body"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/table/layouts/RowLayout.tsx"],"sourcesContent":["import {ListSize16Px} from '@coveord/plasma-react-icons';\nimport {Box, Collapse} from '@mantine/core';\nimport {flexRender} from '@tanstack/react-table';\nimport {defaultColumnSizing} from '@tanstack/table-core';\nimport {Fragment, type MouseEvent} from 'react';\nimport {TableLayout} from '../Table.types';\nimport {useTable} from '../TableContext';\nimport {TableCollapsibleColumn} from '../table-column/TableCollapsibleColumn';\nimport {TableSelectableColumn} from '../table-column/TableSelectableColumn';\nimport {Th} from '../table-header/Th';\nimport {TableLoading} from '../table-loading/TableLoading';\nimport useStyles from './RowLayout.styles';\nimport {TableLayoutProps} from './RowLayout.types'; // TODO https://coveord.atlassian.net/browse/ADUI-9182\n\nconst RowLayoutHeader = <T,>({table, classNames, styles, unstyled}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes} = useStyles(\n {disableRowSelection, multiRowSelectionEnabled},\n {name: 'RowLayout', classNames, styles, unstyled},\n );\n const headers = table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className={classes.headerColumns}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ));\n return <>{headers}</>;\n};\n\nconst RowLayoutBody = <T,>({\n table,\n doubleClickAction,\n getExpandChildren,\n loading,\n keepSelection,\n classNames,\n styles,\n unstyled,\n ...others\n}: TableLayoutProps<T>) => {\n const {multiRowSelectionEnabled, disableRowSelection} = useTable();\n const {classes, cx} = useStyles(\n {disableRowSelection, multiRowSelectionEnabled},\n {name: 'RowLayout', classNames, styles, unstyled},\n );\n\n const toggleCollapsible = (el: HTMLTableRowElement) => {\n const cell = el.children[el.children.length - 1] as HTMLTableCellElement;\n cell.querySelector('button').click();\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n const isSelected = !!row.getIsSelected();\n const shouldKeepSelection = keepSelection && isSelected;\n const onClick = (event: MouseEvent<HTMLTableRowElement>) => {\n if (rowChildren) {\n toggleCollapsible(event.currentTarget);\n }\n if (!disableRowSelection && !multiRowSelectionEnabled && !shouldKeepSelection) {\n row.toggleSelected();\n }\n };\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={onClick}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {\n [classes.rowSelected]: isSelected,\n [classes.rowUnselectable]: disableRowSelection,\n })}\n aria-selected={isSelected}\n data-testid={row.id}\n >\n {row.getVisibleCells().map((cell) => {\n const columnSizing = {\n ...defaultColumnSizing,\n size: cell.column.columnDef.size,\n minSize: cell.column.columnDef.minSize,\n maxSize: cell.column.columnDef.maxSize,\n };\n\n const onCollapsibleCellClick = (event: MouseEvent<HTMLTableCellElement>) => {\n if (cell.column.id === TableSelectableColumn.id && !disableRowSelection) {\n event.stopPropagation();\n row.getToggleSelectedHandler();\n }\n };\n return (\n <td\n key={cell.id}\n data-testid={cell.id}\n style={{\n width: columnSizing.size ?? 'auto',\n minWidth: columnSizing.minSize,\n maxWidth: columnSizing.maxSize,\n }}\n className={cx(classes.cell, {\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n onClick={onCollapsibleCellClick}\n >\n <TableLoading visible={loading}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableLoading>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={table.getAllColumns().length}\n style={{\n padding: 0,\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box className={classes.collapsible} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return <>{rows}</>;\n};\n\nexport const RowLayout: TableLayout = {\n name: 'Rows',\n icon: ListSize16Px,\n Header: RowLayoutHeader,\n Body: RowLayoutBody,\n};\n"],"names":["ListSize16Px","Box","Collapse","flexRender","defaultColumnSizing","Fragment","useTable","TableCollapsibleColumn","TableSelectableColumn","Th","TableLoading","useStyles","RowLayoutHeader","table","classNames","styles","unstyled","multiRowSelectionEnabled","disableRowSelection","classes","name","headers","getHeaderGroups","map","headerGroup","tr","className","headerColumns","columnHeader","header","id","RowLayoutBody","doubleClickAction","getExpandChildren","loading","keepSelection","others","cx","toggleCollapsible","el","cell","children","length","querySelector","click","rows","getRowModel","row","rowChildren","original","isSelected","getIsSelected","shouldKeepSelection","onClick","event","currentTarget","toggleSelected","onDoubleClick","rowSelected","rowUnselectable","aria-selected","data-testid","getVisibleCells","columnSizing","size","column","columnDef","minSize","maxSize","onCollapsibleCellClick","stopPropagation","getToggleSelectedHandler","td","style","width","minWidth","maxWidth","rowCollapsibleButtonCell","visible","getContext","colSpan","getAllColumns","padding","in","getIsExpanded","collapsible","px","py","RowLayout","icon","Header","Body"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/table/table-actions/TableActions.styles.ts"],"sourcesContent":["import {createStyles} from '@mantine/core';\n\nexport default createStyles((theme) => ({\n root: {},\n wrapper: {\n display: 'inline-flex',\n },\n}));\n"],"names":["createStyles","theme","root","wrapper","display"],"mappings":"AAAA,SAAQA,YAAY,QAAO,gBAAgB;AAE3C,eAAeA,aAAa,SAACC;WAAW;QACpCC,MAAM,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/table/table-actions/TableActions.styles.ts"],"sourcesContent":["import {createStyles} from '@mantine/core';\n\nexport default createStyles((theme) => ({\n root: {maxWidth: '100%'},\n wrapper: {\n display: 'inline-flex',\n },\n}));\n"],"names":["createStyles","theme","root","maxWidth","wrapper","display"],"mappings":"AAAA,SAAQA,YAAY,QAAO,gBAAgB;AAE3C,eAAeA,aAAa,SAACC;WAAW;QACpCC,MAAM;YAACC,UAAU;QAAM;QACvBC,SAAS;YACLC,SAAS;QACb;IACJ;GAAI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useRowSelection.ts"],"sourcesContent":["import {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {RowSelectionState, Table, functionalUpdate} from '@tanstack/table-core';\nimport isEqual from 'fast-deep-equal';\n\nimport {useRef} from 'react';\nimport {RowSelectionWithData, TableProps, TableState} from '../components/table/Table.types';\n\nexport const useRowSelection = <T>(\n table: Table<T>,\n {\n onRowSelectionChange,\n multiRowSelectionEnabled,\n additionalRootNodes = [],\n }: Pick<TableProps<T>, 'onRowSelectionChange' | 'multiRowSelectionEnabled' | 'additionalRootNodes'
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useRowSelection.ts"],"sourcesContent":["import {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {RowSelectionState, Table, functionalUpdate} from '@tanstack/table-core';\nimport isEqual from 'fast-deep-equal';\n\nimport {useRef} from 'react';\nimport {RowSelectionWithData, TableProps, TableState} from '../components/table/Table.types';\n\nexport const useRowSelection = <T>(\n table: Table<T>,\n {\n onRowSelectionChange,\n multiRowSelectionEnabled,\n additionalRootNodes = [],\n }: Pick<TableProps<T>, 'onRowSelectionChange' | 'multiRowSelectionEnabled' | 'additionalRootNodes'>,\n) => {\n const outsideClickRef = useRef<HTMLDivElement>();\n useClickOutside(\n () => {\n if (!multiRowSelectionEnabled) {\n clearSelection();\n }\n },\n null,\n [outsideClickRef.current, ...additionalRootNodes],\n );\n\n // Need to call this outside of the onRowSelectionChange of the table to avoid rendering conflicts if the callback queues an update in a parent component.\n // See this warning introduced in React v.16.13.0: https://legacy.reactjs.org/blog/2020/02/26/react-v16.13.0.html#warnings-for-some-updates-during-render\n useDidUpdate(() => {\n onRowSelectionChange?.(getSelectedRows());\n }, [table.getState().rowSelection]);\n\n table.setOptions((prev) => ({\n ...prev,\n onRowSelectionChange: (rowSelectionUpdater) => {\n table.setState((old) => {\n const newRowSelection = functionalUpdate(\n rowSelectionUpdater,\n old['rowSelection'],\n ) as RowSelectionWithData<T>;\n\n if (isEqual(old['rowSelection'], newRowSelection)) {\n return old;\n }\n\n const rows = table.getRowModel().rowsById;\n\n Object.keys(newRowSelection).forEach((rowId) => {\n if (newRowSelection[rowId] === true) {\n if (!rows[rowId]) {\n console.error(\n 'The table was not initialized properly, the rowSelection state should contain an object of type Record<string, TData>.',\n );\n }\n newRowSelection[rowId] = rows[rowId]?.original ?? (true as T);\n }\n });\n\n return {\n ...old,\n rowSelection: newRowSelection as RowSelectionState,\n };\n });\n },\n }));\n\n const clearSelection = () => {\n table.resetRowSelection(true);\n };\n\n const getSelectedRows = () => Object.values((table.getState() as TableState<T>).rowSelection);\n\n const getSelectedRow = () => getSelectedRows()[0] ?? null;\n\n return {clearSelection, getSelectedRow, getSelectedRows, outsideClickRef};\n};\n"],"names":["useClickOutside","useDidUpdate","functionalUpdate","isEqual","useRef","useRowSelection","table","onRowSelectionChange","multiRowSelectionEnabled","additionalRootNodes","outsideClickRef","clearSelection","current","getSelectedRows","getState","rowSelection","setOptions","prev","rowSelectionUpdater","setState","old","newRowSelection","rows","getRowModel","rowsById","Object","keys","forEach","rowId","console","error","original","resetRowSelection","values","getSelectedRow"],"mappings":";;;AAAA,SAAQA,eAAe,EAAEC,YAAY,QAAO,iBAAiB;AAC7D,SAAkCC,gBAAgB,QAAO,uBAAuB;AAChF,OAAOC,aAAa,kBAAkB;AAEtC,SAAQC,MAAM,QAAO,QAAQ;AAG7B,OAAO,IAAMC,kBAAkB,SAC3BC;QAEIC,6BAAAA,sBACAC,iCAAAA,6DACAC,qBAAAA,8DAAsB,EAAE;IAG5B,IAAMC,kBAAkBN;IACxBJ,gBACI;QACI,IAAI,CAACQ,0BAA0B;YAC3BG;QACJ;IACJ,GACA,MACA;QAACD,gBAAgBE,OAAO;KAAyB,CAAjD,OAA0B,qBAAGH;IAGjC,0JAA0J;IAC1J,yJAAyJ;IACzJR,aAAa;YACTM;SAAAA,wBAAAA,kCAAAA,4CAAAA,sBAAuBM;IAC3B,GAAG;QAACP,MAAMQ,QAAQ,GAAGC,YAAY;KAAC;IAElCT,MAAMU,UAAU,CAAC,SAACC;eAAU,wCACrBA;YACHV,sBAAsB,SAACW;gBACnBZ,MAAMa,QAAQ,CAAC,SAACC;oBACZ,IAAMC,kBAAkBnB,iBACpBgB,qBACAE,GAAG,CAAC,eAAe;oBAGvB,IAAIjB,QAAQiB,GAAG,CAAC,eAAe,EAAEC,kBAAkB;wBAC/C,OAAOD;oBACX;oBAEA,IAAME,OAAOhB,MAAMiB,WAAW,GAAGC,QAAQ;oBAEzCC,OAAOC,IAAI,CAACL,iBAAiBM,OAAO,CAAC,SAACC;wBAClC,IAAIP,eAAe,CAACO,MAAM,KAAK,MAAM;gCAMRN;4BALzB,IAAI,CAACA,IAAI,CAACM,MAAM,EAAE;gCACdC,QAAQC,KAAK,CACT;4BAER;gCACyBR;4BAAzBD,eAAe,CAACO,MAAM,GAAGN,CAAAA,wBAAAA,cAAAA,IAAI,CAACM,MAAM,cAAXN,kCAAAA,YAAaS,QAAQ,cAArBT,kCAAAA,uBAA0B;wBACvD;oBACJ;oBAEA,OAAO,wCACAF;wBACHL,cAAcM;;gBAEtB;YACJ;;;IAGJ,IAAMV,iBAAiB;QACnBL,MAAM0B,iBAAiB,CAAC;IAC5B;IAEA,IAAMnB,kBAAkB;eAAMY,OAAOQ,MAAM,CAAC,AAAC3B,MAAMQ,QAAQ,GAAqBC,YAAY;;QAE/DF;IAA7B,IAAMqB,iBAAiB;eAAMrB,CAAAA,oBAAAA,iBAAiB,CAAC,EAAE,cAApBA,+BAAAA,oBAAwB;;IAErD,OAAO;QAACF,gBAAAA;QAAgBuB,gBAAAA;QAAgBrB,iBAAAA;QAAiBH,iBAAAA;IAAe;AAC5E,EAAE"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export * from './components';
|
|
|
10
10
|
export * from '@mantine/form';
|
|
11
11
|
export { type NotificationProps } from '@mantine/notifications';
|
|
12
12
|
export { Pagination } from '@mantine/core';
|
|
13
|
-
export { Header, type HeaderProps, Table, type TableProps, type TableState, type InitialTableState, ActionIcon, type ActionIconProps, Button, type ButtonProps, Menu, type MenuItemProps, CopyToClipboard, type CopyToClipboardProps, } from './components';
|
|
13
|
+
export { BrowserPreview, Header, type HeaderProps, Table, type TableProps, type TableState, type InitialTableState, ActionIcon, type ActionIconProps, Button, type ButtonProps, Menu, type MenuItemProps, CopyToClipboard, type CopyToClipboardProps, } from './components';
|
|
14
14
|
export { useForm, createFormContext } from './form';
|
|
15
15
|
export * from './theme';
|
|
16
16
|
declare module '@mantine/core' {
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAElD,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC/D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EACH,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,eAAe,EACpB,MAAM,EACN,KAAK,WAAW,EAChB,IAAI,EACJ,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,oBAAoB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,OAAO,EAAE,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAElD,cAAc,SAAS,CAAC;AAExB,OAAO,QAAQ,eAAe,CAAC;IAC3B,UAAiB,0BAA0B;QAEvC,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KAChF;CACJ"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAElD,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC/D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAEzC,OAAO,EACH,cAAc,EACd,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,eAAe,EACpB,MAAM,EACN,KAAK,WAAW,EAChB,IAAI,EACJ,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,oBAAoB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,OAAO,EAAE,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAElD,cAAc,SAAS,CAAC;AAExB,OAAO,QAAQ,eAAe,CAAC;IAC3B,UAAiB,0BAA0B;QAEvC,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KAChF;CACJ"}
|
package/dist/esm/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export * from "./components";
|
|
|
7
7
|
export * from "@mantine/form";
|
|
8
8
|
export { Pagination } from "@mantine/core";
|
|
9
9
|
// explicitly overriding mantine components
|
|
10
|
-
export { Header, Table, ActionIcon, Button, Menu, CopyToClipboard } from "./components";
|
|
10
|
+
export { BrowserPreview, Header, Table, ActionIcon, Button, Menu, CopyToClipboard } from "./components";
|
|
11
11
|
export { useForm, createFormContext } from "./form";
|
|
12
12
|
export * from "./theme";
|
|
13
13
|
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {Tuple} from '@mantine/core';\n\nimport {PlasmaColors} from './theme/PlasmaColors';\n\nexport * from '@mantine/notifications';\nexport * from '@mantine/carousel';\nexport * from '@mantine/core';\nexport type {FormValidateInput} from '@mantine/form/lib/types';\nexport * from '@mantine/hooks';\nexport * from '@tanstack/table-core';\nexport * from './components';\nexport * from '@mantine/form';\nexport {type NotificationProps} from '@mantine/notifications';\nexport {Pagination} from '@mantine/core';\n// explicitly overriding mantine components\nexport {\n Header,\n type HeaderProps,\n Table,\n type TableProps,\n type TableState,\n type InitialTableState,\n ActionIcon,\n type ActionIconProps,\n Button,\n type ButtonProps,\n Menu,\n type MenuItemProps,\n CopyToClipboard,\n type CopyToClipboardProps,\n} from './components';\nexport {useForm, createFormContext} from './form';\n\nexport * from './theme';\n\ndeclare module '@mantine/core' {\n export interface MantineThemeColorsOverride {\n // eslint-disable-next-line @typescript-eslint/ban-types\n colors: Record<keyof typeof PlasmaColors | (string & {}), Tuple<string, 10>>;\n }\n}\n"],"names":["Pagination","Header","Table","ActionIcon","Button","Menu","CopyToClipboard","useForm","createFormContext"],"mappings":"AAIA,cAAc,yBAAyB;AACvC,cAAc,oBAAoB;AAClC,cAAc,gBAAgB;AAE9B,cAAc,iBAAiB;AAC/B,cAAc,uBAAuB;AACrC,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAE9B,SAAQA,UAAU,QAAO,gBAAgB;AACzC,2CAA2C;AAC3C,SACIC,MAAM,EAENC,KAAK,EAILC,UAAU,EAEVC,MAAM,EAENC,IAAI,EAEJC,eAAe,QAEZ,eAAe;AACtB,SAAQC,OAAO,EAAEC,iBAAiB,QAAO,SAAS;AAElD,cAAc,UAAU"}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {Tuple} from '@mantine/core';\n\nimport {PlasmaColors} from './theme/PlasmaColors';\n\nexport * from '@mantine/notifications';\nexport * from '@mantine/carousel';\nexport * from '@mantine/core';\nexport type {FormValidateInput} from '@mantine/form/lib/types';\nexport * from '@mantine/hooks';\nexport * from '@tanstack/table-core';\nexport * from './components';\nexport * from '@mantine/form';\nexport {type NotificationProps} from '@mantine/notifications';\nexport {Pagination} from '@mantine/core';\n// explicitly overriding mantine components\nexport {\n BrowserPreview,\n Header,\n type HeaderProps,\n Table,\n type TableProps,\n type TableState,\n type InitialTableState,\n ActionIcon,\n type ActionIconProps,\n Button,\n type ButtonProps,\n Menu,\n type MenuItemProps,\n CopyToClipboard,\n type CopyToClipboardProps,\n} from './components';\nexport {useForm, createFormContext} from './form';\n\nexport * from './theme';\n\ndeclare module '@mantine/core' {\n export interface MantineThemeColorsOverride {\n // eslint-disable-next-line @typescript-eslint/ban-types\n colors: Record<keyof typeof PlasmaColors | (string & {}), Tuple<string, 10>>;\n }\n}\n"],"names":["Pagination","BrowserPreview","Header","Table","ActionIcon","Button","Menu","CopyToClipboard","useForm","createFormContext"],"mappings":"AAIA,cAAc,yBAAyB;AACvC,cAAc,oBAAoB;AAClC,cAAc,gBAAgB;AAE9B,cAAc,iBAAiB;AAC/B,cAAc,uBAAuB;AACrC,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAE9B,SAAQA,UAAU,QAAO,gBAAgB;AACzC,2CAA2C;AAC3C,SACIC,cAAc,EACdC,MAAM,EAENC,KAAK,EAILC,UAAU,EAEVC,MAAM,EAENC,IAAI,EAEJC,eAAe,QAEZ,eAAe;AACtB,SAAQC,OAAO,EAAEC,iBAAiB,QAAO,SAAS;AAElD,cAAc,UAAU"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {createStyles} from '@mantine/core';
|
|
2
|
+
|
|
3
|
+
export default createStyles((theme) => ({
|
|
4
|
+
root: {
|
|
5
|
+
boxShadow: theme.shadows.md,
|
|
6
|
+
borderRadius: theme.defaultRadius,
|
|
7
|
+
border: '1px solid',
|
|
8
|
+
borderColor: theme.colors.gray[3],
|
|
9
|
+
flex: 1,
|
|
10
|
+
},
|
|
11
|
+
header: {boxShadow: theme.shadows.xs, borderRadius: `${theme.defaultRadius}px ${theme.defaultRadius}px 0 0`},
|
|
12
|
+
content: {overflow: 'auto', flexGrow: 1},
|
|
13
|
+
infoIcon: {color: theme.colors.gray[5]},
|
|
14
|
+
}));
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {InfoSize16Px} from '@coveord/plasma-react-icons';
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
ColorSwatch,
|
|
5
|
+
DefaultProps,
|
|
6
|
+
Flex,
|
|
7
|
+
Group,
|
|
8
|
+
Selectors,
|
|
9
|
+
Stack,
|
|
10
|
+
Text,
|
|
11
|
+
Title,
|
|
12
|
+
Tooltip,
|
|
13
|
+
useMantineTheme,
|
|
14
|
+
} from '@mantine/core';
|
|
15
|
+
import {PropsWithChildren} from 'react';
|
|
16
|
+
import useStyles from './BrowserPreview.styles';
|
|
17
|
+
|
|
18
|
+
export interface BrowserPreviewProps extends DefaultProps<Selectors<typeof useStyles>> {
|
|
19
|
+
/**
|
|
20
|
+
* Text to display in a tooltip in the header.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
headerTooltip?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Custom title to be displayed at the center of the header.
|
|
26
|
+
*/
|
|
27
|
+
title?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const BrowserPreview = ({
|
|
31
|
+
children,
|
|
32
|
+
headerTooltip,
|
|
33
|
+
title,
|
|
34
|
+
// Style props
|
|
35
|
+
classNames,
|
|
36
|
+
className,
|
|
37
|
+
styles,
|
|
38
|
+
unstyled,
|
|
39
|
+
...others
|
|
40
|
+
}: PropsWithChildren<BrowserPreviewProps>) => {
|
|
41
|
+
const theme = useMantineTheme();
|
|
42
|
+
const {classes, cx} = useStyles(null, {classNames, name: 'BrowserPreview', styles, unstyled});
|
|
43
|
+
return (
|
|
44
|
+
<Stack className={cx(classes.root, className)} spacing={0} maw={544} mih={0} {...others}>
|
|
45
|
+
<Box>
|
|
46
|
+
<Group className={classes.header} position="apart" px="sm" py="xs" bg="gray.1" noWrap>
|
|
47
|
+
<Group spacing="xs" noWrap>
|
|
48
|
+
<Title color="gray.6" order={4}>
|
|
49
|
+
Preview
|
|
50
|
+
</Title>
|
|
51
|
+
{!!headerTooltip && (
|
|
52
|
+
<Tooltip label={headerTooltip} position="right" maw={400}>
|
|
53
|
+
<InfoSize16Px height={16} className={classes.infoIcon} />
|
|
54
|
+
</Tooltip>
|
|
55
|
+
)}
|
|
56
|
+
</Group>
|
|
57
|
+
<Text lineClamp={1} color="gray.6">
|
|
58
|
+
{title}
|
|
59
|
+
</Text>
|
|
60
|
+
<Group spacing="xs" noWrap>
|
|
61
|
+
<ColorSwatch color={theme.colors.gray[3]} />
|
|
62
|
+
<ColorSwatch color={theme.colors.gray[3]} />
|
|
63
|
+
<ColorSwatch color={theme.colors.gray[3]} />
|
|
64
|
+
</Group>
|
|
65
|
+
</Group>
|
|
66
|
+
</Box>
|
|
67
|
+
<Flex className={classes.content} p="xl" direction="column">
|
|
68
|
+
{children}
|
|
69
|
+
</Flex>
|
|
70
|
+
</Stack>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import userEvent from '@testing-library/user-event';
|
|
2
|
+
import {render, screen, waitFor} from '@testing-library/react';
|
|
3
|
+
import {BrowserPreview} from '../BrowserPreview';
|
|
4
|
+
|
|
5
|
+
describe('BrowserPreview', () => {
|
|
6
|
+
it('shows no tooltip when none specified', async () => {
|
|
7
|
+
render(<BrowserPreview />);
|
|
8
|
+
|
|
9
|
+
expect(screen.queryByRole('img', {name: /info/i})).not.toBeInTheDocument();
|
|
10
|
+
});
|
|
11
|
+
it('renders the specified text as the header tooltip content', async () => {
|
|
12
|
+
const user = userEvent.setup();
|
|
13
|
+
const headerTooltip = 'This is a custom description.';
|
|
14
|
+
|
|
15
|
+
render(<BrowserPreview headerTooltip={headerTooltip} />);
|
|
16
|
+
|
|
17
|
+
await waitFor(() => screen.findByRole('img', {name: /info/i}));
|
|
18
|
+
await user.hover(screen.getByRole('img', {name: /info/i}));
|
|
19
|
+
|
|
20
|
+
expect(await screen.findByText(headerTooltip)).toBeVisible();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('renders the specific title when provided', () => {
|
|
24
|
+
const headerTitle = 'Custom title.';
|
|
25
|
+
render(<BrowserPreview title={headerTitle} />);
|
|
26
|
+
|
|
27
|
+
expect(screen.getByText(/custom title/i)).toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('renders the children', () => {
|
|
31
|
+
render(<BrowserPreview>This is awesome content</BrowserPreview>);
|
|
32
|
+
|
|
33
|
+
expect(screen.getByText(/this is awesome content/i)).toBeInTheDocument();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './BrowserPreview';
|
package/src/components/index.ts
CHANGED
|
@@ -49,6 +49,9 @@ export const Table: TableType = <T,>({
|
|
|
49
49
|
disableRowSelection,
|
|
50
50
|
onRowSelectionChange,
|
|
51
51
|
additionalRootNodes,
|
|
52
|
+
classNames,
|
|
53
|
+
styles,
|
|
54
|
+
unstyled,
|
|
52
55
|
options = {},
|
|
53
56
|
}: TableProps<T>) => {
|
|
54
57
|
const convertedChildren = Children.toArray(children) as ReactElement[];
|
|
@@ -65,7 +68,7 @@ export const Table: TableType = <T,>({
|
|
|
65
68
|
layout: initialState?.layout ?? layouts[0].name,
|
|
66
69
|
},
|
|
67
70
|
});
|
|
68
|
-
const {classes} = useStyles();
|
|
71
|
+
const {classes} = useStyles(null, {name: 'PlasmaTable', classNames, styles, unstyled});
|
|
69
72
|
|
|
70
73
|
const table = useReactTable({
|
|
71
74
|
initialState: defaultsDeep(initialStateWithoutForm, {
|
|
@@ -184,7 +187,7 @@ export const Table: TableType = <T,>({
|
|
|
184
187
|
loading={loading}
|
|
185
188
|
/>
|
|
186
189
|
</thead>
|
|
187
|
-
<tbody>
|
|
190
|
+
<tbody className={classes.body}>
|
|
188
191
|
{hasRows ? (
|
|
189
192
|
<Layout.Body
|
|
190
193
|
table={table}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {Icon} from '@coveord/plasma-react-icons';
|
|
2
|
+
import {DefaultProps, Selectors} from '@mantine/core';
|
|
2
3
|
import {UseFormReturnType} from '@mantine/form';
|
|
3
4
|
import {
|
|
4
5
|
ColumnDef,
|
|
@@ -24,6 +25,7 @@ import {TableLoading} from './table-loading/TableLoading';
|
|
|
24
25
|
import {TablePagination} from './table-pagination/TablePagination';
|
|
25
26
|
import {TablePerPage} from './table-per-page/TablePerPage';
|
|
26
27
|
import {TablePredicate} from './table-predicate/TablePredicate';
|
|
28
|
+
import useStyles from './Table.styles';
|
|
27
29
|
|
|
28
30
|
export type RowSelectionWithData<TData> = Record<string, TData>;
|
|
29
31
|
export interface RowSelectionState<TData> {
|
|
@@ -143,7 +145,9 @@ export type TableContextType<TData> = {
|
|
|
143
145
|
layouts: TableLayout[];
|
|
144
146
|
};
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
type TableStylesNames = Selectors<typeof useStyles>;
|
|
149
|
+
|
|
150
|
+
export interface TableProps<T> extends DefaultProps<TableStylesNames> {
|
|
147
151
|
/**
|
|
148
152
|
* Data to display in the table
|
|
149
153
|
*/
|
|
@@ -12,9 +12,12 @@ import {TableLoading} from '../table-loading/TableLoading';
|
|
|
12
12
|
import useStyles from './RowLayout.styles';
|
|
13
13
|
import {TableLayoutProps} from './RowLayout.types'; // TODO https://coveord.atlassian.net/browse/ADUI-9182
|
|
14
14
|
|
|
15
|
-
const RowLayoutHeader = <T,>({table}: TableLayoutProps<T>) => {
|
|
15
|
+
const RowLayoutHeader = <T,>({table, classNames, styles, unstyled}: TableLayoutProps<T>) => {
|
|
16
16
|
const {multiRowSelectionEnabled, disableRowSelection} = useTable();
|
|
17
|
-
const {classes} = useStyles(
|
|
17
|
+
const {classes} = useStyles(
|
|
18
|
+
{disableRowSelection, multiRowSelectionEnabled},
|
|
19
|
+
{name: 'RowLayout', classNames, styles, unstyled},
|
|
20
|
+
);
|
|
18
21
|
const headers = table.getHeaderGroups().map((headerGroup) => (
|
|
19
22
|
<tr key={headerGroup.id} className={classes.headerColumns}>
|
|
20
23
|
{headerGroup.headers.map((columnHeader) => (
|
|
@@ -11,7 +11,7 @@ export const useRowSelection = <T>(
|
|
|
11
11
|
onRowSelectionChange,
|
|
12
12
|
multiRowSelectionEnabled,
|
|
13
13
|
additionalRootNodes = [],
|
|
14
|
-
}: Pick<TableProps<T>, 'onRowSelectionChange' | 'multiRowSelectionEnabled' | 'additionalRootNodes'
|
|
14
|
+
}: Pick<TableProps<T>, 'onRowSelectionChange' | 'multiRowSelectionEnabled' | 'additionalRootNodes'>,
|
|
15
15
|
) => {
|
|
16
16
|
const outsideClickRef = useRef<HTMLDivElement>();
|
|
17
17
|
useClickOutside(
|
|
@@ -21,7 +21,7 @@ export const useRowSelection = <T>(
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
null,
|
|
24
|
-
[outsideClickRef.current, ...additionalRootNodes]
|
|
24
|
+
[outsideClickRef.current, ...additionalRootNodes],
|
|
25
25
|
);
|
|
26
26
|
|
|
27
27
|
// Need to call this outside of the onRowSelectionChange of the table to avoid rendering conflicts if the callback queues an update in a parent component.
|
|
@@ -36,7 +36,7 @@ export const useRowSelection = <T>(
|
|
|
36
36
|
table.setState((old) => {
|
|
37
37
|
const newRowSelection = functionalUpdate(
|
|
38
38
|
rowSelectionUpdater,
|
|
39
|
-
old['rowSelection']
|
|
39
|
+
old['rowSelection'],
|
|
40
40
|
) as RowSelectionWithData<T>;
|
|
41
41
|
|
|
42
42
|
if (isEqual(old['rowSelection'], newRowSelection)) {
|
|
@@ -49,7 +49,7 @@ export const useRowSelection = <T>(
|
|
|
49
49
|
if (newRowSelection[rowId] === true) {
|
|
50
50
|
if (!rows[rowId]) {
|
|
51
51
|
console.error(
|
|
52
|
-
'The table was not initialized properly, the rowSelection state should contain an object of type Record<string, TData>.'
|
|
52
|
+
'The table was not initialized properly, the rowSelection state should contain an object of type Record<string, TData>.',
|
|
53
53
|
);
|
|
54
54
|
}
|
|
55
55
|
newRowSelection[rowId] = rows[rowId]?.original ?? (true as T);
|