// Customize LinkAuthItems to show a modal for non-OAuth methods instead of transitioning in place.
function CustomLinkAuthItems() {
const { link, back } = useLinkAuthFlow();
const { authMethods } = useAppConfig();
const [openModal, setOpenModal] = useState<AuthMethod | null>(null);
const modalMethods = useMemo(
() => authMethods.filter(method => !method.startsWith("oauth:")),
[authMethods],
);
const handleClose = useCallback(() => {
setOpenModal(null);
back();
}, [back, setOpenModal]);
const handleLink = useCallback(
(method: AuthMethod) => {
link(method);
if (!method.startsWith("oauth:")) {
setOpenModal(method);
}
},
[link, setOpenModal],
);
return (
<>
<LinkAuthItems onLink={handleLink} />
{modalMethods.map(method => {
return (
<SignInModal
key={method}
open={openModal === method}
authMethods={[method]}
setIsOpen={isOpen => (isOpen ? setOpenModal(method) : handleClose())}
onSuccess={() => setOpenModal(null)}
>
<SignInModalTrigger>null</SignInModalTrigger>
</SignInModal>
);
})}
</>
);
};
function App() {
return (
<CDPReactProvider config={config}>
<LinkAuth>
<h2>Link a profile</h2>
<CustomLinkAuthItems />
</LinkAuth>
</CDPReactProvider>
);
}