useRegister 훅 구현

export const useRegister = (): UseMutationResult<RegisterResponse, AxiosError, RegisterRequest> => {
  return useMutation<RegisterResponse, AxiosError, RegisterRequest>({
    mutationFn: postRegister, // postRegister 함수는 RegisterRequest를 받아 RegisterResponse를 반환
  });
};

API 관리 구조 정리

auth
├── mutations
│   └── useRegister.tsx
├── path.ts
└── types
    ├── request.ts
    └── response.ts
// @features/auth/SignUp/components/common/RoleSelector

...
import { roleConfig } from './index.config';
import useModals from '@components/common/Modal/hooks/useModals';
import { modals } from '@/components/common/Modal/Modals';
import { useRegister } from '@/apis/auth/mutations/useRegister';

type Props = {
  role: 'employer' | 'employee';
};

export default function RoleSelector({ role }: Props) {
  const navigate = useNavigate();
  const { openModal } = useModals();
  const { mutate } = useRegister();

  const handleRegister = () => {
    mutate(
      { type: role },
      {
        onSuccess: () => {
          handleOpenModal();
        },
      },
    );
  };

  const handleOpenModal = () =>
    openModal(modals.roleModal, {
      content: roleConfig[role].modalContent,
      onSubmit: () => navigate(roleConfig[role].toNavigate),
      onClose: () => navigate(ROUTE_PATH.HOME),
    });

  return (
    <Card borderColor="blue" borderRadius="12px" css={[bounceAnimation, cardStyle]} onClick={handleRegister}>
      <Flex direction="column" alignItems="center">
        <div css={iconStyle}>{roleConfig[role].icon}</div>
        <Typo element="h2" color="blue" size="18px" bold>
          {roleConfig[role].text}
        </Typo>
      </Flex>
    </Card>
  );
}