diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js index 03f2971..9a9c47a 100644 --- a/app/panels/mech_rec_assembly_mon/components/plan_detail.js +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -123,11 +123,11 @@ PlanInfo.propTypes = { }; //Модель выпуска плана -const PlanProductCompositionModel = ({ model, products, setCostProductComposition }) => { +const PlanProductCompositionModel = ({ model, products, onProductSelect }) => { //При выборе детали на модели const handleProductClick = ({ item }) => { const product = products.find(p => p.SMODEL_ID == item.id); - if (product) setCostProductComposition(pv => ({ ...pv, selectedProduct: { ...product } })); + if (product && onProductSelect) onProductSelect(product); }; //Генерация содержимого @@ -153,7 +153,7 @@ const PlanProductCompositionModel = ({ model, products, setCostProductCompositio PlanProductCompositionModel.propTypes = { model: PropTypes.any, products: PropTypes.array, - setCostProductComposition: PropTypes.func + onProductSelect: PropTypes.func }; //Генерация представления ячейки заголовка @@ -239,13 +239,24 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f //Собственное состояние - данные производственных составов SVG const [costProductComposition, setCostProductComposition] = useCostProductComposition(plan.NRN); + //Выбор элемента изделия + const setProduct = product => { + setCostProductComposition(pv => ({ ...pv, selectedProduct: product ? { ...product } : null })); + }; + + //При навигации между карточками + const handleNavigate = direction => { + setProduct(null); + if (onNavigate) onNavigate(direction); + }; + //Формируем представление return ( - (onNavigate ? onNavigate(-1) : null)}> + handleNavigate(-1)}> navigate_before @@ -289,7 +300,7 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f @@ -298,7 +309,7 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f - (onNavigate ? onNavigate(1) : null)}> + handleNavigate(1)}> navigate_next diff --git a/app/panels/mech_rec_assembly_mon/hooks.js b/app/panels/mech_rec_assembly_mon/hooks.js index 41a5a6a..de1c9a1 100644 --- a/app/panels/mech_rec_assembly_mon/hooks.js +++ b/app/panels/mech_rec_assembly_mon/hooks.js @@ -123,10 +123,9 @@ const useMechRecAssemblyMon = () => { }; //Хук для информации по производственным составам -const useCostProductComposition = nProdPlan => { +const useCostProductComposition = plan => { //Собственное состояние let [costProductComposition, setCostProductComposition] = useState({ - init: false, showPlanList: false, products: [], productsLoaded: false, @@ -137,32 +136,27 @@ const useCostProductComposition = nProdPlan => { //Подключение к контексту взаимодействия с сервером const { executeStored } = useContext(BackEndСtx); - //Инициализация производственных составов - const initCostProductComposition = useCallback(async () => { - if (!costProductComposition.init) { + //При подключении компонента к странице + useEffect(() => { + const loadData = async () => { const data = await executeStored({ stored: "PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET", - args: { NFCPRODPLAN: nProdPlan }, + args: { NFCPRODPLAN: plan }, respArg: "COUT", isArray: name => name === "XFCPRODCMP" }); setCostProductComposition(pv => ({ ...pv, - init: true, products: [...(data?.XFCPRODCMP || [])], productsLoaded: true, - model: data?.BMODEL + model: data?.BMODEL, + selectedProduct: null })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [costProductComposition.init, executeStored]); - - //При подключении компонента к странице - useEffect(() => { - initCostProductComposition(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }; + if (plan) loadData(); + }, [plan, executeStored]); + //Вернём данные return [costProductComposition, setCostProductComposition]; };