import PropTypes from 'prop-types'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import Card from 'Components/Card'; import FieldSet from 'Components/FieldSet'; import Form from 'Components/Form/Form'; import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import SpinnerErrorButton from 'Components/Link/SpinnerErrorButton'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { icons, inputTypes, kinds } from 'Helpers/Props'; import { cloneAutoTaggingSpecification, deleteAutoTaggingSpecification, fetchAutoTaggingSpecifications, saveAutoTagging, setAutoTaggingValue } from 'Store/Actions/settingsActions'; import { createProviderSettingsSelectorHook } from 'Store/Selectors/createProviderSettingsSelector'; import translate from 'Utilities/String/translate'; import AddSpecificationModal from './Specifications/AddSpecificationModal'; import EditSpecificationModal from './Specifications/EditSpecificationModal'; import Specification from './Specifications/Specification'; import styles from './EditAutoTaggingModalContent.css'; export default function EditAutoTaggingModalContent(props) { const { id, tagsFromId, onModalClose, onDeleteAutoTaggingPress } = props; const { error, item, isFetching, isSaving, saveError, validationErrors, validationWarnings } = useSelector(createProviderSettingsSelectorHook('autoTaggings', id)); const { isPopulated: specificationsPopulated, items: specifications } = useSelector((state) => state.settings.autoTaggingSpecifications); const dispatch = useDispatch(); const [isAddSpecificationModalOpen, setIsAddSpecificationModalOpen] = useState(false); const [isEditSpecificationModalOpen, setIsEditSpecificationModalOpen] = useState(false); // const [isImportAutoTaggingModalOpen, setIsImportAutoTaggingModalOpen] = useState(false); const onAddSpecificationPress = useCallback(() => { setIsAddSpecificationModalOpen(true); }, [setIsAddSpecificationModalOpen]); const onAddSpecificationModalClose = useCallback(({ specificationSelected = false } = {}) => { setIsAddSpecificationModalOpen(false); setIsEditSpecificationModalOpen(specificationSelected); }, [setIsAddSpecificationModalOpen]); const onEditSpecificationModalClose = useCallback(() => { setIsEditSpecificationModalOpen(false); }, [setIsEditSpecificationModalOpen]); const onInputChange = useCallback(({ name, value }) => { dispatch(setAutoTaggingValue({ name, value })); }, [dispatch]); const onSavePress = useCallback(() => { dispatch(saveAutoTagging({ id })); }, [dispatch, id]); const onCloneSpecificationPress = useCallback((specId) => { dispatch(cloneAutoTaggingSpecification({ id: specId })); }, [dispatch]); const onConfirmDeleteSpecification = useCallback((specId) => { dispatch(deleteAutoTaggingSpecification({ id: specId })); }, [dispatch]); useEffect(() => { dispatch(fetchAutoTaggingSpecifications({ id: tagsFromId || id })); }, [id, tagsFromId, dispatch]); const isSavingRef = useRef(); useEffect(() => { if (isSavingRef.current && !isSaving && !saveError) { onModalClose(); } isSavingRef.current = isSaving; }, [isSaving, saveError, onModalClose]); const { name, removeTagsAutomatically, tags } = item; return ( {id ? translate('EditAutoTag') : translate('AddAutoTag')}
{ isFetching ? : null } { !isFetching && !!error ?
{translate('AddAutoTagError')}
: null } { !isFetching && !error && specificationsPopulated ?
{translate('Name')} {translate('RemoveTagsAutomatically')} {translate('Tags')}
{ specifications.map((tag) => { return ( ); }) }
{/* */}
: null }
{ id ? : null } {/* */}
{translate('Save')}
); } EditAutoTaggingModalContent.propTypes = { id: PropTypes.number, tagsFromId: PropTypes.number, onModalClose: PropTypes.func.isRequired, onDeleteAutoTaggingPress: PropTypes.func };