fix(react): overlay hooks memorised properly to prevent re-renders (#24010)

resolves #23741

Co-authored-by: Fabrice <fabrice@weinberg.me>
This commit is contained in:
Ely Lucas
2021-10-05 06:44:40 -06:00
committed by GitHub
parent f112ad4490
commit 2c97712601
11 changed files with 276 additions and 146 deletions

View File

@ -1,4 +1,5 @@
import { LoadingOptions, SpinnerTypes, loadingController } from '@ionic/core';
import { useCallback } from 'react';
import { HookOverlayOptions } from './HookOverlayOptions';
import { useController } from './useController';
@ -13,27 +14,24 @@ export function useIonLoading(): UseIonLoadingResult {
loadingController
);
function present(
message?: string,
duration?: number,
spinner?: SpinnerTypes
): void;
function present(options: LoadingOptions & HookOverlayOptions): void;
function present(
messageOrOptions: string | (LoadingOptions & HookOverlayOptions) = '',
duration?: number,
spinner?: SpinnerTypes
) {
if (typeof messageOrOptions === 'string') {
controller.present({
message: messageOrOptions,
duration,
spinner: spinner ?? 'lines',
});
} else {
controller.present(messageOrOptions);
}
}
const present = useCallback(
(
messageOrOptions: string | (LoadingOptions & HookOverlayOptions) = '',
duration?: number,
spinner?: SpinnerTypes
) => {
if (typeof messageOrOptions === 'string') {
controller.present({
message: messageOrOptions,
duration,
spinner: spinner ?? 'lines',
});
} else {
controller.present(messageOrOptions);
}
},
[controller.present]
);
return [present, controller.dismiss];
}