@coveord/plasma-mantine 48.0.0 → 48.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +8 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/collection/Collection.js +9 -4
- package/dist/cjs/components/collection/Collection.js.map +1 -1
- package/dist/cjs/components/table/Table.js +3 -0
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/definitions/components/collection/Collection.d.ts +1 -0
- package/dist/definitions/components/collection/Collection.d.ts.map +1 -1
- package/dist/esm/components/collection/Collection.js +9 -4
- package/dist/esm/components/collection/Collection.js.map +1 -1
- package/dist/esm/components/table/Table.js +3 -0
- package/dist/esm/components/table/Table.js.map +1 -1
- package/package.json +1 -1
- package/src/components/collection/Collection.tsx +8 -1
- package/src/components/collection/__tests__/Collection.spec.tsx +27 -0
- package/src/components/table/Table.tsx +1 -1
|
@@ -30,11 +30,12 @@ var defaultProps = {
|
|
|
30
30
|
required: false
|
|
31
31
|
};
|
|
32
32
|
var Collection = function(props) {
|
|
33
|
-
var _ref = (0, _core.useComponentDefaultProps)("Collection", defaultProps, props), value = _ref.value, defaultValue = _ref.defaultValue, onChange = _ref.onChange, disabled = _ref.disabled, draggable = _ref.draggable, children = _ref.children, spacing = _ref.spacing, required = _ref.required, newItem = _ref.newItem, addLabel = _ref.addLabel, addDisabledTooltip = _ref.addDisabledTooltip, allowAdd = _ref.allowAdd, // Style props
|
|
33
|
+
var _ref = (0, _core.useComponentDefaultProps)("Collection", defaultProps, props), value = _ref.value, defaultValue = _ref.defaultValue, onChange = _ref.onChange, onRemoveItem = _ref.onRemoveItem, disabled = _ref.disabled, draggable = _ref.draggable, children = _ref.children, spacing = _ref.spacing, required = _ref.required, newItem = _ref.newItem, addLabel = _ref.addLabel, addDisabledTooltip = _ref.addDisabledTooltip, allowAdd = _ref.allowAdd, // Style props
|
|
34
34
|
classNames = _ref.classNames, className = _ref.className, styles = _ref.styles, unstyled = _ref.unstyled, others = _objectWithoutProperties(_ref, [
|
|
35
35
|
"value",
|
|
36
36
|
"defaultValue",
|
|
37
37
|
"onChange",
|
|
38
|
+
"onRemoveItem",
|
|
38
39
|
"disabled",
|
|
39
40
|
"draggable",
|
|
40
41
|
"children",
|
|
@@ -62,14 +63,18 @@ var Collection = function(props) {
|
|
|
62
63
|
defaultValue: defaultValue
|
|
63
64
|
}), 2), values = ref1[0], ref2 = ref1[1], append = ref2.append, remove = ref2.remove, reorder = ref2.reorder;
|
|
64
65
|
var hasOnlyOneItem = values.length === 1;
|
|
66
|
+
var removeItem = function(index) {
|
|
67
|
+
return function() {
|
|
68
|
+
remove(index);
|
|
69
|
+
onRemoveItem === null || onRemoveItem === void 0 ? void 0 : onRemoveItem(index);
|
|
70
|
+
};
|
|
71
|
+
};
|
|
65
72
|
var items = values.map(function(item, index) {
|
|
66
73
|
return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_collectionItem.CollectionItem, {
|
|
67
74
|
disabled: disabled,
|
|
68
75
|
draggable: draggable,
|
|
69
76
|
index: index,
|
|
70
|
-
onRemove:
|
|
71
|
-
return remove(index);
|
|
72
|
-
},
|
|
77
|
+
onRemove: removeItem(index),
|
|
73
78
|
styles: styles,
|
|
74
79
|
removable: !(required && hasOnlyOneItem),
|
|
75
80
|
children: children(item, index)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/collection/Collection.tsx"],"sourcesContent":["import {AddSize16Px} from '@coveord/plasma-react-icons';\nimport {\n Box,\n Button,\n DefaultProps,\n Group,\n MantineNumberSize,\n Selectors,\n Stack,\n Tooltip,\n useComponentDefaultProps,\n} from '@mantine/core';\nimport {useId} from '@mantine/hooks';\nimport {ReactNode} from 'react';\nimport {DragDropContext, Droppable} from 'react-beautiful-dnd';\n\nimport {useControlledList} from '../../hooks';\nimport {CollectionItem} from './CollectionItem';\nimport useStyles from './Colllection.styles';\n\ninterface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {\n newItem: T;\n children: (item: T, index: number) => ReactNode;\n defaultValue?: T[];\n value?: T[];\n onFocus?: () => void;\n onChange?: (value: T[]) => void;\n draggable?: boolean;\n disabled?: boolean;\n allowAdd?: (values: T[]) => boolean;\n addLabel?: string;\n addDisabledTooltip?: string;\n spacing?: MantineNumberSize;\n required?: boolean;\n}\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n spacing: 'xs',\n required: false,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T>) => {\n const {\n value,\n defaultValue,\n onChange,\n disabled,\n draggable,\n children,\n spacing,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n\n // Style props\n classNames,\n className,\n styles,\n unstyled,\n\n ...others\n } = useComponentDefaultProps('Collection', defaultProps as CollectionProps<T>, props);\n const {classes, cx} = useStyles(null, {classNames, name: 'Collection', styles, unstyled});\n const collectionID = useId('dnd-droppable');\n\n const [values, {append, remove, reorder}] = useControlledList({value, onChange, defaultValue});\n const hasOnlyOneItem = values.length === 1;\n const items = values.map((item, index) => (\n <CollectionItem\n key={index}\n disabled={disabled}\n draggable={draggable}\n index={index}\n onRemove={(
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/collection/Collection.tsx"],"sourcesContent":["import {AddSize16Px} from '@coveord/plasma-react-icons';\nimport {\n Box,\n Button,\n DefaultProps,\n Group,\n MantineNumberSize,\n Selectors,\n Stack,\n Tooltip,\n useComponentDefaultProps,\n} from '@mantine/core';\nimport {useId} from '@mantine/hooks';\nimport {ReactNode} from 'react';\nimport {DragDropContext, Droppable} from 'react-beautiful-dnd';\n\nimport {useControlledList} from '../../hooks';\nimport {CollectionItem} from './CollectionItem';\nimport useStyles from './Colllection.styles';\n\ninterface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {\n newItem: T;\n children: (item: T, index: number) => ReactNode;\n defaultValue?: T[];\n value?: T[];\n onFocus?: () => void;\n onChange?: (value: T[]) => void;\n onRemoveItem?: (itemIndex: number) => void;\n draggable?: boolean;\n disabled?: boolean;\n allowAdd?: (values: T[]) => boolean;\n addLabel?: string;\n addDisabledTooltip?: string;\n spacing?: MantineNumberSize;\n required?: boolean;\n}\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n spacing: 'xs',\n required: false,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T>) => {\n const {\n value,\n defaultValue,\n onChange,\n onRemoveItem,\n disabled,\n draggable,\n children,\n spacing,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n\n // Style props\n classNames,\n className,\n styles,\n unstyled,\n\n ...others\n } = useComponentDefaultProps('Collection', defaultProps as CollectionProps<T>, props);\n const {classes, cx} = useStyles(null, {classNames, name: 'Collection', styles, unstyled});\n const collectionID = useId('dnd-droppable');\n\n const [values, {append, remove, reorder}] = useControlledList({value, onChange, defaultValue});\n const hasOnlyOneItem = values.length === 1;\n const removeItem = (index: number) => () => {\n remove(index);\n onRemoveItem?.(index);\n };\n\n const items = values.map((item, index) => (\n <CollectionItem\n key={index}\n disabled={disabled}\n draggable={draggable}\n index={index}\n onRemove={removeItem(index)}\n styles={styles}\n removable={!(required && hasOnlyOneItem)}\n >\n {children(item, index)}\n </CollectionItem>\n ));\n\n const addAllowed = allowAdd?.(values) ?? true;\n\n const _addButton = disabled ? null : (\n <Group>\n <Tooltip label={addDisabledTooltip} disabled={addAllowed}>\n <Box>\n <Button\n variant=\"subtle\"\n leftIcon={<AddSize16Px height={16} />}\n onClick={() => append(newItem)}\n disabled={!addAllowed}\n >\n {addLabel}\n </Button>\n </Box>\n </Tooltip>\n </Group>\n );\n\n return (\n <DragDropContext\n onDragEnd={({destination, source}) => reorder({from: source.index, to: destination?.index || 0})}\n >\n <Droppable direction=\"vertical\" droppableId={collectionID}>\n {(provided) => (\n <Box\n {...provided.droppableProps}\n ref={provided.innerRef}\n className={cx(classes.root, className)}\n {...others}\n >\n <Stack spacing={spacing}>\n {items}\n {provided.placeholder}\n {_addButton}\n </Stack>\n </Box>\n )}\n </Droppable>\n </DragDropContext>\n );\n};\n"],"names":["Collection","defaultProps","draggable","addLabel","addDisabledTooltip","disabled","spacing","required","props","useComponentDefaultProps","value","defaultValue","onChange","onRemoveItem","children","newItem","allowAdd","classNames","className","styles","unstyled","others","useStyles","name","classes","cx","collectionID","useId","useControlledList","values","append","remove","reorder","hasOnlyOneItem","length","removeItem","index","items","map","item","CollectionItem","onRemove","removable","addAllowed","_addButton","Group","Tooltip","label","Box","Button","variant","leftIcon","AddSize16Px","height","onClick","DragDropContext","onDragEnd","destination","source","from","to","Droppable","direction","droppableId","provided","droppableProps","ref","innerRef","root","Stack","placeholder"],"mappings":"AAAA;;;;+BA8CaA,YAAU;;;eAAVA,UAAU;;;;;;;;;gCA9CG,6BAA6B;oBAWhD,eAAe;qBACF,gBAAgB;iCAEK,qBAAqB;sBAE9B,aAAa;8BAChB,kBAAkB;sEACzB,sBAAsB;AAmB5C,IAAMC,YAAY,GAAsC;IACpDC,SAAS,EAAE,KAAK;IAChBC,QAAQ,EAAE,UAAU;IACpBC,kBAAkB,EAAE,gCAAgC;IACpDC,QAAQ,EAAE,KAAK;IACfC,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE,KAAK;CAClB,AAAC;AAEK,IAAMP,UAAU,GAAG,SAAKQ,KAAyB,EAAK;IACzD,IAsBIC,IAAiF,GAAjFA,IAAAA,KAAwB,yBAAA,EAAC,YAAY,EAAER,YAAY,EAAwBO,KAAK,CAAC,EArBjFE,KAAK,GAqBLD,IAAiF,CArBjFC,KAAK,EACLC,YAAY,GAoBZF,IAAiF,CApBjFE,YAAY,EACZC,QAAQ,GAmBRH,IAAiF,CAnBjFG,QAAQ,EACRC,YAAY,GAkBZJ,IAAiF,CAlBjFI,YAAY,EACZR,QAAQ,GAiBRI,IAAiF,CAjBjFJ,QAAQ,EACRH,SAAS,GAgBTO,IAAiF,CAhBjFP,SAAS,EACTY,QAAQ,GAeRL,IAAiF,CAfjFK,QAAQ,EACRR,OAAO,GAcPG,IAAiF,CAdjFH,OAAO,EACPC,QAAQ,GAaRE,IAAiF,CAbjFF,QAAQ,EACRQ,OAAO,GAYPN,IAAiF,CAZjFM,OAAO,EACPZ,QAAQ,GAWRM,IAAiF,CAXjFN,QAAQ,EACRC,kBAAkB,GAUlBK,IAAiF,CAVjFL,kBAAkB,EAClBY,QAAQ,GASRP,IAAiF,CATjFO,QAAQ,EAER,cAAc;IACdC,UAAU,GAMVR,IAAiF,CANjFQ,UAAU,EACVC,SAAS,GAKTT,IAAiF,CALjFS,SAAS,EACTC,MAAM,GAINV,IAAiF,CAJjFU,MAAM,EACNC,QAAQ,GAGRX,IAAiF,CAHjFW,QAAQ,EAELC,MAAM,4BACTZ,IAAiF;QArBjFC,OAAK;QACLC,cAAY;QACZC,UAAQ;QACRC,cAAY;QACZR,UAAQ;QACRH,WAAS;QACTY,UAAQ;QACRR,SAAO;QACPC,UAAQ;QACRQ,SAAO;QACPZ,UAAQ;QACRC,oBAAkB;QAClBY,UAAQ;QAGRC,YAAU;QACVC,WAAS;QACTC,QAAM;QACNC,UAAQ;MAG0E;IACtF,IAAsBE,GAAmE,GAAnEA,IAAAA,kBAAS,QAAA,EAAC,IAAI,EAAE;QAACL,UAAU,EAAVA,UAAU;QAAEM,IAAI,EAAE,YAAY;QAAEJ,MAAM,EAANA,MAAM;QAAEC,QAAQ,EAARA,QAAQ;KAAC,CAAC,EAAlFI,OAAO,GAAQF,GAAmE,CAAlFE,OAAO,EAAEC,EAAE,GAAIH,GAAmE,CAAzEG,EAAE,AAAwE;IAC1F,IAAMC,YAAY,GAAGC,IAAAA,MAAK,MAAA,EAAC,eAAe,CAAC,AAAC;IAE5C,IAA4CC,IAAkD,kBAAlDA,IAAAA,OAAiB,kBAAA,EAAC;QAAClB,KAAK,EAALA,KAAK;QAAEE,QAAQ,EAARA,QAAQ;QAAED,YAAY,EAAZA,YAAY;KAAC,CAAC,IAAA,EAAvFkB,MAAM,GAA+BD,IAAkD,GAAjF,SAA+BA,IAAkD,KAA9EE,MAAM,QAANA,MAAM,EAAEC,MAAM,QAANA,MAAM,EAAEC,OAAO,QAAPA,OAAO,AAAwD;IAC/F,IAAMC,cAAc,GAAGJ,MAAM,CAACK,MAAM,KAAK,CAAC,AAAC;IAC3C,IAAMC,UAAU,GAAG,SAACC,KAAa;QAAK,OAAA,WAAM;YACxCL,MAAM,CAACK,KAAK,CAAC,CAAC;YACdvB,YAAY,aAAZA,YAAY,WAAS,GAArBA,KAAAA,CAAqB,GAArBA,YAAY,CAAGuB,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAA;KAAA,AAAC;IAEF,IAAMC,KAAK,GAAGR,MAAM,CAACS,GAAG,CAAC,SAACC,IAAI,EAAEH,KAAK;6BACjC,qBAACI,eAAc,eAAA;YAEXnC,QAAQ,EAAEA,QAAQ;YAClBH,SAAS,EAAEA,SAAS;YACpBkC,KAAK,EAAEA,KAAK;YACZK,QAAQ,EAAEN,UAAU,CAACC,KAAK,CAAC;YAC3BjB,MAAM,EAAEA,MAAM;YACduB,SAAS,EAAE,CAAEnC,CAAAA,QAAQ,IAAI0B,cAAc,CAAA,AAAC;sBAEvCnB,QAAQ,CAACyB,IAAI,EAAEH,KAAK,CAAC;WARjBA,KAAK,CASG;KACpB,CAAC,AAAC;QAEgBpB,IAAkB;IAArC,IAAM2B,UAAU,GAAG3B,CAAAA,IAAkB,GAAlBA,QAAQ,aAARA,QAAQ,WAAU,GAAlBA,KAAAA,CAAkB,GAAlBA,QAAQ,CAAGa,MAAM,CAAC,cAAlBb,IAAkB,cAAlBA,IAAkB,GAAI,IAAI,AAAC;IAE9C,IAAM4B,UAAU,GAAGvC,QAAQ,GAAG,IAAI,iBAC9B,qBAACwC,KAAK,MAAA;kBACF,cAAA,qBAACC,KAAO,QAAA;YAACC,KAAK,EAAE3C,kBAAkB;YAAEC,QAAQ,EAAEsC,UAAU;sBACpD,cAAA,qBAACK,KAAG,IAAA;0BACA,cAAA,qBAACC,KAAM,OAAA;oBACHC,OAAO,EAAC,QAAQ;oBAChBC,QAAQ,gBAAE,qBAACC,iBAAW,YAAA;wBAACC,MAAM,EAAE,EAAE;sBAAI;oBACrCC,OAAO,EAAE;+BAAMxB,MAAM,CAACf,OAAO,CAAC;qBAAA;oBAC9BV,QAAQ,EAAE,CAACsC,UAAU;8BAEpBxC,QAAQ;kBACJ;cACP;UACA;MACN,AACX,AAAC;IAEF,qBACI,qBAACoD,kBAAe,gBAAA;QACZC,SAAS,EAAE;gBAAEC,WAAW,SAAXA,WAAW,EAAEC,MAAM,SAANA,MAAM;YAAM1B,OAAAA,OAAO,CAAC;gBAAC2B,IAAI,EAAED,MAAM,CAACtB,KAAK;gBAAEwB,EAAE,EAAEH,CAAAA,WAAW,aAAXA,WAAW,WAAO,GAAlBA,KAAAA,CAAkB,GAAlBA,WAAW,CAAErB,KAAK,CAAA,IAAI,CAAC;aAAC,CAAC,CAAA;SAAA;kBAEhG,cAAA,qBAACyB,kBAAS,UAAA;YAACC,SAAS,EAAC,UAAU;YAACC,WAAW,EAAErC,YAAY;sBACpD,SAACsC,QAAQ;qCACN,qBAAChB,KAAG,IAAA,wEACIgB,QAAQ,CAACC,cAAc;oBAC3BC,GAAG,EAAEF,QAAQ,CAACG,QAAQ;oBACtBjD,SAAS,EAAEO,EAAE,CAACD,OAAO,CAAC4C,IAAI,EAAElD,SAAS,CAAC;oBAClCG,MAAM;8BAEV,cAAA,sBAACgD,KAAK,MAAA;wBAAC/D,OAAO,EAAEA,OAAO;;4BAClB+B,KAAK;4BACL2B,QAAQ,CAACM,WAAW;4BACpB1B,UAAU;;sBACP;mBACN;aACT;UACO;MACE,CACpB;AACN,CAAC,AAAC"}
|
|
@@ -181,6 +181,9 @@ var Table = function(param) {
|
|
|
181
181
|
},
|
|
182
182
|
children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.Skeleton, {
|
|
183
183
|
visible: loading,
|
|
184
|
+
sx: !loading ? {
|
|
185
|
+
borderRadius: 0
|
|
186
|
+
} : undefined,
|
|
184
187
|
children: (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext())
|
|
185
188
|
})
|
|
186
189
|
}, cell.id);
|
|
@@ -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 },\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\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\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}: 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 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}>\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 }}\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","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","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","className","getVisibleCells","cell","size","column","getSize","defaultColumnSizing","undefined","td","style","Skeleton","visible","flexRender","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","Collapse","in","px","py","Box","TableContext","Provider","value","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 },\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\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\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}: 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 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 }}\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","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","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","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","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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"}
|
|
@@ -8,6 +8,7 @@ interface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {
|
|
|
8
8
|
value?: T[];
|
|
9
9
|
onFocus?: () => void;
|
|
10
10
|
onChange?: (value: T[]) => void;
|
|
11
|
+
onRemoveItem?: (itemIndex: number) => void;
|
|
11
12
|
draggable?: boolean;
|
|
12
13
|
disabled?: boolean;
|
|
13
14
|
allowAdd?: (values: T[]) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../../../src/components/collection/Collection.tsx"],"names":[],"mappings":"AACA,OAAO,EAGH,YAAY,EAEZ,iBAAiB,EACjB,SAAS,EAIZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAKhC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAE7C,UAAU,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,SAAS,CAAC,OAAO,SAAS,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAWD,eAAO,MAAM,UAAU,+
|
|
1
|
+
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../../../src/components/collection/Collection.tsx"],"names":[],"mappings":"AACA,OAAO,EAGH,YAAY,EAEZ,iBAAiB,EACjB,SAAS,EAIZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAKhC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAE7C,UAAU,eAAe,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,SAAS,CAAC,OAAO,SAAS,CAAC,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAWD,eAAO,MAAM,UAAU,+CAyFtB,CAAC"}
|
|
@@ -19,11 +19,12 @@ var defaultProps = {
|
|
|
19
19
|
required: false
|
|
20
20
|
};
|
|
21
21
|
export var Collection = function(props) {
|
|
22
|
-
var _ref = useComponentDefaultProps("Collection", defaultProps, props), value = _ref.value, defaultValue = _ref.defaultValue, onChange = _ref.onChange, disabled = _ref.disabled, draggable = _ref.draggable, children = _ref.children, spacing = _ref.spacing, required = _ref.required, newItem = _ref.newItem, addLabel = _ref.addLabel, addDisabledTooltip = _ref.addDisabledTooltip, allowAdd = _ref.allowAdd, // Style props
|
|
22
|
+
var _ref = useComponentDefaultProps("Collection", defaultProps, props), value = _ref.value, defaultValue = _ref.defaultValue, onChange = _ref.onChange, onRemoveItem = _ref.onRemoveItem, disabled = _ref.disabled, draggable = _ref.draggable, children = _ref.children, spacing = _ref.spacing, required = _ref.required, newItem = _ref.newItem, addLabel = _ref.addLabel, addDisabledTooltip = _ref.addDisabledTooltip, allowAdd = _ref.allowAdd, // Style props
|
|
23
23
|
classNames = _ref.classNames, className = _ref.className, styles = _ref.styles, unstyled = _ref.unstyled, others = _object_without_properties(_ref, [
|
|
24
24
|
"value",
|
|
25
25
|
"defaultValue",
|
|
26
26
|
"onChange",
|
|
27
|
+
"onRemoveItem",
|
|
27
28
|
"disabled",
|
|
28
29
|
"draggable",
|
|
29
30
|
"children",
|
|
@@ -51,14 +52,18 @@ export var Collection = function(props) {
|
|
|
51
52
|
defaultValue: defaultValue
|
|
52
53
|
}), 2), values = ref1[0], ref2 = ref1[1], append = ref2.append, remove = ref2.remove, reorder = ref2.reorder;
|
|
53
54
|
var hasOnlyOneItem = values.length === 1;
|
|
55
|
+
var removeItem = function(index) {
|
|
56
|
+
return function() {
|
|
57
|
+
remove(index);
|
|
58
|
+
onRemoveItem === null || onRemoveItem === void 0 ? void 0 : onRemoveItem(index);
|
|
59
|
+
};
|
|
60
|
+
};
|
|
54
61
|
var items = values.map(function(item, index) {
|
|
55
62
|
return /*#__PURE__*/ _jsx(CollectionItem, {
|
|
56
63
|
disabled: disabled,
|
|
57
64
|
draggable: draggable,
|
|
58
65
|
index: index,
|
|
59
|
-
onRemove:
|
|
60
|
-
return remove(index);
|
|
61
|
-
},
|
|
66
|
+
onRemove: removeItem(index),
|
|
62
67
|
styles: styles,
|
|
63
68
|
removable: !(required && hasOnlyOneItem),
|
|
64
69
|
children: children(item, index)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/collection/Collection.tsx"],"sourcesContent":["import {AddSize16Px} from '@coveord/plasma-react-icons';\nimport {\n Box,\n Button,\n DefaultProps,\n Group,\n MantineNumberSize,\n Selectors,\n Stack,\n Tooltip,\n useComponentDefaultProps,\n} from '@mantine/core';\nimport {useId} from '@mantine/hooks';\nimport {ReactNode} from 'react';\nimport {DragDropContext, Droppable} from 'react-beautiful-dnd';\n\nimport {useControlledList} from '../../hooks';\nimport {CollectionItem} from './CollectionItem';\nimport useStyles from './Colllection.styles';\n\ninterface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {\n newItem: T;\n children: (item: T, index: number) => ReactNode;\n defaultValue?: T[];\n value?: T[];\n onFocus?: () => void;\n onChange?: (value: T[]) => void;\n draggable?: boolean;\n disabled?: boolean;\n allowAdd?: (values: T[]) => boolean;\n addLabel?: string;\n addDisabledTooltip?: string;\n spacing?: MantineNumberSize;\n required?: boolean;\n}\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n spacing: 'xs',\n required: false,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T>) => {\n const {\n value,\n defaultValue,\n onChange,\n disabled,\n draggable,\n children,\n spacing,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n\n // Style props\n classNames,\n className,\n styles,\n unstyled,\n\n ...others\n } = useComponentDefaultProps('Collection', defaultProps as CollectionProps<T>, props);\n const {classes, cx} = useStyles(null, {classNames, name: 'Collection', styles, unstyled});\n const collectionID = useId('dnd-droppable');\n\n const [values, {append, remove, reorder}] = useControlledList({value, onChange, defaultValue});\n const hasOnlyOneItem = values.length === 1;\n const items = values.map((item, index) => (\n <CollectionItem\n key={index}\n disabled={disabled}\n draggable={draggable}\n index={index}\n onRemove={(
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/collection/Collection.tsx"],"sourcesContent":["import {AddSize16Px} from '@coveord/plasma-react-icons';\nimport {\n Box,\n Button,\n DefaultProps,\n Group,\n MantineNumberSize,\n Selectors,\n Stack,\n Tooltip,\n useComponentDefaultProps,\n} from '@mantine/core';\nimport {useId} from '@mantine/hooks';\nimport {ReactNode} from 'react';\nimport {DragDropContext, Droppable} from 'react-beautiful-dnd';\n\nimport {useControlledList} from '../../hooks';\nimport {CollectionItem} from './CollectionItem';\nimport useStyles from './Colllection.styles';\n\ninterface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {\n newItem: T;\n children: (item: T, index: number) => ReactNode;\n defaultValue?: T[];\n value?: T[];\n onFocus?: () => void;\n onChange?: (value: T[]) => void;\n onRemoveItem?: (itemIndex: number) => void;\n draggable?: boolean;\n disabled?: boolean;\n allowAdd?: (values: T[]) => boolean;\n addLabel?: string;\n addDisabledTooltip?: string;\n spacing?: MantineNumberSize;\n required?: boolean;\n}\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n spacing: 'xs',\n required: false,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T>) => {\n const {\n value,\n defaultValue,\n onChange,\n onRemoveItem,\n disabled,\n draggable,\n children,\n spacing,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n\n // Style props\n classNames,\n className,\n styles,\n unstyled,\n\n ...others\n } = useComponentDefaultProps('Collection', defaultProps as CollectionProps<T>, props);\n const {classes, cx} = useStyles(null, {classNames, name: 'Collection', styles, unstyled});\n const collectionID = useId('dnd-droppable');\n\n const [values, {append, remove, reorder}] = useControlledList({value, onChange, defaultValue});\n const hasOnlyOneItem = values.length === 1;\n const removeItem = (index: number) => () => {\n remove(index);\n onRemoveItem?.(index);\n };\n\n const items = values.map((item, index) => (\n <CollectionItem\n key={index}\n disabled={disabled}\n draggable={draggable}\n index={index}\n onRemove={removeItem(index)}\n styles={styles}\n removable={!(required && hasOnlyOneItem)}\n >\n {children(item, index)}\n </CollectionItem>\n ));\n\n const addAllowed = allowAdd?.(values) ?? true;\n\n const _addButton = disabled ? null : (\n <Group>\n <Tooltip label={addDisabledTooltip} disabled={addAllowed}>\n <Box>\n <Button\n variant=\"subtle\"\n leftIcon={<AddSize16Px height={16} />}\n onClick={() => append(newItem)}\n disabled={!addAllowed}\n >\n {addLabel}\n </Button>\n </Box>\n </Tooltip>\n </Group>\n );\n\n return (\n <DragDropContext\n onDragEnd={({destination, source}) => reorder({from: source.index, to: destination?.index || 0})}\n >\n <Droppable direction=\"vertical\" droppableId={collectionID}>\n {(provided) => (\n <Box\n {...provided.droppableProps}\n ref={provided.innerRef}\n className={cx(classes.root, className)}\n {...others}\n >\n <Stack spacing={spacing}>\n {items}\n {provided.placeholder}\n {_addButton}\n </Stack>\n </Box>\n )}\n </Droppable>\n </DragDropContext>\n );\n};\n"],"names":["AddSize16Px","Box","Button","Group","Stack","Tooltip","useComponentDefaultProps","useId","DragDropContext","Droppable","useControlledList","CollectionItem","useStyles","defaultProps","draggable","addLabel","addDisabledTooltip","disabled","spacing","required","Collection","props","value","defaultValue","onChange","onRemoveItem","children","newItem","allowAdd","classNames","className","styles","unstyled","others","name","classes","cx","collectionID","values","append","remove","reorder","hasOnlyOneItem","length","removeItem","index","items","map","item","onRemove","removable","addAllowed","_addButton","label","variant","leftIcon","height","onClick","onDragEnd","destination","source","from","to","direction","droppableId","provided","droppableProps","ref","innerRef","root","placeholder"],"mappings":"AAAA;;;;;AAAA,SAAQA,WAAW,QAAO,6BAA6B,CAAC;AACxD,SACIC,GAAG,EACHC,MAAM,EAENC,KAAK,EAGLC,KAAK,EACLC,OAAO,EACPC,wBAAwB,QACrB,eAAe,CAAC;AACvB,SAAQC,KAAK,QAAO,gBAAgB,CAAC;AAErC,SAAQC,eAAe,EAAEC,SAAS,QAAO,qBAAqB,CAAC;AAE/D,SAAQC,iBAAiB,QAAO,aAAa,CAAC;AAC9C,SAAQC,cAAc,QAAO,kBAAkB,CAAC;AAChD,OAAOC,SAAS,MAAM,sBAAsB,CAAC;AAmB7C,IAAMC,YAAY,GAAsC;IACpDC,SAAS,EAAE,KAAK;IAChBC,QAAQ,EAAE,UAAU;IACpBC,kBAAkB,EAAE,gCAAgC;IACpDC,QAAQ,EAAE,KAAK;IACfC,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE,KAAK;CAClB,AAAC;AAEF,OAAO,IAAMC,UAAU,GAAG,SAAKC,KAAyB,EAAK;IACzD,IAsBIf,IAAiF,GAAjFA,wBAAwB,CAAC,YAAY,EAAEO,YAAY,EAAwBQ,KAAK,CAAC,EArBjFC,KAAK,GAqBLhB,IAAiF,CArBjFgB,KAAK,EACLC,YAAY,GAoBZjB,IAAiF,CApBjFiB,YAAY,EACZC,QAAQ,GAmBRlB,IAAiF,CAnBjFkB,QAAQ,EACRC,YAAY,GAkBZnB,IAAiF,CAlBjFmB,YAAY,EACZR,QAAQ,GAiBRX,IAAiF,CAjBjFW,QAAQ,EACRH,SAAS,GAgBTR,IAAiF,CAhBjFQ,SAAS,EACTY,QAAQ,GAeRpB,IAAiF,CAfjFoB,QAAQ,EACRR,OAAO,GAcPZ,IAAiF,CAdjFY,OAAO,EACPC,QAAQ,GAaRb,IAAiF,CAbjFa,QAAQ,EACRQ,OAAO,GAYPrB,IAAiF,CAZjFqB,OAAO,EACPZ,QAAQ,GAWRT,IAAiF,CAXjFS,QAAQ,EACRC,kBAAkB,GAUlBV,IAAiF,CAVjFU,kBAAkB,EAClBY,QAAQ,GASRtB,IAAiF,CATjFsB,QAAQ,EAER,cAAc;IACdC,UAAU,GAMVvB,IAAiF,CANjFuB,UAAU,EACVC,SAAS,GAKTxB,IAAiF,CALjFwB,SAAS,EACTC,MAAM,GAINzB,IAAiF,CAJjFyB,MAAM,EACNC,QAAQ,GAGR1B,IAAiF,CAHjF0B,QAAQ,EAELC,MAAM,8BACT3B,IAAiF;QArBjFgB,OAAK;QACLC,cAAY;QACZC,UAAQ;QACRC,cAAY;QACZR,UAAQ;QACRH,WAAS;QACTY,UAAQ;QACRR,SAAO;QACPC,UAAQ;QACRQ,SAAO;QACPZ,UAAQ;QACRC,oBAAkB;QAClBY,UAAQ;QAGRC,YAAU;QACVC,WAAS;QACTC,QAAM;QACNC,UAAQ;MAG0E;IACtF,IAAsBpB,GAAmE,GAAnEA,SAAS,CAAC,IAAI,EAAE;QAACiB,UAAU,EAAVA,UAAU;QAAEK,IAAI,EAAE,YAAY;QAAEH,MAAM,EAANA,MAAM;QAAEC,QAAQ,EAARA,QAAQ;KAAC,CAAC,EAAlFG,OAAO,GAAQvB,GAAmE,CAAlFuB,OAAO,EAAEC,EAAE,GAAIxB,GAAmE,CAAzEwB,EAAE,AAAwE;IAC1F,IAAMC,YAAY,GAAG9B,KAAK,CAAC,eAAe,CAAC,AAAC;IAE5C,IAA4CG,IAAkD,oBAAlDA,iBAAiB,CAAC;QAACY,KAAK,EAALA,KAAK;QAAEE,QAAQ,EAARA,QAAQ;QAAED,YAAY,EAAZA,YAAY;KAAC,CAAC,IAAA,EAAvFe,MAAM,GAA+B5B,IAAkD,GAAjF,SAA+BA,IAAkD,KAA9E6B,MAAM,QAANA,MAAM,EAAEC,MAAM,QAANA,MAAM,EAAEC,OAAO,QAAPA,OAAO,AAAwD;IAC/F,IAAMC,cAAc,GAAGJ,MAAM,CAACK,MAAM,KAAK,CAAC,AAAC;IAC3C,IAAMC,UAAU,GAAG,SAACC,KAAa;QAAK,OAAA,WAAM;YACxCL,MAAM,CAACK,KAAK,CAAC,CAAC;YACdpB,YAAY,aAAZA,YAAY,WAAS,GAArBA,KAAAA,CAAqB,GAArBA,YAAY,CAAGoB,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAA;KAAA,AAAC;IAEF,IAAMC,KAAK,GAAGR,MAAM,CAACS,GAAG,CAAC,SAACC,IAAI,EAAEH,KAAK;6BACjC,KAAClC,cAAc;YAEXM,QAAQ,EAAEA,QAAQ;YAClBH,SAAS,EAAEA,SAAS;YACpB+B,KAAK,EAAEA,KAAK;YACZI,QAAQ,EAAEL,UAAU,CAACC,KAAK,CAAC;YAC3Bd,MAAM,EAAEA,MAAM;YACdmB,SAAS,EAAE,CAAE/B,CAAAA,QAAQ,IAAIuB,cAAc,CAAA,AAAC;sBAEvChB,QAAQ,CAACsB,IAAI,EAAEH,KAAK,CAAC;WARjBA,KAAK,CASG;KACpB,CAAC,AAAC;QAEgBjB,IAAkB;IAArC,IAAMuB,UAAU,GAAGvB,CAAAA,IAAkB,GAAlBA,QAAQ,aAARA,QAAQ,WAAU,GAAlBA,KAAAA,CAAkB,GAAlBA,QAAQ,CAAGU,MAAM,CAAC,cAAlBV,IAAkB,cAAlBA,IAAkB,GAAI,IAAI,AAAC;IAE9C,IAAMwB,UAAU,GAAGnC,QAAQ,GAAG,IAAI,iBAC9B,KAACd,KAAK;kBACF,cAAA,KAACE,OAAO;YAACgD,KAAK,EAAErC,kBAAkB;YAAEC,QAAQ,EAAEkC,UAAU;sBACpD,cAAA,KAAClD,GAAG;0BACA,cAAA,KAACC,MAAM;oBACHoD,OAAO,EAAC,QAAQ;oBAChBC,QAAQ,gBAAE,KAACvD,WAAW;wBAACwD,MAAM,EAAE,EAAE;sBAAI;oBACrCC,OAAO,EAAE;+BAAMlB,MAAM,CAACZ,OAAO,CAAC;qBAAA;oBAC9BV,QAAQ,EAAE,CAACkC,UAAU;8BAEpBpC,QAAQ;kBACJ;cACP;UACA;MACN,AACX,AAAC;IAEF,qBACI,KAACP,eAAe;QACZkD,SAAS,EAAE;gBAAEC,WAAW,SAAXA,WAAW,EAAEC,MAAM,SAANA,MAAM;YAAMnB,OAAAA,OAAO,CAAC;gBAACoB,IAAI,EAAED,MAAM,CAACf,KAAK;gBAAEiB,EAAE,EAAEH,CAAAA,WAAW,aAAXA,WAAW,WAAO,GAAlBA,KAAAA,CAAkB,GAAlBA,WAAW,CAAEd,KAAK,CAAA,IAAI,CAAC;aAAC,CAAC,CAAA;SAAA;kBAEhG,cAAA,KAACpC,SAAS;YAACsD,SAAS,EAAC,UAAU;YAACC,WAAW,EAAE3B,YAAY;sBACpD,SAAC4B,QAAQ;qCACN,KAAChE,GAAG,8EACIgE,QAAQ,CAACC,cAAc;oBAC3BC,GAAG,EAAEF,QAAQ,CAACG,QAAQ;oBACtBtC,SAAS,EAAEM,EAAE,CAACD,OAAO,CAACkC,IAAI,EAAEvC,SAAS,CAAC;oBAClCG,MAAM;8BAEV,cAAA,MAAC7B,KAAK;wBAACc,OAAO,EAAEA,OAAO;;4BAClB4B,KAAK;4BACLmB,QAAQ,CAACK,WAAW;4BACpBlB,UAAU;;sBACP;mBACN;aACT;UACO;MACE,CACpB;AACN,CAAC,CAAC"}
|
|
@@ -170,6 +170,9 @@ export var Table = function(param) {
|
|
|
170
170
|
},
|
|
171
171
|
children: /*#__PURE__*/ _jsx(Skeleton, {
|
|
172
172
|
visible: loading,
|
|
173
|
+
sx: !loading ? {
|
|
174
|
+
borderRadius: 0
|
|
175
|
+
} : undefined,
|
|
173
176
|
children: flexRender(cell.column.columnDef.cell, cell.getContext())
|
|
174
177
|
})
|
|
175
178
|
}, cell.id);
|
|
@@ -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 },\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\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\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}: 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 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}>\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 }}\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","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","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","className","getVisibleCells","cell","size","column","getSize","undefined","td","style","visible","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","in","px","py","Provider","value","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 },\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\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\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}: 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 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 }}\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","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","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","className","getVisibleCells","cell","size","column","getSize","undefined","td","style","visible","borderRadius","columnDef","getContext","colSpan","length","padding","borderBottomColor","getIsExpanded","in","px","py","Provider","value","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
|
@@ -25,6 +25,7 @@ interface CollectionProps<T> extends DefaultProps<Selectors<typeof useStyles>> {
|
|
|
25
25
|
value?: T[];
|
|
26
26
|
onFocus?: () => void;
|
|
27
27
|
onChange?: (value: T[]) => void;
|
|
28
|
+
onRemoveItem?: (itemIndex: number) => void;
|
|
28
29
|
draggable?: boolean;
|
|
29
30
|
disabled?: boolean;
|
|
30
31
|
allowAdd?: (values: T[]) => boolean;
|
|
@@ -48,6 +49,7 @@ export const Collection = <T,>(props: CollectionProps<T>) => {
|
|
|
48
49
|
value,
|
|
49
50
|
defaultValue,
|
|
50
51
|
onChange,
|
|
52
|
+
onRemoveItem,
|
|
51
53
|
disabled,
|
|
52
54
|
draggable,
|
|
53
55
|
children,
|
|
@@ -71,13 +73,18 @@ export const Collection = <T,>(props: CollectionProps<T>) => {
|
|
|
71
73
|
|
|
72
74
|
const [values, {append, remove, reorder}] = useControlledList({value, onChange, defaultValue});
|
|
73
75
|
const hasOnlyOneItem = values.length === 1;
|
|
76
|
+
const removeItem = (index: number) => () => {
|
|
77
|
+
remove(index);
|
|
78
|
+
onRemoveItem?.(index);
|
|
79
|
+
};
|
|
80
|
+
|
|
74
81
|
const items = values.map((item, index) => (
|
|
75
82
|
<CollectionItem
|
|
76
83
|
key={index}
|
|
77
84
|
disabled={disabled}
|
|
78
85
|
draggable={draggable}
|
|
79
86
|
index={index}
|
|
80
|
-
onRemove={(
|
|
87
|
+
onRemove={removeItem(index)}
|
|
81
88
|
styles={styles}
|
|
82
89
|
removable={!(required && hasOnlyOneItem)}
|
|
83
90
|
>
|
|
@@ -51,6 +51,33 @@ describe('Collection', () => {
|
|
|
51
51
|
expect(screen.getByTestId('form-state')).toHaveTextContent('{"fruits":["orange"]}');
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
+
it('calls the onRemoveItem function when clicking on a remove button', async () => {
|
|
55
|
+
const onRemoveItemSpy = jest.fn();
|
|
56
|
+
const Fixture = () => {
|
|
57
|
+
const form = useForm({initialValues: {fruits: ['banana', 'orange']}});
|
|
58
|
+
return (
|
|
59
|
+
<Collection newItem="" {...form.getInputProps('fruits')} onRemoveItem={onRemoveItemSpy}>
|
|
60
|
+
{(name) => <span data-testid="item">{name}</span>}
|
|
61
|
+
</Collection>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
render(<Fixture />);
|
|
66
|
+
let items = screen.getAllByTestId('item');
|
|
67
|
+
expect(items).toHaveLength(2);
|
|
68
|
+
/* eslint-disable-next-line testing-library/no-node-access */
|
|
69
|
+
const removeOrange = await within(items[1].parentElement).findByRole('button', {name: /remove/i});
|
|
70
|
+
userEvent.click(removeOrange);
|
|
71
|
+
|
|
72
|
+
expect(onRemoveItemSpy).toHaveBeenCalledWith(1);
|
|
73
|
+
|
|
74
|
+
items = screen.getAllByTestId('item');
|
|
75
|
+
const removeBanana = await within(items[0].parentElement).findByRole('button', {name: /remove/i});
|
|
76
|
+
userEvent.click(removeBanana);
|
|
77
|
+
|
|
78
|
+
expect(onRemoveItemSpy).toHaveBeenCalledWith(0);
|
|
79
|
+
});
|
|
80
|
+
|
|
54
81
|
it('does not render the remove button when disabled', async () => {
|
|
55
82
|
const Fixture = () => {
|
|
56
83
|
const [disabled, setDisabled] = useState(false);
|
|
@@ -224,7 +224,7 @@ export const Table: TableType = <T,>({
|
|
|
224
224
|
const width = size !== defaultColumnSizing.size ? size : undefined;
|
|
225
225
|
return (
|
|
226
226
|
<td key={cell.id} style={{width}}>
|
|
227
|
-
<Skeleton visible={loading}>
|
|
227
|
+
<Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>
|
|
228
228
|
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
229
229
|
</Skeleton>
|
|
230
230
|
</td>
|