@coveord/plasma-mantine 48.22.5 → 48.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +10 -10
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/code-editor/CodeEditor.js +1 -3
- package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
- package/dist/cjs/components/collection/Collection.js +15 -17
- package/dist/cjs/components/collection/Collection.js.map +1 -1
- package/dist/cjs/components/table/Table.js +48 -45
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/cjs/components/table/TableActions.js +4 -4
- package/dist/cjs/components/table/TableActions.js.map +1 -1
- package/dist/cjs/components/table/TableCollapsibleColumn.js +1 -1
- package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
- package/dist/cjs/components/table/TableContext.js.map +1 -1
- package/dist/cjs/components/table/TableFilter.js +4 -0
- package/dist/cjs/components/table/TableFilter.js.map +1 -1
- package/dist/cjs/components/table/TableHeader.js +36 -4
- package/dist/cjs/components/table/TableHeader.js.map +1 -1
- package/dist/cjs/components/table/TableSelectableColumn.js +46 -0
- package/dist/cjs/components/table/TableSelectableColumn.js.map +1 -0
- package/dist/cjs/components/table/Th.js +5 -15
- package/dist/cjs/components/table/Th.js.map +1 -1
- package/dist/cjs/components/table/useRowSelection.js +58 -0
- package/dist/cjs/components/table/useRowSelection.js.map +1 -0
- package/dist/cjs/theme/Theme.js +15 -10
- package/dist/cjs/theme/Theme.js.map +1 -1
- package/dist/definitions/components/code-editor/CodeEditor.d.ts.map +1 -1
- package/dist/definitions/components/collection/Collection.d.ts.map +1 -1
- package/dist/definitions/components/table/Table.d.ts +12 -2
- package/dist/definitions/components/table/Table.d.ts.map +1 -1
- package/dist/definitions/components/table/TableActions.d.ts +3 -3
- package/dist/definitions/components/table/TableActions.d.ts.map +1 -1
- package/dist/definitions/components/table/TableCollapsibleColumn.d.ts +1 -1
- package/dist/definitions/components/table/TableContext.d.ts +6 -1
- package/dist/definitions/components/table/TableContext.d.ts.map +1 -1
- package/dist/definitions/components/table/TableFilter.d.ts.map +1 -1
- package/dist/definitions/components/table/TableHeader.d.ts.map +1 -1
- package/dist/definitions/components/table/TableSelectableColumn.d.ts +6 -0
- package/dist/definitions/components/table/TableSelectableColumn.d.ts.map +1 -0
- package/dist/definitions/components/table/Th.d.ts.map +1 -1
- package/dist/definitions/components/table/useRowSelection.d.ts +7 -0
- package/dist/definitions/components/table/useRowSelection.d.ts.map +1 -0
- package/dist/definitions/components/table/useTable.d.ts +2 -0
- package/dist/definitions/components/table/useTable.d.ts.map +1 -1
- package/dist/definitions/theme/Theme.d.ts.map +1 -1
- package/dist/esm/components/code-editor/CodeEditor.js +1 -3
- package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
- package/dist/esm/components/collection/Collection.js +15 -17
- package/dist/esm/components/collection/Collection.js.map +1 -1
- package/dist/esm/components/table/Table.js +48 -45
- package/dist/esm/components/table/Table.js.map +1 -1
- package/dist/esm/components/table/TableActions.js +4 -4
- package/dist/esm/components/table/TableActions.js.map +1 -1
- package/dist/esm/components/table/TableCollapsibleColumn.js +2 -2
- package/dist/esm/components/table/TableCollapsibleColumn.js.map +1 -1
- package/dist/esm/components/table/TableContext.js.map +1 -1
- package/dist/esm/components/table/TableFilter.js +4 -0
- package/dist/esm/components/table/TableFilter.js.map +1 -1
- package/dist/esm/components/table/TableHeader.js +38 -6
- package/dist/esm/components/table/TableHeader.js.map +1 -1
- package/dist/esm/components/table/TableSelectableColumn.js +38 -0
- package/dist/esm/components/table/TableSelectableColumn.js.map +1 -0
- package/dist/esm/components/table/Th.js +5 -15
- package/dist/esm/components/table/Th.js.map +1 -1
- package/dist/esm/components/table/useRowSelection.js +48 -0
- package/dist/esm/components/table/useRowSelection.js.map +1 -0
- package/dist/esm/theme/Theme.js +15 -10
- package/dist/esm/theme/Theme.js.map +1 -1
- package/package.json +1 -1
- package/src/components/code-editor/CodeEditor.tsx +1 -3
- package/src/components/collection/Collection.tsx +8 -10
- package/src/components/table/Table.tsx +91 -62
- package/src/components/table/TableActions.tsx +7 -7
- package/src/components/table/TableCollapsibleColumn.tsx +2 -2
- package/src/components/table/TableContext.tsx +6 -1
- package/src/components/table/TableFilter.tsx +7 -1
- package/src/components/table/TableHeader.tsx +24 -4
- package/src/components/table/TableSelectableColumn.tsx +33 -0
- package/src/components/table/Th.tsx +6 -19
- package/src/components/table/__tests__/Table.spec.tsx +100 -7
- package/src/components/table/__tests__/TableActions.spec.tsx +21 -0
- package/src/components/table/__tests__/TableFilter.spec.tsx +48 -1
- package/src/components/table/useRowSelection.ts +45 -0
- package/src/theme/Theme.tsx +14 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ColumnDef, createColumnHelper} from '@tanstack/table-core';
|
|
2
|
-
import {render, screen, userEvent} from '@test-utils';
|
|
2
|
+
import {render, screen, userEvent, within} from '@test-utils';
|
|
3
3
|
|
|
4
4
|
import {Table} from '../Table';
|
|
5
5
|
|
|
@@ -37,4 +37,51 @@ describe('Table.Filter', () => {
|
|
|
37
37
|
|
|
38
38
|
expect(onChange).toHaveBeenCalledWith(expect.objectContaining({globalFilter: 'vegetable'}));
|
|
39
39
|
});
|
|
40
|
+
|
|
41
|
+
it('goes back to the first page when changing the filter', async () => {
|
|
42
|
+
const user = userEvent.setup({delay: null});
|
|
43
|
+
const onChange = jest.fn();
|
|
44
|
+
render(
|
|
45
|
+
<Table data={[{name: 'fruit'}, {name: 'vegetable'}]} columns={columns} onChange={onChange}>
|
|
46
|
+
<Table.Header>
|
|
47
|
+
<Table.Filter />
|
|
48
|
+
</Table.Header>
|
|
49
|
+
<Table.Footer>
|
|
50
|
+
<Table.PerPage />
|
|
51
|
+
<Table.Pagination totalPages={2} />
|
|
52
|
+
</Table.Footer>
|
|
53
|
+
</Table>
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
await user.type(screen.getByRole('textbox'), 'veg');
|
|
57
|
+
|
|
58
|
+
expect(onChange).toHaveBeenCalledWith(
|
|
59
|
+
expect.objectContaining({globalFilter: 'veg', pagination: {pageIndex: 0, pageSize: 50}})
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe('when multi row selection is enabled', () => {
|
|
64
|
+
it('does not unselect rows that get filtered out', async () => {
|
|
65
|
+
const user = userEvent.setup({delay: null});
|
|
66
|
+
const onChange = jest.fn();
|
|
67
|
+
render(
|
|
68
|
+
<Table
|
|
69
|
+
data={[{name: 'fruit'}, {name: 'vegetable'}]}
|
|
70
|
+
columns={columns}
|
|
71
|
+
onChange={onChange}
|
|
72
|
+
multiRowSelectionEnabled
|
|
73
|
+
>
|
|
74
|
+
<Table.Header>
|
|
75
|
+
<Table.Filter />
|
|
76
|
+
</Table.Header>
|
|
77
|
+
</Table>
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
await user.click(
|
|
81
|
+
within(screen.getByRole('row', {name: /fruit/i})).getByRole('checkbox', {name: /select row/i})
|
|
82
|
+
);
|
|
83
|
+
await user.type(screen.getByRole('textbox'), 'veg');
|
|
84
|
+
expect(screen.getByRole('button', {name: /1 selected/i})).toBeInTheDocument();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
40
87
|
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {functionalUpdate, Table} from '@tanstack/table-core';
|
|
2
|
+
import {useState} from 'react';
|
|
3
|
+
|
|
4
|
+
export const useRowSelection = <T>(table: Table<T>) => {
|
|
5
|
+
const [rowSelection, setRowSelection] = useState<Record<string, T>>({});
|
|
6
|
+
|
|
7
|
+
table.setOptions((prev) => ({
|
|
8
|
+
...prev,
|
|
9
|
+
onRowSelectionChange: (rowSelectionUpdater) => {
|
|
10
|
+
table.setState((old) => {
|
|
11
|
+
const selectedRowsIds = functionalUpdate(rowSelectionUpdater, old['rowSelection']);
|
|
12
|
+
setRowSelection((current) => {
|
|
13
|
+
const currentRowsById = table.getRowModel().rowsById;
|
|
14
|
+
return Object.keys(selectedRowsIds).reduce((memo, rowId) => {
|
|
15
|
+
if (current[rowId]) {
|
|
16
|
+
memo[rowId] = current[rowId];
|
|
17
|
+
} else {
|
|
18
|
+
memo[rowId] = currentRowsById[rowId].original;
|
|
19
|
+
}
|
|
20
|
+
return memo;
|
|
21
|
+
}, {} as Record<string, T>);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
...old,
|
|
26
|
+
rowSelection: selectedRowsIds,
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
const clearSelection = () => {
|
|
33
|
+
table.resetRowSelection(true);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const getSelectedRows = () => Object.values(rowSelection);
|
|
37
|
+
|
|
38
|
+
const getSelectedRow = () => getSelectedRows()[0] ?? null;
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
clearSelection,
|
|
42
|
+
getSelectedRow,
|
|
43
|
+
getSelectedRows,
|
|
44
|
+
};
|
|
45
|
+
};
|
package/src/theme/Theme.tsx
CHANGED
|
@@ -5,6 +5,7 @@ import {ButtonStylesParams, MantineThemeOverride, ModalStylesParams} from '@mant
|
|
|
5
5
|
import {PlasmaColors} from './PlasmaColors';
|
|
6
6
|
|
|
7
7
|
export const plasmaTheme: MantineThemeOverride = {
|
|
8
|
+
// These are overrides over https://github.com/mantinedev/mantine/blob/master/src/mantine-styles/src/theme/default-theme.ts
|
|
8
9
|
colorScheme: 'light',
|
|
9
10
|
fontFamily: 'canada-type-gibson, sans-serif',
|
|
10
11
|
black: color.primary.gray[9],
|
|
@@ -59,7 +60,7 @@ export const plasmaTheme: MantineThemeOverride = {
|
|
|
59
60
|
Button: {
|
|
60
61
|
styles: (theme, params: ButtonStylesParams) => ({
|
|
61
62
|
root: {
|
|
62
|
-
|
|
63
|
+
fontWeight: 400,
|
|
63
64
|
backgroundColor: params.variant === 'outline' ? 'white' : undefined,
|
|
64
65
|
},
|
|
65
66
|
}),
|
|
@@ -81,17 +82,23 @@ export const plasmaTheme: MantineThemeOverride = {
|
|
|
81
82
|
defaultProps: {
|
|
82
83
|
withAsterisk: false,
|
|
83
84
|
},
|
|
85
|
+
styles: (theme) => ({
|
|
86
|
+
label: {
|
|
87
|
+
marginBottom: theme.spacing.xs,
|
|
88
|
+
lineHeight: '20px',
|
|
89
|
+
},
|
|
90
|
+
description: {
|
|
91
|
+
lineHeight: '20px',
|
|
92
|
+
fontSize: theme.fontSizes.sm,
|
|
93
|
+
color: theme.colors.gray[7],
|
|
94
|
+
marginBottom: theme.spacing.xs,
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
84
97
|
},
|
|
85
98
|
TextInput: {
|
|
86
99
|
defaultProps: {
|
|
87
100
|
radius: 8,
|
|
88
101
|
},
|
|
89
|
-
styles: (theme) => ({
|
|
90
|
-
description: {
|
|
91
|
-
fontSize: 'inherit',
|
|
92
|
-
paddingBottom: theme.spacing.xs,
|
|
93
|
-
},
|
|
94
|
-
}),
|
|
95
102
|
},
|
|
96
103
|
Tooltip: {
|
|
97
104
|
defaultProps: {
|