import * as React from 'react'; import { useState } from 'react'; import { QueryClient, useIsMutating } from 'react-query'; import { CoreAdminContext } from '../core'; import undoableEventEmitter from './undoableEventEmitter'; import { useUpdate } from './useUpdate'; import { useGetOne } from './useGetOne'; export default { title: 'ra-core/dataProvider/useUpdate/undoable' }; export const SuccessCase = () => { const posts = [{ id: 1, title: 'Hello', author: 'John Doe' }]; const dataProvider = { getOne: (resource, params) => { console.log('getOne', resource, params); return Promise.resolve({ data: posts.find(p => p.id === params.id), }); }, update: (resource, params) => { console.log('update', resource, params); return new Promise(resolve => { setTimeout(() => { const post = posts.find(p => p.id === params.id); post.title = params.data.title; resolve({ data: post }); }, 1000); }); }, } as any; return ( ); }; const SuccessCore = () => { const isMutating = useIsMutating(); const [notification, setNotification] = useState(false); const [success, setSuccess] = useState(); const { data, refetch } = useGetOne('posts', { id: 1 }); const [update, { isLoading }] = useUpdate(); const handleClick = () => { update( 'posts', { id: 1, data: { title: 'Hello World' }, }, { mutationMode: 'undoable', onSuccess: () => setSuccess('success'), } ); setNotification(true); }; return ( <>
title
{data?.title}
author
{data?.author}
{notification ? ( <>   ) : ( )}  
{success &&
{success}
} {isMutating !== 0 &&
mutating
} ); }; export const ErrorCase = () => { const posts = [{ id: 1, title: 'Hello', author: 'John Doe' }]; const dataProvider = { getOne: (resource, params) => { console.log('getOne', resource, params); return Promise.resolve({ data: posts.find(p => p.id === params.id), }); }, update: (resource, params) => { console.log('update', resource, params); return new Promise((resolve, reject) => { setTimeout(() => { reject(new Error('something went wrong')); }, 1000); }); }, } as any; return ( ); }; const ErrorCore = () => { const isMutating = useIsMutating(); const [notification, setNotification] = useState(false); const [success, setSuccess] = useState(); const [error, setError] = useState(); const { data, refetch } = useGetOne('posts', { id: 1 }); const [update, { isLoading }] = useUpdate(); const handleClick = () => { update( 'posts', { id: 1, data: { title: 'Hello World' }, }, { mutationMode: 'undoable', onSuccess: () => setSuccess('success'), onError: e => { setError(e); setSuccess(''); }, } ); setNotification(true); }; return ( <>
title
{data?.title}
author
{data?.author}
{notification ? ( <>   ) : ( )}  
{success &&
{success}
} {error &&
{error.message}
} {isMutating !== 0 &&
mutating
} ); };