import { GlobalDataContext } from '@/app/GlobalDataProvider' import QSelectBox from '@/components/common/select/QSelectBox' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { useMasterController } from '@/hooks/common/useMasterController' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { pcsCheckState } from '@/store/circuitTrestleAtom' import { globalLocaleStore } from '@/store/localeAtom' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { isNullOrUndefined } from '@/util/common-utils' import { useContext, useEffect, useState } from 'react' import { useRecoilState } from 'recoil' import { useRecoilValue } from 'recoil' import { v4 as uuidv4 } from 'uuid' export const PCS_MKR_MULTI_TYPE = { MULTI: 'MULTI', SINGLE_P: 'SINGLE-P', SINGLE_N: 'SINGLE-N', } export default function PowerConditionalSelect(props) { let { tabNum, setTabNum, makers, setMakers, selectedMaker, setSelectedMaker, series, setSeries, models, setModels, selectedModels, setSelectedModels, managementState, getUseModuleItemList, } = props const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) const { getMessage } = useMessage() const [selectedRow, setSelectedRow] = useState(null) const globalLocale = useRecoilValue(globalLocaleStore) const { getPcsMakerList, getPcsModelList } = useMasterController() const selectedModules = useRecoilValue(selectedModuleState) const { swalFire } = useSwal() const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2) const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState) const modelHeader = [ { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.series'), width: '15%', prop: 'pcsSerNm', type: 'color-box' }, { name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.name'), width: '15%', prop: 'goodsNo', type: 'color-box' }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.rated.output')} (kW)`, width: '10%', prop: 'ratedCapa', }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.circuit.amount')}`, width: '10%', prop: 'paralMax', }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.max.connection')}`, width: '10%', prop: 'moduleStdQty', }, { name: `${getMessage('modal.circuit.trestle.setting.power.conditional.select.max.overload')}`, width: '10%', prop: 'moduleMaxQty', }, ] useEffect(() => { if (makers.length === 0) { getPcsMakerList().then((res) => { setMakers(res.data) }) } }, []) const onCheckSeries = (data) => { let copySeries = [] if (data.pcsMkrMultiType === PCS_MKR_MULTI_TYPE.MULTI) { copySeries = series.map((s) => { return { ...s, selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : s.selected, } }) } else if (data.pcsMkrMultiType === PCS_MKR_MULTI_TYPE.SINGLE_P) { if (series.filter((s) => s.selected).length === 0 && data.pcsSerParallelYn === 'Y') { swalFire({ title: getMessage('modal.module.pcs.error1'), icon: 'warning', }) return } copySeries = series.map((s) => { return { ...s, selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : data.pcsSerParallelYn === 'Y' ? s.selected : false, } }) } else { copySeries = series.map((s) => { return { ...s, selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : false, } }) } setSeries(copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } const handleSetmodels = (selectedSeries) => { if (selectedSeries.length === 0) { setModels([]) setSelectedModels([]) return } const pcsMkrCd = selectedSeries[0]?.pcsMkrCd const pcsSerList = selectedSeries.map((series) => { return { pcsSerCd: series.pcsSerCd } }) const moduleItemList = moduleSelectionData.module.itemList.map((item) => { return { itemId: item.itemId, mixMatlNo: item.mixMatlNo, } }) getPcsModelList({ pcsMkrCd, pcsSerList, moduleItemList }).then((res) => { if (res?.result.code === 200 && res?.data) { setModels( res.data.map((model) => { return { ...model, moduleStdQty: parseInt(model.moduleStdQty), moduleMaxQty: parseInt(model.moduleMaxQty), code: uuidv4(), } }), ) } else { setModels([]) setSelectedModels([]) } }) } const onAddSelectedModel = () => { if (selectedRow === null) return if (selectedModels.length === 3) { swalFire({ title: getMessage('max.select', [3]), icon: 'warning', }) return } if (selectedModels.find((m) => m.pcsSerParallelYn === 'Y') && selectedRow.pcsSerParallelYn === 'Y') { return } if (selectedRow.pcsSerParallelYn === 'Y' && selectedModels.length === 0 && selectedMaker.pcsMkrMultiType === PCS_MKR_MULTI_TYPE.SINGLE_P) { swalFire({ title: getMessage('modal.module.pcs.error1'), icon: 'warning', }) return } if (selectedMaker.pcsMkrMultiType === PCS_MKR_MULTI_TYPE.MULTI) { setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4() }]) } else if (!selectedModels.find((m) => m.itemId === selectedRow.itemId)) { setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4() }]) } setSelectedRow(null) } const onRemoveSelectedModel = (model) => { const tempModels = selectedModels.filter((m) => m.id !== model.id) if (tempModels.length === 1 && tempModels[0].pcsSerParallelYn === 'Y') { setSelectedModels([]) return } setSelectedModels(selectedModels.filter((m) => m.id !== model.id)) } const onChangeMaker = (option) => { if (option) { setModels([]) setSelectedModels([]) setSelectedMaker(option) const param = { pcsMkrCd: option.pcsMkrCd, mixMatlNo: moduleSelectionData.module.mixMatlNo, } getPcsMakerList(param).then((res) => { setSeries( res.data.map((series) => { return { ...series, selected: false } }), ) }) } } return ( <>
{getMessage('common.type')} ({getMessage(managementState?.conType === '0' ? 'stuff.detail.conType0' : 'stuff.detail.conType1')})
onChangeMaker(option)} />
{managementState?.coldRegionFlg === '1' && ( {getMessage('modal.circuit.trestle.setting.power.conditional.select.cold.region')} )}
{series?.map((series, index) => (
onCheckSeries(series)} checked={series.selected} />
))}
{modelHeader.map((header) => ( ))} {models?.map((model, index) => ( setSelectedRow(model)} className={model === selectedRow ? 'on' : ''}> {modelHeader.map((header, index) => ( ))} ))}
{header.name}
{model[header.prop]}
{selectedModels?.map((model, index) => ( {model.goodsNo} ))}
setPcsCheck({ ...pcsCheck, division: !pcsCheck.division })} />
setPcsCheck({ ...pcsCheck, max: !pcsCheck.max })} />
) }