thunk.factory.ts 666 B

123456789101112131415161718192021222324252627
  1. import { createAsyncThunk } from '@reduxjs/toolkit';
  2. export function createFetchThunk<TFilter, TItem>(
  3. namespace: string,
  4. fetcher: (args: {
  5. page: number;
  6. pageSize: number;
  7. filters: TFilter;
  8. }) => Promise<{ data: TItem[]; total: number }>
  9. ) {
  10. return createAsyncThunk(
  11. `${namespace}/fetch`,
  12. async (args: { page: number; pageSize: number; filters: TFilter }) => {
  13. return await fetcher(args);
  14. }
  15. );
  16. }
  17. export function createDeleteThunk(
  18. namespace: string,
  19. deleter: (ids: string[]) => Promise<void>
  20. ) {
  21. return createAsyncThunk(`${namespace}/delete`, async (ids: string[]) => {
  22. await deleter(ids);
  23. return ids;
  24. });
  25. }