| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 'use client'import type { FC } from 'react'import React, { useRef } from 'react'import { RiCloseLine } from '@remixicon/react'import cn from '@/utils/classnames'import Drawer from '@/app/components/base/drawer'import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'type Props = {  isShow: boolean  onHide: () => void  panelClassName?: string  maxWidthClassName?: string  contentClassName?: string  headerClassName?: string  height?: number | string  title: string | JSX.Element  titleDescription?: string | JSX.Element  body: JSX.Element  foot?: JSX.Element  isShowMask?: boolean  clickOutsideNotOpen?: boolean  positionCenter?: boolean}const DrawerPlus: FC<Props> = ({  isShow,  onHide,  panelClassName = '',  maxWidthClassName = '!max-w-[640px]',  height = 'calc(100vh - 72px)',  contentClassName,  headerClassName,  title,  titleDescription,  body,  foot,  isShowMask,  clickOutsideNotOpen = true,  positionCenter,}) => {  const ref = useRef(null)  const media = useBreakpoints()  const isMobile = media === MediaType.mobile  if (!isShow)    return null  return (    // clickOutsideNotOpen to fix confirm modal click cause drawer close    <Drawer      isOpen={isShow}      clickOutsideNotOpen={clickOutsideNotOpen}      onClose={onHide}      footer={null}      mask={isMobile || isShowMask}      positionCenter={positionCenter}      panelClassname={cn('mt-16 mx-2 sm:mr-2 mb-3 !p-0 rounded-xl', panelClassName, maxWidthClassName)}    >      <div        className={cn(contentClassName, 'w-full flex flex-col bg-white border-[0.5px] border-gray-200 rounded-xl shadow-xl')}        style={{          height,        }}        ref={ref}      >        <div className={cn(headerClassName, 'shrink-0 border-b border-b-gray-100 py-4')}>          <div className='flex justify-between items-center pl-6 pr-5 h-6'>            <div className='text-base font-semibold text-gray-900'>              {title}            </div>            <div className='flex items-center'>              <div                onClick={onHide}                className='flex justify-center items-center w-6 h-6 cursor-pointer'              >                <RiCloseLine className='w-4 h-4 text-gray-500' />              </div>            </div>          </div>          {titleDescription && (            <div className='pl-6 pr-10 leading-[18px] text-xs font-normal text-gray-500'>              {titleDescription}            </div>          )}        </div>        <div className='grow overflow-y-auto'>          {body}        </div>        {foot && (          <div className='shrink-0'>            {foot}          </div>        )}      </div>    </Drawer>  )}export default React.memo(DrawerPlus)
 |