LocalStorage -> API 변경

This commit is contained in:
김민식 2025-04-22 17:09:18 +09:00
parent 11a7061e0a
commit 028fa7f9bf
5 changed files with 74 additions and 83 deletions

View File

@ -1,21 +1,13 @@
'use client' 'use client'
import { createContext, useEffect, useState } from 'react' import { createContext, useState } from 'react'
import { useLocalStorage } from 'usehooks-ts'
export const GlobalDataContext = createContext(null) export const GlobalDataContext = createContext(null)
const GlobalDataProvider = ({ children }) => { const GlobalDataProvider = ({ children }) => {
const [managementState, setManagementState] = useState(null) const [managementState, setManagementState] = useState(null)
const [managementStateLoaded, setManagementStateLoaded] = useLocalStorage('managementStateLoaded', null)
useEffect(() => { return <GlobalDataContext.Provider value={{ managementState, setManagementState }}>{children}</GlobalDataContext.Provider>
if (managementState !== null) {
setManagementStateLoaded(managementState)
}
}, [managementState])
return <GlobalDataContext.Provider value={{ managementState, setManagementState, managementStateLoaded }}>{children}</GlobalDataContext.Provider>
} }
export default GlobalDataProvider export default GlobalDataProvider

View File

@ -1,15 +1,18 @@
'use client' 'use client'
import { useEffect } from 'react' import { useContext, useEffect } from 'react'
import CanvasMenu from '@/components/floor-plan/CanvasMenu' import CanvasMenu from '@/components/floor-plan/CanvasMenu'
import { useCanvasMenu } from '@/hooks/common/useCanvasMenu' import { useCanvasMenu } from '@/hooks/common/useCanvasMenu'
import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
import { usePopup } from '@/hooks/usePopup' import { usePopup } from '@/hooks/usePopup'
import '@/styles/contents.scss' import '@/styles/contents.scss'
import { notFound, useSearchParams } from 'next/navigation' import { notFound, useSearchParams } from 'next/navigation'
import { useRecoilState, useResetRecoilState } from 'recoil' import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil'
import { correntObjectNoState } from '@/store/settingAtom' import { correntObjectNoState } from '@/store/settingAtom'
import { currentMenuState } from '@/store/canvasAtom' import { currentMenuState } from '@/store/canvasAtom'
import { globalLocaleStore } from '@/store/localeAtom'
import { useAxios } from '@/hooks/useAxios'
import { GlobalDataContext } from '@/app/GlobalDataProvider'
export default function FloorPlan({ children }) { export default function FloorPlan({ children }) {
const [correntObjectNo, setCurrentObjectNo] = useRecoilState(correntObjectNoState) const [correntObjectNo, setCurrentObjectNo] = useRecoilState(correntObjectNoState)
@ -20,12 +23,39 @@ export default function FloorPlan({ children }) {
const { selectedMenu, setSelectedMenu } = useCanvasMenu() const { selectedMenu, setSelectedMenu } = useCanvasMenu()
const { fetchSettings } = useCanvasSetting() const { fetchSettings } = useCanvasSetting()
const resetCurrentMenu = useResetRecoilState(currentMenuState) const resetCurrentMenu = useResetRecoilState(currentMenuState)
const globalLocaleState = useRecoilValue(globalLocaleStore)
const { promiseGet } = useAxios(globalLocaleState)
const { setManagementState } = useContext(GlobalDataContext)
useEffect(() => { useEffect(() => {
getStuffDetailInfo()
return () => { return () => {
resetCurrentMenu() resetCurrentMenu()
} }
}, []) }, [])
const getStuffDetailInfo = () => {
promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => {
if (res.status === 200) {
const { data } = res
console.log(data)
let surfaceTypeValue
if (res.data.surfaceType === 'Ⅲ・Ⅳ') {
surfaceTypeValue = '3'
} else if (res.data.surfaceType === 'Ⅱ') {
surfaceTypeValue = '2'
}
// 0
if (res.data.installHeight === '0') {
res.data.installHeight = ''
}
setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue })
}
})
}
/** /**
* URL 파라미터에서 objectNo 설정 * URL 파라미터에서 objectNo 설정
*/ */

View File

