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
|
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 검색 파라미터
|
* @param params 검색 파라미터
|
||||||
@ -128,6 +155,8 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
|||||||
break
|
break
|
||||||
|
|
||||||
case 'T01':
|
case 'T01':
|
||||||
|
where.AND.push(filterTempData(params))
|
||||||
|
break
|
||||||
case 'User':
|
case 'User':
|
||||||
// 모든 매물 조회 가능 (추가 조건 없음)
|
// 모든 매물 조회 가능 (추가 조건 없음)
|
||||||
break
|
break
|
||||||
@ -219,7 +248,7 @@ export async function PUT(request: Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
try {
|
try {
|
||||||
const body = await request.json()
|
const body = await request.json()
|
||||||
console.log('body:: ', body)
|
console.log('body:: ', body)
|
||||||
@ -232,9 +261,9 @@ export async function POST(request: Request) {
|
|||||||
data: {
|
data: {
|
||||||
...convertToSnakeCase(basicInfo),
|
...convertToSnakeCase(basicInfo),
|
||||||
DETAIL_INFO: {
|
DETAIL_INFO: {
|
||||||
create: convertToSnakeCase(detailInfo)
|
create: convertToSnakeCase(detailInfo),
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
console.log('result:: ', result)
|
console.log('result:: ', result)
|
||||||
return NextResponse.json(result)
|
return NextResponse.json(result)
|
||||||
|
|||||||
@ -10,6 +10,7 @@ export default function ButtonForm(props: {
|
|||||||
mode: Mode
|
mode: Mode
|
||||||
setMode: (mode: Mode) => void
|
setMode: (mode: Mode) => void
|
||||||
data: { basic: SurveyBasicRequest; roof: SurveyDetailRequest }
|
data: { basic: SurveyBasicRequest; roof: SurveyDetailRequest }
|
||||||
|
isTemporarySave: boolean
|
||||||
}) {
|
}) {
|
||||||
// 라우터
|
// 라우터
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -23,7 +24,6 @@ export default function ButtonForm(props: {
|
|||||||
const routeId = params.id
|
const routeId = params.id
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
const [isSubmitProcess, setIsSubmitProcess] = useState(false)
|
|
||||||
const [saveData, setSaveData] = useState({
|
const [saveData, setSaveData] = useState({
|
||||||
...props.data.basic,
|
...props.data.basic,
|
||||||
detailInfo: props.data.roof,
|
detailInfo: props.data.roof,
|
||||||
@ -55,12 +55,14 @@ export default function ButtonForm(props: {
|
|||||||
const { deleteSurvey, submitSurvey, updateSurvey } = useServey(Number(id))
|
const { deleteSurvey, submitSurvey, updateSurvey } = useServey(Number(id))
|
||||||
const { validateSurveyDetail, createSurvey } = useServey()
|
const { validateSurveyDetail, createSurvey } = useServey()
|
||||||
|
|
||||||
const handleSave = (isTemporary: boolean, isSubmitProcess?: boolean) => {
|
const handleSave = (isTemporary: boolean, isSubmitProcess = false) => {
|
||||||
const emptyField = validateSurveyDetail(props.data.roof)
|
const emptyField = validateSurveyDetail(props.data.roof)
|
||||||
|
const hasEmptyField = emptyField?.trim() !== ''
|
||||||
|
|
||||||
if (isTemporary) {
|
if (isTemporary) {
|
||||||
tempSaveProcess()
|
hasEmptyField ? tempSaveProcess() : saveProcess(emptyField, false)
|
||||||
} else {
|
} else {
|
||||||
saveProcess(emptyField, isSubmitProcess ?? false)
|
saveProcess(emptyField, isSubmitProcess)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,6 +137,10 @@ export default function ButtonForm(props: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
|
if (props.isTemporarySave) {
|
||||||
|
alert('一時保存されたデータは提出できません。')
|
||||||
|
return
|
||||||
|
}
|
||||||
window.neoConfirm('提出しますか?', async () => {
|
window.neoConfirm('提出しますか?', async () => {
|
||||||
if (Number(routeId)) {
|
if (Number(routeId)) {
|
||||||
submitProcess()
|
submitProcess()
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import { useServey } from '@/hooks/useSurvey'
|
|||||||
import { useParams, useSearchParams } from 'next/navigation'
|
import { useParams, useSearchParams } from 'next/navigation'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import DetailForm from './DetailForm'
|
import DetailForm from './DetailForm'
|
||||||
import type { SurveyBasicInfo } from '@/types/Survey'
|
|
||||||
|
|
||||||
export default function DataTable() {
|
export default function DataTable() {
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
@ -14,19 +13,22 @@ export default function DataTable() {
|
|||||||
const isTemp = searchParams.get('isTemporary')
|
const isTemp = searchParams.get('isTemporary')
|
||||||
|
|
||||||
const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id))
|
const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id))
|
||||||
const [isTemporary, setIsTemporary] = useState(isTemp === 'true')
|
const [isTemporarySave, setIsTemporarySave] = useState(isTemp === 'true')
|
||||||
|
|
||||||
const { validateSurveyDetail } = useServey(Number(id))
|
const { validateSurveyDetail } = useServey(Number(id))
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (surveyDetail?.detailInfo) {
|
if (surveyDetail?.detailInfo) {
|
||||||
const validate = validateSurveyDetail(surveyDetail.detailInfo)
|
const validate = validateSurveyDetail(surveyDetail.detailInfo)
|
||||||
|
console.log('validate:: ', validate)
|
||||||
if (validate.trim() !== '') {
|
if (validate.trim() !== '') {
|
||||||
setIsTemporary(false)
|
setIsTemporarySave(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [surveyDetail])
|
}, [surveyDetail])
|
||||||
|
|
||||||
|
console.log('isTemporarySave:: ', isTemporarySave)
|
||||||
|
|
||||||
if (isLoadingSurveyDetail) {
|
if (isLoadingSurveyDetail) {
|
||||||
return <div>Loading...</div>
|
return <div>Loading...</div>
|
||||||
}
|
}
|
||||||
@ -42,7 +44,7 @@ export default function DataTable() {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th>登録番号</th>
|
<th>登録番号</th>
|
||||||
{isTemporary ? (
|
{isTemporarySave ? (
|
||||||
<td>
|
<td>
|
||||||
<span className="text-red-500">仮保存</span>
|
<span className="text-red-500">仮保存</span>
|
||||||
</td>
|
</td>
|
||||||
@ -83,7 +85,7 @@ export default function DataTable() {
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<DetailForm />
|
<DetailForm isTemporarySave={isTemporarySave} />
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,13 +60,14 @@ const basicInfoForm: SurveyBasicRequest = {
|
|||||||
submissionDate: null,
|
submissionDate: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function DetailForm() {
|
export default function DetailForm(props: { isTemporarySave: boolean }) {
|
||||||
|
const { isTemporarySave } = props
|
||||||
const idParam = useSearchParams().get('id')
|
const idParam = useSearchParams().get('id')
|
||||||
const routeId = useParams().id
|
const routeId = useParams().id
|
||||||
|
|
||||||
const id = idParam ?? routeId
|
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 [mode, setMode] = useState<Mode>(idParam ? 'EDIT' : routeId ? 'READ' : 'CREATE')
|
||||||
const [basicInfoData, setBasicInfoData] = useState<SurveyBasicRequest>(basicInfoForm)
|
const [basicInfoData, setBasicInfoData] = useState<SurveyBasicRequest>(basicInfoForm)
|
||||||
@ -79,21 +80,18 @@ export default function DetailForm() {
|
|||||||
if (detailInfo) {
|
if (detailInfo) {
|
||||||
const { id, uptDt, regDt, basicInfoId, ...rest } = detailInfo
|
const { id, uptDt, regDt, basicInfoId, ...rest } = detailInfo
|
||||||
setRoofInfoData(rest)
|
setRoofInfoData(rest)
|
||||||
|
if (validateSurveyDetail(rest).trim() !== '') {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [surveyDetail])
|
}, [surveyDetail])
|
||||||
|
|
||||||
// console.log('mode:: ', mode)
|
|
||||||
// console.log('surveyDetail:: ', surveyDetail)
|
|
||||||
// console.log('basicInfoData:: ', basicInfoData)
|
|
||||||
console.log('roofInfoData:: ', roofInfoData)
|
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
basic: basicInfoData,
|
basic: basicInfoData,
|
||||||
roof: roofInfoData,
|
roof: roofInfoData,
|
||||||
}
|
}
|
||||||
|
|
||||||
const buttonFormProps = { mode, setMode, data }
|
const buttonFormProps = { mode, setMode, data, isTemporarySave }
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user