geostyler
Version:
Framework for styling geodata
196 lines (195 loc) • 4.69 kB
JavaScript
import { jsx as o, jsxs as S } from "react/jsx-runtime";
import { useState as D } from "react";
import { DndContext as O, closestCenter as V } from "@dnd-kit/core";
import { SortableContext as H, arrayMove as J } from "@dnd-kit/sortable";
import K from "../../Util/FilterUtil.js";
import P from "../../Util/DataUtil.js";
import { Button as u, Switch as Q, Divider as E } from "antd";
import d from "lodash-es/cloneDeep.js";
import h from "lodash-es/uniqueId.js";
import { Selectable as W } from "../Selectable/Selectable.js";
import { RuleCard as X } from "../RuleCard/RuleCard.js";
import { useDragDropSensors as Y } from "../../hook/UseDragDropSensors.js";
import { SortableItem as Z } from "../SortableItem/SortableItem.js";
import { RemovableItem as $ } from "../RemovableItem/RemovableItem.js";
import { useGeoStylerData as ee, useGeoStylerComposition as te, useGeoStylerLocale as oe } from "../../context/GeoStylerContext/GeoStylerContext.js";
/* empty css */
const be = (N) => {
const p = ee(), A = te("Rules"), y = { ...N, ...A }, {
disableClassification: x,
onClassificationClick: R,
onEditRuleClick: v,
onEditSelectionClick: g,
onRulesChange: l,
rules: i
} = y, s = oe("Rules"), [n, C] = D(!1), [m, f] = D([]), G = () => {
C(!n), f([]);
}, I = () => {
const e = {
name: s.defaultRuleTitle,
symbolizers: []
}, t = d(i);
t.push(e), l && l(t);
}, M = () => {
if (l) {
const e = d(i).filter((t, c) => !m.includes(c));
l(e);
}
f([]), C(!1);
}, j = () => {
if (l) {
const e = d(i);
m.forEach((t) => {
e.push(d(e[t]));
}), l(e);
}
}, w = () => {
g && g(m), f([]), C(!1);
}, T = () => {
R && R();
}, U = (e) => {
f([...e]);
}, _ = (e) => {
v && v(e);
}, q = (e) => {
if (l) {
const t = d(i);
t.splice(e, 1), l(t);
}
};
let r;
p && P.isVector(p) && (r = K.calculateCountAndDuplicates(i, p));
const b = i.map((e, t) => {
const c = r ? r.duplicates[t] : void 0, a = r ? r.counts[t] : void 0;
return /* @__PURE__ */ o(
X,
{
rule: e,
amount: a,
duplicates: c,
onClick: () => {
n || _(t);
}
},
h("rule")
);
}), z = b.map((e, t) => /* @__PURE__ */ o(
$,
{
onRemoveClick: () => {
q(t);
},
children: e
},
h("removableRule")
)).map((e, t) => {
const c = h("rule"), a = t + 1;
return /* @__PURE__ */ o(
Z,
{
id: a,
children: e
},
c
);
}), k = [
/* @__PURE__ */ o(
u,
{
className: "gs-add-rule-button",
onClick: I,
children: s.addRule
},
0
)
];
x || k.push(
/* @__PURE__ */ o(
u,
{
className: "gs-classification-button",
onClick: T,
children: s.classification
},
1
)
);
const B = [
/* @__PURE__ */ o(
u,
{
className: "gs-remove-rules-button",
onClick: M,
children: s.remove
},
0
),
/* @__PURE__ */ o(
u,
{
className: "gs-clone-rules-button",
onClick: j,
children: s.clone
},
1
),
/* @__PURE__ */ o(
u,
{
className: "gs-edit-rules-button",
onClick: w,
children: s.edit
},
2
)
], F = (e) => {
const { active: t, over: c } = e;
if (t.id !== c.id) {
const a = J([...i], t.id - 1, c.id - 1);
l(a);
}
}, L = Y();
return /* @__PURE__ */ S("div", { className: "gs-rules", children: [
/* @__PURE__ */ S("div", { className: "gs-rules-header", children: [
/* @__PURE__ */ o("h2", { children: s.rulesTitle }),
/* @__PURE__ */ o(
Q,
{
className: "gs-multi-select-toggle",
onChange: G,
checked: n,
checkedChildren: s.multiEdit,
unCheckedChildren: s.multiEdit
}
)
] }),
/* @__PURE__ */ o(E, {}),
/* @__PURE__ */ o("div", { className: "gs-rules-list", children: n ? /* @__PURE__ */ o(
W,
{
selection: m,
onSelectionChange: U,
children: b
}
) : /* @__PURE__ */ o(
O,
{
onDragEnd: F,
sensors: L,
collisionDetection: V,
children: /* @__PURE__ */ o(
H,
{
items: i.map((e, t) => t + 1),
children: z
}
)
}
) }),
/* @__PURE__ */ o(E, {}),
/* @__PURE__ */ o("div", { className: "gs-rules-actions", children: n ? B : k })
] });
};
export {
be as Rules
};