CHZZK-Study / Grass-Diary-Client

취지직 2팀 프로젝트 Grass Diary
1 stars 3 forks source link

✨feat: 날짜와 상관없이 공개/비공개 설정 기능 구현 #228

Closed rkdcodus closed 2 days ago

rkdcodus commented 6 days ago

✅ 체크리스트

📝 작업 상세 내용

당일이 아니더라도 일기의 공개/비공개를 설정할 수 있는 기능이 추가되었습니다.

usePatchVisibility api 훅 생성

const fetchAxios = async (diaryId: Id) => {
  const res = await API.patch(END_POINT.visibility(diaryId));
  return res.data;
};

export const usePatchVisibility = (diaryId: Id, isPrivate?: boolean) => {
  const { toast } = useToast();
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: () => fetchAxios(diaryId),
    onSuccess: () => {
      toast(isPrivate ? '일기를 공개했어요' : '일기를 비공개했어요');
      queryClient.invalidateQueries({
        queryKey: ['get-diaryDetail'],
      });
    },
  });
};

DiaryDetail/Setting.tsx 내부

const Setting = ({ diaryId, createdDate, detail }: SettingProps) => {
...
  const { mutate: patchVisibility } = usePatchVisibility(
    diaryId,
    detail?.isPrivate,
  );

  const editVisibility = () => {
    if (detail) {
      const setting = {
        title: detail.isPrivate ? '일기 공개하기' : '일기 비공개하기',
        content: detail.isPrivate
          ? MODAL.visibility.public
          : MODAL.visibility.private,
      };

      const button1 = {
        active: true,
        text: MODAL.cancel,
      };

      const button2 = {
        active: true,
        text: detail.isPrivate ? '공개하기' : '비공개하기',
        clickHandler: patchVisibility,
        color: semantic.light.accent.solid.alternative,
        interaction: INTERACTION.accent.subtle(),
      };

      modal(setting, button1, button2);
    }
  };

 ...
  return (
    <Menus icon={more}>
      {detail && (
        <Menu
          onClick={editVisibility}
          text={detail.isPrivate ? '공개하기' : '비공개하기'}
          svg={detail.isPrivate ? lockOpen : lock}
        />
      )}
      ... 

2024-10-17 16;32;15

🚨 버그 발생 이유 (선택 사항)

🔎 후속 작업 (선택 사항)

🤔 질문 사항 (선택 사항)

📚 참고 자료 (선택 사항)

추가적인 참고 사항이나 관련된 문서, 링크 등을 제공해주세요.

📸 스크린샷 (선택 사항)

변경 사항에 대한 스크린샷이 있다면 첨부해주세요.

✅ 셀프 체크리스트

이슈 번호: