前端项目实战贰佰肆拾叁react-admin+material ui-react-admin-useGetTree封装核心
  Fuy6dnbn2ffz 2023年11月27日 95 0
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;



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月27日 0

暂无评论

推荐阅读
  anLrwkgbyYZS   2023年12月30日   33   0   0 ideciciMaxideMax
Fuy6dnbn2ffz