import React, { useState } from 'react'; import { Button, Classes, FormGroup, InputGroup, Intent, TextArea, MenuItem } from '@blueprintjs/core'; import { Select } from '@blueprintjs/select'; import { omit, pick } from 'lodash'; import * as Yup from 'yup'; import { useIntl } from 'react-intl'; import { useFormik } from 'formik'; import { compose } from 'utils'; import Dialog from 'components/Dialog'; import useAsync from 'hooks/async'; import AppToaster from 'components/AppToaster'; import DialogConnect from 'connectors/Dialog.connector'; import DialogReduxConnect from 'components/DialogReduxConnect'; import ItemsCategoryConnect from 'connectors/ItemsCategory.connect'; function ItemCategoryDialog({ name, payload, isOpen, openDialog, closeDialog, categories, requestSubmitItemCategory, requestFetchItemCategories, requestEditItemCategory, editItemCategory }) { const [state, setState] = useState({ selectedParentCategory: null }); const intl = useIntl(); const ValidationSchema = Yup.object().shape({ name: Yup.string().required(intl.formatMessage({ id: 'required' })), parent_category_id: Yup.string().nullable(), description: Yup.string().trim() }); const initialValues = { name: '', description: '', parent_category_id: null }; //Formik const formik = useFormik({ enableReinitialize: true, initialValues: { ...(payload.action === 'edit' && pick(editItemCategory, Object.keys(initialValues))) }, validationSchema: ValidationSchema, onSubmit: values => { if (payload.action === 'edit') { requestEditItemCategory(payload.id, values).then(response => { closeDialog(name); AppToaster.show({ message: 'the_category_has_been_edited' }); }); } else { requestSubmitItemCategory(values) .then(response => { closeDialog(name); AppToaster.show({ message: 'the_category_has_been_submit' }); }) .catch(error => { alert(error.message); }); } } }); const filterItemCategory = (query, category, _index, exactMatch) => { const normalizedTitle = category.name.toLowerCase(); const normalizedQuery = query.toLowerCase(); if (exactMatch) { return normalizedTitle === normalizedQuery; } else { return normalizedTitle.indexOf(normalizedQuery) >= 0; } }; const parentCategoryItem = (category, { handleClick, modifiers, query }) => { return ( ); }; const handleClose = () => { closeDialog(name); }; const fetchHook = useAsync(async () => { await Promise.all([requestFetchItemCategories()]); }, false); const onDialogOpening = () => { fetchHook.execute(); }; const onChangeParentCategory = parentCategory => { setState({ ...state, selectedParentCategory: parentCategory.name }); formik.setFieldValue('parent_category_id', parentCategory.id); }; const onDialogClosed = () => { formik.resetForm(); closeDialog(name); }; return (