full-greenF
Refine11mo ago
14 replies
full-green

Best way to access custom methods on a dataProvider

We have a dataProvider that looks like-
const nestCrudProvider = dataProviderNestjsxCrud(API_URL);
const dataProvider = {
    ...nestCrudProvider,
    message: {
        getHelloWorld: async () => {
            return {
                data: 'Hello World'
            }
        },
        addTriggerToMessage: async (record: BaseRecord) => {
            return {
                ...record,
                trigger: "Added Trigge to Message"
            }
        },
        setAccess: async (record: BaseRecord) => {
            return {
                ...record,
                trigger: "Set Access to Message"
            }
        }
    },
    panel: {
        getHelloWorld: async () => {
            return {
                data: 'Hello World'
            }
        },
        addTriggerToPanel: async (record: BaseRecord) => {
            return {
                ...record,
                trigger: "Added Trigger to Message"
            }
        },
        setAccess: async (record: BaseRecord) => {
            return {
                ...record,
                trigger: "Set Access to panel"
            }
        }
    }
}

export type DataProvider = typeof dataProvider & {
    message: {
        getHelloWorld: () => Promise<string>;
        addTriggerToBaseRecord: (record: BaseRecord) => Promise<BaseRecord>;
        setAccess: (record: BaseRecord) => Promise<BaseRecord>;
    },
    panel: {
        getHelloWorld: () => Promise<string>;
        addTriggerToBaseRecord: (record: BaseRecord) => Promise<BaseRecord>;
        setAccess: (record: BaseRecord) => Promise<BaseRecord>;
    }

}


export { dataProvider };


It has a few(and more coming) methods per resource(message and panel). We wanted to group them together like this for clarity.

We access each method like this-
  const {
    data: oneData,
    isLoading: oneIsLoading,
    refetch,
  } = useOne<{ data: string }, HttpError>({
    liveMode: "off",
    dataProviderName: "default",
    queryOptions: {
      queryFn: async () => {
        const response = await dataProvider.message.getHelloWorld();
        console.log(response);
        return { data: response.data }; // Ensure the data property is of type BaseRecord
      },
    },
  });

Is this the best/prescribed way to get to methods in a provider that have been added to the default/required methods?
Was this page helpful?