import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import useDeepCompareEffect from 'use-deep-compare-effect'; import { translate as __ } from 'foremanReact/common/I18n'; import { STATUS } from 'foremanReact/constants'; import { ActionGroup, Button, DualListSelector, Form, Modal, ModalVariant } from '@patternfly/react-core'; import { editACS, getACSDetails, getProducts } from '../../ACSActions'; import Loading from '../../../../components/Loading'; import { selectProducts, selectProductsStatus } from '../../ACSSelectors'; const ACSEditProducts = ({ onClose, acsId, acsDetails }) => { const { products } = acsDetails; const dispatch = useDispatch(); const [saving, setSaving] = useState(false); const [ acsProducts, setAcsProducts, ] = useState(products.map(product => product.name)); const [productIds, setProductIds] = useState(products.map(product => product.id)); const availableProducts = useSelector(selectProducts); const status = useSelector(selectProductsStatus); const { results } = availableProducts; const [availableOptions, setAvailableOptions] = useState((results?.map(product => product.name))?.filter(p => !acsProducts.includes(p))); const onListChange = (newAvailableOptions, newChosenOptions) => { setAvailableOptions(newAvailableOptions); setAcsProducts(newChosenOptions); setProductIds(results?.filter(product => newChosenOptions.includes(product.name))?.map(p => p?.id)); }; useDeepCompareEffect(() => { if (results && status === STATUS.RESOLVED) { setAvailableOptions(results?.map(product => product.name).filter(p => !acsProducts.includes(p))); } }, [results, status, setAvailableOptions, acsProducts]); useEffect( () => { dispatch(getProducts()); }, [dispatch], ); const onSubmit = () => { setSaving(true); dispatch(editACS( acsId, { acsId, product_ids: productIds }, () => { dispatch(getACSDetails(acsId)); onClose(); }, () => { setSaving(false); }, )); }; if (status === STATUS.PENDING) { return ; } return (
{ e.preventDefault(); onSubmit(); }} >
); }; ACSEditProducts.propTypes = { acsId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, onClose: PropTypes.func.isRequired, acsDetails: PropTypes.shape({ products: PropTypes.arrayOf(PropTypes.shape({})), }), }; ACSEditProducts.defaultProps = { acsDetails: { products: [], id: undefined }, }; export default ACSEditProducts;