@coveord/plasma-mantine 48.17.0 → 48.17.2
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 +7 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/sticky-footer/StickyFooter.js +13 -11
- package/dist/cjs/components/sticky-footer/StickyFooter.js.map +1 -1
- package/dist/cjs/components/table/Table.js +7 -4
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/definitions/components/sticky-footer/StickyFooter.d.ts.map +1 -1
- package/dist/definitions/components/table/Table.d.ts.map +1 -1
- package/dist/esm/components/sticky-footer/StickyFooter.js +15 -13
- package/dist/esm/components/sticky-footer/StickyFooter.js.map +1 -1
- package/dist/esm/components/table/Table.js +7 -4
- package/dist/esm/components/table/Table.js.map +1 -1
- package/package.json +1 -1
- package/src/components/sticky-footer/StickyFooter.tsx +9 -7
- package/src/components/table/Table.tsx +7 -4
|
@@ -19,7 +19,7 @@ var useStyles = (0, _core.createStyles)(function() {
|
|
|
19
19
|
position: "sticky",
|
|
20
20
|
bottom: 0,
|
|
21
21
|
zIndex: 1,
|
|
22
|
-
|
|
22
|
+
backgroundColor: "white"
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
});
|
|
@@ -29,20 +29,22 @@ var StickyFooter = function(_param) {
|
|
|
29
29
|
"children"
|
|
30
30
|
]);
|
|
31
31
|
var classes = useStyles().classes;
|
|
32
|
-
return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(
|
|
33
|
-
className: classes.footer,
|
|
32
|
+
return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
34
33
|
children: [
|
|
35
34
|
borderTop ? /*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.Divider, {
|
|
36
35
|
size: "xs"
|
|
37
36
|
}) : null,
|
|
38
|
-
/*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
/*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.Box, {
|
|
38
|
+
className: classes.footer,
|
|
39
|
+
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.Group, _objectSpreadProps(_objectSpread({
|
|
40
|
+
position: "right",
|
|
41
|
+
spacing: "xs",
|
|
42
|
+
py: "md",
|
|
43
|
+
px: "xl"
|
|
44
|
+
}, others), {
|
|
45
|
+
children: children
|
|
46
|
+
}))
|
|
47
|
+
})
|
|
46
48
|
]
|
|
47
49
|
});
|
|
48
50
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"sourcesContent":["import {createStyles, DefaultProps, Divider, Group
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"sourcesContent":["import {Box, createStyles, DefaultProps, Divider, Group} from '@mantine/core';\nimport {FunctionComponent, PropsWithChildren} from 'react';\n\nexport interface StickyFooterProps extends DefaultProps {\n /**\n * Whether a border is render on top of the footer\n */\n borderTop?: boolean;\n}\n\nconst useStyles = createStyles(() => ({\n footer: {\n position: 'sticky',\n bottom: 0,\n zIndex: 1,\n backgroundColor: 'white',\n },\n}));\n\nexport const StickyFooter: FunctionComponent<PropsWithChildren<StickyFooterProps>> = ({\n borderTop,\n children,\n ...others\n}) => {\n const {classes} = useStyles();\n\n return (\n <>\n {borderTop ? <Divider size=\"xs\" /> : null}\n <Box className={classes.footer}>\n <Group position=\"right\" spacing=\"xs\" py=\"md\" px=\"xl\" {...others}>\n {children}\n </Group>\n </Box>\n </>\n );\n};\n"],"names":["StickyFooter","useStyles","createStyles","footer","position","bottom","zIndex","backgroundColor","borderTop","children","others","classes","Divider","size","Box","className","Group","spacing","py","px"],"mappings":"AAAA;;;;+BAmBaA;;;eAAAA;;;;;;;oBAnBiD;AAU9D,IAAMC,YAAYC,IAAAA,kBAAY,EAAC;WAAO;QAClCC,QAAQ;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,iBAAiB;QACrB;IACJ;;AAEO,IAAMP,eAAwE,iBAI/E;QAHFQ,mBAAAA,WACAC,kBAAAA,UACGC;QAFHF;QACAC;;IAGA,IAAM,AAACE,UAAWV,YAAXU;IAEP,qBACI;;YACKH,0BAAY,qBAACI,aAAO;gBAACC,MAAK;iBAAU,IAAI;0BACzC,qBAACC,SAAG;gBAACC,WAAWJ,QAAQR,MAAM;0BAC1B,cAAA,qBAACa,WAAK;oBAACZ,UAAS;oBAAQa,SAAQ;oBAAKC,IAAG;oBAAKC,IAAG;mBAAST;8BACpDD;;;;;AAKrB"}
|
|
@@ -37,8 +37,8 @@ var useStyles = (0, _core.createStyles)(function(theme, param, getRef) {
|
|
|
37
37
|
return {
|
|
38
38
|
table: {
|
|
39
39
|
width: "100%",
|
|
40
|
-
"& td:first-
|
|
41
|
-
paddingLeft: theme.spacing.
|
|
40
|
+
"& td:first-of-type": {
|
|
41
|
+
paddingLeft: theme.spacing.xl
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
header: {
|
|
@@ -47,8 +47,11 @@ var useStyles = (0, _core.createStyles)(function(theme, param, getRef) {
|
|
|
47
47
|
backgroundColor: theme.colorScheme === "dark" ? theme.black : theme.white,
|
|
48
48
|
transition: "box-shadow 150ms ease",
|
|
49
49
|
zIndex: 12,
|
|
50
|
-
"& tr th:first-
|
|
51
|
-
paddingLeft: theme.spacing.
|
|
50
|
+
"& tr th:first-of-type button": {
|
|
51
|
+
paddingLeft: theme.spacing.xl
|
|
52
|
+
},
|
|
53
|
+
"& tr th:first-of-type div": {
|
|
54
|
+
paddingLeft: theme.spacing.xl
|
|
52
55
|
},
|
|
53
56
|
"&::after": {
|
|
54
57
|
content: '""',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, createStyles, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {InitialTableState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport {TableActions} from './TableActions';\nimport {TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {Th} from './Th';\n\nconst useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}, getRef) => ({\n table: {\n width: '100%',\n '& td:first-child': {\n paddingLeft: theme.spacing.md,\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n '& tr th:first-child div': {\n paddingLeft: theme.spacing.md,\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n ref: getRef('rowSelected'),\n },\n\n row: {\n [`&:hover, &.${getRef('rowSelected')}`]: {\n backgroundColor:\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0],\n },\n },\n}));\n\ninterface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n DateRangePicker: typeof TableDateRangePicker;\n}\n\nexport const Table: TableType = <T,>({\n data,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n\n const {cx, classes} = useStyles({hasHeader: !!header});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: true,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n\n const triggerChange = () => onChange?.({...state, ...form.values});\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n table.resetRowSelection(true);\n });\n\n useDidUpdate(() => {\n triggerChange();\n clearSelection();\n }, [state.globalFilter, state.sorting, state.pagination, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const clearSelection = () => {\n setState((prevState) => ({...prevState, rowSelection: {}}));\n };\n\n const getSelectedRow = useCallback(\n () => table.getSelectedRowModel().flatRows?.[0]?.original ?? null,\n [state.rowSelection]\n );\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const toggleRowSelection = (row: Row<T>) => {\n table.setRowSelection(() => ({[row.id]: !row.getIsSelected()}));\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => toggleRowSelection(row)}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td key={cell.id} style={{width}}>\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{padding: 0, borderBottomColor: row.getIsExpanded() ? undefined : 'transparent'}}\n >\n <Collapse in={row.getIsExpanded()} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n setState,\n clearFilters,\n getSelectedRow,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n }}\n >\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Table","useStyles","createStyles","theme","getRef","hasHeader","table","width","paddingLeft","spacing","md","header","position","top","backgroundColor","colorScheme","black","white","transition","zIndex","content","left","right","bottom","borderBottom","colors","gray","rowSelected","ref","row","fn","rgba","primaryColor","data","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","convertedChildren","Children","toArray","find","child","type","TableHeader","footer","TableFooter","predicates","dateRange","initialStateWithoutForm","form","useForm","initialValues","cx","classes","useReactTable","defaultsDeep","pagination","pageSize","TablePerPage","DEFAULT_SIZE","getCoreRowModel","manualPagination","getRowCanExpand","original","useState","state","setState","setOptions","prev","onStateChange","triggerChange","values","useEffect","outsideClickRef","useClickOutside","resetRowSelection","useDidUpdate","clearSelection","globalFilter","sorting","clearFilters","useCallback","setFieldValue","prevState","rowSelection","getSelectedRow","getSelectedRowModel","flatRows","Center","sx","flexGrow","Loader","toggleRowSelection","setRowSelection","id","getIsSelected","rows","getRowModel","map","rowChildren","Fragment","tr","onClick","onDoubleClick","className","getVisibleCells","cell","size","column","getSize","defaultColumnSizing","undefined","td","style","Skeleton","visible","borderRadius","flexRender","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","Collapse","in","px","py","Box","TableContext","Provider","value","containerRef","MantineTable","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","Th","tbody","Actions","TableActions","Filter","TableFilter","Footer","Header","Pagination","TablePagination","Predicate","TablePredicate","PerPage","CollapsibleColumn","TableCollapsibleColumn","DateRangePicker","TableDateRangePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, createStyles, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {InitialTableState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport {TableActions} from './TableActions';\nimport {TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {Th} from './Th';\n\nconst useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}, getRef) => ({\n table: {\n width: '100%',\n '& td:first-of-type': {\n paddingLeft: theme.spacing.xl,\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n '& tr th:first-of-type button': {\n paddingLeft: theme.spacing.xl,\n },\n '& tr th:first-of-type div': {\n paddingLeft: theme.spacing.xl,\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n ref: getRef('rowSelected'),\n },\n\n row: {\n [`&:hover, &.${getRef('rowSelected')}`]: {\n backgroundColor:\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0],\n },\n },\n}));\n\ninterface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n DateRangePicker: typeof TableDateRangePicker;\n}\n\nexport const Table: TableType = <T,>({\n data,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n\n const {cx, classes} = useStyles({hasHeader: !!header});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: true,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n\n const triggerChange = () => onChange?.({...state, ...form.values});\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n table.resetRowSelection(true);\n });\n\n useDidUpdate(() => {\n triggerChange();\n clearSelection();\n }, [state.globalFilter, state.sorting, state.pagination, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const clearSelection = () => {\n setState((prevState) => ({...prevState, rowSelection: {}}));\n };\n\n const getSelectedRow = useCallback(\n () => table.getSelectedRowModel().flatRows?.[0]?.original ?? null,\n [state.rowSelection]\n );\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const toggleRowSelection = (row: Row<T>) => {\n table.setRowSelection(() => ({[row.id]: !row.getIsSelected()}));\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => toggleRowSelection(row)}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td key={cell.id} style={{width}}>\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{padding: 0, borderBottomColor: row.getIsExpanded() ? undefined : 'transparent'}}\n >\n <Collapse in={row.getIsExpanded()} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n setState,\n clearFilters,\n getSelectedRow,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n }}\n >\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Table","useStyles","createStyles","theme","getRef","hasHeader","table","width","paddingLeft","spacing","xl","header","position","top","backgroundColor","colorScheme","black","white","transition","zIndex","content","left","right","bottom","borderBottom","colors","gray","rowSelected","ref","row","fn","rgba","primaryColor","data","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","convertedChildren","Children","toArray","find","child","type","TableHeader","footer","TableFooter","predicates","dateRange","initialStateWithoutForm","form","useForm","initialValues","cx","classes","useReactTable","defaultsDeep","pagination","pageSize","TablePerPage","DEFAULT_SIZE","getCoreRowModel","manualPagination","getRowCanExpand","original","useState","state","setState","setOptions","prev","onStateChange","triggerChange","values","useEffect","outsideClickRef","useClickOutside","resetRowSelection","useDidUpdate","clearSelection","globalFilter","sorting","clearFilters","useCallback","setFieldValue","prevState","rowSelection","getSelectedRow","getSelectedRowModel","flatRows","Center","sx","flexGrow","Loader","toggleRowSelection","setRowSelection","id","getIsSelected","rows","getRowModel","map","rowChildren","Fragment","tr","onClick","onDoubleClick","className","getVisibleCells","cell","size","column","getSize","defaultColumnSizing","undefined","td","style","Skeleton","visible","borderRadius","flexRender","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","Collapse","in","px","py","Box","TableContext","Provider","value","containerRef","MantineTable","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","Th","tbody","Actions","TableActions","Filter","TableFilter","Footer","Header","Pagination","TablePagination","Predicate","TablePredicate","PerPage","CollapsibleColumn","TableCollapsibleColumn","DateRangePicker","TableDateRangePicker"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyFooter.d.ts","sourceRoot":"","sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"StickyFooter.d.ts","sourceRoot":"","sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAiB,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACnD;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAWD,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAiBhF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/Table.tsx"],"names":[],"mappings":"AAGA,OAAO,EACH,SAAS,EAOZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAqB,YAAY,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAEpG,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAgB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/components/table/Table.tsx"],"names":[],"mappings":"AAGA,OAAO,EACH,SAAS,EAOZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAqB,YAAY,EAAE,SAAS,EAAmC,MAAM,OAAO,CAAC;AAEpG,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAgB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAgDhD,UAAU,UAAU,CAAC,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IACV;;;;OAIG;IACH,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,CAAC;IAC5C;;OAEG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC1C;AAED,UAAU,SAAS;IACf,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;IACxC,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,UAAU,EAAE,OAAO,eAAe,CAAC;IACnC,OAAO,EAAE,OAAO,YAAY,CAAC;IAC7B,SAAS,EAAE,OAAO,cAAc,CAAC;IACjC,iBAAiB,EAAE,OAAO,sBAAsB,CAAC;IACjD,eAAe,EAAE,OAAO,oBAAoB,CAAC;CAChD;AAED,eAAO,MAAM,KAAK,EAAE,SA4JnB,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import _object_spread from "@swc/helpers/src/_object_spread.mjs";
|
|
2
2
|
import _object_spread_props from "@swc/helpers/src/_object_spread_props.mjs";
|
|
3
3
|
import _object_without_properties from "@swc/helpers/src/_object_without_properties.mjs";
|
|
4
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { createStyles, Divider, Group
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
5
|
+
import { Box, createStyles, Divider, Group } from "@mantine/core";
|
|
6
6
|
var useStyles = createStyles(function() {
|
|
7
7
|
return {
|
|
8
8
|
footer: {
|
|
9
9
|
position: "sticky",
|
|
10
10
|
bottom: 0,
|
|
11
11
|
zIndex: 1,
|
|
12
|
-
|
|
12
|
+
backgroundColor: "white"
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
});
|
|
@@ -19,20 +19,22 @@ export var StickyFooter = function(_param) {
|
|
|
19
19
|
"children"
|
|
20
20
|
]);
|
|
21
21
|
var classes = useStyles().classes;
|
|
22
|
-
return /*#__PURE__*/ _jsxs(
|
|
23
|
-
className: classes.footer,
|
|
22
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
24
23
|
children: [
|
|
25
24
|
borderTop ? /*#__PURE__*/ _jsx(Divider, {
|
|
26
25
|
size: "xs"
|
|
27
26
|
}) : null,
|
|
28
|
-
/*#__PURE__*/ _jsx(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
/*#__PURE__*/ _jsx(Box, {
|
|
28
|
+
className: classes.footer,
|
|
29
|
+
children: /*#__PURE__*/ _jsx(Group, _object_spread_props(_object_spread({
|
|
30
|
+
position: "right",
|
|
31
|
+
spacing: "xs",
|
|
32
|
+
py: "md",
|
|
33
|
+
px: "xl"
|
|
34
|
+
}, others), {
|
|
35
|
+
children: children
|
|
36
|
+
}))
|
|
37
|
+
})
|
|
36
38
|
]
|
|
37
39
|
});
|
|
38
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"sourcesContent":["import {createStyles, DefaultProps, Divider, Group
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/sticky-footer/StickyFooter.tsx"],"sourcesContent":["import {Box, createStyles, DefaultProps, Divider, Group} from '@mantine/core';\nimport {FunctionComponent, PropsWithChildren} from 'react';\n\nexport interface StickyFooterProps extends DefaultProps {\n /**\n * Whether a border is render on top of the footer\n */\n borderTop?: boolean;\n}\n\nconst useStyles = createStyles(() => ({\n footer: {\n position: 'sticky',\n bottom: 0,\n zIndex: 1,\n backgroundColor: 'white',\n },\n}));\n\nexport const StickyFooter: FunctionComponent<PropsWithChildren<StickyFooterProps>> = ({\n borderTop,\n children,\n ...others\n}) => {\n const {classes} = useStyles();\n\n return (\n <>\n {borderTop ? <Divider size=\"xs\" /> : null}\n <Box className={classes.footer}>\n <Group position=\"right\" spacing=\"xs\" py=\"md\" px=\"xl\" {...others}>\n {children}\n </Group>\n </Box>\n </>\n );\n};\n"],"names":["Box","createStyles","Divider","Group","useStyles","footer","position","bottom","zIndex","backgroundColor","StickyFooter","borderTop","children","others","classes","size","className","spacing","py","px"],"mappings":"AAAA;;;;AAAA,SAAQA,GAAG,EAAEC,YAAY,EAAgBC,OAAO,EAAEC,KAAK,QAAO,gBAAgB;AAU9E,IAAMC,YAAYH,aAAa;WAAO;QAClCI,QAAQ;YACJC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,iBAAiB;QACrB;IACJ;;AAEA,OAAO,IAAMC,eAAwE,iBAI/E;QAHFC,mBAAAA,WACAC,kBAAAA,UACGC;QAFHF;QACAC;;IAGA,IAAM,AAACE,UAAWV,YAAXU;IAEP,qBACI;;YACKH,0BAAY,KAACT;gBAAQa,MAAK;iBAAU,IAAI;0BACzC,KAACf;gBAAIgB,WAAWF,QAAQT,MAAM;0BAC1B,cAAA,KAACF;oBAAMG,UAAS;oBAAQW,SAAQ;oBAAKC,IAAG;oBAAKC,IAAG;mBAASN;8BACpDD;;;;;AAKrB,EAAE"}
|
|
@@ -26,8 +26,8 @@ var useStyles = createStyles(function(theme, param, getRef) {
|
|
|
26
26
|
return {
|
|
27
27
|
table: {
|
|
28
28
|
width: "100%",
|
|
29
|
-
"& td:first-
|
|
30
|
-
paddingLeft: theme.spacing.
|
|
29
|
+
"& td:first-of-type": {
|
|
30
|
+
paddingLeft: theme.spacing.xl
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
header: {
|
|
@@ -36,8 +36,11 @@ var useStyles = createStyles(function(theme, param, getRef) {
|
|
|
36
36
|
backgroundColor: theme.colorScheme === "dark" ? theme.black : theme.white,
|
|
37
37
|
transition: "box-shadow 150ms ease",
|
|
38
38
|
zIndex: 12,
|
|
39
|
-
"& tr th:first-
|
|
40
|
-
paddingLeft: theme.spacing.
|
|
39
|
+
"& tr th:first-of-type button": {
|
|
40
|
+
paddingLeft: theme.spacing.xl
|
|
41
|
+
},
|
|
42
|
+
"& tr th:first-of-type div": {
|
|
43
|
+
paddingLeft: theme.spacing.xl
|
|
41
44
|
},
|
|
42
45
|
"&::after": {
|
|
43
46
|
content: '""',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, createStyles, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {InitialTableState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport {TableActions} from './TableActions';\nimport {TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {Th} from './Th';\n\nconst useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}, getRef) => ({\n table: {\n width: '100%',\n '& td:first-child': {\n paddingLeft: theme.spacing.md,\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n '& tr th:first-child div': {\n paddingLeft: theme.spacing.md,\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n ref: getRef('rowSelected'),\n },\n\n row: {\n [`&:hover, &.${getRef('rowSelected')}`]: {\n backgroundColor:\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0],\n },\n },\n}));\n\ninterface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n DateRangePicker: typeof TableDateRangePicker;\n}\n\nexport const Table: TableType = <T,>({\n data,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n\n const {cx, classes} = useStyles({hasHeader: !!header});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: true,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n\n const triggerChange = () => onChange?.({...state, ...form.values});\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n table.resetRowSelection(true);\n });\n\n useDidUpdate(() => {\n triggerChange();\n clearSelection();\n }, [state.globalFilter, state.sorting, state.pagination, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const clearSelection = () => {\n setState((prevState) => ({...prevState, rowSelection: {}}));\n };\n\n const getSelectedRow = useCallback(\n () => table.getSelectedRowModel().flatRows?.[0]?.original ?? null,\n [state.rowSelection]\n );\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const toggleRowSelection = (row: Row<T>) => {\n table.setRowSelection(() => ({[row.id]: !row.getIsSelected()}));\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => toggleRowSelection(row)}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td key={cell.id} style={{width}}>\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{padding: 0, borderBottomColor: row.getIsExpanded() ? undefined : 'transparent'}}\n >\n <Collapse in={row.getIsExpanded()} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n setState,\n clearFilters,\n getSelectedRow,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n }}\n >\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Box","Center","Collapse","createStyles","Loader","Skeleton","Table","MantineTable","useForm","useClickOutside","useDidUpdate","defaultColumnSizing","flexRender","getCoreRowModel","useReactTable","defaultsDeep","Children","Fragment","useCallback","useEffect","useState","TableActions","TableCollapsibleColumn","TableContext","TableDateRangePicker","TableFilter","TableFooter","TableHeader","TablePagination","TablePerPage","TablePredicate","Th","useStyles","theme","getRef","hasHeader","table","width","paddingLeft","spacing","md","header","position","top","backgroundColor","colorScheme","black","white","transition","zIndex","content","left","right","bottom","borderBottom","colors","gray","rowSelected","ref","row","fn","rgba","primaryColor","data","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","convertedChildren","toArray","find","child","type","footer","predicates","dateRange","initialStateWithoutForm","form","initialValues","cx","classes","pagination","pageSize","DEFAULT_SIZE","manualPagination","getRowCanExpand","original","state","setState","setOptions","prev","onStateChange","triggerChange","values","outsideClickRef","resetRowSelection","clearSelection","globalFilter","sorting","clearFilters","setFieldValue","prevState","rowSelection","getSelectedRow","getSelectedRowModel","flatRows","sx","flexGrow","toggleRowSelection","setRowSelection","id","getIsSelected","rows","getRowModel","map","rowChildren","tr","onClick","onDoubleClick","className","getVisibleCells","cell","size","column","getSize","undefined","td","style","visible","borderRadius","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","in","px","py","Provider","value","containerRef","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","tbody","Actions","Filter","Footer","Header","Pagination","Predicate","PerPage","CollapsibleColumn","DateRangePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, createStyles, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {InitialTableState} from '@tanstack/table-core';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport {TableActions} from './TableActions';\nimport {TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {Th} from './Th';\n\nconst useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}, getRef) => ({\n table: {\n width: '100%',\n '& td:first-of-type': {\n paddingLeft: theme.spacing.xl,\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n '& tr th:first-of-type button': {\n paddingLeft: theme.spacing.xl,\n },\n '& tr th:first-of-type div': {\n paddingLeft: theme.spacing.xl,\n },\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n ref: getRef('rowSelected'),\n },\n\n row: {\n [`&:hover, &.${getRef('rowSelected')}`]: {\n backgroundColor:\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0],\n },\n },\n}));\n\ninterface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n DateRangePicker: typeof TableDateRangePicker;\n}\n\nexport const Table: TableType = <T,>({\n data,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n\n const {cx, classes} = useStyles({hasHeader: !!header});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: true,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n\n const triggerChange = () => onChange?.({...state, ...form.values});\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n table.resetRowSelection(true);\n });\n\n useDidUpdate(() => {\n triggerChange();\n clearSelection();\n }, [state.globalFilter, state.sorting, state.pagination, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const clearSelection = () => {\n setState((prevState) => ({...prevState, rowSelection: {}}));\n };\n\n const getSelectedRow = useCallback(\n () => table.getSelectedRowModel().flatRows?.[0]?.original ?? null,\n [state.rowSelection]\n );\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const toggleRowSelection = (row: Row<T>) => {\n table.setRowSelection(() => ({[row.id]: !row.getIsSelected()}));\n };\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => toggleRowSelection(row)}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td key={cell.id} style={{width}}>\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{padding: 0, borderBottomColor: row.getIsExpanded() ? undefined : 'transparent'}}\n >\n <Collapse in={row.getIsExpanded()} px=\"sm\" py=\"xs\">\n {rowChildren}\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n setState,\n clearFilters,\n getSelectedRow,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n }}\n >\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Box","Center","Collapse","createStyles","Loader","Skeleton","Table","MantineTable","useForm","useClickOutside","useDidUpdate","defaultColumnSizing","flexRender","getCoreRowModel","useReactTable","defaultsDeep","Children","Fragment","useCallback","useEffect","useState","TableActions","TableCollapsibleColumn","TableContext","TableDateRangePicker","TableFilter","TableFooter","TableHeader","TablePagination","TablePerPage","TablePredicate","Th","useStyles","theme","getRef","hasHeader","table","width","paddingLeft","spacing","xl","header","position","top","backgroundColor","colorScheme","black","white","transition","zIndex","content","left","right","bottom","borderBottom","colors","gray","rowSelected","ref","row","fn","rgba","primaryColor","data","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","convertedChildren","toArray","find","child","type","footer","predicates","dateRange","initialStateWithoutForm","form","initialValues","cx","classes","pagination","pageSize","DEFAULT_SIZE","manualPagination","getRowCanExpand","original","state","setState","setOptions","prev","onStateChange","triggerChange","values","outsideClickRef","resetRowSelection","clearSelection","globalFilter","sorting","clearFilters","setFieldValue","prevState","rowSelection","getSelectedRow","getSelectedRowModel","flatRows","sx","flexGrow","toggleRowSelection","setRowSelection","id","getIsSelected","rows","getRowModel","map","rowChildren","tr","onClick","onDoubleClick","className","getVisibleCells","cell","size","column","getSize","undefined","td","style","visible","borderRadius","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","in","px","py","Provider","value","containerRef","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","tbody","Actions","Filter","Footer","Header","Pagination","Predicate","PerPage","CollapsibleColumn","DateRangePicker"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {createStyles, DefaultProps, Divider, Group
|
|
1
|
+
import {Box, createStyles, DefaultProps, Divider, Group} from '@mantine/core';
|
|
2
2
|
import {FunctionComponent, PropsWithChildren} from 'react';
|
|
3
3
|
|
|
4
4
|
export interface StickyFooterProps extends DefaultProps {
|
|
@@ -13,7 +13,7 @@ const useStyles = createStyles(() => ({
|
|
|
13
13
|
position: 'sticky',
|
|
14
14
|
bottom: 0,
|
|
15
15
|
zIndex: 1,
|
|
16
|
-
|
|
16
|
+
backgroundColor: 'white',
|
|
17
17
|
},
|
|
18
18
|
}));
|
|
19
19
|
|
|
@@ -25,11 +25,13 @@ export const StickyFooter: FunctionComponent<PropsWithChildren<StickyFooterProps
|
|
|
25
25
|
const {classes} = useStyles();
|
|
26
26
|
|
|
27
27
|
return (
|
|
28
|
-
|
|
28
|
+
<>
|
|
29
29
|
{borderTop ? <Divider size="xs" /> : null}
|
|
30
|
-
<
|
|
31
|
-
{
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
<Box className={classes.footer}>
|
|
31
|
+
<Group position="right" spacing="xs" py="md" px="xl" {...others}>
|
|
32
|
+
{children}
|
|
33
|
+
</Group>
|
|
34
|
+
</Box>
|
|
35
|
+
</>
|
|
34
36
|
);
|
|
35
37
|
};
|
|
@@ -29,8 +29,8 @@ import {Th} from './Th';
|
|
|
29
29
|
const useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}, getRef) => ({
|
|
30
30
|
table: {
|
|
31
31
|
width: '100%',
|
|
32
|
-
'& td:first-
|
|
33
|
-
paddingLeft: theme.spacing.
|
|
32
|
+
'& td:first-of-type': {
|
|
33
|
+
paddingLeft: theme.spacing.xl,
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
|
|
@@ -40,8 +40,11 @@ const useStyles = createStyles<string, {hasHeader: boolean}>((theme, {hasHeader}
|
|
|
40
40
|
backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,
|
|
41
41
|
transition: 'box-shadow 150ms ease',
|
|
42
42
|
zIndex: 12, // skeleton is 11
|
|
43
|
-
'& tr th:first-
|
|
44
|
-
paddingLeft: theme.spacing.
|
|
43
|
+
'& tr th:first-of-type button': {
|
|
44
|
+
paddingLeft: theme.spacing.xl,
|
|
45
|
+
},
|
|
46
|
+
'& tr th:first-of-type div': {
|
|
47
|
+
paddingLeft: theme.spacing.xl,
|
|
45
48
|
},
|
|
46
49
|
|
|
47
50
|
'&::after': {
|