diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index c5ef64e..31c326c 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -97,12 +97,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { /** 저장 로직 */ const handleSave = (isTemporary: boolean) => { - const emptyField = validateSurveyDetail(data.roof) - if (isTemporary) { tempSaveProcess() } else { - saveProcess(emptyField) + saveProcess() } } @@ -134,7 +132,9 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { } /** 저장 로직 */ - const saveProcess = async (emptyField: string | null) => { + const saveProcess = async () => { + const emptyField = validateSurveyDetail(data.roof) + if (emptyField?.trim() === '') { showConfirm(CONFIRM_MESSAGE.SAVE_CONFIRM, async () => { await handleSuccessfulSave() diff --git a/src/hooks/useSurvey.ts b/src/hooks/useSurvey.ts index 28193d0..e61e42c 100644 --- a/src/hooks/useSurvey.ts +++ b/src/hooks/useSurvey.ts @@ -1,4 +1,11 @@ -import type { SubmitTargetResponse, SurveyBasicInfo, SurveyDetailRequest, SurveyRegistRequest } from '@/types/Survey' +import { + radioEtcData, + selectBoxOptions, + type SubmitTargetResponse, + type SurveyBasicInfo, + type SurveyDetailRequest, + type SurveyRegistRequest, +} from '@/types/Survey' import { useMemo } from 'react' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useSurveyFilterStore } from '@/store/surveyFilterStore' @@ -380,7 +387,7 @@ export function useSurvey( }) /** - * @description 조사 매물 상세 데이터 유효성 검사 + * @description 조사 매물 상세 데이터 필수값 검증 * * @param {SurveyDetailRequest} surveyDetail 검사할 조사 매물 상세 데이터 * @returns {string} 빈 필드 이름 또는 빈 문자열 @@ -395,15 +402,25 @@ export function useSurvey( } const checkRequiredField = (field: string): string => { + /** 기타 (직접입력) 항목이 있는 필드 체크 */ if (ETC_FIELDS.includes(field as (typeof ETC_FIELDS)[number])) { + /** 기타 (직접입력) 항목이 비어있거나 값 선택/입력을 하지 않은 경우 해당 필드 반환 */ if ( isEmptyValue(surveyDetail[field as keyof SurveyDetailRequest]) && isEmptyValue(surveyDetail[`${field}Etc` as keyof SurveyDetailRequest]) ) { return field } + /** 직접입력 필드가 기타 선택이 아닌 필드 체크 - 건축연수, 단열재 유무 + * 건축연수 필드가 기축(O) 선택이고 직접입력 필드가 비어있거나 값 선택/입력을 하지 않은 경우 해당 필드 반환 + * 단열재 유무 필드가 2(있음) 선택이고 직접입력 필드가 비어있거나 값 선택/입력을 하지 않은 경우 해당 필드 반환 + */ } else if (SPECIAL_CONDITIONS.includes(field as (typeof SPECIAL_CONDITIONS)[number])) { - if (surveyDetail[field as keyof SurveyDetailRequest] === '2' && isEmptyValue(surveyDetail[`${field}Etc` as keyof SurveyDetailRequest])) { + if ( + (surveyDetail.constructionYear === selectBoxOptions.constructionYear[1].code && isEmptyValue(surveyDetail.constructionYearEtc)) || + (surveyDetail.insulationPresence === '2' && isEmptyValue(surveyDetail.insulationPresenceEtc)) + ) { + /** 건축연수, 단열재 유무 필드가 비어있거나 값 선택/입력을 하지 않은 경우 해당 필드 반환 */ return `${field}Etc` } else if (isEmptyValue(surveyDetail[field as keyof SurveyDetailRequest])) { return field