@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.
Files changed (82) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/FilteredResults/DataTable/index.js +18 -0
  3. package/FilteredResults/DataTable/package.json +6 -0
  4. package/FilteredResults/DataTable.d.ts +5 -0
  5. package/FilteredResults/DataTable.js.map +7 -0
  6. package/FilteredResults/FilterChips/index.js +52 -0
  7. package/FilteredResults/FilterChips/package.json +6 -0
  8. package/FilteredResults/FilterChips.d.ts +3 -0
  9. package/FilteredResults/FilterChips.js.map +7 -0
  10. package/FilteredResults/FilterFields/index.js +11 -0
  11. package/FilteredResults/FilterFields/package.json +6 -0
  12. package/FilteredResults/FilterFields.d.ts +5 -0
  13. package/FilteredResults/FilterFields.js.map +7 -0
  14. package/FilteredResults/FilteredResults.stories/index.js +12 -0
  15. package/FilteredResults/FilteredResults.stories/package.json +6 -0
  16. package/FilteredResults/FilteredResults.stories.d.ts +8 -0
  17. package/FilteredResults/FilteredResults.stories.js.map +7 -0
  18. package/FilteredResults/__stories__/Default/index.js +220 -0
  19. package/FilteredResults/__stories__/Default/package.json +6 -0
  20. package/FilteredResults/__stories__/Default.d.ts +2 -0
  21. package/FilteredResults/__stories__/Default.js.map +7 -0
  22. package/FilteredResults/hooks/index.js +105 -0
  23. package/FilteredResults/hooks/package.json +6 -0
  24. package/FilteredResults/hooks.d.ts +22 -0
  25. package/FilteredResults/hooks.js.map +7 -0
  26. package/FilteredResults/index.d.ts +25 -0
  27. package/FilteredResults/index.js +122 -0
  28. package/FilteredResults/index.js.map +7 -0
  29. package/FilteredResults/index.test.d.ts +1 -0
  30. package/FilteredResults/package.json +6 -0
  31. package/LICENSE +0 -0
  32. package/README.md +0 -0
  33. package/ReactModules.stories/index.js +7 -0
  34. package/ReactModules.stories/package.json +6 -0
  35. package/ReactModules.stories.d.ts +4 -0
  36. package/ReactModules.stories.js.map +7 -0
  37. package/cjs/FilteredResults/DataTable/index.js +42 -0
  38. package/cjs/FilteredResults/DataTable.js.map +7 -0
  39. package/cjs/FilteredResults/FilterChips/index.js +82 -0
  40. package/cjs/FilteredResults/FilterChips.js.map +7 -0
  41. package/cjs/FilteredResults/FilterFields/index.js +44 -0
  42. package/cjs/FilteredResults/FilterFields.js.map +7 -0
  43. package/cjs/FilteredResults/FilteredResults.stories/index.js +45 -0
  44. package/cjs/FilteredResults/FilteredResults.stories.js.map +7 -0
  45. package/cjs/FilteredResults/__stories__/Default/index.js +250 -0
  46. package/cjs/FilteredResults/__stories__/Default.js.map +7 -0
  47. package/cjs/FilteredResults/hooks/index.js +132 -0
  48. package/cjs/FilteredResults/hooks.js.map +7 -0
  49. package/cjs/FilteredResults/index.js +155 -0
  50. package/cjs/FilteredResults/index.js.map +7 -0
  51. package/cjs/ReactModules.stories/index.js +26 -0
  52. package/cjs/ReactModules.stories.js.map +7 -0
  53. package/cjs/index.js +22 -0
  54. package/cjs/index.js.map +7 -0
  55. package/cjs/lazy/index.js +43 -0
  56. package/cjs/lazy.js.map +7 -0
  57. package/cjs/registry/index.js +63 -0
  58. package/cjs/registry.js.map +7 -0
  59. package/index.d.ts +1 -0
  60. package/index.js +7 -0
  61. package/index.js.map +7 -0
  62. package/lazy/index.js +14 -0
  63. package/lazy/package.json +6 -0
  64. package/lazy.d.ts +16 -0
  65. package/lazy.js.map +7 -0
  66. package/package.json +25 -0
  67. package/registry/index.js +34 -0
  68. package/registry/package.json +6 -0
  69. package/registry.d.ts +9 -0
  70. package/registry.js.map +7 -0
  71. package/src/FilteredResults/DataTable.tsx +47 -0
  72. package/src/FilteredResults/FilterChips.tsx +54 -0
  73. package/src/FilteredResults/FilterFields.tsx +15 -0
  74. package/src/FilteredResults/FilteredResults.stories.js +7 -0
  75. package/src/FilteredResults/__stories__/Default.tsx +243 -0
  76. package/src/FilteredResults/hooks.ts +131 -0
  77. package/src/FilteredResults/index.test.tsx +20 -0
  78. package/src/FilteredResults/index.tsx +180 -0
  79. package/src/ReactModules.stories.js +3 -0
  80. package/src/index.ts +1 -0
  81. package/src/lazy.js +11 -0
  82. 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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/FilteredResults/DataTable/index.js"
6
+ }
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare function DataTable({ dataConfig, data }: {
3
+ dataConfig: any;
4
+ data: any;
5
+ }): React.JSX.Element;
@@ -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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/FilteredResults/FilterChips/index.js"
6
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const FilterChips: () => React.JSX.Element | null;
3
+ export default FilterChips;
@@ -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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/FilteredResults/FilterFields/index.js"
6
+ }
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare const FilterFields: ({ fields, horizontal }: {
3
+ fields: any;
4
+ horizontal: any;
5
+ }) => React.JSX.Element;
@@ -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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/FilteredResults/FilteredResults.stories/index.js"
6
+ }
@@ -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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../../cjs/FilteredResults/__stories__/Default/index.js"
6
+ }
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Default: () => React.JSX.Element;
@@ -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": "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",
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,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../cjs/FilteredResults/hooks/index.js"
6
+ }
@@ -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;