diff --git a/src/products/components/ProductUpdatePage/form.tsx b/src/products/components/ProductUpdatePage/form.tsx index f4a682e55..6975e4615 100644 --- a/src/products/components/ProductUpdatePage/form.tsx +++ b/src/products/components/ProductUpdatePage/form.tsx @@ -111,14 +111,13 @@ const getStocksData = ( product: ProductDetails_product, stocks: FormsetData ) => { - if (product.productType.hasVariants) { + if (product?.productType?.hasVariants) { return { addStocks: [], removeStocks: [], updateStocks: [] }; } const dataStocks = stocks.map(stock => stock.id); - const variantStocks = product.variants[0]?.stocks.map( - stock => stock.warehouse.id - ); + const variantStocks = + product?.variants[0]?.stocks.map(stock => stock.warehouse.id) || []; const stockDiff = diff(variantStocks, dataStocks); return { @@ -214,16 +213,16 @@ function useProductUpdateForm( attributes: attributes.data, stocks: stocks.data }; + const submitData: ProductUpdateSubmitData = { + ...data, + ...getAvailabilityData(data), + ...getStocksData(product, stocks.data), + ...getMetadata(data, isMetadataModified, isPrivateMetadataModified), + addStocks: [], + attributes: attributes.data + }; - const submit = () => - onSubmit({ - ...data, - ...getAvailabilityData(data), - ...getStocksData(product, stocks.data), - ...getMetadata(data, isMetadataModified, isPrivateMetadataModified), - addStocks: [], - attributes: attributes.data - }); + const submit = () => handleFormSubmit(submitData, onSubmit, setChanged); return { change: handleChange, diff --git a/src/utils/handlers/handleFormSubmit.ts b/src/utils/handlers/handleFormSubmit.ts new file mode 100644 index 000000000..625dc2381 --- /dev/null +++ b/src/utils/handlers/handleFormSubmit.ts @@ -0,0 +1,13 @@ +async function handleFormSubmit( + data: T, + onSubmit: (data: T) => Promise, + setChanged: (changed: boolean) => void +): Promise { + const ok = await onSubmit(data); + + if (ok) { + setChanged(false); + } + + return ok; +} diff --git a/src/utils/handlers/metadataUpdateHandler.ts b/src/utils/handlers/metadataUpdateHandler.ts index 92cf1cccf..aa436b391 100644 --- a/src/utils/handlers/metadataUpdateHandler.ts +++ b/src/utils/handlers/metadataUpdateHandler.ts @@ -1,4 +1,5 @@ import { MetadataFormData } from "@saleor/components/Metadata/types"; +import { MetadataErrorFragment } from "@saleor/fragments/types/MetadataErrorFragment"; import { MetadataInput } from "@saleor/types/globalTypes"; import { diff } from "fast-array-diff"; import { MutationFetchResult } from "react-apollo"; @@ -28,7 +29,9 @@ function createMetadataUpdateHandler( variables: UpdatePrivateMetadataVariables ) => Promise> ) { - return async (data: TData) => { + return async ( + data: TData + ): Promise> => { const errors = await update(data); if (errors.length > 0) {