@digigov/react-modules 1.2.0-daaf7bdf → 1.2.0-e20fed09
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/Faq/Faq.stories.d.ts +8 -0
- package/Faq/Results/index.js +29 -0
- package/{ReactModules.stories → Faq/Results}/package.json +1 -1
- package/Faq/Results.d.ts +9 -0
- package/Faq/Results.js.map +7 -0
- package/Faq/__stories__/Default.d.ts +2 -0
- package/Faq/hooks/index.js +66 -0
- package/{FilteredResults/__stories__/Default → Faq/hooks}/package.json +1 -1
- package/Faq/hooks.d.ts +15 -0
- package/Faq/hooks.js.map +7 -0
- package/Faq/index.d.ts +43 -0
- package/Faq/index.js +169 -0
- package/Faq/index.js.map +7 -0
- package/Faq/index.test.d.ts +1 -0
- package/{FilteredResults/FilteredResults.stories → Faq}/package.json +1 -1
- package/Faq/slug/index.js +97 -0
- package/Faq/slug/package.json +6 -0
- package/Faq/slug.d.ts +1 -0
- package/Faq/slug.js.map +7 -0
- package/Faq/splitted.test.d.ts +1 -0
- package/Faq/utils/index.js +8 -0
- package/Faq/utils/package.json +6 -0
- package/Faq/utils.d.ts +1 -0
- package/Faq/utils.js.map +7 -0
- package/FilteredResults/__stories__/Default.d.ts +1 -1
- package/FilteredResults/hooks/index.js +1 -1
- package/FilteredResults/hooks.js.map +2 -2
- package/FilteredResults/index.js +1 -3
- package/FilteredResults/index.js.map +2 -2
- package/cjs/Faq/Results/index.js +58 -0
- package/cjs/Faq/Results.js.map +7 -0
- package/cjs/Faq/hooks/index.js +90 -0
- package/cjs/Faq/hooks.js.map +7 -0
- package/cjs/Faq/index.js +194 -0
- package/cjs/Faq/index.js.map +7 -0
- package/cjs/Faq/slug/index.js +120 -0
- package/cjs/Faq/slug.js.map +7 -0
- package/cjs/{ReactModules.stories → Faq/utils}/index.js +12 -7
- package/cjs/Faq/utils.js.map +7 -0
- package/cjs/FilteredResults/hooks/index.js +1 -1
- package/cjs/FilteredResults/hooks.js.map +2 -2
- package/cjs/FilteredResults/index.js +1 -3
- package/cjs/FilteredResults/index.js.map +3 -3
- package/cjs/index.js +3 -1
- package/cjs/index.js.map +2 -2
- package/cjs/lazy/index.js +6 -5
- package/cjs/lazy.js.map +3 -3
- package/cjs/registry/index.js +13 -3
- package/cjs/registry.js.map +3 -3
- package/index.d.ts +1 -0
- package/index.js +2 -1
- package/index.js.map +2 -2
- package/lazy/index.js +10 -13
- package/package.json +8 -10
- package/registry/index.js +25 -16
- package/src/Faq/Faq.stories.js +7 -0
- package/src/Faq/Results.tsx +53 -0
- package/src/Faq/__stories__/Default.tsx +292 -0
- package/src/Faq/hooks.ts +89 -0
- package/src/Faq/index.test.tsx +24 -0
- package/src/Faq/index.tsx +286 -0
- package/src/Faq/slug.ts +140 -0
- package/src/Faq/splitted.test.tsx +19 -0
- package/src/Faq/utils.ts +5 -0
- package/src/FilteredResults/__stories__/Default.tsx +8 -7
- package/src/FilteredResults/hooks.ts +1 -1
- package/src/FilteredResults/index.test.tsx +4 -0
- package/src/FilteredResults/index.tsx +1 -6
- package/src/FilteredResults/splitted.test.tsx +4 -0
- package/src/index.ts +1 -0
- package/src/lazy.js +10 -10
- package/src/registry.js +18 -10
- package/FilteredResults/FilteredResults.stories/index.js +0 -12
- package/FilteredResults/FilteredResults.stories.js.map +0 -7
- package/FilteredResults/__stories__/Default/index.js +0 -220
- package/FilteredResults/__stories__/Default.js.map +0 -7
- package/ReactModules.stories/index.js +0 -7
- package/ReactModules.stories.js.map +0 -7
- package/cjs/FilteredResults/FilteredResults.stories/index.js +0 -45
- package/cjs/FilteredResults/FilteredResults.stories.js.map +0 -7
- package/cjs/FilteredResults/__stories__/Default/index.js +0 -250
- package/cjs/FilteredResults/__stories__/Default.js.map +0 -7
- package/cjs/ReactModules.stories.js.map +0 -7
- package/lazy.d.ts +0 -16
- package/lazy.js.map +0 -7
- package/registry.d.ts +0 -9
- package/registry.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 ([
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,WAAW,eAAe;AAItC,SAAS,gBAAgB,KAAsB;AACpD,SAAO,kBAAkB,KAAK,GAAG;AACnC;AAEO,SAAS,cAAc,MAAsB;AAClD,SAAO,KAAK,UAAU,KAAK,EAAE,QAAQ,oBAAoB,EAAE;AAC7D;AAEO,MAAM,+BAA+B,CAAC,OAAO,UAAU;AAC5D,MAAI,MAAM,OAAO,SAAS;AACxB,UAAM,gBAAgB,MAAM,MAAM,QAAQ;AAAA,MACxC,CAAC,WAAW,OAAO,MAAM,SAAS,MAAM,OAAO,SAAS;AAAA,IAC1D;AACA,QAAI,eAAe;AACjB,aAAO,cAAc,MAAM;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,qBAAqB,CAAC,YAAY,EAAE,UAAU,OAAO,MAAM;AACtE,QAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC5D,QAAM,gBAAgB,OAAO,YAAY,UAAU,QAAQ,CAAC;AAC5D,QAAM,SAAS,OAAO,OAAO,CAAC,WAAW,UAAU;AACjD,QAAI,cAAc,MAAM,GAAG,GAAG;AAC5B,gBAAU,MAAM,GAAG,IAAI,cAAc,MAAM,GAAG;AAAA,IAChD;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,SAAS,CAAC,WAAW;AACzB;AAAA,MACE,MACE,IAAI;AAAA;AAAA,QAEF,OAAO,QAAQ,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC,EAAE;AAAA,UAC9C,CAAC,CAAC,
|
|
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
6
|
"names": []
|
|
7
7
|
}
|
package/FilteredResults/index.js
CHANGED
|
@@ -3,14 +3,12 @@ import FormBuilder from "@digigov/form/FormBuilder";
|
|
|
3
3
|
import { FormContext } from "@digigov/form/FormContext";
|
|
4
4
|
import { FilterChips } from "@digigov/react-modules/FilteredResults/FilterChips";
|
|
5
5
|
import { FilterFields } from "@digigov/react-modules/FilteredResults/FilterFields";
|
|
6
|
-
import CloseButton from "@digigov/ui/app/CloseButton";
|
|
7
6
|
import FilterContainer, {
|
|
8
7
|
FilterContent,
|
|
9
8
|
FilterHeadingContainer
|
|
10
9
|
} from "@digigov/ui/app/FilterContainer";
|
|
11
10
|
import { Button } from "@digigov/ui/form/Button";
|
|
12
11
|
import { Grid } from "@digigov/ui/layouts/Grid";
|
|
13
|
-
import { Hidden } from "@digigov/ui/layouts/Hidden";
|
|
14
12
|
import { SectionBreak } from "@digigov/ui/layouts/SectionBreak";
|
|
15
13
|
import { Drawer, DrawerHeading } from "@digigov/ui/navigation/Drawer";
|
|
16
14
|
import { useDrawer } from "@digigov/ui/navigation/Drawer/hooks";
|
|
@@ -64,7 +62,7 @@ const DrawerFilteredResults = React.forwardRef(
|
|
|
64
62
|
const BlockFilteredResults = React.forwardRef(
|
|
65
63
|
function BlockFilteredResults2({ fields, ...props }, ref) {
|
|
66
64
|
const [open, setOpen] = React.useState(true);
|
|
67
|
-
return /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, ref }, /* @__PURE__ */ React.createElement(FilterContainer, { open }, /* @__PURE__ */ React.createElement(FilterHeadingContainer,
|
|
65
|
+
return /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, ref }, /* @__PURE__ */ React.createElement(FilterContainer, { open }, /* @__PURE__ */ React.createElement(FilterHeadingContainer, { onClick: () => setOpen(false) }, /* @__PURE__ */ React.createElement(Heading, { size: "md" }, "\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1")), /* @__PURE__ */ React.createElement(FilterContent, null, /* @__PURE__ */ React.createElement(FilterChips, null), /* @__PURE__ */ React.createElement(FilterFields, { fields, horizontal: true }))), /* @__PURE__ */ React.createElement(
|
|
68
66
|
Button,
|
|
69
67
|
{
|
|
70
68
|
color: "secondary",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/FilteredResults/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { useContext, useEffect } from 'react';\nimport FormBuilder from '@digigov/form/FormBuilder';\nimport { FormContext } from '@digigov/form/FormContext';\nimport { FieldSpec } from '@digigov/form/types';\nimport { FilterChips } from '@digigov/react-modules/FilteredResults/FilterChips';\nimport { FilterFields } from '@digigov/react-modules/FilteredResults/FilterFields';\nimport
|
|
5
|
-
"mappings": "AAAA,OAAO,SAAS,YAAY,iBAAiB;AAC7C,OAAO,iBAAiB;AACxB,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,OAAO
|
|
4
|
+
"sourcesContent": ["import React, { useContext, useEffect } from 'react';\nimport FormBuilder from '@digigov/form/FormBuilder';\nimport { FormContext } from '@digigov/form/FormContext';\nimport { FieldSpec } from '@digigov/form/types';\nimport { FilterChips } from '@digigov/react-modules/FilteredResults/FilterChips';\nimport { FilterFields } from '@digigov/react-modules/FilteredResults/FilterFields';\nimport FilterContainer, {\n FilterContent,\n FilterHeadingContainer,\n} from '@digigov/ui/app/FilterContainer';\nimport { Button } from '@digigov/ui/form/Button';\nimport { Grid } from '@digigov/ui/layouts/Grid';\nimport { SectionBreak } from '@digigov/ui/layouts/SectionBreak';\nimport { Drawer, DrawerHeading } from '@digigov/ui/navigation/Drawer';\nimport { useDrawer } from '@digigov/ui/navigation/Drawer/hooks';\nimport { Heading } from '@digigov/ui/typography/Heading';\n\nexport type ScalarType = string | number | boolean | null | undefined;\n\nexport interface DataConfigType {\n key: string;\n title: string;\n displayComponent?: (value: string | number | boolean) => React.ReactNode;\n}\nexport interface FilteredResultsProps<\n DT extends Record<string, ScalarType>,\n FT extends Record<string, ScalarType>,\n> {\n fields: FieldSpec[];\n data: DT[];\n variant?: 'drawer-left' | 'drawer-right' | 'block';\n defaultFilters?: FT;\n currentFilters?: FT;\n onSearch: (filters: unknown) => void;\n children?: React.ReactNode;\n}\n\nexport const FormBuilderSyncValues = ({ values, autoSubmit }) => {\n const form = useContext(FormContext);\n const previousValues = form.getValues();\n useEffect(() => {\n const mergedObject = { ...values, ...previousValues };\n let shouldSubmit = false;\n for (const key in mergedObject) {\n // catching the filters that have been parsed from url & avoid continuous submitting\n if (values[key] !== undefined && previousValues[key] !== values[key]) {\n shouldSubmit = true;\n previousValues[key] = values[key];\n form.setValue(key, values[key]);\n }\n }\n if (autoSubmit && shouldSubmit) {\n form.submit();\n }\n }, [values]);\n return <></>;\n};\n\nexport const DrawerFilteredResults = React.forwardRef<HTMLDivElement, unknown>(\n function DrawerFilteredResults(\n { fields, direction = 'left', ...props },\n ref\n ) {\n const { registerDrawer, registerAction, currentOpen } = useDrawer();\n\n return (\n <>\n {currentOpen && (\n <Grid item xs={12} md={12} lg={4} ref={ref}>\n <Drawer\n {...registerDrawer('filters-drawer', {\n upRelative: 'lg',\n direction,\n })}\n >\n <DrawerHeading {...registerAction('filters-drawer', 'close')}>\n <Heading size=\"md\">\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1</Heading>\n </DrawerHeading>\n <FilterContent>\n <FilterFields fields={fields} horizontal={false} />\n </FilterContent>\n </Drawer>\n </Grid>\n )}\n <Grid item xs={12} md={12} lg={currentOpen ? 8 : 12}>\n <Button\n mb={4}\n {...registerAction(\n 'filters-drawer',\n currentOpen === 'filters-drawer' ? 'close' : 'open'\n )}\n color=\"secondary\"\n >\n \u03A6\u03AF\u03BB\u03C4\u03C1\u03B1\n </Button>\n <FilterChips />\n {props.children}\n </Grid>\n </>\n );\n }\n);\n\nexport const BlockFilteredResults = React.forwardRef<HTMLDivElement, unknown>(\n function BlockFilteredResults({ fields, ...props }, ref) {\n const [open, setOpen] = React.useState(true);\n return (\n <Grid item xs={12} ref={ref}>\n <FilterContainer open={open}>\n <FilterHeadingContainer onClick={() => setOpen(false)}>\n <Heading size=\"md\">\u03A6\u03AF\u03BB\u03C4\u03C1\u03B1</Heading>\n </FilterHeadingContainer>\n <FilterContent>\n <FilterChips />\n <FilterFields fields={fields} horizontal={true} />\n </FilterContent>\n </FilterContainer>\n <Button\n color=\"secondary\"\n mdUpHidden\n mb={4}\n onClick={() => setOpen(true)}\n >\n \u03A6\u03AF\u03BB\u03C4\u03C1\u03B1\n </Button>\n <SectionBreak size=\"md\" visible={false} />\n {props.children}\n </Grid>\n );\n }\n);\n\nexport const FilteredResults = React.forwardRef<\n HTMLFormElement,\n FilteredResultsProps<Record<string, ScalarType>, Record<string, ScalarType>>\n>(function FilteredResults(\n {\n fields,\n onSearch,\n variant = 'block',\n defaultFilters,\n currentFilters,\n children,\n },\n ref\n) {\n const isDrawer = variant.startsWith('drawer-');\n return (\n <FormBuilder\n onSubmit={onSearch}\n initial={defaultFilters}\n fields={fields}\n grid\n ref={ref}\n >\n {currentFilters && (\n <FormBuilderSyncValues values={currentFilters} autoSubmit={true} />\n )}\n {isDrawer ? (\n // @ts-ignore\n <DrawerFilteredResults\n fields={fields}\n direction={variant.split('-')[1]}\n >\n {children}\n </DrawerFilteredResults>\n ) : (\n // @ts-ignore\n <BlockFilteredResults fields={fields}>{children}</BlockFilteredResults>\n )}\n </FormBuilder>\n );\n});\n\nexport default FilteredResults;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["DrawerFilteredResults", "BlockFilteredResults", "FilteredResults"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var Results_exports = {};
|
|
29
|
+
__export(Results_exports, {
|
|
30
|
+
default: () => Results_default
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(Results_exports);
|
|
33
|
+
var import_react = __toESM(require("react"));
|
|
34
|
+
var import_FormBuilder = require("@digigov/form/FormBuilder");
|
|
35
|
+
var import_Button = __toESM(require("@digigov/ui/form/Button"));
|
|
36
|
+
var import_Heading = require("@digigov/ui/typography/Heading");
|
|
37
|
+
const Results = import_react.default.forwardRef(
|
|
38
|
+
function Results2({ filteredSections, Onclose, activeQa, primarySections }, ref) {
|
|
39
|
+
const { resetField, submit } = (0, import_FormBuilder.useFormContext)();
|
|
40
|
+
const handleReset = (0, import_react.useCallback)(
|
|
41
|
+
(e) => {
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
44
|
+
urlParams.delete("text");
|
|
45
|
+
urlParams.delete("activeQa");
|
|
46
|
+
window.history.replaceState({}, "", "?" + urlParams.toString());
|
|
47
|
+
resetField("text", { defaultValue: "" });
|
|
48
|
+
Onclose(activeQa);
|
|
49
|
+
submit();
|
|
50
|
+
},
|
|
51
|
+
[resetField, Onclose, submit, activeQa]
|
|
52
|
+
// Added necessary dependencies
|
|
53
|
+
);
|
|
54
|
+
return /* @__PURE__ */ import_react.default.createElement(import_Heading.Heading, { ref, size: "sm", marginTop: 4 }, "\u0391\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1: ", filteredSections, " \u03B1\u03C0\u03CC ", primarySections, ".", " ", /* @__PURE__ */ import_react.default.createElement(import_Button.default, { variant: "link", onClick: (e) => handleReset(e) }, "\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2"));
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
var Results_default = Results;
|
|
58
|
+
//# sourceMappingURL=Results.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Faq/Results.tsx"],
|
|
4
|
+
"sourcesContent": ["// Results.tsx\nimport React, { useCallback } from 'react';\nimport { useFormContext } from '@digigov/form/FormBuilder';\nimport Button from '@digigov/ui/form/Button';\nimport { Heading } from '@digigov/ui/typography/Heading';\n\ninterface ResultsProps {\n filteredSections: number;\n primarySections: number;\n Onclose: (v: string) => void;\n activeQa: string;\n}\n\nconst Results = React.forwardRef<HTMLHeadingElement, ResultsProps>(\n function Results(\n { filteredSections, Onclose, activeQa, primarySections },\n ref\n ) {\n const { resetField, submit } = useFormContext();\n const handleReset = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n // Remove 'text' from the URL\n const urlParams = new URLSearchParams(window.location.search);\n urlParams.delete('text');\n urlParams.delete('activeQa');\n window.history.replaceState({}, '', '?' + urlParams.toString());\n\n // Reset the form field\n resetField('text', { defaultValue: '' });\n\n // Close active FAQ\n Onclose(activeQa);\n\n // Submit the form (if needed)\n submit();\n },\n [resetField, Onclose, submit, activeQa] // Added necessary dependencies\n );\n\n return (\n <Heading ref={ref} size=\"sm\" marginTop={4}>\n \u0391\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1: {filteredSections} \u03B1\u03C0\u03CC {primarySections}.{' '}\n <Button variant=\"link\" onClick={(e) => handleReset(e)}>\n \u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03B1\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7\u03C2\n </Button>\n </Heading>\n );\n }\n);\n\nexport default Results;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmC;AACnC,yBAA+B;AAC/B,oBAAmB;AACnB,qBAAwB;AASxB,MAAM,UAAU,aAAAA,QAAM;AAAA,EACpB,SAASC,SACP,EAAE,kBAAkB,SAAS,UAAU,gBAAgB,GACvD,KACA;AACA,UAAM,EAAE,YAAY,OAAO,QAAI,mCAAe;AAC9C,UAAM,kBAAc;AAAA,MAClB,CAAC,MAA2C;AAC1C,UAAE,eAAe;AAGjB,cAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC5D,kBAAU,OAAO,MAAM;AACvB,kBAAU,OAAO,UAAU;AAC3B,eAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,MAAM,UAAU,SAAS,CAAC;AAG9D,mBAAW,QAAQ,EAAE,cAAc,GAAG,CAAC;AAGvC,gBAAQ,QAAQ;AAGhB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,YAAY,SAAS,QAAQ,QAAQ;AAAA;AAAA,IACxC;AAEA,WACE,6BAAAD,QAAA,cAAC,0BAAQ,KAAU,MAAK,MAAK,WAAW,KAAG,8EAC1B,kBAAiB,wBAAM,iBAAgB,KAAE,KACxD,6BAAAA,QAAA,cAAC,cAAAE,SAAA,EAAO,SAAQ,QAAO,SAAS,CAAC,MAAM,YAAY,CAAC,KAAG,qHAEvD,CACF;AAAA,EAEJ;AACF;AAEA,IAAO,kBAAQ;",
|
|
6
|
+
"names": ["React", "Results", "Button"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var hooks_exports = {};
|
|
19
|
+
__export(hooks_exports, {
|
|
20
|
+
useFaqSearch: () => useFaqSearch,
|
|
21
|
+
useURLParamsSearch: () => useURLParamsSearch
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(hooks_exports);
|
|
24
|
+
var import_react = require("react");
|
|
25
|
+
var import_slug = require("@digigov/react-modules/Faq/slug");
|
|
26
|
+
const removeAccents = (text) => {
|
|
27
|
+
return text.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
28
|
+
};
|
|
29
|
+
const useURLParamsSearch = (searchFunc, {
|
|
30
|
+
navigate,
|
|
31
|
+
filteredSections
|
|
32
|
+
}) => {
|
|
33
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
34
|
+
const currentParams = Object.fromEntries(urlParams.entries());
|
|
35
|
+
const hashId = window.location.hash ? window.location.hash.slice(1) : "";
|
|
36
|
+
const hashExistsInFilteredSections = filteredSections.some(
|
|
37
|
+
(section) => section.qa.some(
|
|
38
|
+
({ id, question }) => id === hashId || (0, import_slug.slug)(question) === hashId
|
|
39
|
+
)
|
|
40
|
+
);
|
|
41
|
+
const search = (params) => {
|
|
42
|
+
const updatedParams = Object.entries({
|
|
43
|
+
...currentParams,
|
|
44
|
+
...params
|
|
45
|
+
}).filter(([, value]) => Boolean(value)).reduce(
|
|
46
|
+
(acc, [key, value]) => {
|
|
47
|
+
acc[key] = value;
|
|
48
|
+
return acc;
|
|
49
|
+
},
|
|
50
|
+
{}
|
|
51
|
+
);
|
|
52
|
+
const newUrl = Object.keys(updatedParams).length ? "?" + new URLSearchParams(updatedParams).toString() : window.location.pathname;
|
|
53
|
+
const finalURL = hashExistsInFilteredSections ? newUrl + `#${hashId}` : newUrl;
|
|
54
|
+
navigate(finalURL);
|
|
55
|
+
return searchFunc(params);
|
|
56
|
+
};
|
|
57
|
+
return { search, values: { text: currentParams.text }, hashId };
|
|
58
|
+
};
|
|
59
|
+
const useFaqSearch = (questions) => {
|
|
60
|
+
const [filteredSections, setFilteredSections] = (0, import_react.useState)(questions.sections);
|
|
61
|
+
const search = (values) => {
|
|
62
|
+
if (!values || !values.text?.trim()) {
|
|
63
|
+
setFilteredSections(questions.sections);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const searchValue = values.text.trim();
|
|
67
|
+
const normalizedSearchWord = removeAccents(searchValue.toLowerCase());
|
|
68
|
+
const filteredSections2 = questions.sections.map((section) => {
|
|
69
|
+
const filteredQa = section.qa.filter(({ question, answer }) => {
|
|
70
|
+
const normalizedQuestion = removeAccents(
|
|
71
|
+
question?.toLowerCase() || ""
|
|
72
|
+
);
|
|
73
|
+
const normalizedAnswer = removeAccents(answer?.toLowerCase() || "");
|
|
74
|
+
return normalizedQuestion.includes(normalizedSearchWord) || normalizedAnswer.includes(normalizedSearchWord);
|
|
75
|
+
});
|
|
76
|
+
return { ...section, qa: filteredQa };
|
|
77
|
+
}).filter((section) => section.qa.length > 0);
|
|
78
|
+
setFilteredSections(filteredSections2);
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
filteredSections,
|
|
82
|
+
search
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
useFaqSearch,
|
|
88
|
+
useURLParamsSearch
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Faq/hooks.ts"],
|
|
4
|
+
"sourcesContent": ["import { useState } from 'react';\nimport { sectionsConfigType, SectionType } from '@digigov/react-modules/Faq';\nimport { slug } from '@digigov/react-modules/Faq/slug';\nconst removeAccents = (text: string) => {\n return text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n};\n\nexport const useURLParamsSearch = (\n searchFunc: (params: Record<string, string | undefined>) => void,\n {\n navigate,\n filteredSections,\n }: { navigate: (url: string) => void; filteredSections: SectionType[] }\n) => {\n const urlParams = new URLSearchParams(window.location.search);\n const currentParams = Object.fromEntries(urlParams.entries());\n const hashId = window.location.hash ? window.location.hash.slice(1) : '';\n\n // When filtered sections change, check if hash should be preserved\n const hashExistsInFilteredSections = filteredSections.some((section) =>\n section.qa.some(\n ({ id, question }) => id === hashId || slug(question) === hashId\n )\n );\n\n const search = (params: Record<string, string>) => {\n const updatedParams = Object.entries({\n ...currentParams,\n ...params,\n })\n .filter(([, value]) => Boolean(value)) // Ensure value is not empty\n .reduce(\n (acc, [key, value]) => {\n acc[key] = value as string; // Explicitly cast to string\n return acc;\n },\n {} as Record<string, string>\n ); // Ensure correct type\n\n const newUrl = Object.keys(updatedParams).length\n ? '?' + new URLSearchParams(updatedParams).toString()\n : window.location.pathname; // Reset to base URL if no params\n\n const finalURL = hashExistsInFilteredSections\n ? newUrl + `#${hashId}`\n : newUrl;\n navigate(finalURL);\n return searchFunc(params);\n };\n return { search, values: { text: currentParams.text }, hashId };\n};\n\nexport const useFaqSearch = (questions: sectionsConfigType) => {\n const [filteredSections, setFilteredSections] = useState(questions.sections);\n\n const search = (values: Record<string, string>) => {\n if (!values || !values.text?.trim()) {\n setFilteredSections(questions.sections);\n return;\n }\n\n const searchValue: string = values.text.trim(); // Ensure no spaces-only search\n const normalizedSearchWord = removeAccents(searchValue.toLowerCase());\n\n const filteredSections = questions.sections\n .map((section: SectionType) => {\n const filteredQa = section.qa.filter(({ question, answer }: any) => {\n const normalizedQuestion = removeAccents(\n question?.toLowerCase() || ''\n );\n const normalizedAnswer = removeAccents(answer?.toLowerCase() || '');\n return (\n normalizedQuestion.includes(normalizedSearchWord) ||\n normalizedAnswer.includes(normalizedSearchWord)\n );\n });\n\n return { ...section, qa: filteredQa };\n })\n .filter((section: SectionType) => section.qa.length > 0);\n\n setFilteredSections(filteredSections);\n };\n\n return {\n filteredSections,\n search,\n };\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyB;AAEzB,kBAAqB;AACrB,MAAM,gBAAgB,CAAC,SAAiB;AACtC,SAAO,KAAK,UAAU,KAAK,EAAE,QAAQ,oBAAoB,EAAE;AAC7D;AAEO,MAAM,qBAAqB,CAChC,YACA;AAAA,EACE;AAAA,EACA;AACF,MACG;AACH,QAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC5D,QAAM,gBAAgB,OAAO,YAAY,UAAU,QAAQ,CAAC;AAC5D,QAAM,SAAS,OAAO,SAAS,OAAO,OAAO,SAAS,KAAK,MAAM,CAAC,IAAI;AAGtE,QAAM,+BAA+B,iBAAiB;AAAA,IAAK,CAAC,YAC1D,QAAQ,GAAG;AAAA,MACT,CAAC,EAAE,IAAI,SAAS,MAAM,OAAO,cAAU,kBAAK,QAAQ,MAAM;AAAA,IAC5D;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,WAAmC;AACjD,UAAM,gBAAgB,OAAO,QAAQ;AAAA,MACnC,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC,EACE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,QAAQ,KAAK,CAAC,EACpC;AAAA,MACC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YAAI,GAAG,IAAI;AACX,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AAEF,UAAM,SAAS,OAAO,KAAK,aAAa,EAAE,SACtC,MAAM,IAAI,gBAAgB,aAAa,EAAE,SAAS,IAClD,OAAO,SAAS;AAEpB,UAAM,WAAW,+BACb,SAAS,IAAI,MAAM,KACnB;AACJ,aAAS,QAAQ;AACjB,WAAO,WAAW,MAAM;AAAA,EAC1B;AACA,SAAO,EAAE,QAAQ,QAAQ,EAAE,MAAM,cAAc,KAAK,GAAG,OAAO;AAChE;AAEO,MAAM,eAAe,CAAC,cAAkC;AAC7D,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAS,UAAU,QAAQ;AAE3E,QAAM,SAAS,CAAC,WAAmC;AACjD,QAAI,CAAC,UAAU,CAAC,OAAO,MAAM,KAAK,GAAG;AACnC,0BAAoB,UAAU,QAAQ;AACtC;AAAA,IACF;AAEA,UAAM,cAAsB,OAAO,KAAK,KAAK;AAC7C,UAAM,uBAAuB,cAAc,YAAY,YAAY,CAAC;AAEpE,UAAMA,oBAAmB,UAAU,SAChC,IAAI,CAAC,YAAyB;AAC7B,YAAM,aAAa,QAAQ,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,MAAW;AAClE,cAAM,qBAAqB;AAAA,UACzB,UAAU,YAAY,KAAK;AAAA,QAC7B;AACA,cAAM,mBAAmB,cAAc,QAAQ,YAAY,KAAK,EAAE;AAClE,eACE,mBAAmB,SAAS,oBAAoB,KAChD,iBAAiB,SAAS,oBAAoB;AAAA,MAElD,CAAC;AAED,aAAO,EAAE,GAAG,SAAS,IAAI,WAAW;AAAA,IACtC,CAAC,EACA,OAAO,CAAC,YAAyB,QAAQ,GAAG,SAAS,CAAC;AAEzD,wBAAoBA,iBAAgB;AAAA,EACtC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
+
"names": ["filteredSections"]
|
|
7
|
+
}
|
package/cjs/Faq/index.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var Faq_exports = {};
|
|
29
|
+
__export(Faq_exports, {
|
|
30
|
+
Faq: () => Faq,
|
|
31
|
+
default: () => Faq_default
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(Faq_exports);
|
|
34
|
+
var import_react = __toESM(require("react"));
|
|
35
|
+
var import_Field = require("@digigov/form/Field");
|
|
36
|
+
var import_FormBuilder = __toESM(require("@digigov/form/FormBuilder"));
|
|
37
|
+
var import_FormContext = require("@digigov/form/FormContext");
|
|
38
|
+
var import_Results = __toESM(require("@digigov/react-modules/Faq/Results"));
|
|
39
|
+
var import_utils = require("@digigov/react-modules/Faq/utils");
|
|
40
|
+
var import_PageTitleContainer = __toESM(require("@digigov/ui/app/PageTitleContainer"));
|
|
41
|
+
var import_Accordion = require("@digigov/ui/content/Accordion");
|
|
42
|
+
var import_hooks = require("@digigov/ui/content/Accordion/hooks");
|
|
43
|
+
var import_Markdown = __toESM(require("@digigov/ui/content/Markdown"));
|
|
44
|
+
var import_SearchContainer = require("@digigov/ui/form/SearchContainer");
|
|
45
|
+
var import_layouts = require("@digigov/ui/layouts");
|
|
46
|
+
var import_Aside = require("@digigov/ui/layouts/Basic/Aside");
|
|
47
|
+
var import_Container = require("@digigov/ui/layouts/Basic/Container");
|
|
48
|
+
var import_Main = require("@digigov/ui/layouts/Basic/Main");
|
|
49
|
+
var import_Grid = __toESM(require("@digigov/ui/layouts/Grid"));
|
|
50
|
+
var import_SectionBreak = __toESM(require("@digigov/ui/layouts/SectionBreak"));
|
|
51
|
+
var import_BackToTopLink = require("@digigov/ui/navigation/BackToTopLink");
|
|
52
|
+
var import_NavList = __toESM(require("@digigov/ui/navigation/NavList"));
|
|
53
|
+
var import_Heading = require("@digigov/ui/typography/Heading");
|
|
54
|
+
var import_Hint = __toESM(require("@digigov/ui/typography/Hint"));
|
|
55
|
+
const FormBuilderSyncValues = ({ values, autoSubmit }) => {
|
|
56
|
+
const form = (0, import_react.useContext)(import_FormContext.FormContext);
|
|
57
|
+
const previousValues = form.getValues();
|
|
58
|
+
(0, import_react.useEffect)(() => {
|
|
59
|
+
const mergedObject = { ...values, ...previousValues };
|
|
60
|
+
let shouldSubmit = false;
|
|
61
|
+
for (const key in mergedObject) {
|
|
62
|
+
if (values[key] !== void 0 && previousValues[key] !== values[key]) {
|
|
63
|
+
shouldSubmit = true;
|
|
64
|
+
previousValues[key] = values[key];
|
|
65
|
+
form.setValue(key, values[key]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (autoSubmit && shouldSubmit) {
|
|
69
|
+
form.submit();
|
|
70
|
+
}
|
|
71
|
+
}, [autoSubmit, form, previousValues, values]);
|
|
72
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null);
|
|
73
|
+
};
|
|
74
|
+
const NavigationList = import_react.default.forwardRef(
|
|
75
|
+
function NavigationList2({ title, sections }, ref) {
|
|
76
|
+
return /* @__PURE__ */ import_react.default.createElement(import_NavList.default, { ref, layout: "vertical", marginBottom: 10 }, title && /* @__PURE__ */ import_react.default.createElement(import_Heading.Heading, { size: "md", id: "contents", marginBottom: 4 }, title), sections && sections.length > 0 && sections.map(({ id, title: title2 }, index) => /* @__PURE__ */ import_react.default.createElement(import_NavList.NavListItemAction, { key: index, href: `#${(0, import_utils.createId)(id, title2)}` }, title2)));
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
const Faq = import_react.default.forwardRef(function FAQ({
|
|
80
|
+
contents,
|
|
81
|
+
sections,
|
|
82
|
+
initialSections,
|
|
83
|
+
submitValues,
|
|
84
|
+
activeQa,
|
|
85
|
+
onActiveQa,
|
|
86
|
+
search
|
|
87
|
+
}, ref) {
|
|
88
|
+
const { section, currentOpen, onOpen, close } = (0, import_hooks.useAccordion)({
|
|
89
|
+
singleOpen: true,
|
|
90
|
+
defaultOpen: 0
|
|
91
|
+
});
|
|
92
|
+
const placement = contents.toc?.placement || "none";
|
|
93
|
+
const filteredSections = sections.reduce(
|
|
94
|
+
(acc, section2) => acc + (section2.qa.length || 0),
|
|
95
|
+
0
|
|
96
|
+
);
|
|
97
|
+
const primarySections = initialSections.sections.reduce(
|
|
98
|
+
(acc, section2) => acc + (section2.qa.length || 0),
|
|
99
|
+
0
|
|
100
|
+
);
|
|
101
|
+
const hash = window.location.hash.slice(1);
|
|
102
|
+
const currentId = activeQa ? activeQa : hash;
|
|
103
|
+
(0, import_react.useEffect)(() => {
|
|
104
|
+
if (onActiveQa) {
|
|
105
|
+
if (currentOpen && activeQa !== currentOpen) {
|
|
106
|
+
onActiveQa(currentOpen);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}, [activeQa, currentOpen, onActiveQa]);
|
|
110
|
+
(0, import_react.useEffect)(() => {
|
|
111
|
+
if (activeQa && activeQa !== currentOpen) {
|
|
112
|
+
onOpen(activeQa);
|
|
113
|
+
}
|
|
114
|
+
}, [activeQa, currentOpen, onOpen]);
|
|
115
|
+
(0, import_react.useEffect)(() => {
|
|
116
|
+
if (currentId) {
|
|
117
|
+
const element = document.getElementById(currentId);
|
|
118
|
+
if (element) {
|
|
119
|
+
element.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}, [activeQa, currentId, hash]);
|
|
123
|
+
const Onclose = (activeQa2) => {
|
|
124
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
125
|
+
urlParams.delete("text");
|
|
126
|
+
urlParams.delete("activeQa");
|
|
127
|
+
window.history.pushState({}, "", "?" + urlParams.toString());
|
|
128
|
+
onActiveQa("");
|
|
129
|
+
close(activeQa2);
|
|
130
|
+
};
|
|
131
|
+
const handleSubmit = (data) => {
|
|
132
|
+
search(data);
|
|
133
|
+
onActiveQa("");
|
|
134
|
+
close(activeQa);
|
|
135
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
136
|
+
urlParams.delete("activeQa");
|
|
137
|
+
window.history.replaceState({}, "", "?" + urlParams.toString());
|
|
138
|
+
};
|
|
139
|
+
return /* @__PURE__ */ import_react.default.createElement(import_Container.Container, { ref }, placement !== "none" && placement === "left" && /* @__PURE__ */ import_react.default.createElement(import_Aside.Aside, { sticky: false }, /* @__PURE__ */ import_react.default.createElement(NavigationList, { title: contents.toc?.title, sections })), /* @__PURE__ */ import_react.default.createElement(import_Main.Main, null, /* @__PURE__ */ import_react.default.createElement(import_PageTitleContainer.default, null, /* @__PURE__ */ import_react.default.createElement(import_PageTitleContainer.PageTitleHeading, { size: "xl", id: "faq" }, contents?.title)), placement !== "none" && placement === "top" && /* @__PURE__ */ import_react.default.createElement(NavigationList, { title: contents?.toc?.title, sections }), contents.search && /* @__PURE__ */ import_react.default.createElement(import_FormBuilder.default, { onSubmit: handleSubmit, initial: { text: "" } }, submitValues && /* @__PURE__ */ import_react.default.createElement(FormBuilderSyncValues, { values: submitValues, autoSubmit: true }), /* @__PURE__ */ import_react.default.createElement(
|
|
140
|
+
import_layouts.Stack,
|
|
141
|
+
{
|
|
142
|
+
direction: "row",
|
|
143
|
+
flexWrap: "nowrap",
|
|
144
|
+
alignItems: "flex-end",
|
|
145
|
+
spacing: 4
|
|
146
|
+
},
|
|
147
|
+
/* @__PURE__ */ import_react.default.createElement(import_Grid.default, { container: true, style: { width: "100%" } }, /* @__PURE__ */ import_react.default.createElement(
|
|
148
|
+
import_Field.Field,
|
|
149
|
+
{
|
|
150
|
+
type: "string",
|
|
151
|
+
key: "text",
|
|
152
|
+
name: "text",
|
|
153
|
+
placeholder: "\u0391\u03BD\u03B1\u03B6\u03B7\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC \u03BC\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C1\u03CE\u03C4\u03B7\u03C3\u03AE \u03C3\u03B1\u03C2",
|
|
154
|
+
label: { primary: contents.search.title }
|
|
155
|
+
}
|
|
156
|
+
)),
|
|
157
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
158
|
+
import_SearchContainer.SearchButton,
|
|
159
|
+
{
|
|
160
|
+
type: "submit",
|
|
161
|
+
mb: { md: 10 },
|
|
162
|
+
style: { minHeight: "2.75rem" }
|
|
163
|
+
}
|
|
164
|
+
)
|
|
165
|
+
), filteredSections !== primarySections && /* @__PURE__ */ import_react.default.createElement(
|
|
166
|
+
import_Results.default,
|
|
167
|
+
{
|
|
168
|
+
filteredSections,
|
|
169
|
+
primarySections,
|
|
170
|
+
Onclose,
|
|
171
|
+
activeQa
|
|
172
|
+
}
|
|
173
|
+
)), /* @__PURE__ */ import_react.default.createElement(import_Grid.default, null, sections && sections.length > 0 ? sections.map(({ id: sectionId, title, qa }, index) => /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, { key: index }, /* @__PURE__ */ import_react.default.createElement(import_Heading.Heading, { id: (0, import_utils.createId)(sectionId, title), size: "lg" }, title), /* @__PURE__ */ import_react.default.createElement(import_Accordion.Accordion, { marginBottom: qa && qa.length > 0 ? 12 : 0 }, qa?.map(({ id, question, answer }, indx) => /* @__PURE__ */ import_react.default.createElement(
|
|
174
|
+
import_Accordion.AccordionSection,
|
|
175
|
+
{
|
|
176
|
+
key: indx,
|
|
177
|
+
...section((0, import_utils.createId)(id, question))
|
|
178
|
+
},
|
|
179
|
+
/* @__PURE__ */ import_react.default.createElement(import_Accordion.AccordionSectionSummary, null, /* @__PURE__ */ import_react.default.createElement(
|
|
180
|
+
import_Accordion.AccordionSectionSummaryHeading,
|
|
181
|
+
{
|
|
182
|
+
"aria-controls": (0, import_utils.createId)(id, question)
|
|
183
|
+
},
|
|
184
|
+
question
|
|
185
|
+
)),
|
|
186
|
+
/* @__PURE__ */ import_react.default.createElement(import_Accordion.AccordionSectionContent, { id: (0, import_utils.createId)(id, question) }, /* @__PURE__ */ import_react.default.createElement(import_Markdown.default, { content: answer }))
|
|
187
|
+
))), /* @__PURE__ */ import_react.default.createElement(import_SectionBreak.default, { visible: false }))) : /* @__PURE__ */ import_react.default.createElement(import_Hint.default, { marginBottom: 10 }, "\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1.")), /* @__PURE__ */ import_react.default.createElement(import_BackToTopLink.BackToTop, { topLimitId: "contents", id: "back-to-top" }, "\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE \u03C3\u03C4\u03B1 \u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03B1")), placement !== "none" && placement === "right" && /* @__PURE__ */ import_react.default.createElement(import_Aside.Aside, { sticky: false }, /* @__PURE__ */ import_react.default.createElement(NavigationList, { title: contents?.toc?.title, sections })));
|
|
188
|
+
});
|
|
189
|
+
var Faq_default = Faq;
|
|
190
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
191
|
+
0 && (module.exports = {
|
|
192
|
+
Faq
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/Faq/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useEffect, useContext } from 'react';\nimport { Field } from '@digigov/form/Field';\nimport FormBuilder from '@digigov/form/FormBuilder';\nimport { FormContext } from '@digigov/form/FormContext';\nimport Results from '@digigov/react-modules/Faq/Results';\nimport { createId } from '@digigov/react-modules/Faq/utils';\nimport PageTitleContainer, {\n PageTitleHeading,\n} from '@digigov/ui/app/PageTitleContainer';\nimport {\n Accordion,\n AccordionSection,\n AccordionSectionContent,\n AccordionSectionSummary,\n AccordionSectionSummaryHeading,\n} from '@digigov/ui/content/Accordion';\nimport { useAccordion } from '@digigov/ui/content/Accordion/hooks';\nimport Markdown from '@digigov/ui/content/Markdown';\nimport { SearchButton } from '@digigov/ui/form/SearchContainer';\nimport { Stack } from '@digigov/ui/layouts';\nimport { Aside } from '@digigov/ui/layouts/Basic/Aside';\nimport { Container } from '@digigov/ui/layouts/Basic/Container';\nimport { Main } from '@digigov/ui/layouts/Basic/Main';\nimport Grid from '@digigov/ui/layouts/Grid';\nimport SectionBreak from '@digigov/ui/layouts/SectionBreak';\nimport { BackToTop } from '@digigov/ui/navigation/BackToTopLink';\nimport NavList, { NavListItemAction } from '@digigov/ui/navigation/NavList';\nimport { Heading } from '@digigov/ui/typography/Heading';\nimport Hint from '@digigov/ui/typography/Hint';\n\nexport interface sectionsConfigType {\n sections: SectionType[];\n}\n\nexport interface QaType {\n id?: string;\n question: string;\n answer: string;\n}\n\nexport interface SectionType {\n id: string;\n title: string;\n qa: QaType[];\n}\n\nexport interface TocType {\n title: string;\n placement: 'top' | 'left' | 'right' | 'none';\n}\n\nexport interface SearchFilterType {\n title?: string;\n}\n\nexport interface ContentsType {\n title: string;\n toc: TocType;\n search?: SearchFilterType;\n}\n\nexport interface NavigationListProps {\n title?: string;\n sections: SectionType[];\n}\n\nexport interface FaqProps {\n contents: ContentsType;\n sections: SectionType[];\n initialSections: sectionsConfigType;\n search: (values: Record<string, string>) => void;\n submitValues: { text: string };\n activeQa: string;\n onActiveQa: (v: string) => void;\n}\n\nconst FormBuilderSyncValues = ({ values, autoSubmit }) => {\n const form = useContext(FormContext);\n const previousValues = form.getValues();\n useEffect(() => {\n const mergedObject = { ...values, ...previousValues };\n let shouldSubmit = false;\n for (const key in mergedObject) {\n // catching the filters that have been parsed from url & avoid continuous submitting\n if (values[key] !== undefined && previousValues[key] !== values[key]) {\n shouldSubmit = true;\n previousValues[key] = values[key];\n form.setValue(key, values[key]);\n }\n }\n if (autoSubmit && shouldSubmit) {\n form.submit();\n }\n }, [autoSubmit, form, previousValues, values]);\n return <></>;\n};\n\nconst NavigationList = React.forwardRef<HTMLUListElement, NavigationListProps>(\n function NavigationList({ title, sections }, ref) {\n return (\n <NavList ref={ref} layout=\"vertical\" marginBottom={10}>\n {title && (\n <Heading size=\"md\" id=\"contents\" marginBottom={4}>\n {title}\n </Heading>\n )}\n {sections &&\n sections.length > 0 &&\n sections.map(({ id, title }, index) => (\n <NavListItemAction key={index} href={`#${createId(id, title)}`}>\n {title}\n </NavListItemAction>\n ))}\n </NavList>\n );\n }\n);\n\nexport const Faq = React.forwardRef<HTMLDivElement, FaqProps>(function FAQ(\n {\n contents,\n sections,\n initialSections,\n submitValues,\n activeQa,\n onActiveQa,\n search,\n },\n ref\n) {\n const { section, currentOpen, onOpen, close } = useAccordion({\n singleOpen: true,\n defaultOpen: 0,\n });\n const placement = contents.toc?.placement || 'none';\n const filteredSections = sections.reduce(\n (acc, section) => acc + (section.qa.length || 0),\n 0\n );\n const primarySections = initialSections.sections.reduce(\n (acc, section) => acc + (section.qa.length || 0),\n 0\n );\n const hash = window.location.hash.slice(1);\n const currentId = activeQa ? activeQa : hash;\n\n useEffect(() => {\n if (onActiveQa) {\n if (currentOpen && activeQa !== currentOpen) {\n onActiveQa(currentOpen as string);\n }\n }\n }, [activeQa, currentOpen, onActiveQa]);\n\n useEffect(() => {\n if (activeQa && activeQa !== currentOpen) {\n onOpen(activeQa);\n }\n }, [activeQa, currentOpen, onOpen]);\n\n useEffect(() => {\n // Scroll to the target element if it exists\n if (currentId) {\n const element = document.getElementById(currentId);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n }, [activeQa, currentId, hash]);\n\n const Onclose = (activeQa) => {\n const urlParams = new URLSearchParams(window.location.search);\n urlParams.delete('text');\n urlParams.delete('activeQa');\n window.history.pushState({}, '', '?' + urlParams.toString());\n onActiveQa('');\n close(activeQa);\n };\n const handleSubmit = (data) => {\n search(data);\n onActiveQa('');\n close(activeQa);\n const urlParams = new URLSearchParams(window.location.search);\n urlParams.delete('activeQa');\n window.history.replaceState({}, '', '?' + urlParams.toString());\n };\n\n return (\n <Container ref={ref}>\n {placement !== 'none' && placement === 'left' && (\n <Aside sticky={false}>\n <NavigationList title={contents.toc?.title} sections={sections} />\n </Aside>\n )}\n <Main>\n <PageTitleContainer>\n <PageTitleHeading size=\"xl\" id=\"faq\">\n {contents?.title}\n </PageTitleHeading>\n </PageTitleContainer>\n {placement !== 'none' && placement === 'top' && (\n <NavigationList title={contents?.toc?.title} sections={sections} />\n )}\n\n {contents.search && (\n <FormBuilder onSubmit={handleSubmit} initial={{ text: '' }}>\n {submitValues && (\n <FormBuilderSyncValues values={submitValues} autoSubmit={true} />\n )}\n <Stack\n direction=\"row\"\n flexWrap=\"nowrap\"\n alignItems=\"flex-end\"\n spacing={4}\n >\n <Grid container style={{ width: '100%' }}>\n <Field\n type=\"string\"\n key=\"text\"\n name=\"text\"\n placeholder=\"\u0391\u03BD\u03B1\u03B6\u03B7\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AC \u03BC\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C1\u03CE\u03C4\u03B7\u03C3\u03AE \u03C3\u03B1\u03C2\"\n label={{ primary: contents.search.title }}\n />\n </Grid>\n <SearchButton\n type=\"submit\"\n mb={{ md: 10 }}\n style={{ minHeight: '2.75rem' }}\n />\n </Stack>\n {filteredSections !== primarySections && (\n <Results\n filteredSections={filteredSections}\n primarySections={primarySections}\n Onclose={Onclose}\n activeQa={activeQa}\n />\n )}\n </FormBuilder>\n )}\n <Grid>\n {sections && sections.length > 0 ? (\n sections.map(({ id: sectionId, title, qa }, index) => (\n <React.Fragment key={index}>\n <Heading id={createId(sectionId, title)} size=\"lg\">\n {title}\n </Heading>\n <Accordion marginBottom={qa && qa.length > 0 ? 12 : 0}>\n {qa?.map(({ id, question, answer }, indx) => (\n <AccordionSection\n key={indx}\n {...section(createId(id, question))}\n >\n <AccordionSectionSummary>\n <AccordionSectionSummaryHeading\n aria-controls={createId(id, question)}\n >\n {question}\n </AccordionSectionSummaryHeading>\n </AccordionSectionSummary>\n <AccordionSectionContent id={createId(id, question)}>\n <Markdown content={answer} />\n </AccordionSectionContent>\n </AccordionSection>\n ))}\n </Accordion>\n <SectionBreak visible={false} />\n </React.Fragment>\n ))\n ) : (\n <Hint marginBottom={10}>\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1.</Hint>\n )}\n </Grid>\n <BackToTop topLimitId=\"contents\" id=\"back-to-top\">\n \u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE \u03C3\u03C4\u03B1 \u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03B1\n </BackToTop>\n </Main>\n {placement !== 'none' && placement === 'right' && (\n <Aside sticky={false}>\n <NavigationList title={contents?.toc?.title} sections={sections} />\n </Aside>\n )}\n </Container>\n );\n});\nexport default Faq;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "NavigationList", "NavList", "title", "section", "activeQa", "PageTitleContainer", "FormBuilder", "Grid", "Results", "Markdown", "SectionBreak", "Hint"]
|
|
7
|
+
}
|