analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
144 lines (140 loc) • 4.95 kB
JavaScript
import {
Skeleton
} from "./chunk-NKVUUWCA.mjs";
import {
Modal_default
} from "./chunk-TNLGS7SB.mjs";
import {
Button_default
} from "./chunk-LAYB7IKW.mjs";
import {
Text_default
} from "./chunk-IMCIR6TJ.mjs";
// src/components/DownloadModal/DownloadModal.tsx
import { useState, useCallback, useEffect, useRef } from "react";
import {
FilePdfIcon,
FileXlsIcon,
DownloadSimpleIcon
} from "@phosphor-icons/react";
// src/enums/DownloadFormat.ts
var DOWNLOAD_FORMAT = /* @__PURE__ */ ((DOWNLOAD_FORMAT2) => {
DOWNLOAD_FORMAT2["PDF"] = "pdf";
DOWNLOAD_FORMAT2["EXCEL"] = "excel";
return DOWNLOAD_FORMAT2;
})(DOWNLOAD_FORMAT || {});
// src/components/DownloadModal/DownloadModal.tsx
import { jsx, jsxs } from "react/jsx-runtime";
var DownloadModal = ({
isOpen,
onClose,
isDownloading,
error,
onDownloadPdf,
onDownloadExcel
}) => {
const [selectedFormat, setSelectedFormat] = useState(
null
);
const handleClose = useCallback(() => {
setSelectedFormat(null);
onClose();
}, [onClose]);
const wasDownloadingRef = useRef(false);
useEffect(() => {
if (!isOpen) {
wasDownloadingRef.current = isDownloading;
return;
}
if (wasDownloadingRef.current && !isDownloading && !error) {
handleClose();
}
wasDownloadingRef.current = isDownloading;
}, [isOpen, isDownloading, error, handleClose]);
const handleDownload = useCallback(() => {
if (selectedFormat === "pdf" /* PDF */) {
onDownloadPdf();
handleClose();
} else if (selectedFormat === "excel" /* EXCEL */) {
onDownloadExcel();
}
}, [selectedFormat, onDownloadPdf, onDownloadExcel, handleClose]);
const cardBase = "flex flex-1 items-center justify-center h-20 rounded-xl border bg-background shadow-soft-shadow-1 cursor-pointer transition-colors";
const cardDefault = "border-border-100 hover:border-primary-300";
const cardSelected = "border-primary-300 bg-primary-50";
return /* @__PURE__ */ jsx(
Modal_default,
{
isOpen,
onClose: handleClose,
title: "Como deseja baixar o relat\xF3rio?",
size: "lg",
footer: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
/* @__PURE__ */ jsx(
Button_default,
{
variant: "outline",
action: "primary",
size: "small",
onClick: handleClose,
"data-testid": "download-cancel-btn",
children: "Cancelar"
}
),
/* @__PURE__ */ jsx(
Button_default,
{
variant: "solid",
action: "primary",
size: "small",
disabled: !selectedFormat || isDownloading,
iconLeft: /* @__PURE__ */ jsx(DownloadSimpleIcon, { size: 16 }),
onClick: handleDownload,
"data-testid": "download-confirm-btn",
children: "Baixar"
}
)
] }),
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
error && /* @__PURE__ */ jsx(Text_default, { size: "sm", className: "text-indicator-error", children: error }),
isDownloading ? /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-4", "data-testid": "download-skeleton", children: [
/* @__PURE__ */ jsx(Skeleton, { variant: "rounded", width: "100%", height: 80 }),
/* @__PURE__ */ jsx(Skeleton, { variant: "rounded", width: "100%", height: 80 })
] }) : /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-4", children: [
/* @__PURE__ */ jsx(
Button_default,
{
"data-testid": "download-pdf-option",
"aria-label": "PDF",
"aria-pressed": selectedFormat === "pdf" /* PDF */,
variant: "outline",
action: "secondary",
className: `${cardBase} ${selectedFormat === "pdf" /* PDF */ ? cardSelected : cardDefault}`,
onClick: () => setSelectedFormat("pdf" /* PDF */),
children: /* @__PURE__ */ jsx(FilePdfIcon, { size: 24, className: "text-text-700" })
}
),
/* @__PURE__ */ jsx(
Button_default,
{
"data-testid": "download-excel-option",
"aria-label": "Excel",
"aria-pressed": selectedFormat === "excel" /* EXCEL */,
variant: "outline",
action: "secondary",
className: `${cardBase} ${selectedFormat === "excel" /* EXCEL */ ? cardSelected : cardDefault}`,
onClick: () => setSelectedFormat("excel" /* EXCEL */),
children: /* @__PURE__ */ jsx(FileXlsIcon, { size: 24, className: "text-text-700" })
}
)
] })
] })
}
);
};
var DownloadModal_default = DownloadModal;
export {
DOWNLOAD_FORMAT,
DownloadModal_default
};
//# sourceMappingURL=chunk-A5SJ6CNT.mjs.map