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.

219 lines (218 loc) 8.77 kB
import { getData as w, getCategories as b } from "./data-api.js"; import * as _ from "immutable"; import G from "papaparse"; const d = "LOAD_DATA", A = "LOAD_DATA_DONE", O = "LOAD_DATA_ERROR", F = "LOAD_CATEGORIES", R = "LOAD_CATEGORIES_DONE", D = "LOAD_CATEGORIES_ERROR", L = "SET_PAGE_MODULE_PROPS", f = "SET_FILTER", m = "SET_INITIAL_FILTER", v = "SET_POSTS_FILTER", P = "SET_INITIAL_POSTS_FILTER", U = "SET_POSTS_PAGINATION", h = "SET_APPLY", C = "CLEAN_FILTER", q = _.Map({ mode: "info" }), N = "SET_MEASURES", x = "CLEAN_MEASURES", J = ({ app: r, group: o }) => (t, s) => { t({ type: x, app: r, group: o }); }, V = ({ app: r, group: o, mGroup: t }) => (s, e) => { const n = Object.keys(t.measures).filter((l) => t.measures[l].selected), a = { ...t }; a[r] = { measures: {} }, n.forEach((l) => { a[r].measures[l] = { ...t.measures[l] }; }), a[r].format = t.format, s({ type: N, app: r, group: o, measure: a }); }, Y = ({ app: r, group: o, param: t, value: s, autoApply: e }) => (n, a) => { n({ type: f, app: r, group: o, param: t, value: s, autoApply: e }); }, $ = ({ app: r, group: o }) => (t, s) => { t({ type: C, app: r, group: o }); const n = s().getIn(["data", "filters", "initial", r, o]); if (n) { const a = n.entrySeq ? n.entrySeq().toArray() : Object.entries(n); for (const [l, i] of a) t({ type: f, app: r, group: o, param: l, value: i, autoApply: !0 }); } }, H = ({ app: r, group: o }) => (t, s) => { t({ type: h, app: r, group: o }); }, K = ({ app: r, group: o, param: t, value: s }) => (e, n) => { e({ type: m, app: r, group: o, param: t, value: s }); }, Q = (r) => (o, t) => { const { app: s, params: e, dvzProxyDatasetId: n, uniqueStorage: a } = r; o({ type: F, params: e, app: s, uniqueStorage: a, dvzProxyDatasetId: n }), b({ app: s, params: e }).then((l) => (l.appliedFilters = e, o({ type: R, app: s, data: l, uniqueStorage: a, dvzProxyDatasetId: n }))).catch((l) => o({ type: D, app: s, uniqueStorage: a, error: l, dvzProxyDatasetId: n })); }, W = ({ app: r, group: o, csv: t, store: s, params: e }) => (n, a) => { const l = a().get("data").getIn(["filters", r, o]); l ? e = { ...e, ...l.toJS() } : e = e || {}; const i = G.parse(t, { header: !0, dynamicTyping: !0 }), c = i.data.filter((I) => { let g = !1; return Object.keys(e).forEach((y) => { const S = e[y]; if (I[y]) { const T = I[y].toString().trim().toLowerCase(); g = S.filter((p) => p && p.toString().trim().toLowerCase() == T).length == 0; } }), !g; }), u = { ...i, data: c, appliedFilters: e }; n({ type: A, app: r, group: o, store: s, data: { count: u.data.length, itemsSize: u.data.length, ...u } }); }, X = ({ app: r, group: o, source: t, store: s, params: e }) => (n, a) => { let l = a().get("data").getIn(["filters", r, o]); e && Object.keys(e).forEach((c) => { if (l && l.has(c)) { let u = e[c], g = l.get(c).filter((y) => u.indexOf(y) > -1); l = l.set(c, g); } }), l && (e = { ...e, ...l.toJS() }), n({ type: d, app: r, group: o, params: e, store: s }), w({ app: r, source: t, params: e }).then((i) => (i.appliedFilters = e, n({ type: A, app: r, group: o, store: s, data: i, params: e }))).catch((i) => n({ type: O, app: r, group: o, store: s, error: i })); }, Z = ({ data: r }) => (o, t) => { o({ type: L, data: r }); }, k = (r = q, o) => { switch (o.type) { case d: { const { store: t, app: s, group: e, params: n } = o, a = Date.now(); return r.deleteIn([...t, "error"]).setIn([...t, "loading"], !0).setIn([...t, "time"], a).setIn([...t, "presetFilter"], n); } case O: { const { error: t, store: s, app: e, group: n } = o; return r.setIn([...s, "loading"], !1).setIn([...s, "error"], t).setIn(["filters-settings", e, n, "apply"], null); } case A: { const { data: t, app: s, group: e, store: n } = o; return r.setIn([...n, "loading"], !1).deleteIn([...n, "error"]).setIn([...n, "data"], t).setIn(["filters-settings", s, e, "apply"], null); } case L: { const { data: t } = o; return r.setIn(["pageModuleProps"], t); } case F: { const { data: t, app: s, uniqueStorage: e, dvzProxyDatasetId: n } = o, a = ["categories", s]; return e && a.push(e), n && a.push(n), r.setIn([...a, "loading"], !0).deleteIn([...a, "error"]); } case R: { const { data: t, app: s, uniqueStorage: e, dvzProxyDatasetId: n } = o, a = ["categories", s]; return n && a.push(n), e && a.push(e), r.setIn([...a, "loading"], !1).setIn([...a, "items"], _.fromJS(t)); } case D: { const { data: t, app: s, uniqueStorage: e, dvzProxyDatasetId: n } = o, a = ["categories", s]; return e && a.push(e), n && a.push(n), r.setIn([...a, "loading"], !1).setIn([...a, "error"], t); } case h: { const { app: t, group: s } = o; return r.setIn(["filters-settings", t, s, "apply"], (/* @__PURE__ */ new Date()).getTime()); } case f: { const t = Date.now(), { app: s, group: e, param: n, value: a, autoApply: l } = o; return r.setIn(["filters-settings", s, e, "autoApply"], l).setIn(["filters", s, e, n], a.length === 0 ? [Number.MIN_SAFE_INTEGER] : a).setIn(["filters-settings", s, e, "apply"], null).setIn(["filters-settings", s, e, "lastUserFilterChange"], t); } case m: { const t = Date.now(), { app: s, group: e, param: n, value: a } = o; return console.log(n), r.setIn(["filters", "initial", s, e, n], a.length === 0 ? [Number.MIN_SAFE_INTEGER] : a).setIn(["filters", s, e, n], a.length === 0 ? [Number.MIN_SAFE_INTEGER] : a).setIn(["filters-settings", s, e, "lastInitialFilterChange"], t); } case C: { const { app: t, group: s } = o, e = r.getIn(["filters", "initial", t, s]); return r.setIn(["filters", t, s], e); } case P: { const { group: t, sortFirstBy: s, categoryCategory: e, countryCategory: n, categoryTaxonomy: a, countryTaxonomy: l, categoryFilter: i, countryFilter: c, yearFilter: u } = o, I = Number(s), g = { yearFilter: u, categoryFilter: i, categoryTaxonomy: a, categoryCategory: e, countryCategory: n, countryFilter: c, countryTaxonomy: l, page: 1, itemsPerPage: void 0, sortFirstBy: I, postTaxonomy: null, postCategory: null, postType: null }; return r.setIn(["posts", t], g).setIn(["posts", "initialFilters", t], g); } case v: { const { group: t, yearFilter: s, categoryFilter: e, countryFilter: n, page: a, itemsPerPage: l, sortFirstBy: i, countryCategory: c, categoryCategory: u, taxonomy: I, categoryTaxonomy: g, countryTaxonomy: y } = o, S = r.getIn(["posts", t]) || {}, T = { yearFilter: s, categoryFilter: e, countryFilter: n, page: a, itemsPerPage: l, sortFirstBy: i, countryCategory: c, // preserve or set taxonomy helpers needed by filters UI and querying categoryCategory: u !== void 0 ? u : S.categoryCategory, taxonomy: I, categoryTaxonomy: g !== void 0 ? g : S.categoryTaxonomy, countryTaxonomy: y !== void 0 ? y : S.countryTaxonomy }; let p = r.setIn(["posts", t], T); const E = r.getIn(["posts", "initialFilters", t]); if ((!E || E && E.yearFilter === null && E.categoryFilter === null && E.countryFilter === null && E.categoryCategory === null) && (Array.isArray(e) && e.length > 0 || Array.isArray(n) && n.length > 0 || Array.isArray(s) && s.length > 0)) { const M = { ...T }; p = p.setIn(["posts", "initialFilters", t], M); } return p; } case U: { const { group: t, totalPages: s, totalItems: e } = o; return r.setIn(["postsPagination", t], { totalPages: s, totalItems: e }); } case N: { const { app: t, group: s, measure: e } = o; return r.setIn(["measures", t, s], e); } case x: { const { app: t, group: s, measure: e } = o; return r.deleteIn(["measures", t, s]); } default: return r; } }, tt = ({ group: r, dispatch: o, initialFilters: t }) => { o({ type: P, group: r, ...t, reset: !0, page: 1 }); }; export { H as applyFilter, $ as cleanFilter, J as cleanMeasures, tt as clearPostsFilter, k as default, Q as getCategories, X as getData, W as setData, Y as setFilter, K as setInitialFilters, V as setMeasures, Z as setPageModuleProps };