();
const {
isPending: isPendingGetOne,
data,
error: getOneError,
refetch,
} = useGetOne('posts', { id: 2 });
const [create, { isPending }] = useCreate();
const handleClick = () => {
create(
'posts',
{
data: {
id: 2,
title: 'Hello World',
},
},
{
mutationMode: 'optimistic',
onSuccess: () => setSuccess('success'),
onError: e => {
setError(e);
setSuccess('');
},
}
);
};
return (
<>
{isPendingGetOne ? (
Loading...
) : getOneError ? (
{getOneError.message}
) : (
- id
- {data?.id}
- title
- {data?.title}
- author
- {data?.author}
)}
{success && {success}
}
{error && {error.message}
}
{isMutating !== 0 && mutating
}
>
);
};
export const WithMiddlewaresSuccess = ({ timeout = 1000 }) => {
const posts = [{ id: 1, title: 'Hello', author: 'John Doe' }];
const dataProvider = {
getOne: (resource, params) => {
return new Promise((resolve, reject) => {
const data = posts.find(p => p.id === params.id);
setTimeout(() => {
if (!data) {
reject(new Error('nothing yet'));
}
resolve({ data });
}, timeout);
});
},
create: (resource, params) => {
return new Promise(resolve => {
setTimeout(() => {
posts.push(params.data);
resolve({ data: params.data });
}, timeout);
});
},
} as any;
return (
);
};
const WithMiddlewaresSuccessCore = () => {
const isMutating = useIsMutating();
const [success, setSuccess] = useState();
const { data, error, refetch } = useGetOne('posts', { id: 2 });
const [create, { isPending }] = useCreate(
'posts',
{
data: {
id: 2,
title: 'Hello World',
},
},
{
mutationMode: 'optimistic',
// @ts-ignore
getMutateWithMiddlewares: mutate => async (resource, params) => {
return mutate(resource, {
...params,
data: {
...params.data,
title: `${params.data.title} from middleware`,
},
});
},
}
);
const handleClick = () => {
create(
'posts',
{
data: {
id: 2,
title: 'Hello World',
},
},
{
onSuccess: () => setSuccess('success'),
}
);
};
return (
<>
{error ? (
{error.message}
) : (
- id
- {data?.id}
- title
- {data?.title}
- author
- {data?.author}
)}
{success && {success}
}
{isMutating !== 0 && mutating
}
>
);
};
export const WithMiddlewaresError = ({ timeout = 1000 }) => {
const posts = [{ id: 1, title: 'Hello', author: 'John Doe' }];
const dataProvider = {
getOne: (resource, params) => {
return new Promise((resolve, reject) => {
const data = posts.find(p => p.id === params.id);
setTimeout(() => {
if (!data) {
reject(new Error('nothing yet'));
}
resolve({ data });
}, timeout);
});
},
create: () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('something went wrong'));
}, timeout);
});
},
} as any;
return (
);
};
const WithMiddlewaresErrorCore = () => {
const isMutating = useIsMutating();
const [success, setSuccess] = useState();
const [error, setError] = useState();
const { data, error: getOneError, refetch } = useGetOne('posts', { id: 2 });
const [create, { isPending }] = useCreate(
'posts',
{
data: {
id: 2,
title: 'Hello World',
},
},
{
mutationMode: 'optimistic',
// @ts-ignore
mutateWithMiddlewares: mutate => async (resource, params) => {
return mutate(resource, {
...params,
data: {
...params.data,
title: `${params.data.title} from middleware`,
},
});
},
}
);
const handleClick = () => {
setError(undefined);
create(
'posts',
{
data: {
id: 2,
title: 'Hello World',
},
},
{
onSuccess: () => setSuccess('success'),
onError: e => {
setError(e);
setSuccess('');
},
}
);
};
return (
<>
{getOneError ? (
{getOneError.message}
) : (
- id
- {data?.id}
- title
- {data?.title}
- author
- {data?.author}
)}
{error && {error.message}
}
{success && {success}
}
{isMutating !== 0 && mutating
}
>
);
};