import { forwardRef, useEffect, useState } from 'react' import { useMessage } from '@/hooks/useMessage' import { useModuleBasicSetting } from '@/hooks/module/useModuleBasicSetting' import { checkedModuleState, isManualModuleLayoutSetupState, isManualModuleSetupState, moduleRowColArrayState, moduleSetupOptionState, toggleManualSetupModeState, } from '@/store/canvasAtom' import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { isObjectNotEmpty } from '@/util/common-utils' const Placement = forwardRef((props, refs) => { const { getMessage } = useMessage() const [useTab, setUseTab] = useState(true) const [isChidoriNotAble, setIsChidoriNotAble] = useState(false) const [selectedItems, setSelectedItems] = useState({}) const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) const setCheckedModules = useSetRecoilState(checkedModuleState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) const { makeModuleInitArea, roofOutlineColor } = useModuleBasicSetting(3) const [isMultiModule, setIsMultiModule] = useState(false) //언마운트시 버튼 초기화 const setIsManualModuleSetup = useSetRecoilState(isManualModuleSetupState) const setIsManualModuleLayoutSetup = useSetRecoilState(isManualModuleLayoutSetupState) const setManualSetupMode = useSetRecoilState(toggleManualSetupModeState) const [moduleSetupOption, setModuleSetupOption] = useRecoilState(moduleSetupOptionState) //모듈 설치 옵션 const resetModuleSetupOption = useResetRecoilState(moduleSetupOptionState) const [colspan, setColspan] = useState(1) const [moduleRowColArray, setModuleRowColArray] = useRecoilState(moduleRowColArrayState) //모듈 배치면 생성 useEffect(() => { if (moduleSelectionData) { //1개라도 치도리 불가가 있으면 치도리 불가 const isChidroriValue = moduleSelectionData.roofConstructions.some((item) => item.construction.plvrYn === 'N') if (isChidroriValue) { setIsChidoriNotAble(true) } makeModuleInitArea(moduleSelectionData) } if (moduleSelectionData.module.itemList.length > 1) { setColspan(2) } return () => { // refs.isChidori.current = 'false' // refs.setupLocation.current = 'eaves' setIsManualModuleSetup(false) setIsManualModuleLayoutSetup(false) setManualSetupMode('off') resetModuleSetupOption() } }, []) // useEffect(() => { // console.log('moduleRowColArray', moduleRowColArray) // }, [moduleRowColArray]) //최초 지입시 체크 useEffect(() => { if (isObjectNotEmpty(moduleSelectionData)) { //두번째 선택한 데이터가를 기반으로 세번째 선택을 체크한다 if (moduleSelectionData.roofConstructions.length > 0 && moduleSelectionData.module.itemList.length > 0) { let initCheckedModule = {} moduleSelectionData.module.itemList.forEach((obj, index) => { if (index === 0) { initCheckedModule = { [obj.itemId]: true } } else { initCheckedModule = { ...initCheckedModule, [obj.itemId]: true } } }) setSelectedItems(initCheckedModule) setSelectedModules(moduleSelectionData.module) props.setLayoutSetup(moduleSelectionData.module.itemList.map((item) => ({ moduleId: item.itemId, col: 0, row: 0, checked: true }))) } //모듈 배치면 생성 if (isObjectNotEmpty(moduleSelectionData.module) && moduleSelectionData.module.itemList.length > 1) { setIsMultiModule(true) } } }, [moduleSelectionData]) //체크된 모듈 데이터 useEffect(() => { if (isObjectNotEmpty(selectedItems) && isObjectNotEmpty(selectedModules)) { const checkedModuleIds = Object.keys(selectedItems).filter((key) => selectedItems[key]) const moduleArray = selectedModules.itemList.filter((item) => { return checkedModuleIds.includes(item.itemId) }) setCheckedModules(moduleArray) } }, [selectedItems, selectedModules]) const moduleData = { header: [ { type: 'check', name: '', prop: 'check', width: 70 }, { type: 'color-box', name: getMessage('module'), prop: 'module' }, { type: 'text', name: getMessage('modal.module.basic.setting.module.placement.mix.asg.yn'), prop: 'mixAsgYn', width: 50 }, { type: 'text', name: `段数`, prop: 'rows', width: 60 }, { type: 'text', name: `列数`, prop: 'cols', width: 60 }, ], rows: [], } const handleChangeChidori = (e) => { const bool = e.target.value === 'true' ? true : false setModuleSetupOption({ ...moduleSetupOption, isChidori: bool }) //변경하면 수동 다 꺼짐 setIsManualModuleSetup(false) setIsManualModuleLayoutSetup(false) setManualSetupMode('off') } const handleSetupLocation = (e) => { setModuleSetupOption({ ...moduleSetupOption, setupLocation: e.target.value }) //변경하면 수동 다 꺼짐 setIsManualModuleSetup(false) setIsManualModuleLayoutSetup(false) setManualSetupMode('off') } //체크된 모듈 아이디 추출 const handleSelectedItem = (e, itemId) => { setSelectedItems({ ...selectedItems, [e.target.name]: e.target.checked }) const newLayoutSetup = [...props.layoutSetup] props.layoutSetup.forEach((item, index) => { if (item.moduleId === itemId) { newLayoutSetup[index] = { ...props.layoutSetup[index], checked: e.target.checked } } }) props.setLayoutSetup(newLayoutSetup) } const handleLayoutSetup = (e, itemId, index) => { const newLayoutSetup = [...props.layoutSetup] newLayoutSetup[index] = { ...newLayoutSetup[index], moduleId: itemId, [e.target.name]: Number(e.target.value), } props.setLayoutSetup(newLayoutSetup) } return ( <>
{moduleData.header.map((data) => ( ))} {selectedModules.itemList && selectedModules.itemList.map((item, index) => ( ))}
{data.type === 'check' ? (
) : ( data.name )}
handleSelectedItem(e, item.itemId)} />
{item.itemNm}
{item.mixAsgYn}
handleLayoutSetup(e, item.itemId, index)} />
handleLayoutSetup(e, item.itemId, index)} />
{getMessage('modal.module.basic.setting.module.placement.waterfowl.arrangement')} {getMessage('modal.module.basic.setting.module.placement.arrangement.standard')}
handleChangeChidori(e)} />
handleChangeChidori(e)} />
{getMessage('modal.module.basic.setting.module.placement.max.size.check')}
{selectedModules && selectedModules.itemList.map((item) => ( ))} {selectedModules.itemList.map((item) => ( <> {colspan > 1 && } ))} {moduleSelectionData.roofConstructions.map((item, index) => ( {moduleRowColArray[index]?.map((item) => ( <> {colspan > 1 && } ))} ))}
{item.itemNm}
{getMessage('modal.module.basic.setting.module.placement.max.row')}{getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')}
{item.addRoof?.roofMatlNmJp}
{item.moduleMaxRows}{item.mixModuleMaxRows}
) }) export default Placement