mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-12 13:13:45 +01:00
[web] add button for removing collaborator via project admin page (#32585)
* [web] useAsync: clear previous error on retry * [web] add button for removing collaborator via project admin page GitOrigin-RevId: c5efaef81600787265d669b5919fb9b1cfdd3ef3
This commit is contained in:
@@ -31,7 +31,8 @@ function useAsync<T = any, E extends Error | FetchError = Error>(
|
||||
const safeSetState = useSafeDispatch(setState)
|
||||
|
||||
const setData = React.useCallback(
|
||||
(data: Nullable<T>) => safeSetState({ data, status: 'resolved' }),
|
||||
(data: Nullable<T>) =>
|
||||
safeSetState({ data, error: null, status: 'resolved' }),
|
||||
[safeSetState]
|
||||
)
|
||||
|
||||
|
||||
@@ -163,6 +163,31 @@ describe('useAsync', function () {
|
||||
})
|
||||
})
|
||||
|
||||
it('clears the error on retry', async function () {
|
||||
const mockError = new Error('rejected value')
|
||||
const { result } = renderHook(() => useAsync())
|
||||
|
||||
act(() => {
|
||||
result.current.setError(mockError)
|
||||
})
|
||||
|
||||
expect(result.current).to.include({
|
||||
...rejectedState,
|
||||
error: mockError,
|
||||
})
|
||||
|
||||
const mockData = Symbol('resolved value')
|
||||
await act(async () => {
|
||||
await result.current.runAsync(Promise.resolve(mockData))
|
||||
})
|
||||
|
||||
expect(result.current).to.include({
|
||||
...resolvedState,
|
||||
error: null,
|
||||
data: mockData,
|
||||
})
|
||||
})
|
||||
|
||||
it('no state updates happen if the component is unmounted while pending', async function () {
|
||||
const { promise, resolve } = deferred()
|
||||
const { result, unmount } = renderHook(() => useAsync())
|
||||
|
||||
Reference in New Issue
Block a user