UNPKG

@hitachivantara/uikit-react-core

Version:
93 lines (92 loc) 3.22 kB
import { HvTypography } from "../../Typography/Typography.js"; import { HvIcon } from "../../icons.js"; import { HvIconButton } from "../../IconButton/IconButton.js"; import { HvProgressBar } from "../../ProgressBar/ProgressBar.js"; import { convertUnits } from "../utils.js"; import { useClasses } from "./File.styles.js"; import { useDefaultProps } from "@hitachivantara/uikit-react-utils"; import { Fragment, jsx, jsxs } from "react/jsx-runtime"; //#region src/FileUploader/File/File.tsx var getStatusIcon = (classes, status) => { switch (status) { case "success": return /* @__PURE__ */ jsx(HvIcon, { name: "Success", className: classes?.icon, color: "positive" }); case "fail": return /* @__PURE__ */ jsx(HvIcon, { name: "Fail", className: classes?.icon, color: "negative" }); default: return /* @__PURE__ */ jsx("div", { className: classes?.icon }); } }; var getProgressText = (data, classes) => { const hasFailed = data.status === "fail"; const inProgress = data.status === "progress"; return /* @__PURE__ */ jsxs(Fragment, { children: [ data.progress || data.size || data.errorMessage ? `\xa0|\xa0` : null, inProgress && data.progress != null && /* @__PURE__ */ jsx(HvTypography, { variant: "label", children: `${convertUnits(data.progress)}\xa0/\xa0` }), !hasFailed && data.size && /* @__PURE__ */ jsx(HvTypography, { children: `${convertUnits(data.size)}` }), hasFailed && data.errorMessage && /* @__PURE__ */ jsx(HvTypography, { className: classes?.fail, children: data.errorMessage }) ] }); }; var getProgressBarWith = ({ size, progress }) => { return progress != null && size != null ? Math.round(progress * 100 / size) : 0; }; var HvFile = (props) => { const { classes: classesProp, data, onFileRemoved, removeFileButtonLabel } = useDefaultProps("HvFile", props); const { classes, cx } = useClasses(classesProp); const hasError = data.status === "fail"; const inProgress = data.status === "progress"; const progressText = getProgressText(data, classes); const statusIcon = getStatusIcon(classes, data.status); const currentProgress = getProgressBarWith(data); return /* @__PURE__ */ jsxs("li", { className: classes.root, children: [ !hasError && inProgress && /* @__PURE__ */ jsx(HvProgressBar, { classes: { root: classes.progressbar, progressBarContainer: cx(classes.progressbarContainer, classes.progressbarBack) }, value: currentProgress, hideLabel: true }), statusIcon, /* @__PURE__ */ jsxs("div", { className: classes.nameText, children: [/* @__PURE__ */ jsx(HvTypography, { noWrap: true, variant: "label", children: data.name }), /* @__PURE__ */ jsx("span", { className: classes.progressTextContainer, children: progressText })] }), data.preview && /* @__PURE__ */ jsx("div", { className: classes.previewContainer, children: data.preview }), /* @__PURE__ */ jsx(HvIconButton, { title: removeFileButtonLabel, className: classes.removeButton, onClick: () => onFileRemoved?.(data), children: /* @__PURE__ */ jsx(HvIcon, { name: "Close", size: "xs" }) }) ] }); }; //#endregion export { HvFile };