Files
developer-roadmap/src/components/Modal.tsx
T
Arik ChakmaandKamran Ahmed 1981568501 feat: implement project status (#6513)
* wip

* wip

* wip

* fix: button width

* Add stepper component

* Refactor project stepper

* Refactor stepper

* Refactor stepper

* Update clicker

* Refactor project stepper

* Add projects tip popup

* Add start project modal

* Submission requirement modalg

* Requirement verification functionality

* Update project submission

* Voting and active timeline

* Finalize project solution stepper

* Update empty project page

* Add user avatars

* Solutions listing page

* Update tab design

* Fix styles for loading and pagination

* Redesign project page header

* Make project page responsive

* Make project pages responsive

* Update the leaving roadmap page

* Start project modal updates

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-08-17 12:59:35 +01:00

59 lines
1.2 KiB
TypeScript

import { type ReactNode, useRef } from 'react';
import { useOutsideClick } from '../hooks/use-outside-click';
import { useKeydown } from '../hooks/use-keydown';
import { cn } from '../lib/classname';
type ModalProps = {
onClose: () => void;
children: ReactNode;
overlayClassName?: string;
bodyClassName?: string;
wrapperClassName?: string;
};
export function Modal(props: ModalProps) {
const {
onClose,
children,
bodyClassName,
wrapperClassName,
overlayClassName,
} = props;
const popupBodyEl = useRef<HTMLDivElement>(null);
useKeydown('Escape', () => {
onClose();
});
useOutsideClick(popupBodyEl, () => {
onClose();
});
return (
<div
className={cn(
'fixed left-0 right-0 top-0 z-[99] flex h-full items-center justify-center overflow-y-auto overflow-x-hidden bg-black/50',
overlayClassName,
)}
>
<div
className={cn(
'relative h-full w-full max-w-md p-4 md:h-auto',
wrapperClassName,
)}
>
<div
ref={popupBodyEl}
className={cn(
'relative h-full rounded-lg bg-white shadow',
bodyClassName,
)}
>
{children}
</div>
</div>
</div>
);
}