modulersYJ/ganoverflow-front

Bug & Todo: `continueChat` 상태에서 `saveChatModal` 진입 시 결정된 `defaultValue (title/category)` put요청에 안들어감

Closed this issue · 4 comments

defaultValue가 put요청에 기본으로 설정되어 보내지도록 기대했음.
But, saveChatModal의 각 input에 defaultValue는 설정되었으나, 이에 대한 수정 전혀 없이 제출 시, put요청에는 아무 값도 넣어지지 않은 것으로 처리됨.

같은 현상 확인했습니다
요거랑 몇까지 확인한뒤에 PR 머지하는게 좋을거같아요!

이거 원인파악 한거같아요

우선 defaultValue는 <input> 태그 안에서만 선언된 애니까, 요청 보내는 chatPostBody 변수와는 관련이 없습니다.
요청 보낼때 body에는 chatPostBody 변수가 들어가요.
이걸 까보니,

// app/chat/page.tsx
... 생략 ...
const chatPostBody = {
      chatpostName: titleAndCategory?.chatpostName, // <-- titleAndCategory state에서 가져옴. 그런데 [이어하기] 하면 이 state는 비어있음.
      categoryName: titleAndCategory?.category,
      chatPair: selectedPairs,
    };

    if (loadChatStatus.status === TLoadChatStatus.UPDATING) {
      const putChatPostBody = {
        ...chatPostBody,
        folderId: loadChatStatus.loadedMeta?.folderId,
      };
      console.log("putChatPostBody", putChatPostBody);

      await putChatPost(
        loadChatStatus.loadedMeta?.chatPostId,
        putChatPostBody,
        authData
      );

이렇게 돼있어요.
titleAndCategory의 초기값을 수정하게 되면, [채팅 이어하기] 뿐 아니라 [New Chat]에서도 뭔가 잘못되겠죠?

그러니까, put요청 보낼때에만 잘 넣어주면 될것 같아요. 그 값이 recoilValue 안에 들어있을까요?

@ABizCho

@hongregii
아! 확인 감사함다!
홍래님이 말씀해주신 내용 보고 코드 다시 확인해봤어요

결국 titleAndCategory는 onChange에 의해 변화되는 시점에서 관리되기 때문에,
saveChatModal에서 defaultValue를 가지고 별다른 수정을 하지 않으면 titleAndCategory의 default, ""를 그대로 넣게 되는거였군여

이를 기반으로, onClcikSaveChatpostExec 핸들러에서 UPDATING 조건을 탔을 때, (즉, put요청으로 빠지는 분기로직 내에서)

titleAndCategory의 메타값이 default인 "" 경우, loadChatStatus.loadedMeta에 저장해둔 로드된 메타정보를 그대로 넣어주도록 처리했어요!

그리고 이 처리 이후 제대로 작동하는 것을 확인했어요!
아래는 수정한 핸들러 모습이에요

chat/page.tsx 중 수정한 내용

  const onClickSaveChatpostExec = async (e: React.MouseEvent) => {
    const selectedPairs = chatPairs.filter((aPair) => {
      return aPair.isChecked === true;
    });
    const chatPostBody = {
      chatpostName: titleAndCategory?.chatpostName,
      categoryName: titleAndCategory?.category,
      chatPair: selectedPairs,
    };

    if (loadChatStatus.status === TLoadChatStatus.UPDATING) {
      const chatpostName =
        titleAndCategory?.chatpostName === ""
          ? loadChatStatus.loadedMeta?.title
          : titleAndCategory?.chatpostName;
      const categoryName =
        titleAndCategory?.category === ""
          ? loadChatStatus.loadedMeta?.category
          : titleAndCategory?.category;

      const putChatPostBody = {
        ...chatPostBody,
        chatpostName,
        categoryName,
        folderId: loadChatStatus.loadedMeta?.folderId,
      };
      console.log("putChatPostBody", putChatPostBody);

      await putChatPost(
        loadChatStatus.loadedMeta?.chatPostId,
        putChatPostBody,
        authData
      );

      setLoadChatStatus({ status: TLoadChatStatus.F, loadedMeta: undefined });
      setChatSavedStatus("T");
      return;
    }

    await sendChatPost(chatPostBody, authData);
    setChatSavedStatus("T");
    return;
  };

코드 상 별 이상한 점 없으시면 해당 내용은 다음 PR에 반영해두겠습니다!

네엡! 문제 없어 보입니다. 이슈 close 할게요