@coveord/plasma-mantine 48.21.0 → 48.22.5
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/table/TableFilter.js +16 -5
- package/dist/cjs/components/table/TableFilter.js.map +1 -1
- package/dist/cjs/components/table/TablePerPage.js +3 -2
- package/dist/cjs/components/table/TablePerPage.js.map +1 -1
- package/dist/definitions/components/table/TableFilter.d.ts +8 -1
- package/dist/definitions/components/table/TableFilter.d.ts.map +1 -1
- package/dist/esm/components/table/TableFilter.js +16 -5
- package/dist/esm/components/table/TableFilter.js.map +1 -1
- package/dist/esm/components/table/TablePerPage.js +3 -2
- package/dist/esm/components/table/TablePerPage.js.map +1 -1
- package/package.json +1 -1
- package/src/components/table/TableFilter.tsx +12 -4
- package/src/components/table/TablePerPage.tsx +1 -1
- package/src/components/table/__tests__/TablePerPage.spec.tsx +24 -0
|
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "TableFilter", {
|
|
|
11
11
|
var _defineProperty = require("@swc/helpers/lib/_define_property.js").default;
|
|
12
12
|
var _objectSpread = require("@swc/helpers/lib/_object_spread.js").default;
|
|
13
13
|
var _objectSpreadProps = require("@swc/helpers/lib/_object_spread_props.js").default;
|
|
14
|
+
var _objectWithoutProperties = require("@swc/helpers/lib/_object_without_properties.js").default;
|
|
14
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
16
|
var _plasmaReactIcons = require("@coveord/plasma-react-icons");
|
|
16
17
|
var _core = require("@mantine/core");
|
|
@@ -25,9 +26,19 @@ var useStyles = (0, _core.createStyles)(function(theme) {
|
|
|
25
26
|
}
|
|
26
27
|
};
|
|
27
28
|
});
|
|
28
|
-
var TableFilter = function(
|
|
29
|
-
var _param_placeholder =
|
|
30
|
-
|
|
29
|
+
var TableFilter = function(_param) {
|
|
30
|
+
var _param_placeholder = _param.placeholder, placeholder = _param_placeholder === void 0 ? "Search by any field" : _param_placeholder, classNames = _param.classNames, styles = _param.styles, unstyled = _param.unstyled, others = _objectWithoutProperties(_param, [
|
|
31
|
+
"placeholder",
|
|
32
|
+
"classNames",
|
|
33
|
+
"styles",
|
|
34
|
+
"unstyled"
|
|
35
|
+
]);
|
|
36
|
+
var _useStyles = useStyles(null, {
|
|
37
|
+
name: "TableHeader",
|
|
38
|
+
classNames: classNames,
|
|
39
|
+
styles: styles,
|
|
40
|
+
unstyled: unstyled
|
|
41
|
+
}), classes = _useStyles.classes, cx = _useStyles.cx;
|
|
31
42
|
var _useTable1 = (0, _useTable.useTable)(), state = _useTable1.state, setState = _useTable1.setState;
|
|
32
43
|
var handleSearchChange = function(event) {
|
|
33
44
|
var value = event.currentTarget.value;
|
|
@@ -37,7 +48,7 @@ var TableFilter = function(param) {
|
|
|
37
48
|
});
|
|
38
49
|
});
|
|
39
50
|
};
|
|
40
|
-
return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.TextInput, {
|
|
51
|
+
return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_core.TextInput, _objectSpread({
|
|
41
52
|
className: classes.wrapper,
|
|
42
53
|
placeholder: placeholder,
|
|
43
54
|
mb: "md",
|
|
@@ -47,7 +58,7 @@ var TableFilter = function(param) {
|
|
|
47
58
|
}),
|
|
48
59
|
value: state.globalFilter,
|
|
49
60
|
onChange: handleSearchChange
|
|
50
|
-
});
|
|
61
|
+
}, others));
|
|
51
62
|
};
|
|
52
63
|
|
|
53
64
|
//# sourceMappingURL=TableFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {createStyles, TextInput} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {ChangeEvent, FunctionComponent} from 'react';\nimport {useTable} from './useTable';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n marginBottom: '0 !important',\n },\n empty: {\n color: theme.colors.gray[4],\n },\n}));\n\ninterface TableFilterProps {\n /**\n * The placeholder for the filter input\n *\n * @default \"Search by any field\"\n */\n placeholder?: string;\n}\n\nexport const TableFilter: FunctionComponent<TableFilterProps> = ({placeholder = 'Search by any field'}) => {\n const {classes, cx} = useStyles();\n const {state, setState} = useTable();\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.currentTarget;\n setState((prevState: TableState) => ({...prevState, globalFilter: value}));\n };\n\n return (\n <TextInput\n className={classes.wrapper}\n placeholder={placeholder}\n mb=\"md\"\n rightSection={<SearchSize16Px height={14} className={cx({[classes.empty]: !state.globalFilter})} />}\n value={state.globalFilter}\n onChange={handleSearchChange}\n />\n );\n};\n"],"names":["TableFilter","useStyles","createStyles","theme","wrapper","marginBottom","empty","color","colors","gray","placeholder","classes","cx","useTable","state","setState","handleSearchChange","event","value","currentTarget","prevState","globalFilter","TextInput","className","mb","rightSection","SearchSize16Px","height","onChange"],"mappings":"AAAA;;;;+
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {createStyles, TextInput, Selectors, DefaultProps} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {ChangeEvent, FunctionComponent} from 'react';\nimport {useTable} from './useTable';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n marginBottom: '0 !important',\n },\n empty: {\n color: theme.colors.gray[4],\n },\n}));\n\ntype TableFilterStylesNames = Selectors<typeof useStyles>;\ninterface TableFilterProps extends DefaultProps<TableFilterStylesNames> {\n /**\n * The placeholder for the filter input\n *\n * @default \"Search by any field\"\n */\n placeholder?: string;\n}\n\nexport const TableFilter: FunctionComponent<TableFilterProps> = ({\n placeholder = 'Search by any field',\n classNames,\n styles,\n unstyled,\n ...others\n}) => {\n const {classes, cx} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});\n const {state, setState} = useTable();\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.currentTarget;\n setState((prevState: TableState) => ({...prevState, globalFilter: value}));\n };\n\n return (\n <TextInput\n className={classes.wrapper}\n placeholder={placeholder}\n mb=\"md\"\n rightSection={<SearchSize16Px height={14} className={cx({[classes.empty]: !state.globalFilter})} />}\n value={state.globalFilter}\n onChange={handleSearchChange}\n {...others}\n />\n );\n};\n"],"names":["TableFilter","useStyles","createStyles","theme","wrapper","marginBottom","empty","color","colors","gray","placeholder","classNames","styles","unstyled","others","name","classes","cx","useTable","state","setState","handleSearchChange","event","value","currentTarget","prevState","globalFilter","TextInput","className","mb","rightSection","SearchSize16Px","height","onChange"],"mappings":"AAAA;;;;+BAyBaA;;;eAAAA;;;;;;;;gCAzBgB;oBACkC;wBAGxC;AAEvB,IAAMC,YAAYC,IAAAA,kBAAY,EAAC,SAACC;WAAW;QACvCC,SAAS;YACLC,cAAc;QAClB;QACAC,OAAO;YACHC,OAAOJ,MAAMK,MAAM,CAACC,IAAI,CAAC,EAAE;QAC/B;IACJ;;AAYO,IAAMT,cAAmD,iBAM1D;oCALFU,aAAAA,8CAAc,4CACdC,oBAAAA,YACAC,gBAAAA,QACAC,kBAAAA,UACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAsBZ,aAAAA,UAAU,IAAI,EAAE;QAACc,MAAM;QAAeJ,YAAAA;QAAYC,QAAAA;QAAQC,UAAAA;IAAQ,IAAjFG,UAAef,WAAfe,SAASC,KAAMhB,WAANgB;IAChB,IAA0BC,aAAAA,IAAAA,kBAAQ,KAA3BC,QAAmBD,WAAnBC,OAAOC,WAAYF,WAAZE;IAEd,IAAMC,qBAAqB,SAACC,OAAyC;QACjE,IAAM,AAACC,QAASD,MAAME,aAAa,CAA5BD;QACPH,SAAS,SAACK;mBAA2B,qCAAIA;gBAAWC,cAAcH;;;IACtE;IAEA,qBACI,qBAACI,eAAS;QACNC,WAAWZ,QAAQZ,OAAO;QAC1BM,aAAaA;QACbmB,IAAG;QACHC,4BAAc,qBAACC,gCAAc;YAACC,QAAQ;YAAIJ,WAAWX,GAAI,oBAACD,QAAQV,KAAK,EAAG,CAACa,MAAMO,YAAY;;QAC7FH,OAAOJ,MAAMO,YAAY;QACzBO,UAAUZ;OACNP;AAGhB"}
|
|
@@ -23,9 +23,10 @@ var TablePerPage = function(param) {
|
|
|
23
23
|
var updatePerPage = function(newPerPage) {
|
|
24
24
|
setState(function(prevState) {
|
|
25
25
|
return _objectSpreadProps(_objectSpread({}, prevState), {
|
|
26
|
-
pagination:
|
|
26
|
+
pagination: {
|
|
27
|
+
pageIndex: 0,
|
|
27
28
|
pageSize: parseInt(newPerPage, 10)
|
|
28
|
-
}
|
|
29
|
+
}
|
|
29
30
|
});
|
|
30
31
|
});
|
|
31
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TablePerPage.tsx"],"sourcesContent":["import {Group, SegmentedControl, Text} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from './useTable';\n\ninterface TablePerPageProps {\n /**\n * The label displayed before the control\n *\n * @default Results per page\n */\n label?: string;\n /**\n * The per page choices to display\n *\n * @default [25, 50, 100]\n */\n values?: number[];\n}\n\nexport const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE: number} = ({\n label = 'Results per page',\n values = [25, 50, 100],\n}) => {\n const {state, setState} = useTable();\n\n const updatePerPage = (newPerPage: string) => {\n setState((prevState: TableState) => ({\n ...prevState,\n pagination: {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TablePerPage.tsx"],"sourcesContent":["import {Group, SegmentedControl, Text} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from './useTable';\n\ninterface TablePerPageProps {\n /**\n * The label displayed before the control\n *\n * @default Results per page\n */\n label?: string;\n /**\n * The per page choices to display\n *\n * @default [25, 50, 100]\n */\n values?: number[];\n}\n\nexport const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE: number} = ({\n label = 'Results per page',\n values = [25, 50, 100],\n}) => {\n const {state, setState} = useTable();\n\n const updatePerPage = (newPerPage: string) => {\n setState((prevState: TableState) => ({\n ...prevState,\n pagination: {pageIndex: 0, pageSize: parseInt(newPerPage, 10)},\n }));\n };\n\n return (\n <Group>\n <Text>{label}</Text>\n <SegmentedControl\n value={state.pagination.pageSize.toString() ?? values?.[1].toString()}\n onChange={updatePerPage}\n data={values.map((value) => value.toString())}\n color=\"action\"\n size=\"md\"\n />\n </Group>\n );\n};\n\nTablePerPage.DEFAULT_SIZE = 50;\n"],"names":["TablePerPage","label","values","useTable","state","setState","updatePerPage","newPerPage","prevState","pagination","pageIndex","pageSize","parseInt","Group","Text","SegmentedControl","value","toString","onChange","data","map","color","size","DEFAULT_SIZE"],"mappings":"AAAA;;;;+BAqBaA;;;eAAAA;;;;;;oBArB+B;wBAIrB;AAiBhB,IAAMA,eAA8E,gBAGrF;6BAFFC,OAAAA,kCAAQ,yDACRC,QAAAA,oCAAS;QAAC;QAAI;QAAI;KAAI;IAEtB,IAA0BC,aAAAA,IAAAA,kBAAQ,KAA3BC,QAAmBD,WAAnBC,OAAOC,WAAYF,WAAZE;IAEd,IAAMC,gBAAgB,SAACC,YAAuB;QAC1CF,SAAS,SAACG;mBAA2B,qCAC9BA;gBACHC,YAAY;oBAACC,WAAW;oBAAGC,UAAUC,SAASL,YAAY;gBAAG;;;IAErE;QAMmBH;IAJnB,qBACI,sBAACS,WAAK;;0BACF,qBAACC,UAAI;0BAAEb;;0BACP,qBAACc,sBAAgB;gBACbC,OAAOZ,CAAAA,sCAAAA,MAAMK,UAAU,CAACE,QAAQ,CAACM,QAAQ,gBAAlCb,iDAAAA,sCAAwCF,mBAAAA,oBAAAA,KAAAA,IAAAA,MAAQ,CAAC,EAAE,CAACe,QAAQ,EAAE;gBACrEC,UAAUZ;gBACVa,MAAMjB,OAAOkB,GAAG,CAAC,SAACJ;2BAAUA,MAAMC,QAAQ;;gBAC1CI,OAAM;gBACNC,MAAK;;;;AAIrB;AAEAtB,aAAauB,YAAY,GAAG"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { Selectors, DefaultProps } from '@mantine/core';
|
|
1
2
|
import { FunctionComponent } from 'react';
|
|
2
|
-
|
|
3
|
+
declare const useStyles: (params: void, options?: import("@mantine/core").UseStylesOptions<"wrapper" | "empty">) => {
|
|
4
|
+
classes: Record<"wrapper" | "empty", string>;
|
|
5
|
+
cx: (...args: any) => string;
|
|
6
|
+
theme: import("@mantine/core").MantineTheme;
|
|
7
|
+
};
|
|
8
|
+
type TableFilterStylesNames = Selectors<typeof useStyles>;
|
|
9
|
+
interface TableFilterProps extends DefaultProps<TableFilterStylesNames> {
|
|
3
10
|
/**
|
|
4
11
|
* The placeholder for the filter input
|
|
5
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/table/TableFilter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableFilter.d.ts","sourceRoot":"","sources":["../../../../src/components/table/TableFilter.tsx"],"names":[],"mappings":"AACA,OAAO,EAA0B,SAAS,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAc,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAGrD,QAAA,MAAM,SAAS;;;;CAOZ,CAAC;AAEJ,KAAK,sBAAsB,GAAG,SAAS,CAAC,OAAO,SAAS,CAAC,CAAC;AAC1D,UAAU,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IACnE;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,CA0B3D,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _define_property from "@swc/helpers/src/_define_property.mjs";
|
|
2
2
|
import _object_spread from "@swc/helpers/src/_object_spread.mjs";
|
|
3
3
|
import _object_spread_props from "@swc/helpers/src/_object_spread_props.mjs";
|
|
4
|
+
import _object_without_properties from "@swc/helpers/src/_object_without_properties.mjs";
|
|
4
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
6
|
import { SearchSize16Px } from "@coveord/plasma-react-icons";
|
|
6
7
|
import { createStyles, TextInput } from "@mantine/core";
|
|
@@ -15,9 +16,19 @@ var useStyles = createStyles(function(theme) {
|
|
|
15
16
|
}
|
|
16
17
|
};
|
|
17
18
|
});
|
|
18
|
-
export var TableFilter = function(
|
|
19
|
-
var _param_placeholder =
|
|
20
|
-
|
|
19
|
+
export var TableFilter = function(_param) {
|
|
20
|
+
var _param_placeholder = _param.placeholder, placeholder = _param_placeholder === void 0 ? "Search by any field" : _param_placeholder, classNames = _param.classNames, styles = _param.styles, unstyled = _param.unstyled, others = _object_without_properties(_param, [
|
|
21
|
+
"placeholder",
|
|
22
|
+
"classNames",
|
|
23
|
+
"styles",
|
|
24
|
+
"unstyled"
|
|
25
|
+
]);
|
|
26
|
+
var _useStyles = useStyles(null, {
|
|
27
|
+
name: "TableHeader",
|
|
28
|
+
classNames: classNames,
|
|
29
|
+
styles: styles,
|
|
30
|
+
unstyled: unstyled
|
|
31
|
+
}), classes = _useStyles.classes, cx = _useStyles.cx;
|
|
21
32
|
var _useTable = useTable(), state = _useTable.state, setState = _useTable.setState;
|
|
22
33
|
var handleSearchChange = function(event) {
|
|
23
34
|
var value = event.currentTarget.value;
|
|
@@ -27,7 +38,7 @@ export var TableFilter = function(param) {
|
|
|
27
38
|
});
|
|
28
39
|
});
|
|
29
40
|
};
|
|
30
|
-
return /*#__PURE__*/ _jsx(TextInput, {
|
|
41
|
+
return /*#__PURE__*/ _jsx(TextInput, _object_spread({
|
|
31
42
|
className: classes.wrapper,
|
|
32
43
|
placeholder: placeholder,
|
|
33
44
|
mb: "md",
|
|
@@ -37,7 +48,7 @@ export var TableFilter = function(param) {
|
|
|
37
48
|
}),
|
|
38
49
|
value: state.globalFilter,
|
|
39
50
|
onChange: handleSearchChange
|
|
40
|
-
});
|
|
51
|
+
}, others));
|
|
41
52
|
};
|
|
42
53
|
|
|
43
54
|
//# sourceMappingURL=TableFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {createStyles, TextInput} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {ChangeEvent, FunctionComponent} from 'react';\nimport {useTable} from './useTable';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n marginBottom: '0 !important',\n },\n empty: {\n color: theme.colors.gray[4],\n },\n}));\n\ninterface TableFilterProps {\n /**\n * The placeholder for the filter input\n *\n * @default \"Search by any field\"\n */\n placeholder?: string;\n}\n\nexport const TableFilter: FunctionComponent<TableFilterProps> = ({placeholder = 'Search by any field'}) => {\n const {classes, cx} = useStyles();\n const {state, setState} = useTable();\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.currentTarget;\n setState((prevState: TableState) => ({...prevState, globalFilter: value}));\n };\n\n return (\n <TextInput\n className={classes.wrapper}\n placeholder={placeholder}\n mb=\"md\"\n rightSection={<SearchSize16Px height={14} className={cx({[classes.empty]: !state.globalFilter})} />}\n value={state.globalFilter}\n onChange={handleSearchChange}\n />\n );\n};\n"],"names":["SearchSize16Px","createStyles","TextInput","useTable","useStyles","theme","wrapper","marginBottom","empty","color","colors","gray","TableFilter","placeholder","classes","cx","state","setState","handleSearchChange","event","value","currentTarget","prevState","globalFilter","className","mb","rightSection","height","onChange"],"mappings":"AAAA
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TableFilter.tsx"],"sourcesContent":["import {SearchSize16Px} from '@coveord/plasma-react-icons';\nimport {createStyles, TextInput, Selectors, DefaultProps} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {ChangeEvent, FunctionComponent} from 'react';\nimport {useTable} from './useTable';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n marginBottom: '0 !important',\n },\n empty: {\n color: theme.colors.gray[4],\n },\n}));\n\ntype TableFilterStylesNames = Selectors<typeof useStyles>;\ninterface TableFilterProps extends DefaultProps<TableFilterStylesNames> {\n /**\n * The placeholder for the filter input\n *\n * @default \"Search by any field\"\n */\n placeholder?: string;\n}\n\nexport const TableFilter: FunctionComponent<TableFilterProps> = ({\n placeholder = 'Search by any field',\n classNames,\n styles,\n unstyled,\n ...others\n}) => {\n const {classes, cx} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});\n const {state, setState} = useTable();\n\n const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.currentTarget;\n setState((prevState: TableState) => ({...prevState, globalFilter: value}));\n };\n\n return (\n <TextInput\n className={classes.wrapper}\n placeholder={placeholder}\n mb=\"md\"\n rightSection={<SearchSize16Px height={14} className={cx({[classes.empty]: !state.globalFilter})} />}\n value={state.globalFilter}\n onChange={handleSearchChange}\n {...others}\n />\n );\n};\n"],"names":["SearchSize16Px","createStyles","TextInput","useTable","useStyles","theme","wrapper","marginBottom","empty","color","colors","gray","TableFilter","placeholder","classNames","styles","unstyled","others","name","classes","cx","state","setState","handleSearchChange","event","value","currentTarget","prevState","globalFilter","className","mb","rightSection","height","onChange"],"mappings":"AAAA;;;;;AAAA,SAAQA,cAAc,QAAO,8BAA8B;AAC3D,SAAQC,YAAY,EAAEC,SAAS,QAAgC,gBAAgB;AAG/E,SAAQC,QAAQ,QAAO,aAAa;AAEpC,IAAMC,YAAYH,aAAa,SAACI;WAAW;QACvCC,SAAS;YACLC,cAAc;QAClB;QACAC,OAAO;YACHC,OAAOJ,MAAMK,MAAM,CAACC,IAAI,CAAC,EAAE;QAC/B;IACJ;;AAYA,OAAO,IAAMC,cAAmD,iBAM1D;oCALFC,aAAAA,8CAAc,4CACdC,oBAAAA,YACAC,gBAAAA,QACAC,kBAAAA,UACGC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAsBZ,aAAAA,UAAU,IAAI,EAAE;QAACc,MAAM;QAAeJ,YAAAA;QAAYC,QAAAA;QAAQC,UAAAA;IAAQ,IAAjFG,UAAef,WAAfe,SAASC,KAAMhB,WAANgB;IAChB,IAA0BjB,YAAAA,YAAnBkB,QAAmBlB,UAAnBkB,OAAOC,WAAYnB,UAAZmB;IAEd,IAAMC,qBAAqB,SAACC,OAAyC;QACjE,IAAM,AAACC,QAASD,MAAME,aAAa,CAA5BD;QACPH,SAAS,SAACK;mBAA2B,wCAAIA;gBAAWC,cAAcH;;;IACtE;IAEA,qBACI,KAACvB;QACG2B,WAAWV,QAAQb,OAAO;QAC1BO,aAAaA;QACbiB,IAAG;QACHC,4BAAc,KAAC/B;YAAegC,QAAQ;YAAIH,WAAWT,GAAI,qBAACD,QAAQX,KAAK,EAAG,CAACa,MAAMO,YAAY;;QAC7FH,OAAOJ,MAAMO,YAAY;QACzBK,UAAUV;OACNN;AAGhB,EAAE"}
|
|
@@ -13,9 +13,10 @@ export var TablePerPage = function(param) {
|
|
|
13
13
|
var updatePerPage = function(newPerPage) {
|
|
14
14
|
setState(function(prevState) {
|
|
15
15
|
return _object_spread_props(_object_spread({}, prevState), {
|
|
16
|
-
pagination:
|
|
16
|
+
pagination: {
|
|
17
|
+
pageIndex: 0,
|
|
17
18
|
pageSize: parseInt(newPerPage, 10)
|
|
18
|
-
}
|
|
19
|
+
}
|
|
19
20
|
});
|
|
20
21
|
});
|
|
21
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TablePerPage.tsx"],"sourcesContent":["import {Group, SegmentedControl, Text} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from './useTable';\n\ninterface TablePerPageProps {\n /**\n * The label displayed before the control\n *\n * @default Results per page\n */\n label?: string;\n /**\n * The per page choices to display\n *\n * @default [25, 50, 100]\n */\n values?: number[];\n}\n\nexport const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE: number} = ({\n label = 'Results per page',\n values = [25, 50, 100],\n}) => {\n const {state, setState} = useTable();\n\n const updatePerPage = (newPerPage: string) => {\n setState((prevState: TableState) => ({\n ...prevState,\n pagination: {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TablePerPage.tsx"],"sourcesContent":["import {Group, SegmentedControl, Text} from '@mantine/core';\nimport {TableState} from '@tanstack/react-table';\nimport {FunctionComponent} from 'react';\n\nimport {useTable} from './useTable';\n\ninterface TablePerPageProps {\n /**\n * The label displayed before the control\n *\n * @default Results per page\n */\n label?: string;\n /**\n * The per page choices to display\n *\n * @default [25, 50, 100]\n */\n values?: number[];\n}\n\nexport const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE: number} = ({\n label = 'Results per page',\n values = [25, 50, 100],\n}) => {\n const {state, setState} = useTable();\n\n const updatePerPage = (newPerPage: string) => {\n setState((prevState: TableState) => ({\n ...prevState,\n pagination: {pageIndex: 0, pageSize: parseInt(newPerPage, 10)},\n }));\n };\n\n return (\n <Group>\n <Text>{label}</Text>\n <SegmentedControl\n value={state.pagination.pageSize.toString() ?? values?.[1].toString()}\n onChange={updatePerPage}\n data={values.map((value) => value.toString())}\n color=\"action\"\n size=\"md\"\n />\n </Group>\n );\n};\n\nTablePerPage.DEFAULT_SIZE = 50;\n"],"names":["Group","SegmentedControl","Text","useTable","TablePerPage","label","values","state","setState","updatePerPage","newPerPage","prevState","pagination","pageIndex","pageSize","parseInt","value","toString","onChange","data","map","color","size","DEFAULT_SIZE"],"mappings":"AAAA;;;AAAA,SAAQA,KAAK,EAAEC,gBAAgB,EAAEC,IAAI,QAAO,gBAAgB;AAI5D,SAAQC,QAAQ,QAAO,aAAa;AAiBpC,OAAO,IAAMC,eAA8E,gBAGrF;6BAFFC,OAAAA,kCAAQ,yDACRC,QAAAA,oCAAS;QAAC;QAAI;QAAI;KAAI;IAEtB,IAA0BH,YAAAA,YAAnBI,QAAmBJ,UAAnBI,OAAOC,WAAYL,UAAZK;IAEd,IAAMC,gBAAgB,SAACC,YAAuB;QAC1CF,SAAS,SAACG;mBAA2B,wCAC9BA;gBACHC,YAAY;oBAACC,WAAW;oBAAGC,UAAUC,SAASL,YAAY;gBAAG;;;IAErE;QAMmBH;IAJnB,qBACI,MAACP;;0BACG,KAACE;0BAAMG;;0BACP,KAACJ;gBACGe,OAAOT,CAAAA,sCAAAA,MAAMK,UAAU,CAACE,QAAQ,CAACG,QAAQ,gBAAlCV,iDAAAA,sCAAwCD,mBAAAA,oBAAAA,KAAAA,IAAAA,MAAQ,CAAC,EAAE,CAACW,QAAQ,EAAE;gBACrEC,UAAUT;gBACVU,MAAMb,OAAOc,GAAG,CAAC,SAACJ;2BAAUA,MAAMC,QAAQ;;gBAC1CI,OAAM;gBACNC,MAAK;;;;AAIrB,EAAE;AAEFlB,aAAamB,YAAY,GAAG"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {SearchSize16Px} from '@coveord/plasma-react-icons';
|
|
2
|
-
import {createStyles, TextInput} from '@mantine/core';
|
|
2
|
+
import {createStyles, TextInput, Selectors, DefaultProps} from '@mantine/core';
|
|
3
3
|
import {TableState} from '@tanstack/react-table';
|
|
4
4
|
import {ChangeEvent, FunctionComponent} from 'react';
|
|
5
5
|
import {useTable} from './useTable';
|
|
@@ -13,7 +13,8 @@ const useStyles = createStyles((theme) => ({
|
|
|
13
13
|
},
|
|
14
14
|
}));
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
type TableFilterStylesNames = Selectors<typeof useStyles>;
|
|
17
|
+
interface TableFilterProps extends DefaultProps<TableFilterStylesNames> {
|
|
17
18
|
/**
|
|
18
19
|
* The placeholder for the filter input
|
|
19
20
|
*
|
|
@@ -22,8 +23,14 @@ interface TableFilterProps {
|
|
|
22
23
|
placeholder?: string;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
26
|
-
|
|
26
|
+
export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
27
|
+
placeholder = 'Search by any field',
|
|
28
|
+
classNames,
|
|
29
|
+
styles,
|
|
30
|
+
unstyled,
|
|
31
|
+
...others
|
|
32
|
+
}) => {
|
|
33
|
+
const {classes, cx} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});
|
|
27
34
|
const {state, setState} = useTable();
|
|
28
35
|
|
|
29
36
|
const handleSearchChange = (event: ChangeEvent<HTMLInputElement>) => {
|
|
@@ -39,6 +46,7 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({placeholder =
|
|
|
39
46
|
rightSection={<SearchSize16Px height={14} className={cx({[classes.empty]: !state.globalFilter})} />}
|
|
40
47
|
value={state.globalFilter}
|
|
41
48
|
onChange={handleSearchChange}
|
|
49
|
+
{...others}
|
|
42
50
|
/>
|
|
43
51
|
);
|
|
44
52
|
};
|
|
@@ -28,7 +28,7 @@ export const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE:
|
|
|
28
28
|
const updatePerPage = (newPerPage: string) => {
|
|
29
29
|
setState((prevState: TableState) => ({
|
|
30
30
|
...prevState,
|
|
31
|
-
pagination: {
|
|
31
|
+
pagination: {pageIndex: 0, pageSize: parseInt(newPerPage, 10)},
|
|
32
32
|
}));
|
|
33
33
|
};
|
|
34
34
|
|
|
@@ -79,4 +79,28 @@ describe('Table.PerPage', () => {
|
|
|
79
79
|
expect.objectContaining({pagination: expect.objectContaining({pageSize: 100})})
|
|
80
80
|
);
|
|
81
81
|
});
|
|
82
|
+
|
|
83
|
+
it('resets page index when changing the number of items per page', async () => {
|
|
84
|
+
const user = userEvent.setup({delay: null});
|
|
85
|
+
const onChange = jest.fn();
|
|
86
|
+
render(
|
|
87
|
+
<Table
|
|
88
|
+
data={[{name: 'fruit'}, {name: 'vegetable'}]}
|
|
89
|
+
columns={columns}
|
|
90
|
+
onChange={onChange}
|
|
91
|
+
initialState={{pagination: {pageIndex: 1, pageSize: 50}}}
|
|
92
|
+
>
|
|
93
|
+
<Table.Footer>
|
|
94
|
+
<Table.Pagination totalPages={2} />
|
|
95
|
+
<Table.PerPage />
|
|
96
|
+
</Table.Footer>
|
|
97
|
+
</Table>
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
await user.click(screen.queryByRole('radio', {name: '100'}));
|
|
101
|
+
|
|
102
|
+
expect(onChange).toHaveBeenCalledWith(
|
|
103
|
+
expect.objectContaining({pagination: expect.objectContaining({pageIndex: 0})})
|
|
104
|
+
);
|
|
105
|
+
});
|
|
82
106
|
});
|