89 lines
2.5 KiB
TypeScript
89 lines
2.5 KiB
TypeScript
const TOKEN_NAME = import.meta.env.VITE_TOKEN_NAME;
|
|
const REFRESH_TOKEN_NAME = import.meta.env.VITE_REFRESH_TOKEN_NAME;
|
|
|
|
export const getToken = () => {
|
|
return localStorage.getItem(TOKEN_NAME);
|
|
};
|
|
|
|
export const setToken = (token: string) => {
|
|
localStorage.setItem(TOKEN_NAME, token);
|
|
};
|
|
|
|
export const removeToken = () => {
|
|
localStorage.removeItem(TOKEN_NAME);
|
|
};
|
|
|
|
export const getRefreshToken = () => {
|
|
return localStorage.getItem(REFRESH_TOKEN_NAME);
|
|
};
|
|
|
|
export const setRefreshToken = (refreshToken: string) => {
|
|
localStorage.setItem(REFRESH_TOKEN_NAME, refreshToken);
|
|
};
|
|
|
|
export const removeRefreshToken = () => {
|
|
localStorage.removeItem(REFRESH_TOKEN_NAME);
|
|
};
|
|
|
|
export const timeAgo = (dateString: string): string => {
|
|
const date = new Date(dateString);
|
|
const now = new Date();
|
|
const diffInMs = now.getTime() - date.getTime();
|
|
const diffInMinutes = Math.floor(diffInMs / (1000 * 60));
|
|
const diffInHours = Math.floor(diffInMinutes / 60);
|
|
const diffInDays = Math.floor(diffInHours / 24);
|
|
|
|
if (diffInMinutes < 1) return "همین الان";
|
|
if (diffInMinutes < 60) return `${diffInMinutes} دقیقه پیش`;
|
|
if (diffInHours < 24) return `${diffInHours} ساعت پیش`;
|
|
if (diffInDays < 7) return `${diffInDays} روز پیش`;
|
|
|
|
return date.toLocaleDateString("fa-IR");
|
|
};
|
|
|
|
export const NumberFormat = (num?: number): string => {
|
|
if (!num) return "0";
|
|
return num.toLocaleString("fa-IR");
|
|
};
|
|
|
|
export interface IGeneralError {
|
|
status: number;
|
|
success: boolean;
|
|
error: {
|
|
message: string[];
|
|
};
|
|
}
|
|
|
|
export const extractErrorMessage = (
|
|
error: Error | unknown,
|
|
fallbackMessage: string = "خطایی رخ داده است",
|
|
): string => {
|
|
try {
|
|
const axiosError = error as { response?: { data: IGeneralError } };
|
|
return axiosError?.response?.data?.error?.message?.[0] || fallbackMessage;
|
|
} catch {
|
|
return fallbackMessage;
|
|
}
|
|
};
|
|
|
|
export const getFileNameAndExtensionFromUrl = (
|
|
url: string,
|
|
): { fileName: string; extension: string } => {
|
|
try {
|
|
const cleanUrl = url.split("?")[0].split("#")[0];
|
|
const lastPart = cleanUrl.substring(cleanUrl.lastIndexOf("/") + 1);
|
|
|
|
if (!lastPart || !lastPart.includes(".")) {
|
|
return { fileName: "", extension: "" };
|
|
}
|
|
|
|
const lastDotIndex = lastPart.lastIndexOf(".");
|
|
const fileName = lastPart.substring(0, lastDotIndex);
|
|
const extension = lastPart.substring(lastDotIndex + 1);
|
|
|
|
return { fileName, extension };
|
|
} catch {
|
|
return { fileName: "", extension: "" };
|
|
}
|
|
};
|