landing api

This commit is contained in:
hamid zarghami
2025-04-14 15:31:57 +03:30
parent 15af39fc84
commit 74c47893dd
25 changed files with 3365 additions and 124 deletions
+23
View File
@@ -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>
)
}
+24
View File
@@ -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;
+97
View File
@@ -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);
}