[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:
Jakob Ackermann
2026-04-10 08:04:44 +00:00
committed by Copybot
parent 95793037e6
commit 3f62eac181
2 changed files with 27 additions and 1 deletions
@@ -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())