import { useMutation } from "@apollo/client/react"; import { Form, Modal } from "antd"; import { useEffect } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { logImEXEvent } from "../../firebase/firebase.utils"; import { INSERT_INVENTORY_LINE, UPDATE_INVENTORY_LINE } from "../../graphql/inventory.queries"; import { toggleModalVisible } from "../../redux/modals/modals.actions"; import { selectInventoryUpsert } from "../../redux/modals/modals.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import InventoryUpsertModal from "./inventory-upsert-modal.component"; import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, inventoryUpsertModal: selectInventoryUpsert }); const mapDispatchToProps = (dispatch) => ({ toggleModalVisible: () => dispatch(toggleModalVisible("inventoryUpsert")) }); export function InventoryUpsertModalContainer({ bodyshop, inventoryUpsertModal, toggleModalVisible }) { const { t } = useTranslation(); const [insertInventory] = useMutation(INSERT_INVENTORY_LINE); const [updateInventoryLine] = useMutation(UPDATE_INVENTORY_LINE); const notification = useNotification(); const { open, context, actions } = inventoryUpsertModal; const { existingInventory } = context; const { refetch } = actions; const [form] = Form.useForm(); useEffect(() => { //Required to prevent infinite looping. if (existingInventory && open) { form.setFieldsValue(existingInventory); } else if (!existingInventory && open) { form.resetFields(); } }, [existingInventory, form, open]); const handleFinish = async (formValues) => { const values = formValues; if (existingInventory) { logImEXEvent("inventory_update"); updateInventoryLine({ variables: { inventoryId: existingInventory.id, inventoryItem: values } }).then(() => { notification.success({ title: t("inventory.successes.updated") }); }); // if (refetch) refetch(); toggleModalVisible(); } else { logImEXEvent("inventory_insert"); await insertInventory({ variables: { inventoryItem: { shopid: bodyshop.id, ...values } }, update(cache, { data }) { cache.modify({ fields: { inventory(existingInv) { return [...existingInv, data.insert_inventory_one]; } } }); } }); if (refetch) refetch(); form.resetFields(); toggleModalVisible(); notification.success({ title: t("inventory.successes.inserted") }); } }; return ( { form.submit(); }} onCancel={() => { toggleModalVisible(); }} destroyOnHidden >
); } export default connect(mapStateToProps, mapDispatchToProps)(InventoryUpsertModalContainer);