@tsed/react-formio 3.0.0-rc.15 → 3.0.0-rc.16
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/dist/molecules/table/components/DefaultBooleanCell.js +3 -3
- package/dist/molecules/table/components/DefaultBooleanCell.js.map +1 -1
- package/dist/molecules/table/filters/SelectFilter.js +16 -15
- package/dist/molecules/table/filters/SelectFilter.js.map +1 -1
- package/dist/molecules/table/filters/TextFieldFilter.js +8 -8
- package/dist/molecules/table/filters/TextFieldFilter.js.map +1 -1
- package/dist/molecules/table/hooks/useUniqValues.d.ts +3 -3
- package/dist/molecules/table/hooks/useUniqValues.js +16 -6
- package/dist/molecules/table/hooks/useUniqValues.js.map +1 -1
- package/package.json +3 -3
- package/src/molecules/table/components/DefaultBooleanCell.spec.tsx +2 -2
- package/src/molecules/table/components/DefaultBooleanCell.tsx +1 -1
- package/src/molecules/table/filters/SelectFilter.tsx +3 -2
- package/src/molecules/table/filters/TextFieldFilter.tsx +1 -1
- package/src/molecules/table/hooks/useUniqValues.spec.tsx +51 -0
- package/src/molecules/table/hooks/useUniqValues.tsx +21 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { registerComponent as o } from "../../../registries/components.js";
|
|
3
|
-
function l({ getValue:
|
|
4
|
-
const
|
|
5
|
-
return /* @__PURE__ */ r("span", { children: String(
|
|
3
|
+
function l({ getValue: n, column: { columnDef: e } }) {
|
|
4
|
+
const t = n();
|
|
5
|
+
return /* @__PURE__ */ r("span", { children: String(t ? e.meta?.labels?.yes || "Yes" : e.meta?.labels?.no || "No") });
|
|
6
6
|
}
|
|
7
7
|
o("Cell.boolean", l);
|
|
8
8
|
o("Cell.checkbox", l);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultBooleanCell.js","sources":["../../../../src/molecules/table/components/DefaultBooleanCell.tsx"],"sourcesContent":["import { CellContext } from \"@tanstack/react-table\";\n\nimport { registerComponent } from \"../../../registries/components\";\n\nexport function DefaultCellBoolean<Data extends object>({ getValue, column: { columnDef } }: CellContext<Data, boolean>) {\n const value = getValue();\n return <span>{String(value ? columnDef.meta?.labels?.[\"yes\"] || \"Yes\" : columnDef.meta?.labels?.[\"
|
|
1
|
+
{"version":3,"file":"DefaultBooleanCell.js","sources":["../../../../src/molecules/table/components/DefaultBooleanCell.tsx"],"sourcesContent":["import { CellContext } from \"@tanstack/react-table\";\n\nimport { registerComponent } from \"../../../registries/components\";\n\nexport function DefaultCellBoolean<Data extends object>({ getValue, column: { columnDef } }: CellContext<Data, boolean>) {\n const value = getValue();\n return <span>{String(value ? columnDef.meta?.labels?.[\"yes\"] || \"Yes\" : columnDef.meta?.labels?.[\"no\"] || \"No\")}</span>;\n}\n\nregisterComponent(\"Cell.boolean\", DefaultCellBoolean);\nregisterComponent(\"Cell.checkbox\", DefaultCellBoolean);\n"],"names":["DefaultCellBoolean","getValue","columnDef","value","registerComponent"],"mappings":";;AAIO,SAASA,EAAwC,EAAE,UAAAC,GAAU,QAAQ,EAAE,WAAAC,EAAA,KAA2C;AACvH,QAAMC,IAAQF,EAAA;AACd,2BAAQ,QAAA,EAAM,UAAA,OAAOE,IAAQD,EAAU,MAAM,QAAS,OAAU,QAAQA,EAAU,MAAM,QAAS,MAAS,IAAI,GAAE;AAClH;AAEAE,EAAkB,gBAAgBJ,CAAkB;AACpDI,EAAkB,iBAAiBJ,CAAkB;"}
|
|
@@ -1,34 +1,35 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { registerComponent as
|
|
1
|
+
import { jsx as t, Fragment as a } from "react/jsx-runtime";
|
|
2
|
+
import { registerComponent as o, getComponent as p } from "../../../registries/components.js";
|
|
3
3
|
import { useUniqValues as f } from "../hooks/useUniqValues.js";
|
|
4
|
-
function
|
|
5
|
-
const
|
|
4
|
+
function n({ header: e, options: l }) {
|
|
5
|
+
const c = p("Select"), i = e.column.getFilterValue(), u = f({ header: e }), m = l.layout === "choicesjs" ? {
|
|
6
6
|
placeholder: void 0
|
|
7
7
|
} : {
|
|
8
|
-
placeholder: `Filter by ${
|
|
8
|
+
placeholder: `Filter by ${e.column.columnDef.header}`
|
|
9
9
|
}, r = [
|
|
10
10
|
{
|
|
11
|
-
label: `Filter by ${
|
|
11
|
+
label: `Filter by ${e.column.columnDef.header}`,
|
|
12
12
|
value: ""
|
|
13
13
|
}
|
|
14
|
-
].concat(
|
|
15
|
-
return /* @__PURE__ */
|
|
16
|
-
|
|
14
|
+
].concat(l.options || u);
|
|
15
|
+
return /* @__PURE__ */ t(a, { children: /* @__PURE__ */ t(
|
|
16
|
+
c,
|
|
17
17
|
{
|
|
18
18
|
size: "small",
|
|
19
|
-
...
|
|
19
|
+
...l,
|
|
20
20
|
...m,
|
|
21
21
|
autoComplete: "off",
|
|
22
22
|
options: r,
|
|
23
|
-
name: `filter_${
|
|
24
|
-
"data-testid": `filter_${
|
|
23
|
+
name: `filter_${e.column.id}`,
|
|
24
|
+
"data-testid": `filter_${e.column.id}`,
|
|
25
25
|
value: i,
|
|
26
|
-
onChange: (
|
|
26
|
+
onChange: (F, s) => e.column.setFilterValue(s)
|
|
27
27
|
}
|
|
28
28
|
) });
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
o("Filter.select", n);
|
|
31
|
+
o("Filter.boolean", n);
|
|
31
32
|
export {
|
|
32
|
-
|
|
33
|
+
n as SelectFilter
|
|
33
34
|
};
|
|
34
35
|
//# sourceMappingURL=SelectFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectFilter.js","sources":["../../../../src/molecules/table/filters/SelectFilter.tsx"],"sourcesContent":["import { getComponent, registerComponent } from \"../../../registries/components\";\nimport type { Select as DefaultSelect } from \"../../forms/select/Select\";\nimport { SelectOptionProps } from \"../../forms/select/Select.interface\";\nimport type { FilterProps } from \"../components/DefaultFilter\";\nimport { useUniqValues } from \"../hooks/useUniqValues\";\nimport { FilterSelectOptions } from \"./Filters\";\n\nexport function SelectFilter<Data = any>({ header, options }: FilterProps<Data, FilterSelectOptions>) {\n const Select = getComponent<typeof DefaultSelect>(\"Select\");\n const columnFilterValue = header.column.getFilterValue();\n const uniqValues = useUniqValues<Data>({ header
|
|
1
|
+
{"version":3,"file":"SelectFilter.js","sources":["../../../../src/molecules/table/filters/SelectFilter.tsx"],"sourcesContent":["import { getComponent, registerComponent } from \"../../../registries/components\";\nimport type { Select as DefaultSelect } from \"../../forms/select/Select\";\nimport { SelectOptionProps } from \"../../forms/select/Select.interface\";\nimport type { FilterProps } from \"../components/DefaultFilter\";\nimport { useUniqValues } from \"../hooks/useUniqValues\";\nimport { FilterSelectOptions } from \"./Filters\";\n\nexport function SelectFilter<Data = any>({ header, options }: FilterProps<Data, FilterSelectOptions>) {\n const Select = getComponent<typeof DefaultSelect>(\"Select\");\n const columnFilterValue = header.column.getFilterValue();\n const uniqValues = useUniqValues<Data>({ header });\n\n const opts =\n options.layout === \"choicesjs\"\n ? {\n placeholder: undefined\n }\n : {\n placeholder: `Filter by ${header.column.columnDef.header}`\n };\n\n const listOptions = (\n [\n {\n label: `Filter by ${header.column.columnDef.header}`,\n value: \"\"\n }\n ] as SelectOptionProps[]\n ).concat(options.options || uniqValues);\n\n return (\n <>\n <Select<string>\n size='small'\n {...(options as any)}\n {...opts}\n autoComplete='off'\n options={listOptions}\n name={`filter_${header.column.id}`}\n data-testid={`filter_${header.column.id}`}\n value={columnFilterValue as string}\n onChange={(_, value) => header.column.setFilterValue(value)}\n />\n </>\n );\n}\n\nregisterComponent(\"Filter.select\", SelectFilter);\nregisterComponent(\"Filter.boolean\", SelectFilter);\n"],"names":["SelectFilter","header","options","Select","getComponent","columnFilterValue","uniqValues","useUniqValues","opts","listOptions","jsx","Fragment","_","value","registerComponent"],"mappings":";;;AAOO,SAASA,EAAyB,EAAE,QAAAC,GAAQ,SAAAC,KAAmD;AACpG,QAAMC,IAASC,EAAmC,QAAQ,GACpDC,IAAoBJ,EAAO,OAAO,eAAA,GAClCK,IAAaC,EAAoB,EAAE,QAAAN,GAAQ,GAE3CO,IACJN,EAAQ,WAAW,cACf;AAAA,IACE,aAAa;AAAA,EAAA,IAEf;AAAA,IACE,aAAa,aAAaD,EAAO,OAAO,UAAU,MAAM;AAAA,EAAA,GAG1DQ,IACJ;AAAA,IACE;AAAA,MACE,OAAO,aAAaR,EAAO,OAAO,UAAU,MAAM;AAAA,MAClD,OAAO;AAAA,IAAA;AAAA,EACT,EAEF,OAAOC,EAAQ,WAAWI,CAAU;AAEtC,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA,gBAAAD;AAAA,IAACP;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACJ,GAAID;AAAA,MACJ,GAAGM;AAAA,MACJ,cAAa;AAAA,MACb,SAASC;AAAA,MACT,MAAM,UAAUR,EAAO,OAAO,EAAE;AAAA,MAChC,eAAa,UAAUA,EAAO,OAAO,EAAE;AAAA,MACvC,OAAOI;AAAA,MACP,UAAU,CAACO,GAAGC,MAAUZ,EAAO,OAAO,eAAeY,CAAK;AAAA,IAAA;AAAA,EAAA,GAE9D;AAEJ;AAEAC,EAAkB,iBAAiBd,CAAY;AAC/Cc,EAAkB,kBAAkBd,CAAY;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as r, Fragment as a, jsx as i } from "react/jsx-runtime";
|
|
2
2
|
import { registerComponent as c, getComponent as d } from "../../../registries/components.js";
|
|
3
3
|
import { useUniqValues as p } from "../hooks/useUniqValues.js";
|
|
4
|
-
function
|
|
5
|
-
const o = d("InputText"), m = t.column.getFilterValue(),
|
|
6
|
-
return /* @__PURE__ */ a
|
|
7
|
-
!e.disableDatalist && /* @__PURE__ */ i("datalist", { id: n, children:
|
|
4
|
+
function F({ header: t, options: e }) {
|
|
5
|
+
const o = d("InputText"), m = t.column.getFilterValue(), s = p({ header: t }), n = `data_list_${t.column.id}`;
|
|
6
|
+
return /* @__PURE__ */ r(a, { children: [
|
|
7
|
+
!e.disableDatalist && /* @__PURE__ */ i("datalist", { id: n, children: s.map((l) => /* @__PURE__ */ i("option", { value: l }, l)) }),
|
|
8
8
|
/* @__PURE__ */ i(
|
|
9
9
|
o,
|
|
10
10
|
{
|
|
@@ -15,13 +15,13 @@ function f({ header: t, options: e }) {
|
|
|
15
15
|
"data-testid": `filter_${t.column.id}`,
|
|
16
16
|
value: m ?? "",
|
|
17
17
|
list: n,
|
|
18
|
-
onChange: (l,
|
|
18
|
+
onChange: (l, u) => t.column.setFilterValue(u)
|
|
19
19
|
}
|
|
20
20
|
)
|
|
21
21
|
] });
|
|
22
22
|
}
|
|
23
|
-
c("Filter.text",
|
|
23
|
+
c("Filter.text", F);
|
|
24
24
|
export {
|
|
25
|
-
|
|
25
|
+
F as TextFieldFilter
|
|
26
26
|
};
|
|
27
27
|
//# sourceMappingURL=TextFieldFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextFieldFilter.js","sources":["../../../../src/molecules/table/filters/TextFieldFilter.tsx"],"sourcesContent":["import { getComponent, registerComponent } from \"../../../registries/components\";\nimport type { InputText as DefaultInputText } from \"../../forms/input-text/InputText\";\nimport type { FilterProps } from \"../components/DefaultFilter\";\nimport { useUniqValues } from \"../hooks/useUniqValues\";\nimport { FilterTextOptions } from \"./Filters\";\n\nexport function TextFieldFilter<Data = any>({ header, options }: FilterProps<Data, FilterTextOptions>) {\n const InputText = getComponent<typeof DefaultInputText>(\"InputText\");\n const columnFilterValue = header.column.getFilterValue();\n const uniqValues = useUniqValues<Data>({ header
|
|
1
|
+
{"version":3,"file":"TextFieldFilter.js","sources":["../../../../src/molecules/table/filters/TextFieldFilter.tsx"],"sourcesContent":["import { getComponent, registerComponent } from \"../../../registries/components\";\nimport type { InputText as DefaultInputText } from \"../../forms/input-text/InputText\";\nimport type { FilterProps } from \"../components/DefaultFilter\";\nimport { useUniqValues } from \"../hooks/useUniqValues\";\nimport { FilterTextOptions } from \"./Filters\";\n\nexport function TextFieldFilter<Data = any>({ header, options }: FilterProps<Data, FilterTextOptions>) {\n const InputText = getComponent<typeof DefaultInputText>(\"InputText\");\n const columnFilterValue = header.column.getFilterValue();\n const uniqValues = useUniqValues<Data>({ header });\n const datalistId = `data_list_${header.column.id}`;\n\n return (\n <>\n {!options.disableDatalist && (\n <datalist id={datalistId}>\n {uniqValues.map((value: any) => (\n <option value={value} key={value} />\n ))}\n </datalist>\n )}\n <InputText<string>\n size='small'\n placeholder={`Filter by ${header.column.columnDef.header}`}\n {...options}\n name={`filter_${header.column.id}`}\n data-testid={`filter_${header.column.id}`}\n value={(columnFilterValue ?? \"\") as string}\n list={datalistId}\n onChange={(_, value) => header.column.setFilterValue(value)}\n />\n </>\n );\n}\n\nregisterComponent(\"Filter.text\", TextFieldFilter);\n"],"names":["TextFieldFilter","header","options","InputText","getComponent","columnFilterValue","uniqValues","useUniqValues","datalistId","jsxs","Fragment","jsx","value","_","registerComponent"],"mappings":";;;AAMO,SAASA,EAA4B,EAAE,QAAAC,GAAQ,SAAAC,KAAiD;AACrG,QAAMC,IAAYC,EAAsC,WAAW,GAC7DC,IAAoBJ,EAAO,OAAO,eAAA,GAClCK,IAAaC,EAAoB,EAAE,QAAAN,GAAQ,GAC3CO,IAAa,aAAaP,EAAO,OAAO,EAAE;AAEhD,SACE,gBAAAQ,EAAAC,GAAA,EACG,UAAA;AAAA,IAAA,CAACR,EAAQ,mBACR,gBAAAS,EAAC,YAAA,EAAS,IAAIH,GACX,UAAAF,EAAW,IAAI,CAACM,MACf,gBAAAD,EAAC,UAAA,EAAO,OAAAC,KAAmBA,CAAO,CACnC,GACH;AAAA,IAEF,gBAAAD;AAAA,MAACR;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAa,aAAaF,EAAO,OAAO,UAAU,MAAM;AAAA,QACvD,GAAGC;AAAA,QACJ,MAAM,UAAUD,EAAO,OAAO,EAAE;AAAA,QAChC,eAAa,UAAUA,EAAO,OAAO,EAAE;AAAA,QACvC,OAAQI,KAAqB;AAAA,QAC7B,MAAMG;AAAA,QACN,UAAU,CAACK,GAAGD,MAAUX,EAAO,OAAO,eAAeW,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAC5D,GACF;AAEJ;AAEAE,EAAkB,eAAed,CAAe;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Header } from '@tanstack/react-table';
|
|
2
|
-
|
|
2
|
+
import { SelectOptionProps } from '../../../molecules/forms/select/Select.interface';
|
|
3
|
+
export declare function useUniqValues<Data = any>({ header }: {
|
|
3
4
|
header: Header<Data, unknown>;
|
|
4
|
-
|
|
5
|
-
}): any[];
|
|
5
|
+
}): SelectOptionProps[];
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { useMemo as u } from "react";
|
|
2
|
-
function
|
|
3
|
-
return u(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
function a({ header: l }) {
|
|
3
|
+
return u(() => {
|
|
4
|
+
switch (l.column.columnDef.meta?.filter?.variant) {
|
|
5
|
+
case "boolean":
|
|
6
|
+
return [
|
|
7
|
+
{ label: l.column.columnDef.meta?.labels?.yes || "Yes", value: !0 },
|
|
8
|
+
{ label: l.column.columnDef.meta?.labels?.no || l.column.columnDef.meta?.labels?.No || "No", value: !1 }
|
|
9
|
+
];
|
|
10
|
+
default:
|
|
11
|
+
return Array.from(l.column.getFacetedUniqueValues().keys()).flat().sort().slice(0, 5e3).map((e) => ({
|
|
12
|
+
label: e,
|
|
13
|
+
value: e
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
}, [l.column]);
|
|
7
17
|
}
|
|
8
18
|
export {
|
|
9
|
-
|
|
19
|
+
a as useUniqValues
|
|
10
20
|
};
|
|
11
21
|
//# sourceMappingURL=useUniqValues.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUniqValues.js","sources":["../../../../src/molecules/table/hooks/useUniqValues.tsx"],"sourcesContent":["import type { Header } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\n\nexport function useUniqValues<Data = any>({ header
|
|
1
|
+
{"version":3,"file":"useUniqValues.js","sources":["../../../../src/molecules/table/hooks/useUniqValues.tsx"],"sourcesContent":["import type { Header } from \"@tanstack/react-table\";\nimport { useMemo } from \"react\";\n\nimport { SelectOptionProps } from \"../../../molecules/forms/select/Select.interface\";\n\nexport function useUniqValues<Data = any>({ header }: { header: Header<Data, unknown> }): SelectOptionProps[] {\n return useMemo(() => {\n switch (header.column.columnDef.meta?.filter?.variant) {\n case \"boolean\":\n return [\n { label: header.column.columnDef.meta?.labels?.[\"yes\"] || \"Yes\", value: true },\n { label: header.column.columnDef.meta?.labels?.[\"no\"] || header.column.columnDef.meta?.labels?.[\"No\"] || \"No\", value: false }\n ];\n\n default:\n return Array.from(header.column.getFacetedUniqueValues().keys())\n .flat()\n .sort()\n .slice(0, 5000)\n .map((i) => ({\n label: i,\n value: i\n }));\n }\n }, [header.column]);\n}\n"],"names":["useUniqValues","header","useMemo","i"],"mappings":";AAKO,SAASA,EAA0B,EAAE,QAAAC,KAAkE;AAC5G,SAAOC,EAAQ,MAAM;AACnB,YAAQD,EAAO,OAAO,UAAU,MAAM,QAAQ,SAAA;AAAA,MAC5C,KAAK;AACH,eAAO;AAAA,UACL,EAAE,OAAOA,EAAO,OAAO,UAAU,MAAM,QAAS,OAAU,OAAO,OAAO,GAAA;AAAA,UACxE,EAAE,OAAOA,EAAO,OAAO,UAAU,MAAM,QAAS,MAASA,EAAO,OAAO,UAAU,MAAM,QAAS,MAAS,MAAM,OAAO,GAAA;AAAA,QAAM;AAAA,MAGhI;AACE,eAAO,MAAM,KAAKA,EAAO,OAAO,uBAAA,EAAyB,MAAM,EAC5D,OACA,KAAA,EACA,MAAM,GAAG,GAAI,EACb,IAAI,CAACE,OAAO;AAAA,UACX,OAAOA;AAAA,UACP,OAAOA;AAAA,QAAA,EACP;AAAA,IAAA;AAAA,EAEV,GAAG,CAACF,EAAO,MAAM,CAAC;AACpB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/react-formio",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.16",
|
|
4
4
|
"description": "Provide a react formio wrapper. Written in TypeScript.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@tanstack/react-table": ">=8.20.6",
|
|
47
|
-
"@tsed/tailwind-formio": "3.0.0-rc.
|
|
48
|
-
"@tsed/typescript": "3.0.0-rc.
|
|
47
|
+
"@tsed/tailwind-formio": "3.0.0-rc.16",
|
|
48
|
+
"@tsed/typescript": "3.0.0-rc.16",
|
|
49
49
|
"microbundle": "0.13.0",
|
|
50
50
|
"vite": "7.1.5",
|
|
51
51
|
"vitest": "3.2.4"
|
|
@@ -29,13 +29,13 @@ describe("DefaultCellBoolean", () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
it("should render custom labels from column metadata", () => {
|
|
32
|
-
render(<DefaultCellBoolean {...createCellContext(true, { yes: "Enabled",
|
|
32
|
+
render(<DefaultCellBoolean {...createCellContext(true, { yes: "Enabled", no: "Disabled" })} />);
|
|
33
33
|
|
|
34
34
|
expect(screen.getByText("Enabled", { selector: "span" })).toBeInTheDocument();
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
it("should render the custom false label from column metadata", () => {
|
|
38
|
-
render(<DefaultCellBoolean {...createCellContext(false, { yes: "Enabled",
|
|
38
|
+
render(<DefaultCellBoolean {...createCellContext(false, { yes: "Enabled", no: "Disabled" })} />);
|
|
39
39
|
|
|
40
40
|
expect(screen.getByText("Disabled", { selector: "span" })).toBeInTheDocument();
|
|
41
41
|
});
|
|
@@ -4,7 +4,7 @@ import { registerComponent } from "../../../registries/components";
|
|
|
4
4
|
|
|
5
5
|
export function DefaultCellBoolean<Data extends object>({ getValue, column: { columnDef } }: CellContext<Data, boolean>) {
|
|
6
6
|
const value = getValue();
|
|
7
|
-
return <span>{String(value ? columnDef.meta?.labels?.["yes"] || "Yes" : columnDef.meta?.labels?.["
|
|
7
|
+
return <span>{String(value ? columnDef.meta?.labels?.["yes"] || "Yes" : columnDef.meta?.labels?.["no"] || "No")}</span>;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
registerComponent("Cell.boolean", DefaultCellBoolean);
|
|
@@ -8,7 +8,7 @@ import { FilterSelectOptions } from "./Filters";
|
|
|
8
8
|
export function SelectFilter<Data = any>({ header, options }: FilterProps<Data, FilterSelectOptions>) {
|
|
9
9
|
const Select = getComponent<typeof DefaultSelect>("Select");
|
|
10
10
|
const columnFilterValue = header.column.getFilterValue();
|
|
11
|
-
const uniqValues = useUniqValues<Data>({ header
|
|
11
|
+
const uniqValues = useUniqValues<Data>({ header });
|
|
12
12
|
|
|
13
13
|
const opts =
|
|
14
14
|
options.layout === "choicesjs"
|
|
@@ -26,7 +26,7 @@ export function SelectFilter<Data = any>({ header, options }: FilterProps<Data,
|
|
|
26
26
|
value: ""
|
|
27
27
|
}
|
|
28
28
|
] as SelectOptionProps[]
|
|
29
|
-
).concat(options.options || uniqValues
|
|
29
|
+
).concat(options.options || uniqValues);
|
|
30
30
|
|
|
31
31
|
return (
|
|
32
32
|
<>
|
|
@@ -46,3 +46,4 @@ export function SelectFilter<Data = any>({ header, options }: FilterProps<Data,
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
registerComponent("Filter.select", SelectFilter);
|
|
49
|
+
registerComponent("Filter.boolean", SelectFilter);
|
|
@@ -7,7 +7,7 @@ import { FilterTextOptions } from "./Filters";
|
|
|
7
7
|
export function TextFieldFilter<Data = any>({ header, options }: FilterProps<Data, FilterTextOptions>) {
|
|
8
8
|
const InputText = getComponent<typeof DefaultInputText>("InputText");
|
|
9
9
|
const columnFilterValue = header.column.getFilterValue();
|
|
10
|
-
const uniqValues = useUniqValues<Data>({ header
|
|
10
|
+
const uniqValues = useUniqValues<Data>({ header });
|
|
11
11
|
const datalistId = `data_list_${header.column.id}`;
|
|
12
12
|
|
|
13
13
|
return (
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { renderHook } from "@testing-library/react";
|
|
2
|
+
|
|
3
|
+
import { useUniqValues } from "./useUniqValues";
|
|
4
|
+
|
|
5
|
+
function createHeader({ variant, labels, values = [] }: { variant?: string; labels?: Record<string, string>; values?: string[] }) {
|
|
6
|
+
return {
|
|
7
|
+
column: {
|
|
8
|
+
columnDef: {
|
|
9
|
+
meta: {
|
|
10
|
+
filter: {
|
|
11
|
+
variant
|
|
12
|
+
},
|
|
13
|
+
labels
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
getFacetedUniqueValues: () => new Map(values.map((value) => [value, 1]))
|
|
17
|
+
}
|
|
18
|
+
} as any;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe("useUniqValues", () => {
|
|
22
|
+
it("should return boolean options with the custom labels", () => {
|
|
23
|
+
const header = createHeader({
|
|
24
|
+
variant: "boolean",
|
|
25
|
+
labels: {
|
|
26
|
+
yes: "Enabled",
|
|
27
|
+
No: "Disabled"
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const { result } = renderHook(() => useUniqValues({ header }));
|
|
32
|
+
|
|
33
|
+
expect(result.current).toEqual([
|
|
34
|
+
{ label: "Enabled", value: true },
|
|
35
|
+
{ label: "Disabled", value: false }
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("should map faceted unique values to select options", () => {
|
|
40
|
+
const header = createHeader({
|
|
41
|
+
values: ["beta", "alpha"]
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
const { result } = renderHook(() => useUniqValues({ header }));
|
|
45
|
+
|
|
46
|
+
expect(result.current).toEqual([
|
|
47
|
+
{ label: "alpha", value: "alpha" },
|
|
48
|
+
{ label: "beta", value: "beta" }
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import type { Header } from "@tanstack/react-table";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
return useMemo(
|
|
6
|
-
() => (filterVariant === "range" ? [] : Array.from(header.column.getFacetedUniqueValues().keys()).flat().sort().slice(0, 5000)),
|
|
4
|
+
import { SelectOptionProps } from "../../../molecules/forms/select/Select.interface";
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
)
|
|
6
|
+
export function useUniqValues<Data = any>({ header }: { header: Header<Data, unknown> }): SelectOptionProps[] {
|
|
7
|
+
return useMemo(() => {
|
|
8
|
+
switch (header.column.columnDef.meta?.filter?.variant) {
|
|
9
|
+
case "boolean":
|
|
10
|
+
return [
|
|
11
|
+
{ label: header.column.columnDef.meta?.labels?.["yes"] || "Yes", value: true },
|
|
12
|
+
{ label: header.column.columnDef.meta?.labels?.["no"] || header.column.columnDef.meta?.labels?.["No"] || "No", value: false }
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
default:
|
|
16
|
+
return Array.from(header.column.getFacetedUniqueValues().keys())
|
|
17
|
+
.flat()
|
|
18
|
+
.sort()
|
|
19
|
+
.slice(0, 5000)
|
|
20
|
+
.map((i) => ({
|
|
21
|
+
label: i,
|
|
22
|
+
value: i
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
}, [header.column]);
|
|
10
26
|
}
|