@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
93 lines (92 loc) • 3.22 kB
JavaScript
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 };