From e066d3171f8a530aec02543b748fbf407bfd9d8d Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Thu, 9 Jul 2020 14:53:08 +0200 Subject: [PATCH] Add weight to simple products --- .../ProductCreatePage/ProductCreatePage.tsx | 15 ++++- .../ProductUpdatePage/ProductUpdatePage.tsx | 67 +++++++++++-------- src/products/mutations.ts | 2 + src/products/types/SimpleProductUpdate.ts | 1 + src/products/utils/data.ts | 4 +- src/products/views/ProductCreate.tsx | 6 +- .../views/ProductUpdate/ProductUpdate.tsx | 3 + src/products/views/ProductUpdate/handlers.ts | 5 +- .../stories/products/ProductCreatePage.tsx | 3 + .../stories/products/ProductUpdatePage.tsx | 1 + .../WarehouseDetailsPage.tsx | 4 +- 11 files changed, 77 insertions(+), 34 deletions(-) diff --git a/src/products/components/ProductCreatePage/ProductCreatePage.tsx b/src/products/components/ProductCreatePage/ProductCreatePage.tsx index 60ef44658..3d1ae00f1 100644 --- a/src/products/components/ProductCreatePage/ProductCreatePage.tsx +++ b/src/products/components/ProductCreatePage/ProductCreatePage.tsx @@ -43,6 +43,7 @@ import ProductDetailsForm from "../ProductDetailsForm"; import ProductOrganization from "../ProductOrganization"; import ProductPricing from "../ProductPricing"; import ProductStocks, { ProductStockInput } from "../ProductStocks"; +import ProductShipping from "../ProductShipping/ProductShipping"; interface FormData { basePrice: number; @@ -59,6 +60,7 @@ interface FormData { sku: string; stockQuantity: number; trackInventory: boolean; + weight: string; } export interface ProductCreatePageSubmitData extends FormData { attributes: ProductAttributeInput[]; @@ -82,6 +84,7 @@ interface ProductCreatePageProps { }>; header: string; saveButtonBarState: ConfirmButtonTransitionState; + weightUnit: string; warehouses: SearchWarehouses_search_edges_node[]; fetchCategories: (data: string) => void; fetchCollections: (data: string) => void; @@ -107,6 +110,7 @@ export const ProductCreatePage: React.FC = ({ warehouses, onBack, fetchProductTypes, + weightUnit, onSubmit }: ProductCreatePageProps) => { const intl = useIntl(); @@ -143,7 +147,8 @@ export const ProductCreatePage: React.FC = ({ seoTitle: "", sku: null, stockQuantity: null, - trackInventory: false + trackInventory: false, + weight: "" }; // Display values @@ -242,6 +247,14 @@ export const ProductCreatePage: React.FC = ({ {!!productType && !productType.hasVariants && ( <> + + = ({ + defaultWeightUnit, disabled, categories: categoryChoiceList, collections: collectionChoiceList, @@ -269,33 +272,43 @@ export const ProductUpdatePage: React.FC = ({ toggleAll={toggleAll} /> ) : ( - { - triggerChange(); - changeStockData(id, value); - }} - onFormDataChange={change} - onWarehouseStockAdd={id => { - triggerChange(); - addStock({ - data: null, - id, - label: warehouses.find( - warehouse => warehouse.id === id - ).name, - value: "0" - }); - }} - onWarehouseStockDelete={id => { - triggerChange(); - removeStock(id); - }} - /> + <> + + + { + triggerChange(); + changeStockData(id, value); + }} + onFormDataChange={change} + onWarehouseStockAdd={id => { + triggerChange(); + addStock({ + data: null, + id, + label: warehouses.find( + warehouse => warehouse.id === id + ).name, + value: "0" + }); + }} + onWarehouseStockDelete={id => { + triggerChange(); + removeStock(id); + }} + /> + )} { quantity: parseInt(stock.value, 0), warehouse: stock.id })), - trackInventory: formData.trackInventory + trackInventory: formData.trackInventory, + weight: weight(formData.weight) } }); }; @@ -157,6 +158,7 @@ export const ProductCreateView: React.FC = () => { warehouses={ warehouses.data?.warehouses.edges.map(edge => edge.node) || [] } + weightUnit={shop?.defaultWeightUnit} /> ); diff --git a/src/products/views/ProductUpdate/ProductUpdate.tsx b/src/products/views/ProductUpdate/ProductUpdate.tsx index 91d28edd3..77423ea21 100644 --- a/src/products/views/ProductUpdate/ProductUpdate.tsx +++ b/src/products/views/ProductUpdate/ProductUpdate.tsx @@ -17,6 +17,7 @@ import useCollectionSearch from "@saleor/searches/useCollectionSearch"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; import NotFoundPage from "@saleor/components/NotFoundPage"; import { useWarehouseList } from "@saleor/warehouses/queries"; +import useShop from "@saleor/hooks/useShop"; import { getMutationState, maybe } from "../../../misc"; import ProductUpdatePage from "../../components/ProductUpdatePage"; import ProductUpdateOperations from "../../containers/ProductUpdateOperations"; @@ -75,6 +76,7 @@ export const ProductUpdate: React.FC = ({ id, params }) => { first: 50 } }); + const shop = useShop(); const [openModal, closeModal] = createDialogActionHandlers< ProductUrlDialog, @@ -213,6 +215,7 @@ export const ProductUpdate: React.FC = ({ id, params }) => { undefined} saveButtonBarState="default" warehouses={warehouseList} + weightUnit="kg" /> )) .add("When loading", () => ( @@ -55,6 +56,7 @@ storiesOf("Views / Products / Create product", module) onSubmit={() => undefined} saveButtonBarState="default" warehouses={undefined} + weightUnit="kg" /> )) .add("form errors", () => ( @@ -82,5 +84,6 @@ storiesOf("Views / Products / Create product", module) onSubmit={() => undefined} saveButtonBarState="default" warehouses={warehouseList} + weightUnit="kg" /> )); diff --git a/src/storybook/stories/products/ProductUpdatePage.tsx b/src/storybook/stories/products/ProductUpdatePage.tsx index 9bc5478f7..2efef0dbc 100644 --- a/src/storybook/stories/products/ProductUpdatePage.tsx +++ b/src/storybook/stories/products/ProductUpdatePage.tsx @@ -19,6 +19,7 @@ const props: ProductUpdatePageProps = { ...listActionsProps, categories: [product.category], collections, + defaultWeightUnit: "kg", disabled: false, errors: [], fetchCategories: () => undefined, diff --git a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx index c4c53c811..3877072ce 100644 --- a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx +++ b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.tsx @@ -51,7 +51,9 @@ const WarehouseDetailsPage: React.FC = ({ onSubmit }) => { const intl = useIntl(); - const [displayCountry, setDisplayCountry] = useStateFromProps(""); + const [displayCountry, setDisplayCountry] = useStateFromProps( + warehouse?.address?.country.country || "" + ); const { errors: validationErrors,