shlink-web-client/test/__helpers__/TestModalWrapper.tsx
2025-04-05 10:39:47 +02:00

25 lines
841 B
TypeScript

import type { FC, ReactElement } from 'react';
import { useCallback, useEffect , useState } from 'react';
export type RenderModalArgs = {
open: boolean;
onClose: () => void;
};
export const TestModalWrapper: FC<{ renderModal: (args: RenderModalArgs) => ReactElement }> = (
{ renderModal },
) => {
const [open, setOpen] = useState(true);
const onClose = useCallback(() => setOpen(false), []);
// Workaround to ensure CardModals from shlink-frontend-shared can be closed, as they depend on CSS transitions
// Since JSDOM does not support them, this dispatches the event right after the listener has been set-up
useEffect(() => {
if (!open) {
document.querySelector('[data-testid="transition-container"]')?.dispatchEvent(new Event('transitionend'));
}
}, [open]);
return renderModal({ open, onClose });
};