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 안에 들어있을까요?
@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 할게요