前端项目实战贰佰肆拾叁react-admin+material ui-react-admin-useGetTree封装核心

import { useMemo } from "react";
import { GetListResult, Identifier, useDataProvider } from "react-admin";
import { UseQueryOptions, UseQueryResult, useQuery, useQueryClient } from "react-query";

export interface TreeRecord {
    id: Identifier;
    [key: string]: any;
    children: Record<string, any>[];
}
export type UseGetTreeHookValue<RecordType extends TreeRecord = any> = UseQueryResult<RecordType[], Error>;
const UseGetTree = <RecordType extends TreeRecord = any>(
    parentTable: string,
    childTable: string,
    refleshFlag: boolean,
    options?: UseQueryOptions<GetListResult<RecordType>, Error>
): UseGetTreeHookValue<RecordType> => {
    const dataProvider = useDataProvider();
    const queryClient = useQueryClient();
    const result = useQuery<
        GetListResult<RecordType>,
        Error,
        GetListResult<RecordType>
    >(
        [parentTable, childTable, 'getTree', refleshFlag],
        () =>
            dataProvider
            .getStyleTree(parentTable, childTable)
            .then((data: any)=>(
                {data}
            )),
        {
            ...options,
            onSuccess: value => {
                const {data} = value;
                data.forEach(record => {
                    queryClient.setQueryData(
                        [parentTable, childTable, 'getOne', {id: String(record.id)}],
                        oldRecord => oldRecord ?? record
                    )
                });
            }
        },
    );

    return useMemo(
        () => 
            result.data ? 
                {
                    ...result,
                    data: result.data?.data,
                    total: result.data?.total,
                }
                : result,
            [result]
    ) as UseGetTreeHookValue<RecordType>; 
}

export default UseGetTree;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值