93 lines
2.6 KiB
JavaScript
93 lines
2.6 KiB
JavaScript
import { useEffect, useState } from "react";
|
|
import { parseISO, formatISO } from "date-fns";
|
|
export const formatFileSize = (bytes) => {
|
|
if (bytes < 1024) return bytes + " B";
|
|
else if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + " KB";
|
|
else return (bytes / (1024 * 1024)).toFixed(2) + " MB";
|
|
};
|
|
export const AppColorconfig = {
|
|
colors: {
|
|
primary: "#696cff",
|
|
secondary: "#8592a3",
|
|
success: "#71dd37",
|
|
info: "#03c3ec",
|
|
warning: "#ffab00",
|
|
danger: "#ff3e1d",
|
|
dark: "#233446",
|
|
black: "#000",
|
|
white: "#fff",
|
|
cardColor: "#fff",
|
|
bodyBg: "#f5f5f9",
|
|
bodyColor: "#697a8d",
|
|
headingColor: "#566a7f",
|
|
textMuted: "#a1acb8",
|
|
borderColor: "#eceef1",
|
|
},
|
|
};
|
|
export const getColorNameFromHex = (hex) => {
|
|
const normalizedHex = hex?.replace(/'/g, "").toLowerCase();
|
|
const colors = AppColorconfig.colors;
|
|
|
|
for (const [name, value] of Object.entries(colors)) {
|
|
if (value.toLowerCase() === normalizedHex) {
|
|
return name;
|
|
}
|
|
}
|
|
|
|
return null; //
|
|
};
|
|
|
|
export const useDebounce = (value, delay = 500) => {
|
|
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
|
|
useEffect(() => {
|
|
const timer = setTimeout(() => setDebouncedValue(value), delay);
|
|
return () => clearTimeout(timer);
|
|
}, [value, delay]);
|
|
|
|
return debouncedValue;
|
|
};
|
|
|
|
export const getIconByFileType = (type = "") => {
|
|
const lower = type.toLowerCase();
|
|
|
|
if (lower === "application/pdf") return "bxs-file-pdf";
|
|
if (lower.includes("word")) return "bxs-file-doc";
|
|
if (lower.includes("excel") || lower.includes("spreadsheet"))
|
|
return "bxs-file-xls";
|
|
if (lower === "image/png") return "bxs-file-png";
|
|
if (lower === "image/jpeg" || lower === "image/jpg") return "bxs-file-jpg";
|
|
if (lower.includes("zip") || lower.includes("rar")) return "bxs-file-archive";
|
|
|
|
return "bx bx-file";
|
|
};
|
|
|
|
export const normalizeAllowedContentTypes = (allowedContentType) => {
|
|
if (!allowedContentType) return [];
|
|
if (Array.isArray(allowedContentType)) return allowedContentType;
|
|
if (typeof allowedContentType === "string")
|
|
return allowedContentType.split(",");
|
|
return [];
|
|
};
|
|
export function localToUtc(dateString) {
|
|
if (!dateString || typeof dateString !== "string") return null;
|
|
|
|
const parts = dateString.trim().split("-");
|
|
if (parts.length !== 3) return null;
|
|
|
|
let day, month, year;
|
|
|
|
if (parts[0].length === 4) {
|
|
// Format: yyyy-mm-dd
|
|
[year, month, day] = parts;
|
|
} else {
|
|
// Format: dd-mm-yyyy
|
|
[day, month, year] = parts;
|
|
}
|
|
|
|
if (!day || !month || !year) return null;
|
|
|
|
const date = new Date(Date.UTC(Number(year), Number(month) - 1, Number(day), 0, 0, 0));
|
|
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
}
|