Add ability to reset change state after success
This commit is contained in:
parent
2abe680093
commit
2830dd7b55
3 changed files with 29 additions and 14 deletions
|
@ -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,
|
||||
|
|
13
src/utils/handlers/handleFormSubmit.ts
Normal file
13
src/utils/handlers/handleFormSubmit.ts
Normal 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;
|
||||
}
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue