mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-06 23:56:37 +08:00
prettier
This commit is contained in:
@@ -1,24 +1,35 @@
|
||||
"use client"
|
||||
'use client';
|
||||
|
||||
import * as React from "react"
|
||||
import {createContext, useCallback, useContext, useRef, useState} from "react"
|
||||
import {useQueryClient} from "@tanstack/react-query"
|
||||
|
||||
import type {SystemConfig, UpdateSystemConfigRequest} from "@/lib/services/admin"
|
||||
import services from "@/lib/services"
|
||||
import {handleContextError} from "@/lib/utils/error-handling"
|
||||
import * as React from 'react';
|
||||
import {
|
||||
createContext,
|
||||
useCallback,
|
||||
useContext,
|
||||
useRef,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import type {
|
||||
SystemConfig,
|
||||
UpdateSystemConfigRequest,
|
||||
} from '@/lib/services/admin';
|
||||
import services from '@/lib/services';
|
||||
import { handleContextError } from '@/lib/utils/error-handling';
|
||||
|
||||
/** Admin 上下文状态接口 */
|
||||
export interface AdminContextState {
|
||||
systemConfigs: SystemConfig[]
|
||||
systemConfigsLoading: boolean
|
||||
systemConfigsError: Error | null
|
||||
refetchSystemConfigs: (type?: 'system' | 'business') => Promise<void>
|
||||
updateSystemConfig: (key: string, data: UpdateSystemConfigRequest) => Promise<void>
|
||||
systemConfigs: SystemConfig[];
|
||||
systemConfigsLoading: boolean;
|
||||
systemConfigsError: Error | null;
|
||||
refetchSystemConfigs: (type?: 'system' | 'business') => Promise<void>;
|
||||
updateSystemConfig: (
|
||||
key: string,
|
||||
data: UpdateSystemConfigRequest,
|
||||
) => Promise<void>;
|
||||
}
|
||||
|
||||
const AdminContext = createContext<AdminContextState | null>(null)
|
||||
const AdminContext = createContext<AdminContextState | null>(null);
|
||||
|
||||
/**
|
||||
* Admin Provider
|
||||
@@ -33,52 +44,64 @@ const AdminContext = createContext<AdminContextState | null>(null)
|
||||
* @param {React.ReactNode} children - Admin Provider 的子元素
|
||||
*/
|
||||
export function AdminProvider({ children }: { children: React.ReactNode }) {
|
||||
const queryClient = useQueryClient()
|
||||
const [systemConfigs, setSystemConfigs] = useState<SystemConfig[]>([])
|
||||
const [systemConfigsLoading, setSystemConfigsLoading] = useState(false)
|
||||
const [systemConfigsError, setSystemConfigsError] = useState<Error | null>(null)
|
||||
const queryClient = useQueryClient();
|
||||
const [systemConfigs, setSystemConfigs] = useState<SystemConfig[]>([]);
|
||||
const [systemConfigsLoading, setSystemConfigsLoading] = useState(false);
|
||||
const [systemConfigsError, setSystemConfigsError] = useState<Error | null>(
|
||||
null,
|
||||
);
|
||||
|
||||
const systemRequestIdRef = useRef(0)
|
||||
const lastConfigTypeRef = useRef<'system' | 'business' | undefined>(undefined)
|
||||
const systemRequestIdRef = useRef(0);
|
||||
const lastConfigTypeRef = useRef<'system' | 'business' | undefined>(
|
||||
undefined,
|
||||
);
|
||||
|
||||
/** 获取系统配置列表 */
|
||||
const refetchSystemConfigs = useCallback(async (type?: 'system' | 'business') => {
|
||||
lastConfigTypeRef.current = type
|
||||
const requestId = ++systemRequestIdRef.current
|
||||
const refetchSystemConfigs = useCallback(
|
||||
async (type?: 'system' | 'business') => {
|
||||
lastConfigTypeRef.current = type;
|
||||
const requestId = ++systemRequestIdRef.current;
|
||||
|
||||
try {
|
||||
setSystemConfigsLoading(true)
|
||||
setSystemConfigsError(null)
|
||||
const data = await services.adminSystemConfig.listSystemConfigs(type)
|
||||
try {
|
||||
setSystemConfigsLoading(true);
|
||||
setSystemConfigsError(null);
|
||||
const data = await services.adminSystemConfig.listSystemConfigs(type);
|
||||
|
||||
if (requestId !== systemRequestIdRef.current) {
|
||||
return
|
||||
if (requestId !== systemRequestIdRef.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
setSystemConfigs(data);
|
||||
setSystemConfigsLoading(false);
|
||||
} catch (error) {
|
||||
if (requestId !== systemRequestIdRef.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
const errorObject = handleContextError(error, '加载系统配置失败', {
|
||||
logError: true,
|
||||
});
|
||||
setSystemConfigsError(errorObject);
|
||||
setSystemConfigsLoading(false);
|
||||
}
|
||||
|
||||
setSystemConfigs(data)
|
||||
setSystemConfigsLoading(false)
|
||||
} catch (error) {
|
||||
if (requestId !== systemRequestIdRef.current) {
|
||||
return
|
||||
}
|
||||
|
||||
const errorObject = handleContextError(error, '加载系统配置失败', { logError: true })
|
||||
setSystemConfigsError(errorObject)
|
||||
setSystemConfigsLoading(false)
|
||||
}
|
||||
}, [])
|
||||
},
|
||||
[],
|
||||
);
|
||||
|
||||
/** 更新系统配置 */
|
||||
const updateSystemConfig = useCallback(async (key: string, data: UpdateSystemConfigRequest) => {
|
||||
try {
|
||||
await services.adminSystemConfig.updateSystemConfig(key, data)
|
||||
await queryClient.invalidateQueries({ queryKey: ['public-config'] })
|
||||
await refetchSystemConfigs(lastConfigTypeRef.current)
|
||||
} catch (error) {
|
||||
handleContextError(error, '更新系统配置失败')
|
||||
throw error
|
||||
}
|
||||
}, [queryClient, refetchSystemConfigs])
|
||||
const updateSystemConfig = useCallback(
|
||||
async (key: string, data: UpdateSystemConfigRequest) => {
|
||||
try {
|
||||
await services.adminSystemConfig.updateSystemConfig(key, data);
|
||||
await queryClient.invalidateQueries({ queryKey: ['public-config'] });
|
||||
await refetchSystemConfigs(lastConfigTypeRef.current);
|
||||
} catch (error) {
|
||||
handleContextError(error, '更新系统配置失败');
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
[queryClient, refetchSystemConfigs],
|
||||
);
|
||||
|
||||
const value: AdminContextState = {
|
||||
systemConfigs,
|
||||
@@ -86,13 +109,11 @@ export function AdminProvider({ children }: { children: React.ReactNode }) {
|
||||
systemConfigsError,
|
||||
refetchSystemConfigs,
|
||||
updateSystemConfig,
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<AdminContext.Provider value={value}>
|
||||
{children}
|
||||
</AdminContext.Provider>
|
||||
)
|
||||
<AdminContext.Provider value={value}>{children}</AdminContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,11 +126,11 @@ export function AdminProvider({ children }: { children: React.ReactNode }) {
|
||||
* @returns {AdminContextState} Admin 上下文状态
|
||||
*/
|
||||
export function useAdmin() {
|
||||
const context = useContext(AdminContext)
|
||||
const context = useContext(AdminContext);
|
||||
|
||||
if (!context) {
|
||||
throw new Error('useAdmin 必须在 AdminProvider 内部使用')
|
||||
throw new Error('useAdmin 必须在 AdminProvider 内部使用');
|
||||
}
|
||||
|
||||
return context
|
||||
return context;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user