Fix spurious loading bar middleware usage (#31592)
parent
4c2534d12e
commit
e38ce3beb7
|
@ -6,5 +6,4 @@ export const submitAccountNote = createDataLoadingThunk(
|
|||
({ accountId, note }: { accountId: string; note: string }) =>
|
||||
apiSubmitAccountNote(accountId, note),
|
||||
(relationship) => ({ relationship }),
|
||||
{ skipLoading: true },
|
||||
);
|
||||
|
|
|
@ -48,8 +48,9 @@ export const loadingBarMiddleware = (
|
|||
let isRejected = false;
|
||||
|
||||
if (
|
||||
isAsyncThunkAction(action)
|
||||
// TODO: once we get the first use-case for it, add a check for skipLoading
|
||||
isAsyncThunkAction(action) &&
|
||||
'useLoadingBar' in action.meta &&
|
||||
action.meta.useLoadingBar
|
||||
) {
|
||||
if (isThunkActionPending(action)) isPending = true;
|
||||
else if (isThunkActionFulfilled(action)) isFulfilled = true;
|
||||
|
|
|
@ -15,7 +15,7 @@ export interface AsyncThunkRejectValue {
|
|||
}
|
||||
|
||||
interface AppMeta {
|
||||
skipLoading?: boolean;
|
||||
useLoadingBar?: boolean;
|
||||
}
|
||||
|
||||
export const createAppAsyncThunk = createAsyncThunk.withTypes<{
|
||||
|
@ -34,7 +34,7 @@ interface AppThunkConfig {
|
|||
type AppThunkApi = Pick<GetThunkAPI<AppThunkConfig>, 'getState' | 'dispatch'>;
|
||||
|
||||
interface AppThunkOptions {
|
||||
skipLoading?: boolean;
|
||||
useLoadingBar?: boolean;
|
||||
}
|
||||
|
||||
const createBaseAsyncThunk = createAsyncThunk.withTypes<AppThunkConfig>();
|
||||
|
@ -54,15 +54,20 @@ export function createThunk<Arg = void, Returned = void>(
|
|||
const result = await creator(arg, { dispatch, getState });
|
||||
|
||||
return fulfillWithValue(result, {
|
||||
skipLoading: options.skipLoading,
|
||||
useLoadingBar: options.useLoadingBar,
|
||||
});
|
||||
} catch (error) {
|
||||
return rejectWithValue({ error }, { skipLoading: true });
|
||||
return rejectWithValue(
|
||||
{ error },
|
||||
{
|
||||
useLoadingBar: options.useLoadingBar,
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
getPendingMeta() {
|
||||
if (options.skipLoading) return { skipLoading: true };
|
||||
if (options.useLoadingBar) return { useLoadingBar: true };
|
||||
return {};
|
||||
},
|
||||
},
|
||||
|
@ -148,7 +153,7 @@ export function createDataLoadingThunk<
|
|||
* You can also omit this parameter and pass `thunkOptions` directly
|
||||
* @param maybeThunkOptions
|
||||
* Additional Mastodon specific options for the thunk. Currently supports:
|
||||
* - `skipLoading` to avoid showing the loading bar when the request is in progress
|
||||
* - `useLoadingBar` to display a loading bar while this action is pending. Defaults to true.
|
||||
* @returns The created thunk
|
||||
*/
|
||||
export function createDataLoadingThunk<
|
||||
|
@ -198,6 +203,6 @@ export function createDataLoadingThunk<
|
|||
return undefined as Returned;
|
||||
else return result;
|
||||
},
|
||||
thunkOptions,
|
||||
{ useLoadingBar: thunkOptions?.useLoadingBar ?? true },
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue