All files / src/components/pages/group/group-modal/common-content index.tsx

0% Statements 0/55
0% Branches 0/1
0% Functions 0/1
0% Lines 0/55

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                                                                               
'use client';

import { Button } from '@/components/ui';
import { ModalDescription, ModalTitle } from '@/components/ui/modal';
import { useModal } from '@/components/ui/modal';
import { GetGroupDetailsResponse, KickGroupMemberResponse } from '@/types/service/group';

interface Props {
  modalContent: {
    title: string;
    description: string;
    confirmMessage: string;
  };
  isPending: boolean;
  // 모임 삭제 API는 반환값이 없음 그래서 -> 유니온 void 적용
  onConfirmClick: () => Promise<GetGroupDetailsResponse | KickGroupMemberResponse | void>;
}

export const GroupModalCommonContent = ({
  modalContent: { title, description, confirmMessage },
  isPending,
  onConfirmClick,
}: Props) => {
  const { close } = useModal();

  const handleConfirmClick = async () => {
    await onConfirmClick();
    close();
  };

  return (
    <>
      <ModalTitle className='pt-8 text-center break-keep'>{title}</ModalTitle>
      <ModalDescription className='text-center break-keep'>{description}</ModalDescription>
      <div className='mt-6 flex gap-2'>
        <Button
          className='!text-text-sm-semibold w-[50%]'
          size='sm'
          variant='tertiary'
          onClick={close}
        >
          취소
        </Button>
        <Button
          className='!text-text-sm-bold w-[50%]'
          disabled={isPending}
          size='sm'
          onClick={handleConfirmClick}
        >
          {isPending ? '로딩중...' : confirmMessage}
        </Button>
      </div>
    </>
  );
};