UNPKG

@devgateway/dvz-ui-react

Version:

A modular, embeddable React component library for data visualization and UI, built with TypeScript. Provides reusable components for charts, maps, dashboards, and more, with built-in support for internationalization and Redux integration.

185 lines (184 loc) 5.96 kB
import { jsxs as de, jsx as U } from "react/jsx-runtime"; import { useRef as $, useState as f, useMemo as N, useEffect as V } from "react"; import { Container as me } from "semantic-ui-react"; import { toBoolean as i, toNumber as fe } from "../../utils/data.js"; import { useAppDispatch as he } from "../../redux/hooks.js"; import { useSelector as Se } from "react-redux"; import Ce from "./CategoricalFilter.js"; import Te from "./YearFilter.js"; const Ee = (k) => { const { "data-alphabetical-sort": G, "data-asc-order": H, "data-group": c, "data-placeholder": A, "data-all-label": Y, "data-none-label": I, "data-use-single-column": Q, "data-enable-text-search": W, "data-filter-type": S, "data-show-no-data-option": X, "data-close-on-select": Z, "data-all-none-same-behaviour": ee, "data-auto-apply": te, "data-taxonomy": s, "data-categories": y = "[]", "data-is-country-filter": re, "data-is-year-filter": ae, "data-type": oe, "data-sort-first-by": _, "data-default-values": le = "[]", editing: ne = !1 } = k, h = he(), t = Se((e) => e.getIn(["data", "posts", c])) || {}, o = S === "multi-select", B = $(0), E = (e) => ne ? e : decodeURIComponent(e); let n = ((e) => { try { return JSON.parse(E(e)); } catch (r) { return console.warn("JSON parsing failed for value:", e, "- treating as plain string. Error:", r), E(e); } })(le); n || (n = []), typeof n == "string" && (n = n.split(",").map(Number)), typeof n == "number" && (n = [n]); const ie = i(G), se = i(H), L = i(X), R = i(Z), w = i(ee), D = i(te), a = i(re), l = i(ae), P = i(Q), v = i(W), C = _ !== "none" ? fe(_) : null, [u, ce] = f([]), [T, ye] = f(!1), O = (e, r) => r ? Array.isArray(e) ? e : e != null ? [e] : [] : e || void 0, x = (e, r) => Array.isArray(e) && Array.isArray(r) ? e.length !== r.length ? !1 : e.every((d, m) => d === r[m]) : e === r, F = N( () => O(t.countryFilter, o), [t.countryFilter, o] ), p = N( () => O(t.categoryFilter, o), [t.categoryFilter, o] ), g = N( () => l ? O(t.yearFilter, o) : void 0, [t.yearFilter, o, l] ), [ue, z] = f(g), [K, M] = f(F), [j, J] = f(p), q = $({ countryFilter: F, categoryFilter: p, yearFilter: g, isMultiSelectFilter: o }); V(() => { const e = q.current, r = !x(e.countryFilter, F), d = !x(e.categoryFilter, p), m = l && !x(e.yearFilter, g), b = e.isMultiSelectFilter !== o; (r || d || m || b) && (r && M(F), d && J(p), m && z(g), q.current = { countryFilter: F, categoryFilter: p, yearFilter: g, isMultiSelectFilter: o }); }, [F, p, g, o, l]); const Fe = (e) => { z(e), h({ type: "SET_POSTS_FILTER", group: c, ...t, isYearFilter: l, yearFilter: l ? e : null, isCountryFilter: a, categoryFilter: t.categoryFilter, countryFilter: t.countryFilter, sortFirstBy: C, countryCategory: s, categoryTaxonomy: s, countryTaxonomy: s }); }, pe = (e) => { a ? M(e) : J(e), h({ type: "SET_POSTS_FILTER", group: c, ...t, // Preserve both filters so they can work together categoryFilter: a ? t.categoryFilter : e, countryFilter: a ? e : t.countryFilter, isYearFilter: l, yearFilter: t.yearFilter, isCountryFilter: a, sortFirstBy: a ? C : t.sortFirstBy, countryCategory: a ? s : t.countryCategory, categoryCategory: a ? t.categoryCategory : e, categoryTaxonomy: a ? t.categoryTaxonomy : s, countryTaxonomy: a ? s : t.countryTaxonomy }); }; return V(() => { const e = n.length > 0, r = o ? n : n[0], d = a ? t.categoryFilter : e ? r : o ? y ? y.split(",").map(Number) : [] : t.categoryFilter, m = a ? e ? r : o ? y ? y.split(",").map(Number) : [] : t.countryFilter : t.countryFilter, b = l && o ? u.length > 0 ? u.map((ge) => ge.value) : [] : t.yearFilter; h({ type: "SET_INITIAL_POSTS_FILTER", group: c, categoryFilter: d, countryFilter: m, isYearFilter: l, isCountryFilter: a, sortFirstBy: C, yearFilter: l ? b : null, categoryCategory: a ? null : t.categoryCategory, categoryTaxonomy: a ? null : s, countryCategory: a ? t.countryCategory : null, countryTaxonomy: a ? s : null, page: 1 }); }, []), V(() => { if (l && !T) { const e = l && o ? u.length > 0 ? u.map((r) => r.value) : [] : t.yearFilter; h({ type: "SET_INITIAL_POSTS_FILTER", group: c, ...t, isYearFilter: l, yearFilter: l ? e : null }); } }, [T]), /* @__PURE__ */ de(me, { fluid: !0, className: "filter post-filter", children: [ l && /* @__PURE__ */ U( Te, { group: c, placeholder: A, allLabel: Y, noneLabel: I, useSingleColumn: P, enableTextSearch: v, filterType: S, showNoDataOption: L, closeOnSelect: R, allNoneSameBehaviour: w, autoApply: D, alphabeticalSort: ie, ascOrder: se, options: u, value: ue, yearOptions: u, setYearOptions: ce, yearFilterLoading: T, setYearFilterLoading: ye, onChange: (e, r) => { Fe(r); }, resetKey: B.current } ), !l && /* @__PURE__ */ U( Ce, { group: c, placeholder: A, allLabel: Y, noneLabel: I, useSingleColumn: P, enableTextSearch: v, filterType: S, showNoDataOption: L, closeOnSelect: R, allNoneSameBehaviour: w, autoApply: D, taxonomy: s, type: oe, value: a ? K : j, onChange: (e, r) => { pe(r); }, categories: y ? y.split(",") : [], resetKey: B.current }, `cat-${c}` ) ] }); }; export { Ee as default };