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,
|
product: ProductDetails_product,
|
||||||
stocks: FormsetData<null, string>
|
stocks: FormsetData<null, string>
|
||||||
) => {
|
) => {
|
||||||
if (product.productType.hasVariants) {
|
if (product?.productType?.hasVariants) {
|
||||||
return { addStocks: [], removeStocks: [], updateStocks: [] };
|
return { addStocks: [], removeStocks: [], updateStocks: [] };
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataStocks = stocks.map(stock => stock.id);
|
const dataStocks = stocks.map(stock => stock.id);
|
||||||
const variantStocks = product.variants[0]?.stocks.map(
|
const variantStocks =
|
||||||
stock => stock.warehouse.id
|
product?.variants[0]?.stocks.map(stock => stock.warehouse.id) || [];
|
||||||
);
|
|
||||||
const stockDiff = diff(variantStocks, dataStocks);
|
const stockDiff = diff(variantStocks, dataStocks);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -214,16 +213,16 @@ function useProductUpdateForm(
|
||||||
attributes: attributes.data,
|
attributes: attributes.data,
|
||||||
stocks: stocks.data
|
stocks: stocks.data
|
||||||
};
|
};
|
||||||
|
const submitData: ProductUpdateSubmitData = {
|
||||||
|
...data,
|
||||||
|
...getAvailabilityData(data),
|
||||||
|
...getStocksData(product, stocks.data),
|
||||||
|
...getMetadata(data, isMetadataModified, isPrivateMetadataModified),
|
||||||
|
addStocks: [],
|
||||||
|
attributes: attributes.data
|
||||||
|
};
|
||||||
|
|
||||||
const submit = () =>
|
const submit = () => handleFormSubmit(submitData, onSubmit, setChanged);
|
||||||
onSubmit({
|
|
||||||
...data,
|
|
||||||
...getAvailabilityData(data),
|
|
||||||
...getStocksData(product, stocks.data),
|
|
||||||
...getMetadata(data, isMetadataModified, isPrivateMetadataModified),
|
|
||||||
addStocks: [],
|
|
||||||
attributes: attributes.data
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
change: handleChange,
|
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 { MetadataFormData } from "@saleor/components/Metadata/types";
|
||||||
|
import { MetadataErrorFragment } from "@saleor/fragments/types/MetadataErrorFragment";
|
||||||
import { MetadataInput } from "@saleor/types/globalTypes";
|
import { MetadataInput } from "@saleor/types/globalTypes";
|
||||||
import { diff } from "fast-array-diff";
|
import { diff } from "fast-array-diff";
|
||||||
import { MutationFetchResult } from "react-apollo";
|
import { MutationFetchResult } from "react-apollo";
|
||||||
|
@ -28,7 +29,9 @@ function createMetadataUpdateHandler<TData extends MetadataFormData, TError>(
|
||||||
variables: UpdatePrivateMetadataVariables
|
variables: UpdatePrivateMetadataVariables
|
||||||
) => Promise<MutationFetchResult<UpdatePrivateMetadata>>
|
) => Promise<MutationFetchResult<UpdatePrivateMetadata>>
|
||||||
) {
|
) {
|
||||||
return async (data: TData) => {
|
return async (
|
||||||
|
data: TData
|
||||||
|
): Promise<Array<MetadataErrorFragment | TError>> => {
|
||||||
const errors = await update(data);
|
const errors = await update(data);
|
||||||
|
|
||||||
if (errors.length > 0) {
|
if (errors.length > 0) {
|
||||||
|
|
Loading…
Reference in a new issue