From cb4e2fd050fefa0c4377325fba8395d9514a1e4f Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Tue, 1 Sep 2020 16:27:35 +0200 Subject: [PATCH] Add metadata editor to variant creator --- .../ProductVariantCreatePage.tsx | 12 +++++++++++- src/products/views/ProductVariantCreate.tsx | 19 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/products/components/ProductVariantCreatePage/ProductVariantCreatePage.tsx b/src/products/components/ProductVariantCreatePage/ProductVariantCreatePage.tsx index 87b43bf85..ac79fad42 100644 --- a/src/products/components/ProductVariantCreatePage/ProductVariantCreatePage.tsx +++ b/src/products/components/ProductVariantCreatePage/ProductVariantCreatePage.tsx @@ -4,6 +4,7 @@ import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import Container from "@saleor/components/Container"; import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; +import Metadata, { MetadataFormData } from "@saleor/components/Metadata"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import { ProductErrorFragment } from "@saleor/fragments/types/ProductErrorFragment"; @@ -13,6 +14,7 @@ import useFormset, { } from "@saleor/hooks/useFormset"; import { getVariantAttributeInputFromProduct } from "@saleor/products/utils/data"; import { SearchWarehouses_search_edges_node } from "@saleor/searches/types/SearchWarehouses"; +import useMetadataChangeTrigger from "@saleor/utils/metadata/useMetadataChangeTrigger"; import React from "react"; import { useIntl } from "react-intl"; @@ -26,7 +28,7 @@ import ProductVariantAttributes, { import ProductVariantNavigation from "../ProductVariantNavigation"; import ProductVariantPrice from "../ProductVariantPrice"; -interface ProductVariantCreatePageFormData { +interface ProductVariantCreatePageFormData extends MetadataFormData { costPrice: string; images: string[]; price: string; @@ -83,11 +85,16 @@ const ProductVariantCreatePage: React.FC = ({ data: stocks, remove: removeStock } = useFormset([]); + const { + makeChangeHandler: makeMetadataChangeHandler + } = useMetadataChangeTrigger(); const initialForm: ProductVariantCreatePageFormData = { costPrice: "", images: maybe(() => product.images.map(image => image.id)), + metadata: [], price: "", + privateMetadata: [], quantity: "0", sku: "", trackInventory: true, @@ -108,6 +115,7 @@ const ProductVariantCreatePage: React.FC = ({ changeAttributeData(id, value); triggerChange(); }; + const changeMetadata = makeMetadataChangeHandler(change); return ( @@ -176,6 +184,8 @@ const ProductVariantCreatePage: React.FC = ({ removeStock(id); }} /> + + = ({ } } }); + const [updateMetadata] = useMetadataUpdate({}); + const [updatePrivateMetadata] = usePrivateMetadataUpdate({}); const product = data?.product; @@ -63,8 +70,8 @@ export const ProductVariant: React.FC = ({ } const handleBack = () => navigate(productUrl(productId)); - const handleSubmit = (formData: ProductVariantCreatePageSubmitData) => - variantCreate({ + const handleCreate = async (formData: ProductVariantCreatePageSubmitData) => { + const result = await variantCreate({ variables: { input: { attributes: formData.attributes @@ -86,6 +93,14 @@ export const ProductVariant: React.FC = ({ } } }); + + return result.data.productVariantCreate?.productVariant?.id || null; + }; + const handleSubmit = createMetadataCreateHandler( + handleCreate, + updateMetadata, + updatePrivateMetadata + ); const handleVariantClick = (id: string) => navigate(productVariantEditUrl(productId, id));