landing api
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
'use client'
|
||||
|
||||
import { QueryClient, QueryClientProvider, HydrationBoundary } from '@tanstack/react-query'
|
||||
import { ReactNode, useState } from 'react'
|
||||
|
||||
export default function QueryProvider({ children }: { children: ReactNode }) {
|
||||
const [client] = useState(() => new QueryClient({
|
||||
defaultOptions: {
|
||||
queries: {
|
||||
staleTime: 1000 * 60 * 5, // دادهها برای 5 دقیقه معتبر هستند
|
||||
|
||||
}
|
||||
}
|
||||
}))
|
||||
|
||||
return (
|
||||
<QueryClientProvider client={client}>
|
||||
<HydrationBoundary state={{}}>
|
||||
{children}
|
||||
</HydrationBoundary>
|
||||
</QueryClientProvider>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import axios from "axios";
|
||||
import { getToken } from "./func";
|
||||
// import { Pages } from "./Pages";
|
||||
|
||||
const axiosInstance = axios.create({
|
||||
baseURL: process.env.NEXT_PUBLIC_BASE_URL,
|
||||
});
|
||||
|
||||
axiosInstance.interceptors.response.use(
|
||||
(response) => response,
|
||||
(error) => {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
axiosInstance.interceptors.request.use(async function (config) {
|
||||
const tokenValue = await getToken();
|
||||
const token = tokenValue ? tokenValue : "";
|
||||
|
||||
config.headers.Authorization = "Bearer " + token;
|
||||
return config;
|
||||
});
|
||||
|
||||
export default axiosInstance;
|
||||
@@ -0,0 +1,97 @@
|
||||
import Cookie from "js-cookie";
|
||||
|
||||
export function isEmail(input: string): boolean {
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||
return emailRegex.test(input);
|
||||
}
|
||||
|
||||
export function NumberFormat(number: number): string {
|
||||
return Intl.NumberFormat("fa-IR").format(number);
|
||||
// return Intl.NumberFormat("fa-IR").format(number);
|
||||
}
|
||||
|
||||
export const timeAgo = (date: string | Date): string => {
|
||||
const now = new Date();
|
||||
const past = new Date(date);
|
||||
const diff = Math.floor((now.getTime() - past.getTime()) / 1000); // اختلاف بر حسب ثانیه
|
||||
|
||||
const units = [
|
||||
{ name: "سال", value: 60 * 60 * 24 * 365 },
|
||||
{ name: "ماه", value: 60 * 60 * 24 * 30 },
|
||||
{ name: "روز", value: 60 * 60 * 24 },
|
||||
{ name: "ساعت", value: 60 * 60 },
|
||||
{ name: "دقیقه", value: 60 },
|
||||
{ name: "ثانیه", value: 1 },
|
||||
];
|
||||
|
||||
for (const unit of units) {
|
||||
const amount = Math.floor(diff / unit.value);
|
||||
if (amount >= 1) return `${amount} ${unit.name} پیش`;
|
||||
}
|
||||
|
||||
return "همین الان";
|
||||
};
|
||||
export const getToken = () => {
|
||||
return Cookie.get(process.env.NEXT_PUBLIC_BASE_URL || "");
|
||||
};
|
||||
|
||||
export const getRefreshToken = () => {
|
||||
return Cookie.get(process.env.VITE_REFRESH_TOKEN_NAME || "");
|
||||
};
|
||||
|
||||
const isProduction = process.env.NODE_ENV === "production";
|
||||
const domain = isProduction ? ".danakcorp.com" : undefined;
|
||||
|
||||
export const setToken = (token: string) => {
|
||||
Cookie.set(process.env.NEXT_PUBLIC_TOKEN_NAME || "", token, {
|
||||
domain: domain || "",
|
||||
});
|
||||
};
|
||||
|
||||
export const setRefreshToken = (refreshToken: string) => {
|
||||
Cookie.set(process.env.NEXT_PUBLIC_REFRESH_TOKEN_NAME || "", refreshToken, {
|
||||
domain: domain || "",
|
||||
});
|
||||
};
|
||||
|
||||
export const removeToken = () => {
|
||||
Cookie.remove(process.env.NEXT_PUBLIC_TOKEN_NAME || "", {
|
||||
domain,
|
||||
path: "/",
|
||||
});
|
||||
};
|
||||
|
||||
export const removeRefreshToken = () => {
|
||||
Cookie.remove(process.env.NEXT_PUBLIC_REFRESH_TOKEN_NAME || "", {
|
||||
domain,
|
||||
path: "/",
|
||||
});
|
||||
};
|
||||
|
||||
export function toJalaliDate(
|
||||
date: Date | string | number,
|
||||
options?: Intl.DateTimeFormatOptions,
|
||||
locale: string = "fa-IR-u-ca-persian"
|
||||
): string {
|
||||
const parsedDate = new Date(date);
|
||||
|
||||
if (isNaN(parsedDate.getTime())) {
|
||||
throw new Error("Invalid date provided to toJalaliDate");
|
||||
}
|
||||
|
||||
const defaultOptions: Intl.DateTimeFormatOptions = {
|
||||
year: "numeric",
|
||||
month: "numeric",
|
||||
day: "numeric",
|
||||
// weekday: "long",
|
||||
// hour: "numeric",
|
||||
// minute: "numeric",
|
||||
};
|
||||
|
||||
const formatter = new Intl.DateTimeFormat(locale, {
|
||||
...defaultOptions,
|
||||
...options,
|
||||
});
|
||||
|
||||
return formatter.format(parsedDate);
|
||||
}
|
||||
Reference in New Issue
Block a user