Files
myDrive/src/components/QuickAccessItem/QuickAccessItem.jsx
T

166 lines
4.7 KiB
React

import capitalize from "../../utils/capitalize";
import moment from "moment";
import React, { useMemo } from "react";
import NewContextMenu from "../NewContextMenu";
import classNames from "classnames";
const QuickAccessItem = (props) => {
const fileExtension = useMemo(() => {
const filenameSplit = props.filename.split(".");
if (filenameSplit.length > 1) {
let extension = filenameSplit[filenameSplit.length - 1];
if (extension.length > 4)
extension =
extension.substring(0, 3) +
extension.substring(extension.length - 1, extension.length);
return extension.toUpperCase();
} else {
return "UNK";
}
}, [props.filename]);
const imageColor = useMemo(() => {
const letter = fileExtension.substring(0, 1).toUpperCase();
const colorObj = {
A: "#e53935",
B: "#d81b60",
C: "#8e24aa",
D: "#5e35b1",
E: "#3949ab",
F: "#1e88e5",
G: "#039be5",
H: "#00acc1",
I: "#00897b",
J: "#43a047",
K: "#fdd835",
L: "#ffb300",
M: "#fb8c00",
N: "#f4511e",
O: "#d32f2f",
P: "#c2185b",
Q: "#7b1fa2",
R: "#512da8",
S: "#303f9f",
T: "#1976d2",
U: "#0288d1",
V: "#0097a7",
W: "#0097a7",
X: "#00796b",
Y: "#388e3c",
Z: "#fbc02d",
};
if (colorObj[letter]) {
return colorObj[letter];
} else {
return "#03a9f4";
}
}, [props.filename]);
const elementSelected = useMemo(
() => `quick-${props._id}` === props.selected,
[props._id, props.selected]
);
console.log("thumbnail", props.state);
return (
<div
className={classNames(
"border rounded-md o transition-all duration-400 ease-in-out cursor-pointer w-48 flex items-center justify-center flex-col h-[150px] animiate hover:border-[#3c85ee] overflow-hidden",
{
"border-[#3c85ee]": elementSelected,
"border-[#ebe9f9]": !elementSelected,
}
)}
onClick={() => {
props.fileClick(props._id, props, true);
}}
onContextMenu={props.selectContext}
onTouchStart={props.onTouchStart}
onTouchEnd={props.onTouchEnd}
onTouchMove={props.onTouchMove}
>
<div onClick={props.clickStopPropagation}>
<NewContextMenu
gridMode={true}
quickItemMode={true}
contextSelected={props.state.contextSelected}
closeContext={props.closeContext}
downloadFile={props.downloadFile}
file={props}
changeEditNameMode={props.changeEditNameMode}
closeEditNameMode={props.closeEditNameMode}
changeDeleteMode={props.changeDeleteMode}
startMovingFile={props.startMovingFile}
/>
</div>
<div
className={classNames(
"inline-flex items-center w-full bg-white relative",
{
"mt-2": !props.state.hasThumbnail,
}
)}
>
{props.state.hasThumbnail ? (
<img
className="w-full min-h-[88px] max-h-[88px] h-full flex object-cover"
src={props.state.image}
onError={props.thumbnailOnError}
/>
) : (
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="150"
height="150"
viewBox="0 0 24 24"
className="w-full min-h-[80px] max-h-[80px] h-full flex"
>
<path
d="M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z"
fill={imageColor}
/>
</svg>
)}
{!props.state.hasThumbnail && (
<div className="w-full h-full absolute flex justify-center items-center text-white mt-3">
<p className="text-sm">{fileExtension}</p>
</div>
)}
</div>
<div
className={classNames(
"p-3 overflow-hidden text-ellipsis block w-full animate",
elementSelected ? "bg-[#3c85ee]" : "bg-white"
)}
>
<p
className={classNames(
"m-0 text-[14px] leading-[16px] font-normal max-w-full overflow-hidden text-ellipsis whitespace-nowrap animate",
elementSelected ? "text-white" : "text-[#212b36]"
)}
>
{capitalize(props.filename)}
</p>
<span
className={classNames(
"m-0 text-[#637381] font-normal max-w-full whitespace-nowrap text-xs animate",
elementSelected ? "text-white" : "text-[#637381]"
)}
>
Created {moment(props.uploadDate).calendar()}
</span>
</div>
</div>
);
};
export default QuickAccessItem;