Files
sistem-desa-mandiri/src/lib/stateApi.ts
2024-07-08 10:32:45 +08:00

108 lines
3.4 KiB
TypeScript

'use client';
import { State, hookstate, useHookstate } from '@hookstate/core';
const useState = <T>(s: State<T>) => {
const state = useHookstate(s);
const get = state.value;
const set = (v: typeof state.value) => state.set(v);
return [get, set] as const;
};
interface ParamsLoad {
searchParams?: Record<string, string>
token?: string
body?: Record<string, any>
}
const funLoad = async (url: string, params?: ParamsLoad, set?: any, method?: string) => {
const property: Record<string, any> = {}
if(params) {
if(params.searchParams) {
property.searchParams = "?"+new URLSearchParams(params.searchParams).toString();
}
if(params.body) {
property.body = JSON.stringify(params.body);
}
if(params.token) {
property.headers.Authorization = `Bearer ${params.token}`;
}
}
property.method = method;
const res = await fetch(url, property );
const json = await res.json().then((json) => json).catch(() => null);
if(json && set) set(json);
return {
res,
json
};
}
const testDevisionListGroup = hookstate<any | undefined>(undefined);
export const ProviderTestDevisionListGroup = ({data}: {data: any}) => {
if(data && testDevisionListGroup.value === undefined) {
testDevisionListGroup.set(data)
}
return null
}
export const useTestDevisionListGroup = <T>() => {
const [get, set] = useState(useHookstate(testDevisionListGroup))
const load = (params?: ParamsLoad) => funLoad(`/api/test-devision/list-group/`,params, set, "GET")
const value: T = get
return [value, set, load] as const
};
const testDevisionListDivision = hookstate<any | undefined>(undefined);
export const ProviderTestDevisionListDivision = ({data}: {data: any}) => {
if(data && testDevisionListDivision.value === undefined) {
testDevisionListDivision.set(data)
}
return null
}
export const useTestDevisionListDivision = <T>() => {
const [get, set] = useState(useHookstate(testDevisionListDivision))
const load = (params?: ParamsLoad) => funLoad(`/api/test-devision/list-division/`,params, set, "GET")
const value: T = get
return [value, set, load] as const
};
const testDevisionListAnggota = hookstate<any | undefined>(undefined);
export const ProviderTestDevisionListAnggota = ({data}: {data: any}) => {
if(data && testDevisionListAnggota.value === undefined) {
testDevisionListAnggota.set(data)
}
return null
}
export const useTestDevisionListAnggota = <T>() => {
const [get, set] = useState(useHookstate(testDevisionListAnggota))
const load = (params?: ParamsLoad) => funLoad(`/api/test-devision/list-anggota/`,params, set, "GET")
const value: T = get
return [value, set, load] as const
};
const testDevisionCountDevision = hookstate<any | undefined>(undefined);
export const ProviderTestDevisionCountDevision = ({data}: {data: any}) => {
if(data && testDevisionCountDevision.value === undefined) {
testDevisionCountDevision.set(data)
}
return null
}
export const useTestDevisionCountDevision = <T>() => {
const [get, set] = useState(useHookstate(testDevisionCountDevision))
const load = (params?: ParamsLoad) => funLoad(`/api/test-devision/count-devision/`,params, set, "GET")
const value: T = get
return [value, set, load] as const
};