@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.
426 lines (425 loc) • 13.9 kB
JavaScript
import { jsx as e, jsxs as F, Fragment as z } from "react/jsx-runtime";
import { useState as $, useEffect as Z, useRef as ee } from "react";
import { Container as b, Dropdown as I, Segment as M, Label as P, Radio as H, Input as te, Icon as re, Divider as ne, Checkbox as le } from "semantic-ui-react";
import K from "../data/CategoriesConsumer.js";
import ae from "../data/CategoriesProvider.js";
import { connect as Y } from "react-redux";
import { setFilter as ie, setInitialFilters as oe } from "../reducers/data.js";
import { injectIntl as se } from "react-intl";
import { SettingProvider as ce, SettingsConsumer as ue } from "@devgateway/wp-react-lib";
const Q = "multi-select", O = "single-select", de = "NO_DATA", fe = "DEFAULT_VALUE_INPUT", he = "LOWEST_VALUE", me = "HIGHEST_VALUE", v = (t) => t instanceof Boolean ? t : t == "true", ge = (t, s) => t ? t.sort((n, i) => n.position - i.position).map((n) => {
const i = s && n.labels && n.labels[s.toUpperCase()] ? n.labels[s.toUpperCase()] : n.value;
return {
key: n.id,
value: n.id,
text: i,
icon: n.value.toLocaleLowerCase(),
position: n.position ? n.position : n.value
};
}) : [], pe = (t) => decodeURIComponent(t), X = (t) => {
if (!t || t == "")
return null;
try {
return JSON.parse(pe(t));
} catch (s) {
throw new Error("error parsing value:" + s);
}
}, j = (t, s) => {
const { app: n, group: i, param: o } = s;
return {
current: t.getIn(["data", "filters", n, i, o])
};
}, W = {
onInit: oe,
onChange: ie
}, q = (t) => {
const { isRange: s, options: n, alphabeticalSort: i, ascOrder: o } = t;
v(i) ? n.sort(function(d, u) {
const l = d.text ? d.text.toLowerCase() : "", m = u.text ? u.text.toLowerCase() : "";
return v(o) ? l < m ? -1 : l > m ? 1 : 0 : l < m ? 1 : l > m ? -1 : 0;
}) : n.sort(function(d, u) {
return v(o) ? d.position - u.position : u.position - d.position;
});
const f = { ...t, options: n };
return s ? /* @__PURE__ */ e(xe, { ...f }) : /* @__PURE__ */ e(Ce, { ...f });
}, Ce = Y(
j,
W
)((t) => {
const {
allLabel: s,
noneLabel: n,
placeholder: i,
options: o,
app: f,
group: d,
param: u,
current: l,
onChange: m,
onInit: c,
useSingleColumn: L,
enableTextSearch: g,
filterType: E,
defaultValues: _,
showNoDataOption: N,
defaultValueCriteria: h,
allNoneSameBehaviour: p,
closeOnSelect: S,
hiddenFilters: w,
autoApply: A
} = t, [R, B] = $(""), D = (r) => {
let a = [];
E != O && !S && l && l.indexOf(r) > -1 ? a = l.filter((x) => x !== r) : E != O && l && !S ? a = [...l, r] : a = [r], m({ app: f, group: d, param: u, value: a, autoApply: A }), S && T.current && T.current.close();
}, G = (r) => {
const a = o.filter((x) => g && C && C.trim().length > 0 && x.text ? x.text.toLowerCase().includes(C.toLowerCase()) : !0);
m({
app: f,
group: d,
param: u,
value: a.map((x) => x.value),
autoApply: A
}), S && T.current && T.current.close();
}, y = () => {
const r = o.filter((a) => g && C && C.trim().length > 0 && a.text ? a.text.toLowerCase().includes(C.toLowerCase()) : !0);
m({
app: f,
group: d,
param: u,
value: p ? r.map((a) => a.value) : [],
autoApply: A
}), S && T.current && T.current.close();
}, k = (r) => {
U(r);
};
Z(() => {
if (!l) {
const r = o.map((a) => a.value);
if (E == Q || E == "")
c({ app: f, group: d, param: u, value: r });
else if (f == "csv") {
let a = [];
h === fe ? a = _ ? _.split(",") : [] : h == he ? a = r.length > 0 ? [r[0]] : [] : h == me && (a = r.length > 0 ? [r[r.length - 1]] : []), c({ app: f, group: d, param: u, value: a });
} else
c({ app: f, group: d, param: u, value: [r[0]] });
}
}, []);
const J = () => {
if (E == O) {
const r = l && l[0] ? o.filter((a) => a.value == l[0])[0] : null;
return `${i} ${r ? r.text : ""}`;
} else
return `${i} (${l ? l.filter((r) => r == Number.MIN_SAFE_INTEGER ? !1 : w && w.length > 0 ? w.indexOf(r) == -1 : !0).length : 0}/${o.filter((r) => w && w.length > 0 ? w.indexOf(r.id) == -1 : !0).length}) `;
}, T = ee(null), [C, U] = $("");
return (
// @ts-ignore
/* @__PURE__ */ e(
I,
{
ref: T,
fluid: !0,
text: J(),
scrolling: !1,
button: !0,
icon: "angle down ignore",
multiple: !0,
search: !0,
floating: !1,
className: `${l && l.length > 0 ? "applied " : ""}`,
children: /* @__PURE__ */ F(I.Menu, { children: [
E != O && /* @__PURE__ */ F(z, { children: [
/* @__PURE__ */ e(M, { children: /* @__PURE__ */ F(I.Item, { children: [
/* @__PURE__ */ e(P, { basic: !0, onClick: G, children: s }),
" ",
"|",
" ",
/* @__PURE__ */ e(P, { basic: !0, onClick: y, children: n })
] }) }),
g && /* @__PURE__ */ F(z, { children: [
/* @__PURE__ */ e(b, { children: /* @__PURE__ */ e(I.Item, { children: /* @__PURE__ */ e("div", { className: "ui action input", children: /* @__PURE__ */ F(te, { placeholder: "Search...", children: [
/* @__PURE__ */ e(
"input",
{
className: "filter-search",
value: C,
onChange: (r) => {
k(r.target.value);
}
}
),
/* @__PURE__ */ e(
re,
{
name: "remove",
link: !0,
className: "clear-icon ignore",
onClick: (r) => {
k("");
}
}
)
] }) }) }) }),
/* @__PURE__ */ e(ne, {})
] })
] }),
/* @__PURE__ */ e("br", {}),
/* @__PURE__ */ e(b, { className: L ? "dropdown-single-column" : "", children: o.filter((r) => g && C && C.trim().length > 0 && r.text ? r.text.toLowerCase().includes(C.toLowerCase()) : !0).map(({ value: r, text: a }, x) => /* @__PURE__ */ F(
I.Item,
{
className: L ? "dropdown-item-single-column" : "",
children: [
E == O && /* @__PURE__ */ e(
H,
{
checked: !!(l && l.indexOf(r) > -1),
onChange: (V) => D(r),
label: a
}
),
E == Q && /* @__PURE__ */ e(
le,
{
checked: !!(l && l.indexOf(r) > -1 && !(o.length == l.length && p)),
onChange: (V) => D(r),
label: a
}
)
]
},
x
)) })
] })
}
)
);
}), xe = Y(
j,
W
)(
({
placeholder: t,
startLabel: s,
endLabel: n,
options: i,
onChange: o,
app: f,
group: d,
param: u,
current: l,
autoApply: m
}) => {
const [c, L] = $(i[0].position), [g, E] = $(i[i.length - 1].position);
Z(() => {
const N = i.filter(
(h) => (h.position > c || h.position === c) && (h.position < g || h.position === g)
).map((h) => h.value);
o({ app: f, group: d, param: u, value: N, autoApply: m });
}, [c, g]);
const _ = ee(null);
return /* @__PURE__ */ e(
I,
{
ref: _,
fluid: !0,
text: `${t} (${l ? l.filter((N) => N != Number.MIN_SAFE_INTEGER).length : 0}/${i.length})`,
scrolling: !1,
button: !0,
multiple: !0,
search: !0,
floating: !1,
icon: "angle down ignore",
className: `${l && l.length > 0 ? "applied " : ""} range`,
children: /* @__PURE__ */ F(I.Menu, { children: [
/* @__PURE__ */ e(M, { children: /* @__PURE__ */ F(I.Item, { children: [
" ",
/* @__PURE__ */ e(P, { basic: !0, children: s })
] }) }),
/* @__PURE__ */ e(b, { children: i.map(({ value: N, text: h, position: p }) => /* @__PURE__ */ e(I.Item, { children: /* @__PURE__ */ e(
H,
{
disabled: p > g,
checked: c === p,
onChange: (S) => L(p),
label: h
}
) })) }),
/* @__PURE__ */ e(M, { children: /* @__PURE__ */ F(I.Item, { children: [
" ",
/* @__PURE__ */ e(P, { basic: !0, children: n })
] }) }),
/* @__PURE__ */ e(b, { children: i.map(({ value: N, text: h, position: p }) => /* @__PURE__ */ e(I.Item, { children: /* @__PURE__ */ e(
H,
{
disabled: p < c,
checked: g === p,
onChange: (S) => E(p),
label: h
}
) })) })
] })
}
);
}
), Ee = (t) => {
const { data: s, type: n, showNoDataOption: i } = t, o = s.filter((c) => c.type === n)[0], f = o ? o.items.filter((c) => !i && c.code == de ? !1 : t.hiddenFilters && t.hiddenFilters.length > 0 ? t.hiddenFilters.indexOf(c.id) == -1 : !0) : [], d = f ? ge(f, t.locale) : [], u = s.find((c) => c.type = "FilterDefinition"), l = u ? u.items.find((c) => c.fieldType == n) : null, m = l ? l.value : "Filter";
return /* @__PURE__ */ e(b, { fluid: !0, className: "filter", children: /* @__PURE__ */ e(
q,
{
...t,
options: d,
placeholder: t.placeholder ? t.placeholder : m
}
) });
}, Se = Y(
j,
W
)((t) => {
let s = 0;
const n = [
{
key: "Yes",
value: !0,
text: "Yes",
position: s++
},
{
key: "No",
value: !1,
text: "No",
position: s++
}
];
return /* @__PURE__ */ e(b, { fluid: !0, className: "filter", children: /* @__PURE__ */ e(q, { options: n, ...t }) });
}), Te = (t) => {
const { csvValue: s } = t;
let n = 0;
const i = s.split(",").map((o) => ({
key: o,
value: o,
text: o,
icon: o.toLocaleLowerCase(),
position: n++
}));
return /* @__PURE__ */ e(b, { fluid: !0, className: "filter", children: /* @__PURE__ */ e(q, { options: i, ...t, children: " " }) });
}, Ie = (t) => /* @__PURE__ */ e(ce, { locale: t.intl.locale, changeUUID: t.unique, children: /* @__PURE__ */ e(ue, { children: /* @__PURE__ */ e(ve, { ...t }) }) }), ve = ({
unique: t,
"data-group": s,
"data-app": n,
"data-dvz-proxy-dataset-id": i,
"data-param": o,
"data-icon": f,
"data-type": d,
"data-place-holder": u,
"data-is-range": l = "false",
"data-all-label": m,
"data-none-label": c,
"data-start-label": L,
"data-end-label": g,
"data-csv-value": E,
"data-filters": _ = "[]",
"data-use-single-column": N = "false",
"data-enable-text-search": h = "false",
"data-filter-type": p,
"data-default-values": S,
"data-show-no-data-option": w = "true",
"data-default-value-criteria": A = "DEFAULT_VALUE_INPUT",
"data-hidden-filters": R = "[]",
"data-all-none-same-behaviour": B = "false",
"data-close-on-select": D = "false",
"data-alphabetical-sort": G = "true",
"data-asc-order": y = "true",
"data-auto-apply": k = "true",
settings: J,
intl: T
}) => {
const C = {}, U = _ ? X(_) : {};
U && U.forEach && U.forEach((x) => {
x.value != null && x.value.filter((V) => V != null && V.toString().trim() != "").length > 0 && (C[x.param] = x.value);
}), i && (C.dvzProxyDatasetId = i);
const r = R ? X(R) : [];
let a;
return p == null || p == "" ? a = l === "true" ? "range" : "multi-select" : a = p, n === "csv" ? /* @__PURE__ */ e(
Te,
{
allLabel: m,
noneLabel: c,
isRange: l === "true",
csvValue: E,
app: n,
group: s,
icon: f,
placeholder: u,
startLabel: L,
endLabel: g,
param: o,
ascOrder: y,
useSingleColumn: N === "true",
enableTextSearch: h === "true",
filterType: a,
defaultValues: S,
defaultValueCriteria: A,
allNoneSameBehaviour: B === "true",
closeOnSelect: D === "true",
locale: T.locale
}
) : n ? /* @__PURE__ */ e(
ae,
{
dvzProxyDatasetId: i,
params: C,
app: n,
uniqueStorage: U.length > 0 ? t : null,
hiddenFilters: r || [],
children: /* @__PURE__ */ e(K, { children: /* @__PURE__ */ F(b, { fluid: !0, children: [
d === "Boolean" && /* @__PURE__ */ e(
Se,
{
startLabel: L,
endLabel: g,
allLabel: m,
noneLabel: c,
isRange: v(l),
app: n,
group: s,
icon: f,
placeholder: u,
param: o,
filterType: a,
defaultValues: S,
locale: T.locale
}
),
d !== "Boolean" && /* @__PURE__ */ e(K, { type: d, children: /* @__PURE__ */ e(
Ee,
{
startLabel: L,
endLabel: g,
allLabel: m,
noneLabel: c,
isRange: v(l),
app: n,
group: s,
icon: f,
placeholder: u,
param: o,
alphabeticalSort: G,
ascOrder: y,
useSingleColumn: v(N),
enableTextSearch: v(h),
showNoDataOption: v(w),
filterType: a,
defaultValues: S,
defaultValueCriteria: A,
hiddenFilters: r || [],
allNoneSameBehaviour: B == "true",
autoApply: v(k),
closeOnSelect: v(D),
locale: T.locale
}
) })
] }) })
}
) : null;
}, Oe = se(Ie);
export {
Oe as default
};