@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
82 lines (81 loc) • 3.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const jsxRuntime = require("react/jsx-runtime");
const uikitReactUtils = require("@hitachivantara/uikit-react-utils");
const icons = require("../../icons.cjs");
const utils = require("../utils.cjs");
const File_styles = require("./File.styles.cjs");
const ProgressBar = require("../../ProgressBar/ProgressBar.cjs");
const Typography = require("../../Typography/Typography.cjs");
const IconButton = require("../../IconButton/IconButton.cjs");
const getStatusIcon = (classes, status) => {
switch (status) {
case "success":
return /* @__PURE__ */ jsxRuntime.jsx(icons.HvIcon, { name: "Success", className: classes?.icon, color: "positive" });
case "fail":
return /* @__PURE__ */ jsxRuntime.jsx(icons.HvIcon, { name: "Fail", className: classes?.icon, color: "negative" });
default:
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes?.icon });
}
};
const getProgressText = (data, classes) => {
const hasFailed = data.status === "fail";
const inProgress = data.status === "progress";
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
data.progress || data.size || data.errorMessage ? ` | ` : null,
inProgress && data.progress != null && /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, { variant: "label", children: `${utils.convertUnits(data.progress)} / ` }),
!hasFailed && data.size && /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, { children: `${utils.convertUnits(data.size)}` }),
hasFailed && data.errorMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, { className: classes?.fail, children: data.errorMessage })
] });
};
const getProgressBarWith = ({ size, progress }) => {
const width = progress != null && size != null ? Math.round(progress * 100 / size) : 0;
return width;
};
const HvFile = (props) => {
const {
classes: classesProp,
data,
onFileRemoved,
removeFileButtonLabel
} = uikitReactUtils.useDefaultProps("HvFile", props);
const { classes, cx } = File_styles.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__ */ jsxRuntime.jsxs("li", { className: classes.root, children: [
!hasError && inProgress && /* @__PURE__ */ jsxRuntime.jsx(
ProgressBar.HvProgressBar,
{
classes: {
root: classes.progressbar,
progressBarContainer: cx(
classes.progressbarContainer,
classes.progressbarBack
)
},
value: currentProgress,
hideLabel: true
}
),
statusIcon,
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.nameText, children: [
/* @__PURE__ */ jsxRuntime.jsx(Typography.HvTypography, { noWrap: true, variant: "label", children: data.name }),
/* @__PURE__ */ jsxRuntime.jsx("span", { className: classes.progressTextContainer, children: progressText })
] }),
data.preview && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.previewContainer, children: data.preview }),
/* @__PURE__ */ jsxRuntime.jsx(
IconButton.HvIconButton,
{
title: removeFileButtonLabel,
className: classes.removeButton,
onClick: () => onFileRemoved?.(data),
children: /* @__PURE__ */ jsxRuntime.jsx(icons.HvIcon, { name: "Close", size: "xs" })
}
)
] });
};
exports.fileClasses = File_styles.staticClasses;
exports.HvFile = HvFile;