stone-kit
Version:
uikit for redesign
73 lines (72 loc) • 2.28 kB
JavaScript
const A = (e, n, r, i) => e.value === "selectAll" ? !1 : i && r ? !r.includes(`${e.value}`) : n.some((s) => s.value === e.value), J = ({
option: e,
setSelectedOptions: n,
selectedOptions: r,
disabledOptions: i,
onChange: s,
mode: m,
optionsParentArr: c,
clickableOptions: y,
isDisabledNotClickable: u
}) => {
if (!Array.isArray(e)) {
if (i.some((l) => l.value === e.value))
return;
let f = r.some((l) => l.value === e.value) ? e.value === "selectAll" && c ? [] : r.some((l) => l.value === "selectAll") ? r.filter((l) => l.value !== e.value && l.value !== "selectAll") : r.filter((l) => l.value !== e.value) : e.value === "selectAll" && c ? c.flatMap((S) => {
if ("options" in S) {
const a = S.options.filter(
(t) => !A(t, i, y, u)
);
return a.length > 0 ? [S, ...a] : [];
} else
return A(S, i, y, u) ? [] : [S];
}) : [...r, e];
if (m === "single") {
const l = [e];
n(l), s && s(l);
return;
}
if (m === "double") {
if ("options" in e) {
if (r.map((t) => JSON.stringify(t)).includes(JSON.stringify(e)))
f = f.filter(
(t) => !e.options.map((w) => JSON.stringify(w)).includes(JSON.stringify(t))
);
else if (Array.isArray(e.options)) {
const t = e.options.filter(
(w) => !A(w, i, y, u)
);
f = [...f, ...t];
}
}
const l = c?.filter((a) => "options" in a && a.options.some((t) => t.value === e.value))[0];
!(l && r.map((a) => JSON.stringify(a)).includes(JSON.stringify(l))) && l && f.push(l);
}
n(f), s && s(f);
}
}, N = ({
option: e,
setSelectedOptions: n,
selectedOptions: r,
disabledOptions: i,
onChange: s,
clickableOptions: m,
isDisabledNotClickable: c
}) => {
if (Array.isArray(e)) {
const y = e.filter(
(u) => !A(u, i, m, c)
);
if (y.every((u) => r.some((v) => v.value === u.value))) {
const u = r.filter((v) => !e.some((f) => f.value === v.value));
n(u), s && s(u);
} else {
const u = y.filter((f) => !r.some((l) => l.value === f.value)), v = [...r, ...u];
n(v), s && s(v);
}
}
};
export {
N as handleClickModeCategory,
J as handleClickModeOption
};