@digigov/react-modules 1.1.4
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/CHANGELOG.md +0 -0
- package/FilteredResults/DataTable/index.js +18 -0
- package/FilteredResults/DataTable/package.json +6 -0
- package/FilteredResults/DataTable.d.ts +5 -0
- package/FilteredResults/DataTable.js.map +7 -0
- package/FilteredResults/FilterChips/index.js +52 -0
- package/FilteredResults/FilterChips/package.json +6 -0
- package/FilteredResults/FilterChips.d.ts +3 -0
- package/FilteredResults/FilterChips.js.map +7 -0
- package/FilteredResults/FilterFields/index.js +11 -0
- package/FilteredResults/FilterFields/package.json +6 -0
- package/FilteredResults/FilterFields.d.ts +5 -0
- package/FilteredResults/FilterFields.js.map +7 -0
- package/FilteredResults/FilteredResults.stories/index.js +12 -0
- package/FilteredResults/FilteredResults.stories/package.json +6 -0
- package/FilteredResults/FilteredResults.stories.d.ts +8 -0
- package/FilteredResults/FilteredResults.stories.js.map +7 -0
- package/FilteredResults/__stories__/Default/index.js +220 -0
- package/FilteredResults/__stories__/Default/package.json +6 -0
- package/FilteredResults/__stories__/Default.d.ts +2 -0
- package/FilteredResults/__stories__/Default.js.map +7 -0
- package/FilteredResults/hooks/index.js +105 -0
- package/FilteredResults/hooks/package.json +6 -0
- package/FilteredResults/hooks.d.ts +22 -0
- package/FilteredResults/hooks.js.map +7 -0
- package/FilteredResults/index.d.ts +25 -0
- package/FilteredResults/index.js +122 -0
- package/FilteredResults/index.js.map +7 -0
- package/FilteredResults/index.test.d.ts +1 -0
- package/FilteredResults/package.json +6 -0
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/ReactModules.stories/index.js +7 -0
- package/ReactModules.stories/package.json +6 -0
- package/ReactModules.stories.d.ts +4 -0
- package/ReactModules.stories.js.map +7 -0
- package/cjs/FilteredResults/DataTable/index.js +42 -0
- package/cjs/FilteredResults/DataTable.js.map +7 -0
- package/cjs/FilteredResults/FilterChips/index.js +82 -0
- package/cjs/FilteredResults/FilterChips.js.map +7 -0
- package/cjs/FilteredResults/FilterFields/index.js +44 -0
- package/cjs/FilteredResults/FilterFields.js.map +7 -0
- package/cjs/FilteredResults/FilteredResults.stories/index.js +45 -0
- package/cjs/FilteredResults/FilteredResults.stories.js.map +7 -0
- package/cjs/FilteredResults/__stories__/Default/index.js +250 -0
- package/cjs/FilteredResults/__stories__/Default.js.map +7 -0
- package/cjs/FilteredResults/hooks/index.js +132 -0
- package/cjs/FilteredResults/hooks.js.map +7 -0
- package/cjs/FilteredResults/index.js +155 -0
- package/cjs/FilteredResults/index.js.map +7 -0
- package/cjs/ReactModules.stories/index.js +26 -0
- package/cjs/ReactModules.stories.js.map +7 -0
- package/cjs/index.js +22 -0
- package/cjs/index.js.map +7 -0
- package/cjs/lazy/index.js +43 -0
- package/cjs/lazy.js.map +7 -0
- package/cjs/registry/index.js +63 -0
- package/cjs/registry.js.map +7 -0
- package/index.d.ts +1 -0
- package/index.js +7 -0
- package/index.js.map +7 -0
- package/lazy/index.js +14 -0
- package/lazy/package.json +6 -0
- package/lazy.d.ts +16 -0
- package/lazy.js.map +7 -0
- package/package.json +25 -0
- package/registry/index.js +34 -0
- package/registry/package.json +6 -0
- package/registry.d.ts +9 -0
- package/registry.js.map +7 -0
- package/src/FilteredResults/DataTable.tsx +47 -0
- package/src/FilteredResults/FilterChips.tsx +54 -0
- package/src/FilteredResults/FilterFields.tsx +15 -0
- package/src/FilteredResults/FilteredResults.stories.js +7 -0
- package/src/FilteredResults/__stories__/Default.tsx +243 -0
- package/src/FilteredResults/hooks.ts +131 -0
- package/src/FilteredResults/index.test.tsx +20 -0
- package/src/FilteredResults/index.tsx +180 -0
- package/src/ReactModules.stories.js +3 -0
- package/src/index.ts +1 -0
- package/src/lazy.js +11 -0
- package/src/registry.js +35 -0
package/CHANGELOG.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
Table,
|
|
4
|
+
TableBody,
|
|
5
|
+
TableContainer,
|
|
6
|
+
TableDataCell,
|
|
7
|
+
TableHead,
|
|
8
|
+
TableHeadCell,
|
|
9
|
+
TableNoDataRow,
|
|
10
|
+
TableRow
|
|
11
|
+
} from "@digigov/ui/content/Table";
|
|
12
|
+
function DataTable({ dataConfig, data }) {
|
|
13
|
+
return /* @__PURE__ */ React.createElement(TableContainer, null, /* @__PURE__ */ React.createElement(Table, null, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, dataConfig.map((itenConfig) => /* @__PURE__ */ React.createElement(TableHeadCell, { key: itenConfig.key }, itenConfig.title)))), /* @__PURE__ */ React.createElement(TableBody, null, data.length > 0 ? data.map((item, index) => /* @__PURE__ */ React.createElement(TableRow, { key: index }, dataConfig.map((itemConfig, idx) => /* @__PURE__ */ React.createElement(TableDataCell, { key: idx }, itemConfig.displayComponent ? itemConfig.displayComponent(item[itemConfig.key]) : item[itemConfig.key])))) : /* @__PURE__ */ React.createElement(TableNoDataRow, null, "\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1"))));
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
DataTable
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/FilteredResults/DataTable.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\n\nimport {\n Table,\n TableBody,\n TableContainer,\n TableDataCell,\n TableHead,\n TableHeadCell,\n TableNoDataRow,\n TableRow,\n} from '@digigov/ui/content/Table';\n\nexport function DataTable({ dataConfig, data }) {\n return (\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n {dataConfig.map((itenConfig) => (\n <TableHeadCell key={itenConfig.key}>\n {itenConfig.title}\n </TableHeadCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.length > 0 ? (\n data.map((item, index) => (\n <TableRow key={index}>\n {dataConfig.map((itemConfig, idx) => (\n <TableDataCell key={idx}>\n {itemConfig.displayComponent\n ? itemConfig.displayComponent(item[itemConfig.key])\n : item[itemConfig.key]}\n </TableDataCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableNoDataRow>\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1</TableNoDataRow>\n )}\n </TableBody>\n </Table>\n </TableContainer>\n );\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAElB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,UAAU,EAAE,YAAY,KAAK,GAAG;AAC9C,SACE,oCAAC,sBACC,oCAAC,aACC,oCAAC,iBACC,oCAAC,gBACE,WAAW,IAAI,CAAC,eACf,oCAAC,iBAAc,KAAK,WAAW,OAC5B,WAAW,KACd,CACD,CACH,CACF,GACA,oCAAC,iBACE,KAAK,SAAS,IACb,KAAK,IAAI,CAAC,MAAM,UACd,oCAAC,YAAS,KAAK,SACZ,WAAW,IAAI,CAAC,YAAY,QAC3B,oCAAC,iBAAc,KAAK,OACjB,WAAW,mBACR,WAAW,iBAAiB,KAAK,WAAW,GAAG,CAAC,IAChD,KAAK,WAAW,GAAG,CACzB,CACD,CACH,CACD,IAED,oCAAC,sBAAe,8IAAyB,CAE7C,CACF,CACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useFormContext, useFormValues } from "@digigov/form";
|
|
3
|
+
import { getOptionLabelForSelectValue } from "@digigov/react-modules/FilteredResults/hooks";
|
|
4
|
+
import {
|
|
5
|
+
FilterSelectedHeading,
|
|
6
|
+
FilterSelectedSection
|
|
7
|
+
} from "@digigov/ui/app/FilterContainer";
|
|
8
|
+
import { Chip, ChipContainer } from "@digigov/ui/content/Chip";
|
|
9
|
+
import { Button } from "@digigov/ui/form/Button";
|
|
10
|
+
const FilterChips = () => {
|
|
11
|
+
const { fieldsMap, reset, resetField, submit } = useFormContext();
|
|
12
|
+
const values = useFormValues();
|
|
13
|
+
const enabledFilters = Object.keys(values).filter((v) => values[v]);
|
|
14
|
+
if (enabledFilters.length === 0) return null;
|
|
15
|
+
return /* @__PURE__ */ React.createElement(FilterSelectedSection, { m: 0, mb: 6 }, /* @__PURE__ */ React.createElement(FilterSelectedHeading, { mb: 0 }, /* @__PURE__ */ React.createElement(ChipContainer, null, enabledFilters.map((filterKey) => {
|
|
16
|
+
return /* @__PURE__ */ React.createElement(
|
|
17
|
+
Chip,
|
|
18
|
+
{
|
|
19
|
+
mb: 0,
|
|
20
|
+
key: filterKey,
|
|
21
|
+
onDelete: () => {
|
|
22
|
+
resetField(filterKey);
|
|
23
|
+
submit();
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
/* @__PURE__ */ React.createElement("b", null, fieldsMap[filterKey].label?.primary),
|
|
27
|
+
" ",
|
|
28
|
+
": ",
|
|
29
|
+
getOptionLabelForSelectValue(
|
|
30
|
+
fieldsMap[filterKey],
|
|
31
|
+
values[filterKey]
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
})), /* @__PURE__ */ React.createElement(
|
|
35
|
+
Button,
|
|
36
|
+
{
|
|
37
|
+
onClick: (e) => {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
reset();
|
|
40
|
+
submit();
|
|
41
|
+
},
|
|
42
|
+
variant: "link"
|
|
43
|
+
},
|
|
44
|
+
"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD"
|
|
45
|
+
)));
|
|
46
|
+
};
|
|
47
|
+
var FilterChips_default = FilterChips;
|
|
48
|
+
export {
|
|
49
|
+
FilterChips,
|
|
50
|
+
FilterChips_default as default
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=FilterChips.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/FilteredResults/FilterChips.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { useFormContext, useFormValues } from '@digigov/form';\nimport { getOptionLabelForSelectValue } from '@digigov/react-modules/FilteredResults/hooks';\nimport {\n FilterSelectedHeading,\n FilterSelectedSection,\n} from '@digigov/ui/app/FilterContainer';\nimport { Chip, ChipContainer } from '@digigov/ui/content/Chip';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const FilterChips = () => {\n const { fieldsMap, reset, resetField, submit } = useFormContext();\n const values = useFormValues();\n const enabledFilters = Object.keys(values).filter((v) => values[v]);\n if (enabledFilters.length === 0) return null;\n return (\n <FilterSelectedSection m={0} mb={6}>\n <FilterSelectedHeading mb={0}>\n <ChipContainer>\n {enabledFilters.map((filterKey) => {\n return (\n <Chip\n mb={0}\n key={filterKey}\n onDelete={() => {\n resetField(filterKey);\n submit();\n }}\n >\n <b>{fieldsMap[filterKey].label?.primary}</b> {': '}\n {getOptionLabelForSelectValue(\n fieldsMap[filterKey],\n values[filterKey]\n )}\n </Chip>\n );\n })}\n </ChipContainer>\n <Button\n onClick={(e) => {\n e.preventDefault();\n reset();\n submit();\n }}\n variant=\"link\"\n >\n \u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD\n </Button>\n </FilterSelectedHeading>\n </FilterSelectedSection>\n );\n};\n\nexport default FilterChips;\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,oCAAoC;AAC7C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,MAAM,qBAAqB;AACpC,SAAS,cAAc;AAEhB,MAAM,cAAc,MAAM;AAC/B,QAAM,EAAE,WAAW,OAAO,YAAY,OAAO,IAAI,eAAe;AAChE,QAAM,SAAS,cAAc;AAC7B,QAAM,iBAAiB,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC;AAClE,MAAI,eAAe,WAAW,EAAG,QAAO;AACxC,SACE,oCAAC,yBAAsB,GAAG,GAAG,IAAI,KAC/B,oCAAC,yBAAsB,IAAI,KACzB,oCAAC,qBACE,eAAe,IAAI,CAAC,cAAc;AACjC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,UAAU,MAAM;AACd,qBAAW,SAAS;AACpB,iBAAO;AAAA,QACT;AAAA;AAAA,MAEA,oCAAC,WAAG,UAAU,SAAS,EAAE,OAAO,OAAQ;AAAA,MAAI;AAAA,MAAE;AAAA,MAC7C;AAAA,QACC,UAAU,SAAS;AAAA,QACnB,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EAEJ,CAAC,CACH,GACA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,CAAC,MAAM;AACd,UAAE,eAAe;AACjB,cAAM;AACN,eAAO;AAAA,MACT;AAAA,MACA,SAAQ;AAAA;AAAA,IACT;AAAA,EAED,CACF,CACF;AAEJ;AAEA,IAAO,sBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Field from "@digigov/form/Field";
|
|
3
|
+
import { FilterOptionsSection } from "@digigov/ui/app/FilterContainer";
|
|
4
|
+
import { Button } from "@digigov/ui/form/Button";
|
|
5
|
+
const FilterFields = ({ fields, horizontal }) => {
|
|
6
|
+
return /* @__PURE__ */ React.createElement(FilterOptionsSection, { horizontal }, fields.map((field) => /* @__PURE__ */ React.createElement(Field, { key: field.key, name: field.key })), /* @__PURE__ */ React.createElement(Button, { type: "submit" }, "\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7"));
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
FilterFields
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=FilterFields.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/FilteredResults/FilterFields.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport Field from '@digigov/form/Field';\nimport { FilterOptionsSection } from '@digigov/ui/app/FilterContainer';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const FilterFields = ({ fields, horizontal }) => {\n return (\n <FilterOptionsSection horizontal={horizontal}>\n {fields.map((field) => (\n <Field key={field.key} name={field.key} />\n ))}\n <Button type=\"submit\">\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7</Button>\n </FilterOptionsSection>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,SAAS,4BAA4B;AACrC,SAAS,cAAc;AAEhB,MAAM,eAAe,CAAC,EAAE,QAAQ,WAAW,MAAM;AACtD,SACE,oCAAC,wBAAqB,cACnB,OAAO,IAAI,CAAC,UACX,oCAAC,SAAM,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,CACzC,GACD,oCAAC,UAAO,MAAK,YAAS,wDAAS,CACjC;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import FilteredResults from "@digigov/react-modules/FilteredResults";
|
|
2
|
+
var FilteredResults_stories_default = {
|
|
3
|
+
title: "Digigov React Modules/FilteredResults",
|
|
4
|
+
component: FilteredResults,
|
|
5
|
+
displayName: "FilteredResults"
|
|
6
|
+
};
|
|
7
|
+
import { Default } from "@digigov/react-modules/FilteredResults/__stories__/Default";
|
|
8
|
+
export {
|
|
9
|
+
Default,
|
|
10
|
+
FilteredResults_stories_default as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FilteredResults.stories.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
export let title: string;
|
|
3
|
+
export { FilteredResults as component };
|
|
4
|
+
export let displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default _default;
|
|
7
|
+
export { Default } from "@digigov/react-modules/FilteredResults/__stories__/Default";
|
|
8
|
+
import FilteredResults from '@digigov/react-modules/FilteredResults';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/FilteredResults/FilteredResults.stories.js"],
|
|
4
|
+
"sourcesContent": ["import FilteredResults from '@digigov/react-modules/FilteredResults';\nexport default {\n title: 'Digigov React Modules/FilteredResults',\n component: FilteredResults,\n displayName: 'FilteredResults',\n};\nexport { Default } from '@digigov/react-modules/FilteredResults/__stories__/Default';\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,qBAAqB;AAC5B,IAAO,kCAAQ;AAAA,EACb,OAAO;AAAA,EACP,WAAW;AAAA,EACX,aAAa;AACf;AACA,SAAS,eAAe;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import FilteredResults from "@digigov/react-modules/FilteredResults";
|
|
3
|
+
import { DataTable } from "@digigov/react-modules/FilteredResults/DataTable";
|
|
4
|
+
import {
|
|
5
|
+
useURLParamsSearch,
|
|
6
|
+
useStaticSearch
|
|
7
|
+
} from "@digigov/react-modules/FilteredResults/hooks";
|
|
8
|
+
import { CheckIcon, UncheckIcon } from "@digigov/ui/icons";
|
|
9
|
+
import Link from "@digigov/ui/navigation/Link";
|
|
10
|
+
const fields = [
|
|
11
|
+
{
|
|
12
|
+
type: "string",
|
|
13
|
+
key: "text",
|
|
14
|
+
label: {
|
|
15
|
+
primary: "\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BB\u03AD\u03BE\u03B7\u03C2"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: "choice:single",
|
|
20
|
+
key: "name",
|
|
21
|
+
label: {
|
|
22
|
+
primary: "\u038C\u03BD\u03BF\u03BC\u03B1"
|
|
23
|
+
},
|
|
24
|
+
extra: {
|
|
25
|
+
component: "Select",
|
|
26
|
+
options: [
|
|
27
|
+
{
|
|
28
|
+
label: {
|
|
29
|
+
primary: ""
|
|
30
|
+
},
|
|
31
|
+
value: ""
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: {
|
|
35
|
+
primary: "\u039A\u03B1\u03BB\u03BB\u03B9\u03CC\u03C0\u03B7 \u03A0\u03B1\u03C0\u03B1\u03B4\u03BF\u03C0\u03BF\u03CD\u03BB\u03BF\u03C5"
|
|
36
|
+
},
|
|
37
|
+
value: "Kalliopi Papadopoulou"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: {
|
|
41
|
+
primary: "\u039C\u03AC\u03C1\u03B9\u03BF\u03C2 \u039C\u03B5\u03BD\u03B5\u03BE\u03AD\u03C2"
|
|
42
|
+
},
|
|
43
|
+
value: "Marios Menekses"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: {
|
|
47
|
+
primary: "\u039C\u03B1\u03C1\u03AF\u03B1 \u03A6\u03BB\u03BF\u03CD\u03C0\u03B7"
|
|
48
|
+
},
|
|
49
|
+
value: "Maria Floupi"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: {
|
|
53
|
+
primary: "\u0397\u03BB\u03AD\u03BA\u03C4\u03C1\u03B1 \u0391\u03C0\u03BF\u03C3\u03C4\u03CC\u03BB\u03BF\u03C5"
|
|
54
|
+
},
|
|
55
|
+
value: "Ilektra Apostolou"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: "choice:single",
|
|
62
|
+
key: "role",
|
|
63
|
+
label: {
|
|
64
|
+
primary: "\u03A1\u03CC\u03BB\u03BF\u03C2"
|
|
65
|
+
},
|
|
66
|
+
extra: {
|
|
67
|
+
component: "Select",
|
|
68
|
+
options: [
|
|
69
|
+
{
|
|
70
|
+
label: {
|
|
71
|
+
primary: ""
|
|
72
|
+
},
|
|
73
|
+
value: ""
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
label: {
|
|
77
|
+
primary: "\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2"
|
|
78
|
+
},
|
|
79
|
+
value: "admin"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
label: {
|
|
83
|
+
primary: "\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2"
|
|
84
|
+
},
|
|
85
|
+
value: "user"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: "choice:single",
|
|
92
|
+
key: "rights",
|
|
93
|
+
label: {
|
|
94
|
+
primary: "\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1"
|
|
95
|
+
},
|
|
96
|
+
extra: {
|
|
97
|
+
component: "Select",
|
|
98
|
+
options: [
|
|
99
|
+
{
|
|
100
|
+
label: {
|
|
101
|
+
primary: ""
|
|
102
|
+
},
|
|
103
|
+
value: ""
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
label: {
|
|
107
|
+
primary: "\u039D\u03B1\u03B9"
|
|
108
|
+
},
|
|
109
|
+
value: true
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
label: {
|
|
113
|
+
primary: "\u038C\u03C7\u03B9"
|
|
114
|
+
},
|
|
115
|
+
value: false
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
];
|
|
121
|
+
const displayLink = (value) => {
|
|
122
|
+
return /* @__PURE__ */ React.createElement(Link, { href: `#/${value}` }, value);
|
|
123
|
+
};
|
|
124
|
+
const displayRights = (value) => {
|
|
125
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, value ? /* @__PURE__ */ React.createElement(CheckIcon, null) : /* @__PURE__ */ React.createElement(UncheckIcon, null));
|
|
126
|
+
};
|
|
127
|
+
const data = [
|
|
128
|
+
{
|
|
129
|
+
name: "\u039C\u03AC\u03C1\u03B9\u03BF\u03C2 \u039C\u03B5\u03BD\u03B5\u03BE\u03AD\u03C2",
|
|
130
|
+
case_id: 123,
|
|
131
|
+
role: "\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2",
|
|
132
|
+
email: "marios@mail.com",
|
|
133
|
+
rights: false
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: "\u039A\u03B1\u03BB\u03BB\u03B9\u03CC\u03C0\u03B7 \u03A0\u03B1\u03C0\u03B1\u03B4\u03BF\u03C0\u03BF\u03CD\u03BB\u03BF\u03C5",
|
|
137
|
+
case_id: 124,
|
|
138
|
+
role: "\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2",
|
|
139
|
+
email: "kalliopi@mail.com",
|
|
140
|
+
rights: false
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "\u039C\u03B1\u03C1\u03AF\u03B1 \u03A6\u03BB\u03BF\u03CD\u03C0\u03B7",
|
|
144
|
+
case_id: 125,
|
|
145
|
+
role: "\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2",
|
|
146
|
+
email: "maria@mail.com",
|
|
147
|
+
rights: true
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: "\u0397\u03BB\u03AD\u03BA\u03C4\u03C1\u03B1 \u0391\u03C0\u03BF\u03C3\u03C4\u03CC\u03BB\u03BF\u03C5",
|
|
151
|
+
case_id: 126,
|
|
152
|
+
role: "\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2",
|
|
153
|
+
email: "ilektra@mail.com",
|
|
154
|
+
rights: true
|
|
155
|
+
}
|
|
156
|
+
];
|
|
157
|
+
const dataConfig = [
|
|
158
|
+
{
|
|
159
|
+
key: "name",
|
|
160
|
+
title: "\u038C\u03BD\u03BF\u03BC\u03B1"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
key: "case_id",
|
|
164
|
+
title: "\u0391\u03C1. \u03A5\u03C0\u03CC\u03B8\u03B5\u03C3\u03B7\u03C2",
|
|
165
|
+
displayComponent: displayLink
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
key: "role",
|
|
169
|
+
title: "\u03A1\u03CC\u03BB\u03BF\u03C2"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
key: "email",
|
|
173
|
+
title: "Email"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
key: "rights",
|
|
177
|
+
title: "\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1",
|
|
178
|
+
displayComponent: displayRights
|
|
179
|
+
}
|
|
180
|
+
];
|
|
181
|
+
const initialFilters = {
|
|
182
|
+
name: "",
|
|
183
|
+
case_id: "",
|
|
184
|
+
role: "",
|
|
185
|
+
text: "",
|
|
186
|
+
rights: ""
|
|
187
|
+
};
|
|
188
|
+
const Default = () => {
|
|
189
|
+
const { search, results } = useStaticSearch({
|
|
190
|
+
fields,
|
|
191
|
+
data,
|
|
192
|
+
initialFilters
|
|
193
|
+
});
|
|
194
|
+
const navigate = (url) => {
|
|
195
|
+
if (window.history.pushState) {
|
|
196
|
+
const newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname + url;
|
|
197
|
+
window.history.pushState({ path: newUrl }, "", newUrl);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
const { search: urlSearch, values } = useURLParamsSearch(search, {
|
|
201
|
+
navigate,
|
|
202
|
+
fields
|
|
203
|
+
});
|
|
204
|
+
return /* @__PURE__ */ React.createElement(
|
|
205
|
+
FilteredResults,
|
|
206
|
+
{
|
|
207
|
+
data: results,
|
|
208
|
+
variant: "block",
|
|
209
|
+
currentFilters: values,
|
|
210
|
+
defaultFilters: initialFilters,
|
|
211
|
+
fields,
|
|
212
|
+
onSearch: urlSearch
|
|
213
|
+
},
|
|
214
|
+
/* @__PURE__ */ React.createElement(DataTable, { dataConfig, data: results })
|
|
215
|
+
);
|
|
216
|
+
};
|
|
217
|
+
export {
|
|
218
|
+
Default
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=Default.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/FilteredResults/__stories__/Default.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { FieldSpec } from '@digigov/form/types';\nimport FilteredResults, {\n DataConfigType,\n} from '@digigov/react-modules/FilteredResults';\nimport { DataTable } from '@digigov/react-modules/FilteredResults/DataTable';\nimport {\n useURLParamsSearch,\n useStaticSearch,\n} from '@digigov/react-modules/FilteredResults/hooks';\nimport { CheckIcon, UncheckIcon } from '@digigov/ui/icons';\nimport Link from '@digigov/ui/navigation/Link';\n\nconst fields: FieldSpec[] = [\n {\n type: 'string',\n key: 'text',\n label: {\n primary: '\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BB\u03AD\u03BE\u03B7\u03C2',\n },\n },\n {\n type: 'choice:single',\n key: 'name',\n label: {\n primary: '\u038C\u03BD\u03BF\u03BC\u03B1',\n },\n extra: {\n component: 'Select',\n options: [\n {\n label: {\n primary: '',\n },\n value: '',\n },\n {\n label: {\n primary: '\u039A\u03B1\u03BB\u03BB\u03B9\u03CC\u03C0\u03B7 \u03A0\u03B1\u03C0\u03B1\u03B4\u03BF\u03C0\u03BF\u03CD\u03BB\u03BF\u03C5',\n },\n value: 'Kalliopi Papadopoulou',\n },\n {\n label: {\n primary: '\u039C\u03AC\u03C1\u03B9\u03BF\u03C2 \u039C\u03B5\u03BD\u03B5\u03BE\u03AD\u03C2',\n },\n value: 'Marios Menekses',\n },\n {\n label: {\n primary: '\u039C\u03B1\u03C1\u03AF\u03B1 \u03A6\u03BB\u03BF\u03CD\u03C0\u03B7',\n },\n value: 'Maria Floupi',\n },\n {\n label: {\n primary: '\u0397\u03BB\u03AD\u03BA\u03C4\u03C1\u03B1 \u0391\u03C0\u03BF\u03C3\u03C4\u03CC\u03BB\u03BF\u03C5',\n },\n value: 'Ilektra Apostolou',\n },\n ],\n },\n },\n {\n type: 'choice:single',\n key: 'role',\n label: {\n primary: '\u03A1\u03CC\u03BB\u03BF\u03C2',\n },\n extra: {\n component: 'Select',\n options: [\n {\n label: {\n primary: '',\n },\n value: '',\n },\n {\n label: {\n primary: '\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n },\n value: 'admin',\n },\n {\n label: {\n primary: '\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n },\n value: 'user',\n },\n ],\n },\n },\n {\n type: 'choice:single',\n key: 'rights',\n label: {\n primary: '\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1',\n },\n extra: {\n component: 'Select',\n options: [\n {\n label: {\n primary: '',\n },\n value: '',\n },\n {\n label: {\n primary: '\u039D\u03B1\u03B9',\n },\n value: true,\n },\n {\n label: {\n primary: '\u038C\u03C7\u03B9',\n },\n value: false,\n },\n ],\n },\n },\n];\n\nconst displayLink = (value) => {\n return <Link href={`#/${value}`}>{value}</Link>;\n};\nconst displayRights = (value) => {\n return <>{value ? <CheckIcon /> : <UncheckIcon />}</>;\n};\n\ntype DataType = {\n name: string;\n case_id: number;\n role: string;\n email: string;\n rights: boolean;\n};\n\nconst data: DataType[] = [\n {\n name: '\u039C\u03AC\u03C1\u03B9\u03BF\u03C2 \u039C\u03B5\u03BD\u03B5\u03BE\u03AD\u03C2',\n case_id: 123,\n role: '\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n email: 'marios@mail.com',\n rights: false,\n },\n {\n name: '\u039A\u03B1\u03BB\u03BB\u03B9\u03CC\u03C0\u03B7 \u03A0\u03B1\u03C0\u03B1\u03B4\u03BF\u03C0\u03BF\u03CD\u03BB\u03BF\u03C5',\n case_id: 124,\n role: '\u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n email: 'kalliopi@mail.com',\n rights: false,\n },\n {\n name: '\u039C\u03B1\u03C1\u03AF\u03B1 \u03A6\u03BB\u03BF\u03CD\u03C0\u03B7',\n case_id: 125,\n role: '\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n email: 'maria@mail.com',\n rights: true,\n },\n {\n name: '\u0397\u03BB\u03AD\u03BA\u03C4\u03C1\u03B1 \u0391\u03C0\u03BF\u03C3\u03C4\u03CC\u03BB\u03BF\u03C5',\n case_id: 126,\n role: '\u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE\u03C2',\n email: 'ilektra@mail.com',\n rights: true,\n },\n];\n\nconst dataConfig: DataConfigType[] = [\n {\n key: 'name',\n title: '\u038C\u03BD\u03BF\u03BC\u03B1',\n },\n {\n key: 'case_id',\n title: '\u0391\u03C1. \u03A5\u03C0\u03CC\u03B8\u03B5\u03C3\u03B7\u03C2',\n displayComponent: displayLink,\n },\n {\n key: 'role',\n title: '\u03A1\u03CC\u03BB\u03BF\u03C2',\n },\n {\n key: 'email',\n title: 'Email',\n },\n {\n key: 'rights',\n title: '\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1',\n displayComponent: displayRights,\n },\n];\n\ntype InitialFiltersType = {\n [K in (typeof dataConfig)[number]['key']]: string;\n};\n\nconst initialFilters: InitialFiltersType = {\n name: '',\n case_id: '',\n role: '',\n text: '',\n rights: '',\n};\n\nexport const Default = () => {\n const { search, results } = useStaticSearch<DataType, InitialFiltersType>({\n fields,\n data,\n initialFilters,\n });\n const navigate = (url) => {\n if (window.history.pushState) {\n const newUrl =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n url;\n window.history.pushState({ path: newUrl }, '', newUrl);\n }\n };\n const { search: urlSearch, values } = useURLParamsSearch(search, {\n navigate,\n fields,\n });\n\n return (\n <FilteredResults\n data={results}\n variant=\"block\"\n currentFilters={values}\n defaultFilters={initialFilters}\n fields={fields}\n onSearch={urlSearch}\n >\n <DataTable dataConfig={dataConfig} data={results} />\n </FilteredResults>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAElB,OAAO,qBAEA;AACP,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,WAAW,mBAAmB;AACvC,OAAO,UAAU;AAEjB,MAAM,SAAsB;AAAA,EAC1B;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,KAAK;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,cAAc,CAAC,UAAU;AAC7B,SAAO,oCAAC,QAAK,MAAM,KAAK,KAAK,MAAK,KAAM;AAC1C;AACA,MAAM,gBAAgB,CAAC,UAAU;AAC/B,SAAO,0DAAG,QAAQ,oCAAC,eAAU,IAAK,oCAAC,iBAAY,CAAG;AACpD;AAUA,MAAM,OAAmB;AAAA,EACvB;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEA,MAAM,aAA+B;AAAA,EACnC;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,kBAAkB;AAAA,EACpB;AACF;AAMA,MAAM,iBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AACV;AAEO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,QAAQ,QAAQ,IAAI,gBAA8C;AAAA,IACxE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,WAAW,CAAC,QAAQ;AACxB,QAAI,OAAO,QAAQ,WAAW;AAC5B,YAAM,SACJ,OAAO,SAAS,WAChB,OACA,OAAO,SAAS,OAChB,OAAO,SAAS,WAChB;AACF,aAAO,QAAQ,UAAU,EAAE,MAAM,OAAO,GAAG,IAAI,MAAM;AAAA,IACvD;AAAA,EACF;AACA,QAAM,EAAE,QAAQ,WAAW,OAAO,IAAI,mBAAmB,QAAQ;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB;AAAA,MACA,UAAU;AAAA;AAAA,IAEV,oCAAC,aAAU,YAAwB,MAAM,SAAS;AAAA,EACpD;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useState, useEffect, useMemo } from "react";
|
|
2
|
+
function isBooleanString(str) {
|
|
3
|
+
return /^(true|false)$/i.test(str);
|
|
4
|
+
}
|
|
5
|
+
function normalizeText(text) {
|
|
6
|
+
return text.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
7
|
+
}
|
|
8
|
+
const getOptionLabelForSelectValue = (field, value) => {
|
|
9
|
+
if (field.extra?.options) {
|
|
10
|
+
const matchedOption = field.extra.options.find(
|
|
11
|
+
(option) => option.value.toString() === value?.toString()
|
|
12
|
+
);
|
|
13
|
+
if (matchedOption) {
|
|
14
|
+
return matchedOption.label.primary;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
const useURLParamsSearch = (searchFunc, { navigate, fields }) => {
|
|
20
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
21
|
+
const currentParams = Object.fromEntries(urlParams.entries());
|
|
22
|
+
const values = fields.reduce((newValues, field) => {
|
|
23
|
+
if (currentParams[field.key]) {
|
|
24
|
+
newValues[field.key] = currentParams[field.key];
|
|
25
|
+
}
|
|
26
|
+
return newValues;
|
|
27
|
+
}, {});
|
|
28
|
+
const search = (params) => {
|
|
29
|
+
navigate(
|
|
30
|
+
"?" + new URLSearchParams(
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
Object.entries({ ...currentParams, ...params }).filter(
|
|
33
|
+
([_, value]) => !!value
|
|
34
|
+
)
|
|
35
|
+
).toString()
|
|
36
|
+
);
|
|
37
|
+
return searchFunc(params);
|
|
38
|
+
};
|
|
39
|
+
return { search, values };
|
|
40
|
+
};
|
|
41
|
+
function useStaticSearch({ fields, data, initialFilters }) {
|
|
42
|
+
const [results, setResults] = useState(data);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
search(initialFilters);
|
|
45
|
+
}, [initialFilters]);
|
|
46
|
+
const search = (filters) => {
|
|
47
|
+
if (!filters || Object.keys(filters).every((key) => filters[key] === "")) {
|
|
48
|
+
setResults(data);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const newResults = data.filter((row) => {
|
|
52
|
+
const filterKeys = Object.keys(filters);
|
|
53
|
+
const enabledFilters = filterKeys.filter(
|
|
54
|
+
(filterKey) => filters[filterKey]?.toString() && row[filterKey]?.toString()
|
|
55
|
+
);
|
|
56
|
+
const freeTextFilters = filterKeys.filter(
|
|
57
|
+
(filterKey) => filters[filterKey]?.toString() && !row[filterKey]?.toString()
|
|
58
|
+
);
|
|
59
|
+
let filtersMatchingValue = false;
|
|
60
|
+
if (enabledFilters.length > 0) {
|
|
61
|
+
filtersMatchingValue = enabledFilters.every((filterKey) => {
|
|
62
|
+
if (filters[filterKey]?.toString() !== row[filterKey]?.toString()) {
|
|
63
|
+
const field = fields.find((f) => f.key === filterKey);
|
|
64
|
+
const optionsObj = field?.extra?.options.find(
|
|
65
|
+
(option) => option?.label?.primary === row[filterKey]
|
|
66
|
+
);
|
|
67
|
+
return optionsObj?.value.toString() === filters[filterKey]?.toString();
|
|
68
|
+
}
|
|
69
|
+
filtersMatchingValue = true;
|
|
70
|
+
return filtersMatchingValue;
|
|
71
|
+
});
|
|
72
|
+
if (!filtersMatchingValue) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (freeTextFilters.length > 0) {
|
|
77
|
+
return freeTextFilters.every((filterKey) => {
|
|
78
|
+
return Object.values(row).some((value) => {
|
|
79
|
+
if (typeof value !== "string") {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const normalizedItemValue = normalizeText(
|
|
83
|
+
value.toString().toLowerCase()
|
|
84
|
+
);
|
|
85
|
+
const normalizedFilterValue = normalizeText(
|
|
86
|
+
filters[filterKey]?.toString().toLowerCase().trim() || ""
|
|
87
|
+
);
|
|
88
|
+
return normalizedItemValue.includes(normalizedFilterValue);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return filtersMatchingValue;
|
|
93
|
+
});
|
|
94
|
+
setResults(newResults);
|
|
95
|
+
};
|
|
96
|
+
return useMemo(() => ({ search, results }), [search, results]);
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
getOptionLabelForSelectValue,
|
|
100
|
+
isBooleanString,
|
|
101
|
+
normalizeText,
|
|
102
|
+
useStaticSearch,
|
|
103
|
+
useURLParamsSearch
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
2
|
+
import { ScalarType } from '@digigov/react-modules/FilteredResults';
|
|
3
|
+
export declare function isBooleanString(str: string): boolean;
|
|
4
|
+
export declare function normalizeText(text: string): string;
|
|
5
|
+
export declare const getOptionLabelForSelectValue: (field: any, value: any) => any;
|
|
6
|
+
export declare const useURLParamsSearch: (searchFunc: any, { navigate, fields }: {
|
|
7
|
+
navigate: any;
|
|
8
|
+
fields: any;
|
|
9
|
+
}) => {
|
|
10
|
+
search: (params: any) => any;
|
|
11
|
+
values: any;
|
|
12
|
+
};
|
|
13
|
+
interface UseStaticSearchProps<DT extends Record<string, ScalarType>, FT extends Record<string, ScalarType>> {
|
|
14
|
+
fields: FieldSpec[];
|
|
15
|
+
data: DT[];
|
|
16
|
+
initialFilters: FT;
|
|
17
|
+
}
|
|
18
|
+
export declare function useStaticSearch<DT extends Record<string, ScalarType>, FT extends Record<string, ScalarType>>({ fields, data, initialFilters }: UseStaticSearchProps<DT, FT>): {
|
|
19
|
+
search: (filters: FT) => void;
|
|
20
|
+
results: DT[];
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/FilteredResults/hooks.ts"],
|
|
4
|
+
"sourcesContent": ["import { useState, useEffect, useMemo } from 'react';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ScalarType } from '@digigov/react-modules/FilteredResults';\n\nexport function isBooleanString(str: string): boolean {\n return /^(true|false)$/i.test(str);\n}\n\nexport function normalizeText(text: string): string {\n return text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\nexport const getOptionLabelForSelectValue = (field, value) => {\n if (field.extra?.options) {\n const matchedOption = field.extra.options.find(\n (option) => option.value.toString() === value?.toString()\n );\n if (matchedOption) {\n return matchedOption.label.primary;\n }\n }\n return value;\n};\n\nexport const useURLParamsSearch = (searchFunc, { navigate, fields }) => {\n const urlParams = new URLSearchParams(window.location.search);\n const currentParams = Object.fromEntries(urlParams.entries());\n const values = fields.reduce((newValues, field) => {\n if (currentParams[field.key]) {\n newValues[field.key] = currentParams[field.key];\n }\n return newValues;\n }, {});\n\n const search = (params) => {\n navigate(\n '?' +\n new URLSearchParams(\n // @ts-ignore\n Object.entries({ ...currentParams, ...params }).filter(\n ([_, value]) => !!value\n )\n ).toString()\n );\n return searchFunc(params);\n };\n return { search, values };\n};\n\ninterface UseStaticSearchProps<\n DT extends Record<string, ScalarType>,\n FT extends Record<string, ScalarType>,\n> {\n fields: FieldSpec[];\n data: DT[];\n initialFilters: FT;\n}\n\nexport function useStaticSearch<\n DT extends Record<string, ScalarType>,\n FT extends Record<string, ScalarType>,\n>({ fields, data, initialFilters }: UseStaticSearchProps<DT, FT>) {\n const [results, setResults] = useState<DT[]>(data);\n\n useEffect(() => {\n search(initialFilters);\n }, [initialFilters]);\n\n const search = (filters: FT) => {\n if (!filters || Object.keys(filters).every((key) => filters[key] === '')) {\n setResults(data);\n return;\n }\n\n const newResults = data.filter((row) => {\n const filterKeys = Object.keys(filters);\n const enabledFilters = filterKeys.filter(\n (filterKey) =>\n filters[filterKey]?.toString() && row[filterKey]?.toString()\n );\n const freeTextFilters = filterKeys.filter(\n (filterKey) =>\n filters[filterKey]?.toString() && !row[filterKey]?.toString()\n );\n let filtersMatchingValue = false;\n\n // Filter the fields that exists as columns in table\n if (enabledFilters.length > 0) {\n filtersMatchingValue = enabledFilters.every((filterKey) => {\n if (filters[filterKey]?.toString() !== row[filterKey]?.toString()) {\n const field = fields.find((f) => f.key === filterKey);\n const optionsObj = field?.extra?.options.find(\n (option) => option?.label?.primary === row[filterKey]\n );\n return (\n optionsObj?.value.toString() === filters[filterKey]?.toString()\n );\n }\n filtersMatchingValue = true;\n return filtersMatchingValue;\n });\n if (!filtersMatchingValue) {\n return false;\n }\n }\n // Filter the free text fields (doesn't exist as columns)\n if (freeTextFilters.length > 0) {\n return freeTextFilters.every((filterKey) => {\n return Object.values(row).some((value) => {\n if (typeof value !== 'string') {\n return false;\n }\n const normalizedItemValue = normalizeText(\n value.toString().toLowerCase()\n );\n\n const normalizedFilterValue = normalizeText(\n filters[filterKey]?.toString().toLowerCase().trim() || ''\n );\n return normalizedItemValue.includes(normalizedFilterValue);\n });\n });\n }\n return filtersMatchingValue;\n });\n\n setResults(newResults);\n };\n\n return useMemo(() => ({ search, results }), [search, results]);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
3
|
+
export type ScalarType = string | number | boolean | null | undefined;
|
|
4
|
+
export interface DataConfigType {
|
|
5
|
+
key: string;
|
|
6
|
+
title: string;
|
|
7
|
+
displayComponent?: (value: string | number | boolean) => React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export interface FilteredResultsProps<DT extends Record<string, ScalarType>, FT extends Record<string, ScalarType>> {
|
|
10
|
+
fields: FieldSpec[];
|
|
11
|
+
data: DT[];
|
|
12
|
+
variant?: 'drawer-left' | 'drawer-right' | 'block';
|
|
13
|
+
defaultFilters?: FT;
|
|
14
|
+
currentFilters?: FT;
|
|
15
|
+
onSearch: (filters: unknown) => void;
|
|
16
|
+
children?: React.ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare const FormBuilderSyncValues: ({ values, autoSubmit }: {
|
|
19
|
+
values: any;
|
|
20
|
+
autoSubmit: any;
|
|
21
|
+
}) => React.JSX.Element;
|
|
22
|
+
export declare const DrawerFilteredResults: React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
export declare const BlockFilteredResults: React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>;
|
|
24
|
+
export declare const FilteredResults: React.ForwardRefExoticComponent<FilteredResultsProps<Record<string, ScalarType>, Record<string, ScalarType>> & React.RefAttributes<HTMLFormElement>>;
|
|
25
|
+
export default FilteredResults;
|