@ -48,7 +48,6 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
const [manualSetupMode, setManualSetupMode] = useRecoilState(toggleManualSetupModeState) const [manualSetupMode, setManualSetupMode] = useRecoilState(toggleManualSetupModeState)
const [layoutSetup, setLayoutSetup] = useState([{}]) const [layoutSetup, setLayoutSetup] = useState([{}])
const { const {
moduleSelectionInitParams,
selectedModules, selectedModules,
roughnessCodes, roughnessCodes,
windSpeedCodes, windSpeedCodes,
@ -241,7 +240,6 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
setTabNum, setTabNum,
compasDeg, // compasDeg, //
setCompasDeg, setCompasDeg,
moduleSelectionInitParams,
selectedModules, selectedModules,
moduleSelectionData, moduleSelectionData,
setModuleSelectionData, setModuleSelectionData,

View File

@ -23,7 +23,6 @@ export const Orientation = forwardRef((props, ref) => {
setTabNum, setTabNum,
compasDeg, compasDeg,
setCompasDeg, setCompasDeg,
moduleSelectionInitParams,
selectedModules, selectedModules,
roughnessCodes, roughnessCodes,
windSpeedCodes, windSpeedCodes,

View File

@ -3,7 +3,7 @@ import { useContext, useEffect, useState } from 'react'
import { GlobalDataContext } from '@/app/GlobalDataProvider' import { GlobalDataContext } from '@/app/GlobalDataProvider'
import { useMasterController } from '@/hooks/common/useMasterController' import { useMasterController } from '@/hooks/common/useMasterController'
import { useCommonCode } from '@/hooks/common/useCommonCode' import { useCommonCode } from '@/hooks/common/useCommonCode'
import { selectedModuleState, moduleSelectionInitParamsState, moduleSelectionDataState } from '@/store/selectedModuleOptions' import { selectedModuleState, moduleSelectionDataState } from '@/store/selectedModuleOptions'
import { isObjectNotEmpty } from '@/util/common-utils' import { isObjectNotEmpty } from '@/util/common-utils'
import { canvasState } from '@/store/canvasAtom' import { canvasState } from '@/store/canvasAtom'
import { POLYGON_TYPE } from '@/common/common' import { POLYGON_TYPE } from '@/common/common'
@ -12,7 +12,7 @@ import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting'
export function useModuleSelection(props) { export function useModuleSelection(props) {
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState } = useContext(GlobalDataContext)
const [roughnessCodes, setRoughnessCodes] = useState([]) //면조도 목록 const [roughnessCodes, setRoughnessCodes] = useState([]) //면조도 목록
const [windSpeedCodes, setWindSpeedCodes] = useState([]) //기준풍속 목록 const [windSpeedCodes, setWindSpeedCodes] = useState([]) //기준풍속 목록
const [moduleList, setModuleList] = useState([{}]) //모듈 목록 const [moduleList, setModuleList] = useState([{}]) //모듈 목록
@ -21,8 +21,8 @@ export function useModuleSelection(props) {
const [standardWindSpeed, setStandardWindSpeed] = useState() //기준풍속 const [standardWindSpeed, setStandardWindSpeed] = useState() //기준풍속
const [verticalSnowCover, setVerticalSnowCover] = useState(managementState?.verticalSnowCover) //수직적설량 const [verticalSnowCover, setVerticalSnowCover] = useState(managementState?.verticalSnowCover) //수직적설량
const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) //선택된 모듈 const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) //선택된 모듈
const [margin, setMargin] = useState(100)
const [moduleSelectionInitParams, setModuleSelectionInitParams] = useRecoilState(moduleSelectionInitParamsState) //모듈 기본 데이터 ex) 면조도, 높이등등 // const [moduleSelectionInitParams, setModuleSelectionInitParams] = useRecoilState(moduleSelectionInitParamsState) //모듈 기본 데이터 ex) 면조도, 높이등등
const { getModuleTypeItemList } = useMasterController() const { getModuleTypeItemList } = useMasterController()
const { findCommonCode } = useCommonCode() const { findCommonCode } = useCommonCode()
const resetStatisticsData = useResetRecoilState(moduleStatisticsState) const resetStatisticsData = useResetRecoilState(moduleStatisticsState)
@ -40,21 +40,21 @@ export function useModuleSelection(props) {
//탭별 파라메터 초기화 //탭별 파라메터 초기화
useEffect(() => { useEffect(() => {
bindInitData() bindInitData()
const initParams = { // const initParams = {
illuminationTp: managementState?.surfaceTypeValue, //면조도 // illuminationTp: managementState?.surfaceTypeValue, //면조도
illuminationTpNm: managementState?.surfaceType, //면조도명 // illuminationTpNm: managementState?.surfaceType, //면조도명
instHt: managementState?.installHeight, //설치높이 // instHt: managementState?.installHeight, //설치높이
stdWindSpeed: managementState?.standardWindSpeedId, //기준풍속 // stdWindSpeed: managementState?.standardWindSpeedId, //기준풍속
stdSnowLd: managementState?.verticalSnowCover, //기준적설량 // stdSnowLd: managementState?.verticalSnowCover, //기준적설량
saleStoreNorthFlg: managementState?.saleStoreNorthFlg, //북쪽 설치 여부 // saleStoreNorthFlg: managementState?.saleStoreNorthFlg, //북쪽 설치 여부
} // }
if (selectedModules) { // if (selectedModules) {
initParams.moduleTpCd = selectedModules.itemTp // initParams.moduleTpCd = selectedModules.itemTp
initParams.moduleItemId = selectedModules.itemId // initParams.moduleItemId = selectedModules.itemId
} // }
setModuleSelectionInitParams(initParams) // setModuleSelectionInitParams(initParams)
}, [managementState]) }, [managementState])
useEffect(() => { useEffect(() => {
@ -122,19 +122,19 @@ export function useModuleSelection(props) {
setSelectedModules(option) //선택값 저장 setSelectedModules(option) //선택값 저장
//init 데이터에 선택된 모듈 추가 //init 데이터에 선택된 모듈 추가
setModuleSelectionInitParams({ // setModuleSelectionInitParams({
...moduleSelectionInitParams, // ...moduleSelectionInitParams,
moduleTpCd: option.itemTp, // moduleTpCd: option.itemTp,
moduleItemId: option.itemId, // moduleItemId: option.itemId,
}) // })
} }
const handleChangeSurfaceType = (option) => { const handleChangeSurfaceType = (option) => {
setModuleSelectionInitParams({ // setModuleSelectionInitParams({
...moduleSelectionInitParams, // ...moduleSelectionInitParams,
illuminationTp: option.clCode, // illuminationTp: option.clCode,
illuminationTpNm: option.clCodeNm, // illuminationTpNm: option.clCodeNm,
}) // })
setManagementState({ setManagementState({
...managementState, ...managementState,
@ -144,10 +144,10 @@ export function useModuleSelection(props) {
} }
const handleChangeWindSpeed = (option) => { const handleChangeWindSpeed = (option) => {
setModuleSelectionInitParams({ // setModuleSelectionInitParams({
...moduleSelectionInitParams, // ...moduleSelectionInitParams,
stdWindSpeed: option.clCode, // stdWindSpeed: option.clCode,
}) // })
setManagementState({ setManagementState({
...managementState, ...managementState,
@ -157,10 +157,10 @@ export function useModuleSelection(props) {
const handleChangeInstallHeight = (option) => { const handleChangeInstallHeight = (option) => {
setInstallHeight(option) setInstallHeight(option)
setModuleSelectionInitParams({ // setModuleSelectionInitParams({
...moduleSelectionInitParams, // ...moduleSelectionInitParams,
instHt: option, // instHt: option,
}) // })
setManagementState({ setManagementState({
...managementState, ...managementState,
@ -170,10 +170,10 @@ export function useModuleSelection(props) {
const handleChangeVerticalSnowCover = (option) => { const handleChangeVerticalSnowCover = (option) => {
setVerticalSnowCover(option) setVerticalSnowCover(option)
setModuleSelectionInitParams({ // setModuleSelectionInitParams({
...moduleSelectionInitParams, // ...moduleSelectionInitParams,
stdSnowLd: option, // stdSnowLd: option,
}) // })
setManagementState({ setManagementState({
...managementState, ...managementState,
@ -181,36 +181,8 @@ export function useModuleSelection(props) {
}) })
} }
//TODO: 설치높이, 기준적설량 debounce 적용해서 추가해야됨
// useEffect(() => {
// getConstructionListData(constructionListParams)
// }, [constructionListParams])
// const getConstructionListData = async (params) => {
// if (params.trestleMkrCd && params.constMthdCd && params.roofBaseCd) {
// const optionsList = await getConstructionList(params)
// console.log('optionsList', optionsList)
// setConstructionList(optionsList.data)
// }
// }
//state 배열에 데이터 추가 함수
// const addRoofTabParams = (key, value, excludeArray = []) => {
// const index = roofTabParams.findIndex((obj) => obj.roofTab === roofTab)
// if (index !== -1) {
// roofTabParams[index][key] = value
// if (excludeArray.length > 0) {
// excludeArray.forEach((exclude) => {
// roofTabParams[index][exclude] = ''
// })
// }
// setRoofTabParams((prev) => [...prev.slice(0, index), roofTabParams[index], ...prev.slice(index + 1)])
// }
// }
return { return {
moduleSelectionInitParams, // moduleSelectionInitParams,
selectedModules, selectedModules,
roughnessCodes, roughnessCodes,
windSpeedCodes, windSpeedCodes,