@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.
142 lines (141 loc) • 5.8 kB
JavaScript
import { jsx as t, jsxs as c } from "react/jsx-runtime";
import H, { useRef as B, useState as _, useEffect as K } from "react";
import { Container as x, Grid as P, Button as O, Dropdown as g, Icon as Q } from "semantic-ui-react";
import { PostContent as L } from "@devgateway/wp-react-lib";
import { domtoimage as C } from "./dom-to-image.js";
import { saveAs as R } from "file-saver";
import { connect as V } from "react-redux";
const X = H.forwardRef((r, a) => /* @__PURE__ */ t("div", { ref: a, children: r.children })), Y = (r) => {
const a = B();
let {
childContent: h,
"data-height": te,
"data-button-label": T,
"data-png-label": U,
"data-jpg-label": J,
"data-jpg-text": S,
"data-png-text": j,
"data-check-png": G = "true",
"data-check-jpg": k = "true",
"data-title": q,
"data-default-format": w = "PNG",
"data-use-title": N = "false",
"data-style": F = "heavy",
"data-section-title": $ = "",
"data-download-tooltip": A = "",
"data-include-source-url": E = "false",
"data-source-urlmargin-left": I = 70,
"data-source-urlmargin-top": W = 10,
"data-source-urlfont-size": z = 18,
parent: ne,
editing: i,
component: oe,
unique: ae,
pageModuleProps: s
} = r;
const [p, m] = _(w), d = G == "true" || G === !0, u = k == "true" || k === !0;
K(() => {
m(w);
}, [w]);
const v = (n) => {
m(n.target.value);
};
function M(n) {
const o = n.attributes, y = [];
if (o)
for (let l = 0; l < o.length; l++)
y.push(o[l].nodeName);
const e = y.filter((l) => l.startsWith("data-"));
return e.length > 0 && e.forEach((l) => {
n.setAttribute(l, "");
}), n.classList ? !n.classList.contains("ignore") : !0;
}
const f = { filter: M, bgcolor: "#FFF" }, D = (n) => {
C.cloneNode(a.current).then(function(o) {
if ([...o.getElementsByTagName("input")].forEach((e) => e.remove()), [...o.querySelectorAll(".question.circle.icon")].forEach((e) => e.remove()), E === "true") {
const e = document.createElement("div");
e.style.marginLeft = I + "px", e.style.marginTop = W + "px", e.style.fontSize = z + "px", e.style.fontFamily = "Roboto, sans-serif", e.style.fontWeight = "400", e.style.color = "#66676d", e.style.opacity = "0.75", e.innerHTML = window.location.href, e.style.maxWidth = "90%", e.style.wordWrap = "break-word", e.style.overflowWrap = "break-word", o.appendChild(e);
}
f.height = a.current.scrollHeight + 90, f.width = a.current.scrollWidth + 30, o.style.padding = "20px", n === "PNG" && C.toPng(o, f).then(function(e) {
R(e, U);
}), n === "JPG" && C.toJpeg(o, f).then(function(e) {
R(e, J);
});
});
}, b = (n) => {
i ? alert("Not allowed when editing please preview page") : D(n);
};
return /* @__PURE__ */ t(
x,
{
className: `viz download ${F} ${N ? "has-title" : ""}
${d || u ? "has-formats" : ""}
${i || s != null && s.editing ? "editing" : ""}
${d && u ? "multi-format" : ""}
${d && !u || !d && u ? "single-format" : ""}`,
fluid: !0,
children: /* @__PURE__ */ c(X, { ref: a, children: [
/* @__PURE__ */ c(P, { stackable: !0, reversed: "mobile", className: "download-header", children: [
!i && N === "true" && /* @__PURE__ */ t(P.Column, { width: 12, children: /* @__PURE__ */ t(
L,
{
parentUnique: r.unique,
post: { content: { rendered: decodeURIComponent($) } }
}
) }),
/* @__PURE__ */ t(
P.Column,
{
className: i ? "editing ignore" : "ignore",
width: i || N !== "true" ? 16 : 4,
textAlign: "right",
children: /* @__PURE__ */ c("div", { className: "wrapper", children: [
/* @__PURE__ */ c(O, { className: "download", onClick: () => b(p), children: [
T,
" ",
p === "PNG" ? "PNG" : "JPG"
] }),
/* @__PURE__ */ t(
g,
{
className: "download",
"data-tooltip": decodeURIComponent(A),
trigger: u && d ? /* @__PURE__ */ t(Q, { name: "download", className: "download-icon" }) : null,
children: /* @__PURE__ */ c(g.Menu, { children: [
q,
d === !0 && /* @__PURE__ */ c(g.Item, { onClick: () => {
m("PNG"), b("PNG");
}, children: [
/* @__PURE__ */ t("input", { type: "radio", value: "PNG", checked: p === "PNG", onChange: v }),
/* @__PURE__ */ t("label", { children: j })
] }),
u === !0 && /* @__PURE__ */ c(g.Item, { onClick: () => {
m("JPG"), b("JPG");
}, children: [
/* @__PURE__ */ t("input", { type: "radio", value: "JPG", checked: p === "JPG", onChange: v }),
/* @__PURE__ */ t("label", { children: S })
] })
] })
}
)
] })
}
)
] }),
!i && /* @__PURE__ */ t(x, { fluid: !0, className: `download area ${i || s != null && s.editing ? "editing" : ""}`, children: /* @__PURE__ */ t(
L,
{
parentUnique: r.unique,
post: { content: { rendered: h } }
}
) })
] })
}
);
}, Z = (r) => {
const a = r.getIn(["data", "pageModuleProps"]), h = {};
return a && (h.pageModuleProps = a), h;
}, ee = {}, he = V(Z, ee)(Y);
export {
he as default
};