import { GlobalDataContext } from '@/app/GlobalDataProvider' import QSelectBox from '@/components/common/select/QSelectBox' 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 { 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 default function PowerConditionalSelect(props) { let { tabNum, setTabNum, makers, setMakers, selectedMaker, setSelectedMaker, series, setSeries, models, setModels, selectedModels, setSelectedModels, managementState, } = 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 modelHeader = [ { name: getMessage('시리즈'), width: '15%', prop: 'pcsSerNm', type: 'color-box' }, { name: getMessage('명칭'), width: '15%', prop: 'itemNm', 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 checkValidation = () => { const checkedSeries = series.filter((s) => s.selected) if (checkedSeries.length === 0) { swalFire({ title: 'PCS 시리즈를 선택해 주세요.', icon: 'warning', }) return false } else if (checkedSeries.length === 1) { if (checkedSeries[0].pcsMkrMultiType === 'SINGLE-P' && checkedSeries[0].pcsSerParallelYn === 'Y') { swalFire({ title: '병설은 단독으로 안 됨', icon: 'warning', }) } return false } return true } const onCheckSeries = (data) => { const copySeries = series.map((s) => { return { ...s, selected: s.pcsSerCd === data.pcsSerCd ? !s.selected : s.selected, } }) setSeries(copySeries) handleSetmodels(copySeries.filter((s) => s.selected)) } const handleSetmodels = (series) => { const pcsMkrCd = series[0]?.pcsMkrCd const pcsSerList = series.map((series) => { return { pcsSerCd: series.pcsSerCd } }) const moduleItemList = selectedModules.itemList?.map((module) => { return { itemId: module.itemId, mixMatlNo: module.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(), } }), ) return } setModels([]) setSelectedModels([]) }) } const onAddSelectedModel = () => { if (selectedRow === null) return if (selectedModels.length === 3) { swalFire({ title: '최대 3개까지 선택할 수 있습니다.', icon: 'warning', }) return } setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4() }]) setSelectedRow(null) } const onRemoveSelectedModel = (model) => { setModels(models.map((m) => ({ ...m, selected: m.code !== model.code ? m.selected : false }))) } const onChangeMaker = (option) => { if (option) { setModels(null) setSelectedMaker(option) getPcsMakerList(option).then((res) => { setSeries( res.data.map((series) => { return { ...series, selected: false } }), ) }) } } return ( <>
| {header.name} | ))}
|---|
| {model[header.prop]} | ))}