LoginModal.tsx 1.7 Ko
Télécharger le fichier
import { FC, MouseEvent, PropsWithChildren } from 'react';
import { InlineDialog } from '../../../common/InlineDialog';
import { BaseButton } from '../../../common/BaseButton';
import { NativeTextTree } from '../../../common/native-text/NativeTextTree';
interface LoginModalProps extends PropsWithChildren {
title: string;
titleId: string;
closeLabel: string;
dialogClassName?: string;
onClose: () => void;
}
export const LoginModal: FC<LoginModalProps> = ({ title, titleId, closeLabel, dialogClassName = '', onClose, children }) => {
const handleOverlayClick = (event: MouseEvent<HTMLDivElement>) => {
if (event.target === event.currentTarget) onClose();
};
return (
<NativeTextTree>
<div className="octane-login-modal" onClick={handleOverlayClick}>
<InlineDialog
aria-labelledby={titleId}
aria-modal="true"
className={`dialog ${dialogClassName}`.trim()}
initialFocus={false}
modal="trap-focus"
onClose={onClose}
>
<div className="octane-login-card octane-card-shell">
<div className="card-title octane-card-header-shell">
<span id={titleId} className="octane-card-title">
{title}
</span>
<BaseButton type="button" className="octane-card-close-button" aria-label={closeLabel} onClick={onClose} />
</div>
{children}
</div>
</InlineDialog>
</div>
</NativeTextTree>
);
};
