@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
JavaScript
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
};