non auth part

This commit is contained in:
Mikan
2025-06-01 20:55:44 +03:00
parent 9c6272db25
commit 35ed595edc
6 changed files with 70 additions and 44 deletions

View File

@@ -1,7 +1,8 @@
import {useEffect, useState} from "react";
import {useEffect, useMemo, useState} from "react";
import {DEBUG_MODE} from "../utils/common";
import {ApiResponse, PageResponse} from "../types/api.ts";
import {PageControl} from "../types/common.ts";
import {Institution} from "../types/survey.ts";
export function hostUrl(url: string){
return DEBUG_MODE? "http://localhost:8000"+url: url;
@@ -144,3 +145,43 @@ export function useData<T>(application:string, endpoint: string, id: string|numb
}
export function useCachedData<T>(application: string, endpoint: string) {
const [cache, setCache] = useState<Map<string | number, T | undefined>>(new Map());
useEffect(() => {
// Очистка кеша или другие побочные эффекты при необходимости
return () => {
setCache(new Map());
};
}, []);
return (id: string | number, needLoad: boolean = true): T | undefined | null => {
const cachedData = cache.has(id)?cache.get(id):null;
if (cachedData !== null) {
return cachedData;
}
if (needLoad) {
getFetch(`/${application}/${endpoint}/${id}`).then((r) => {
if (r.success) {
const data = r.body as T;
setCache((prevCache) => {
const newCache = new Map(prevCache);
newCache.set(id, data);
return newCache;
});
} else {
setCache((prevCache) => {
const newCache = new Map(prevCache);
newCache.set(id, undefined);
return newCache;
});
}
});
}
return null;
};
}