qcast-front/src/hooks/useEstimate.js

83 lines
2.6 KiB
JavaScript

import { useContext } from 'react'
import { useRouter } from 'next/navigation'
import { useRecoilValue } from 'recoil'
import { useAxios } from '@/hooks/useAxios'
import { useSwal } from '@/hooks/useSwal'
import { GlobalDataContext } from '@/app/GlobalDataProvider'
import { QcastContext } from '@/app/QcastProvider'
import { currentCanvasPlanState } from '@/store/canvasAtom'
import { loginUserStore } from '@/store/commonAtom'
export function useEstimate() {
const { managementStateLoaded } = useContext(GlobalDataContext)
const { setIsGlobalLoading } = useContext(QcastContext)
const router = useRouter()
const loginUserState = useRecoilValue(loginUserStore)
const currentCanvasPlan = useRecoilValue(currentCanvasPlanState)
const { promisePost } = useAxios()
const { swalFire } = useSwal()
/**
* 도면 견적서 저장
*
* @param {Object} estimateParam - 견적서 저장 데이터
*/
const saveEstimate = async (estimateParam) => {
const userId = loginUserState.userId
const saleStoreId = managementStateLoaded.saleStoreId
const objectNo = currentCanvasPlan.objectNo
const planNo = currentCanvasPlan.planNo
const slope = estimateParam.roofSurfaceList[0].slope
const angle = estimateParam.roofSurfaceList[0].angle
const surfaceType = managementStateLoaded.surfaceType
const setupHeight = managementStateLoaded.installHeight
const standardWindSpeedId = managementStateLoaded.standardWindSpeedId
const snowfall = managementStateLoaded.verticalSnowCover
const drawingFlg = '1'
const saveEstimateData = {
...estimateParam,
userId: userId,
saleStoreId: saleStoreId,
objectNo: objectNo,
planNo: planNo,
slope: slope,
angle: angle,
surfaceType: surfaceType,
setupHeight: setupHeight,
standardWindSpeedId: standardWindSpeedId,
snowfall: snowfall,
drawingFlg: drawingFlg,
}
await promisePost({ url: '/api/estimate/save-estimate', data: saveEstimateData })
.then(async () => {
/* 견적서 저장이 완료되면 견적서 페이지로 이동 */
moveEstimate(planNo, objectNo)
})
.catch((error) => {
setIsGlobalLoading(false)
swalFire({ text: error.message, icon: 'error' })
})
}
/**
* 견적서 페이지로 이동
*
* @param {string} planNo - 플랜번호
* @param {string} objectNo - 물건번호
*/
const moveEstimate = (planNo, objectNo) => {
router.push(`/floor-plan/estimate/5?pid=${planNo}&objectNo=${objectNo}`)
}
return {
saveEstimate,
moveEstimate,
}
}