Add ability to reset change state after success

This commit is contained in:
dominik-zeglen 2020-10-20 17:08:26 +02:00
parent 2abe680093
commit 2830dd7b55
3 changed files with 29 additions and 14 deletions

View file

@ -111,14 +111,13 @@ const getStocksData = (
product: ProductDetails_product,
stocks: FormsetData<null, string>
) => {
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,

View file

@ -0,0 +1,13 @@
async function handleFormSubmit<T>(
data: T,
onSubmit: (data: T) => Promise<boolean>,
setChanged: (changed: boolean) => void
): Promise<boolean> {
const ok = await onSubmit(data);
if (ok) {
setChanged(false);
}
return ok;
}

View file

@ -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<TData extends MetadataFormData, TError>(
variables: UpdatePrivateMetadataVariables
) => Promise<MutationFetchResult<UpdatePrivateMetadata>>
) {
return async (data: TData) => {
return async (
data: TData
): Promise<Array<MetadataErrorFragment | TError>> => {
const errors = await update(data);
if (errors.length > 0) {