training_data/packages/client/src/api/hooks/useAppConfig.ts

69 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-12-30 08:26:40 +08:00
import { api } from "../trpc";
2025-01-06 08:45:23 +08:00
import { AppConfigSlug, BaseSetting } from "@nice/common";
2024-12-30 08:26:40 +08:00
import { useCallback, useEffect, useMemo, useState } from "react";
export function useAppConfig() {
2025-02-24 21:49:31 +08:00
const utils = api.useUtils();
2024-12-30 08:26:40 +08:00
const [baseSetting, setBaseSetting] = useState<BaseSetting | undefined>();
const { data, isLoading }: { data: any; isLoading: boolean } =
api.app_config.findFirst.useQuery({
2025-02-24 21:49:31 +08:00
where: { slug: AppConfigSlug.BASE_SETTING },
2024-12-30 08:26:40 +08:00
});
2025-02-25 09:55:36 +08:00
2024-12-30 08:26:40 +08:00
const handleMutationSuccess = useCallback(() => {
2025-02-24 21:49:31 +08:00
utils.app_config.invalidate();
2024-12-30 08:26:40 +08:00
}, [utils]);
// Use the generic success handler in mutations
const create: any = api.app_config.create.useMutation({
onSuccess: handleMutationSuccess,
});
const update: any = api.app_config.update.useMutation({
onSuccess: handleMutationSuccess,
});
const deleteMany = api.app_config.deleteMany.useMutation({
onSuccess: handleMutationSuccess,
});
useEffect(() => {
if (data?.meta) {
2025-02-25 09:55:36 +08:00
// console.log(JSON.parse(data?.meta));
setBaseSetting(data?.meta);
2024-12-30 08:26:40 +08:00
}
}, [data, isLoading]);
const splashScreen = useMemo(() => {
return baseSetting?.appConfig?.splashScreen;
}, [baseSetting]);
const devDept = useMemo(() => {
return baseSetting?.appConfig?.devDept;
}, [baseSetting]);
2025-02-24 21:49:31 +08:00
const slides = useMemo(() => {
return baseSetting?.appConfig?.slides || [];
}, [baseSetting]);
2025-03-03 09:48:56 +08:00
const slideLinks = useMemo(() => {
return baseSetting?.appConfig?.slideLinks || [];
}, [baseSetting]);
2025-02-25 09:55:36 +08:00
const statistics = useMemo(() => {
return (
baseSetting?.appConfig?.statistics || {
reads: 0,
staffs: 0,
courses: 0,
lectures: 0,
}
);
}, [baseSetting]);
2024-12-30 08:26:40 +08:00
return {
create,
deleteMany,
update,
baseSetting,
splashScreen,
devDept,
isLoading,
2025-02-24 21:49:31 +08:00
slides,
2025-03-03 09:48:56 +08:00
slideLinks,
2025-02-25 09:55:36 +08:00
statistics,
2024-12-30 08:26:40 +08:00
};
}