108 lines
3.0 KiB
TypeScript
108 lines
3.0 KiB
TypeScript
import { QueryClient } from '@tanstack/react-query';
|
|
|
|
/**
|
|
* Ключи кэша для различных типов данных
|
|
*/
|
|
export const cacheKeys = {
|
|
// Дашборд
|
|
dashboardStats: 'dashboard-stats',
|
|
recentOrders: 'recent-orders',
|
|
popularProducts: 'popular-products',
|
|
|
|
// Каталог
|
|
products: 'products',
|
|
product: (id: number | string) => ['product', id.toString()],
|
|
categories: 'categories',
|
|
collections: 'collections',
|
|
sizes: 'sizes',
|
|
|
|
// Заказы
|
|
orders: 'orders',
|
|
order: (id: number | string) => ['order', id.toString()],
|
|
|
|
// Пользователи
|
|
customers: 'customers',
|
|
customer: (id: number | string) => ['customer', id.toString()],
|
|
};
|
|
|
|
/**
|
|
* Функция для инвалидации кэша при изменении данных
|
|
* @param keys Массив ключей кэша для инвалидации
|
|
*/
|
|
export function invalidateCache(queryClient: QueryClient, keys: string | string[] | (string | string[])[]): void {
|
|
const keysArray = Array.isArray(keys) ? keys : [keys];
|
|
|
|
keysArray.forEach(key => {
|
|
if (Array.isArray(key)) {
|
|
queryClient.invalidateQueries({ queryKey: key });
|
|
} else {
|
|
queryClient.invalidateQueries({ queryKey: [key] });
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Функция для инвалидации кэша продуктов
|
|
*/
|
|
export function invalidateProductsCache(queryClient: QueryClient): void {
|
|
invalidateCache(queryClient, [
|
|
cacheKeys.products,
|
|
cacheKeys.popularProducts,
|
|
// Также инвалидируем связанные данные
|
|
cacheKeys.dashboardStats
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Функция для инвалидации кэша заказов
|
|
*/
|
|
export function invalidateOrdersCache(queryClient: QueryClient): void {
|
|
invalidateCache(queryClient, [
|
|
cacheKeys.orders,
|
|
cacheKeys.recentOrders,
|
|
// Также инвалидируем связанные данные
|
|
cacheKeys.dashboardStats
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Функция для инвалидации кэша категорий
|
|
*/
|
|
export function invalidateCategoriesCache(queryClient: QueryClient): void {
|
|
invalidateCache(queryClient, [
|
|
cacheKeys.categories,
|
|
// Также инвалидируем связанные данные
|
|
cacheKeys.products
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Функция для инвалидации кэша коллекций
|
|
*/
|
|
export function invalidateCollectionsCache(queryClient: QueryClient): void {
|
|
invalidateCache(queryClient, [
|
|
cacheKeys.collections,
|
|
// Также инвалидируем связанные данные
|
|
cacheKeys.products
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Функция для инвалидации кэша размеров
|
|
*/
|
|
export function invalidateSizesCache(queryClient: QueryClient): void {
|
|
invalidateCache(queryClient, [
|
|
cacheKeys.sizes
|
|
]);
|
|
}
|
|
|
|
export default {
|
|
cacheKeys,
|
|
invalidateCache,
|
|
invalidateProductsCache,
|
|
invalidateOrdersCache,
|
|
invalidateCategoriesCache,
|
|
invalidateCollectionsCache,
|
|
invalidateSizesCache
|
|
};
|