feat: Implement Separate temporary save data logic
This commit is contained in:
parent
7ae297f3b6
commit
67d587acf5
@ -77,6 +77,33 @@ const createKeywordSearchCondition = (keyword: string, searchOption: string): Wh
|
||||
return where
|
||||
}
|
||||
|
||||
const filterTempData = (data: any) => {
|
||||
const requiredFields = [
|
||||
'INSTALLATION_SYSTEM',
|
||||
'CONSTRUCTION_YEAR',
|
||||
'RAFTER_SIZE',
|
||||
'RAFTER_PITCH',
|
||||
'RAFTER_PITH_ETC',
|
||||
'WATERPROOF_MATERIAL',
|
||||
'INSULATION_PRESENCE',
|
||||
'STRUCTURE_ORDER',
|
||||
]
|
||||
|
||||
const where: WhereCondition = { AND: [] }
|
||||
|
||||
// 각 필드에 대해 OR 조건을 만들고, 전체를 AND로 묶음
|
||||
where.AND.push(
|
||||
...requiredFields.map((field: string) => ({
|
||||
OR: [
|
||||
{ [field]: { not: null } },
|
||||
{ [`${field}_ETC`]: { not: null } }
|
||||
]
|
||||
}))
|
||||
)
|
||||
|
||||
return where
|
||||
}
|
||||
|
||||
/**
|
||||
* 회원 역할별 검색 조건 생성 함수
|
||||
* @param params 검색 파라미터
|
||||
@ -128,6 +155,8 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
||||
break
|
||||
|
||||
case 'T01':
|
||||
where.AND.push(filterTempData(params))
|
||||
break
|
||||
case 'User':
|
||||
// 모든 매물 조회 가능 (추가 조건 없음)
|
||||
break
|
||||
@ -219,7 +248,7 @@ export async function PUT(request: Request) {
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(request: Request) {
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
const body = await request.json()
|
||||
console.log('body:: ', body)
|
||||
@ -232,9 +261,9 @@ export async function POST(request: Request) {
|
||||
data: {
|
||||
...convertToSnakeCase(basicInfo),
|
||||
DETAIL_INFO: {
|
||||
create: convertToSnakeCase(detailInfo)
|
||||
}
|
||||
}
|
||||
create: convertToSnakeCase(detailInfo),
|
||||
},
|
||||
},
|
||||
})
|
||||
console.log('result:: ', result)
|
||||
return NextResponse.json(result)
|
||||
|
||||
@ -10,6 +10,7 @@ export default function ButtonForm(props: {
|
||||
mode: Mode
|
||||
setMode: (mode: Mode) => void
|
||||
data: { basic: SurveyBasicRequest; roof: SurveyDetailRequest }
|
||||
isTemporarySave: boolean
|
||||
}) {
|
||||
// 라우터
|
||||
const router = useRouter()
|
||||
@ -23,7 +24,6 @@ export default function ButtonForm(props: {
|
||||
const routeId = params.id
|
||||
|
||||
// ------------------------------------------------------------
|
||||
const [isSubmitProcess, setIsSubmitProcess] = useState(false)
|
||||
const [saveData, setSaveData] = useState({
|
||||
...props.data.basic,
|
||||
detailInfo: props.data.roof,
|
||||
@ -55,12 +55,14 @@ export default function ButtonForm(props: {
|
||||
const { deleteSurvey, submitSurvey, updateSurvey } = useServey(Number(id))
|
||||
const { validateSurveyDetail, createSurvey } = useServey()
|
||||
|
||||
const handleSave = (isTemporary: boolean, isSubmitProcess?: boolean) => {
|
||||
const handleSave = (isTemporary: boolean, isSubmitProcess = false) => {
|
||||
const emptyField = validateSurveyDetail(props.data.roof)
|
||||
const hasEmptyField = emptyField?.trim() !== ''
|
||||
|
||||
if (isTemporary) {
|
||||
tempSaveProcess()
|
||||
hasEmptyField ? tempSaveProcess() : saveProcess(emptyField, false)
|
||||
} else {
|
||||
saveProcess(emptyField, isSubmitProcess ?? false)
|
||||
saveProcess(emptyField, isSubmitProcess)
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,6 +137,10 @@ export default function ButtonForm(props: {
|
||||
}
|
||||
|
||||
const handleSubmit = async () => {
|
||||
if (props.isTemporarySave) {
|
||||
alert('一時保存されたデータは提出できません。')
|
||||
return
|
||||
}
|
||||
window.neoConfirm('提出しますか?', async () => {
|
||||
if (Number(routeId)) {
|
||||
submitProcess()
|
||||
|
||||
@ -4,7 +4,6 @@ import { useServey } from '@/hooks/useSurvey'
|
||||
import { useParams, useSearchParams } from 'next/navigation'
|
||||
import { useEffect, useState } from 'react'
|
||||
import DetailForm from './DetailForm'
|
||||
import type { SurveyBasicInfo } from '@/types/Survey'
|
||||
|
||||
export default function DataTable() {
|
||||
const params = useParams()
|
||||
@ -14,19 +13,22 @@ export default function DataTable() {
|
||||
const isTemp = searchParams.get('isTemporary')
|
||||
|
||||
const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id))
|
||||
const [isTemporary, setIsTemporary] = useState(isTemp === 'true')
|
||||
const [isTemporarySave, setIsTemporarySave] = useState(isTemp === 'true')
|
||||
|
||||
const { validateSurveyDetail } = useServey(Number(id))
|
||||
|
||||
useEffect(() => {
|
||||
if (surveyDetail?.detailInfo) {
|
||||
const validate = validateSurveyDetail(surveyDetail.detailInfo)
|
||||
console.log('validate:: ', validate)
|
||||
if (validate.trim() !== '') {
|
||||
setIsTemporary(false)
|
||||
setIsTemporarySave(true)
|
||||
}
|
||||
}
|
||||
}, [surveyDetail])
|
||||
|
||||
console.log('isTemporarySave:: ', isTemporarySave)
|
||||
|
||||
if (isLoadingSurveyDetail) {
|
||||
return <div>Loading...</div>
|
||||
}
|
||||
@ -42,7 +44,7 @@ export default function DataTable() {
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>登録番号</th>
|
||||
{isTemporary ? (
|
||||
{isTemporarySave ? (
|
||||
<td>
|
||||
<span className="text-red-500">仮保存</span>
|
||||
</td>
|
||||
@ -83,7 +85,7 @@ export default function DataTable() {
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<DetailForm />
|
||||
<DetailForm isTemporarySave={isTemporarySave} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@ -60,13 +60,14 @@ const basicInfoForm: SurveyBasicRequest = {
|
||||
submissionDate: null,
|
||||
}
|
||||
|
||||
export default function DetailForm() {
|
||||
export default function DetailForm(props: { isTemporarySave: boolean }) {
|
||||
const { isTemporarySave } = props
|
||||
const idParam = useSearchParams().get('id')
|
||||
const routeId = useParams().id
|
||||
|
||||
const id = idParam ?? routeId
|
||||
|
||||
const { surveyDetail } = useServey(Number(id))
|
||||
const { surveyDetail, validateSurveyDetail } = useServey(Number(id))
|
||||
|
||||
const [mode, setMode] = useState<Mode>(idParam ? 'EDIT' : routeId ? 'READ' : 'CREATE')
|
||||
const [basicInfoData, setBasicInfoData] = useState<SurveyBasicRequest>(basicInfoForm)
|
||||
@ -79,21 +80,18 @@ export default function DetailForm() {
|
||||
if (detailInfo) {
|
||||
const { id, uptDt, regDt, basicInfoId, ...rest } = detailInfo
|
||||
setRoofInfoData(rest)
|
||||
if (validateSurveyDetail(rest).trim() !== '') {
|
||||
}
|
||||
}
|
||||
}
|
||||
}, [surveyDetail])
|
||||
|
||||
// console.log('mode:: ', mode)
|
||||
// console.log('surveyDetail:: ', surveyDetail)
|
||||
// console.log('basicInfoData:: ', basicInfoData)
|
||||
console.log('roofInfoData:: ', roofInfoData)
|
||||
|
||||
const data = {
|
||||
basic: basicInfoData,
|
||||
roof: roofInfoData,
|
||||
}
|
||||
|
||||
const buttonFormProps = { mode, setMode, data }
|
||||
const buttonFormProps = { mode, setMode, data, isTemporarySave }
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user