diff --git a/src/products/components/ProductCreatePage/ProductCreatePage.tsx b/src/products/components/ProductCreatePage/ProductCreatePage.tsx index b7538c25d..ba8174f4f 100644 --- a/src/products/components/ProductCreatePage/ProductCreatePage.tsx +++ b/src/products/components/ProductCreatePage/ProductCreatePage.tsx @@ -165,12 +165,7 @@ export const ProductCreatePage: React.FC = ({ MultiAutocompleteChoiceType[] >([]); - const [productType, setProductType] = React.useState({ - hasVariants: false, - id: "", - name: "", - productAttributes: [] - }); + const [productType, setProductType] = React.useState(null); const categories = getChoices(categoryChoiceList); const collections = getChoices(collectionChoiceList); @@ -253,7 +248,7 @@ export const ProductCreatePage: React.FC = ({ onChange={change} /> - {!productType.hasVariants && ( + {!!productType && !productType.hasVariants && ( <> = ({ fetchMoreProductTypes={fetchMoreProductTypes} fetchProductTypes={fetchProductTypes} productType={productType} - productTypeInputDisplayValue={productType.name} + productTypeInputDisplayValue={productType?.name || ""} productTypes={productTypes} onCategoryChange={handleCategorySelect} onCollectionChange={handleCollectionSelect} diff --git a/src/products/components/ProductStocks/ProductStocks.tsx b/src/products/components/ProductStocks/ProductStocks.tsx index 1a2063b8b..e66532cd3 100644 --- a/src/products/components/ProductStocks/ProductStocks.tsx +++ b/src/products/components/ProductStocks/ProductStocks.tsx @@ -175,7 +175,7 @@ const ProductStocks: React.FC = ({ {renderCollection( stocks, stock => ( - + {stock.label} = ({ currencySymbol, disabled, errors, - loading, header, product, saveButtonBarState, @@ -133,7 +131,7 @@ const ProductVariantCreatePage: React.FC = ({
@@ -143,7 +141,7 @@ const ProductVariantCreatePage: React.FC = ({ priceOverride={data.priceOverride} currencySymbol={currencySymbol} costPrice={data.costPrice} - loading={loading} + loading={disabled} onChange={change} /> @@ -159,7 +157,7 @@ const ProductVariantCreatePage: React.FC = ({
undefined, onConfirm: () => undefined, open: true, - stocks: [ - { - __typename: "Stock", - id: "5123", - quantity: 2, - warehouse: warehouseList[0] - }, - { - __typename: "Stock", - id: "5223", - quantity: 4, - warehouse: warehouseList[2] - } - ], - warehouses: warehouseList + warehouses: warehouseList, + warehousesWithStocks: [warehouseList[0].id, warehouseList[2].id] }; storiesOf("Views / Products / Edit warehouses", module) @@ -46,5 +33,14 @@ storiesOf("Views / Products / Edit warehouses", module) /> )) .add("with error", () => ( - + )); diff --git a/src/products/components/ProductWarehousesDialog/ProductWarehousesDialog.tsx b/src/products/components/ProductWarehousesDialog/ProductWarehousesDialog.tsx index f027fcad9..0b9192c1d 100644 --- a/src/products/components/ProductWarehousesDialog/ProductWarehousesDialog.tsx +++ b/src/products/components/ProductWarehousesDialog/ProductWarehousesDialog.tsx @@ -60,7 +60,7 @@ function getErrorMessage( case "BulkStockError": return getBulkStockErrorMessage(err, intl); default: - getStockErrorMessage(err, intl); + return getStockErrorMessage(err, intl); } } diff --git a/src/products/fixtures.ts b/src/products/fixtures.ts index b45ac7bd4..04eca4b56 100644 --- a/src/products/fixtures.ts +++ b/src/products/fixtures.ts @@ -1247,21 +1247,30 @@ export const variant = (placeholderImage: string): ProductVariant => ({ } ] }, - quantity: 19, - quantityAllocated: 12, sku: "1230959124123", - stock: [ + stocks: [ { __typename: "Stock", id: "1", - quantity: 1 + quantity: 1, + warehouse: { + __typename: "Warehouse", + id: "123", + name: "Warehouse 1" + } }, { __typename: "Stock", id: "2", - quantity: 4 + quantity: 4, + warehouse: { + __typename: "Warehouse", + id: "1234", + name: "Warehouse 2" + } } - ] + ], + trackInventory: true }); export const variantImages = (placeholderImage: string) => variant(placeholderImage).images; diff --git a/src/products/views/ProductCreate.tsx b/src/products/views/ProductCreate.tsx index 18cd8b1a8..84928e85a 100644 --- a/src/products/views/ProductCreate.tsx +++ b/src/products/views/ProductCreate.tsx @@ -59,11 +59,7 @@ export const ProductCreateView: React.FC = ({ } = useProductTypeSearch({ variables: DEFAULT_INITIAL_SEARCH_DATA }); - const { - loadMore: loadMoreWarehouses, - search: searchWarehouses, - result: searchWarehousesOpts - } = useWarehouseSearch({ + const { result: searchWarehousesOpts } = useWarehouseSearch({ variables: { ...DEFAULT_INITIAL_SEARCH_DATA, first: 20 diff --git a/src/products/views/ProductUpdate/ProductUpdate.tsx b/src/products/views/ProductUpdate/ProductUpdate.tsx index 477e41c69..899d14dd1 100644 --- a/src/products/views/ProductUpdate/ProductUpdate.tsx +++ b/src/products/views/ProductUpdate/ProductUpdate.tsx @@ -74,11 +74,7 @@ export const ProductUpdate: React.FC = ({ id, params }) => { } = useCollectionSearch({ variables: DEFAULT_INITIAL_SEARCH_DATA }); - const { - loadMore: loadMoreWarehouses, - search: searchWarehouses, - result: searchWarehousesOpts - } = useWarehouseSearch({ + const { result: searchWarehousesOpts } = useWarehouseSearch({ variables: { ...DEFAULT_INITIAL_SEARCH_DATA, first: 20 diff --git a/src/products/views/ProductVariant.tsx b/src/products/views/ProductVariant.tsx index fb3c4a28f..b03f3a33e 100644 --- a/src/products/views/ProductVariant.tsx +++ b/src/products/views/ProductVariant.tsx @@ -52,11 +52,7 @@ export const ProductVariant: React.FC = ({ setErrors([]); }, [variantId]); - const { - loadMore: loadMoreWarehouses, - search: searchWarehouses, - result: searchWarehousesOpts - } = useWarehouseSearch({ + const { result: searchWarehousesOpts } = useWarehouseSearch({ variables: { ...DEFAULT_INITIAL_SEARCH_DATA, first: 20 diff --git a/src/products/views/ProductVariantCreate.tsx b/src/products/views/ProductVariantCreate.tsx index 103086e5e..5c69cc919 100644 --- a/src/products/views/ProductVariantCreate.tsx +++ b/src/products/views/ProductVariantCreate.tsx @@ -41,11 +41,7 @@ export const ProductVariant: React.FC = ({ const notify = useNotifier(); const shop = useShop(); const intl = useIntl(); - const { - loadMore: loadMoreWarehouses, - search: searchWarehouses, - result: searchWarehousesOpts - } = useWarehouseSearch({ + const { result: searchWarehousesOpts } = useWarehouseSearch({ variables: { ...DEFAULT_INITIAL_SEARCH_DATA, first: 20 @@ -127,7 +123,7 @@ export const ProductVariant: React.FC = ({ /> = ({ defaultMessage: "Create Variant", description: "header" })} - loading={disableForm} product={data?.product} onBack={handleBack} onSubmit={handleSubmit} diff --git a/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx b/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx index fcf7d038c..4315c31c1 100644 --- a/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx +++ b/src/shipping/components/ShippingZoneAddWarehouseDialog/ShippingZoneAddWarehouseDialog.tsx @@ -11,7 +11,7 @@ import makeStyles from "@material-ui/core/styles/makeStyles"; import ConfirmButton, { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; -import { DialogProps, UserError } from "@saleor/types"; +import { DialogProps } from "@saleor/types"; import { AddressTypeInput } from "@saleor/customers/types"; import useModalDialogOpen from "@saleor/hooks/useModalDialogOpen"; import useModalDialogErrors from "@saleor/hooks/useModalDialogErrors"; @@ -24,6 +24,7 @@ import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { ShopInfo_shop_countries } from "@saleor/components/Shop/types/ShopInfo"; import createSingleAutocompleteSelectHandler from "@saleor/utils/handlers/singleAutocompleteSelectChangeHandler"; import FormSpacer from "@saleor/components/FormSpacer"; +import { WarehouseErrorFragment } from "@saleor/warehouses/types/WarehouseErrorFragment"; export interface ShippingZoneAddWarehouseDialogSubmitData extends AddressTypeInput { @@ -33,7 +34,7 @@ export interface ShippingZoneAddWarehouseDialogProps extends DialogProps { confirmButtonState: ConfirmButtonTransitionState; countries: ShopInfo_shop_countries[]; disabled: boolean; - errors: UserError[]; + errors: WarehouseErrorFragment[]; onSubmit: (data: ShippingZoneAddWarehouseDialogSubmitData) => void; } diff --git a/src/shipping/views/ShippingZoneDetails/index.tsx b/src/shipping/views/ShippingZoneDetails/index.tsx index dc66c7d59..0dd6a6777 100644 --- a/src/shipping/views/ShippingZoneDetails/index.tsx +++ b/src/shipping/views/ShippingZoneDetails/index.tsx @@ -176,7 +176,7 @@ const ShippingZoneDetails: React.FC = ({ ); } } else { - throw new Error(`Updating failed: ${updateErrors[0].message}`); + throw new Error(`Updating failed: ${updateErrors[0].code}`); } } catch (err) { notify({ diff --git a/src/storybook/stories/products/ProductCreatePage.tsx b/src/storybook/stories/products/ProductCreatePage.tsx index 306c5eca9..4d37c89ed 100644 --- a/src/storybook/stories/products/ProductCreatePage.tsx +++ b/src/storybook/stories/products/ProductCreatePage.tsx @@ -3,6 +3,7 @@ import React from "react"; import { fetchMoreProps } from "@saleor/fixtures"; import { ProductErrorCode } from "@saleor/types/globalTypes"; +import { warehouseList } from "@saleor/warehouses/fixtures"; import ProductCreatePage, { ProductCreatePageSubmitData } from "../../../products/components/ProductCreatePage"; @@ -32,6 +33,8 @@ storiesOf("Views / Products / Create product", module) onBack={() => undefined} onSubmit={() => undefined} saveButtonBarState="default" + onWarehouseEdit={() => undefined} + warehouses={warehouseList} /> )) .add("When loading", () => ( @@ -52,6 +55,8 @@ storiesOf("Views / Products / Create product", module) onBack={() => undefined} onSubmit={() => undefined} saveButtonBarState="default" + onWarehouseEdit={() => undefined} + warehouses={undefined} /> )) .add("form errors", () => ( @@ -78,5 +83,7 @@ storiesOf("Views / Products / Create product", module) onBack={() => undefined} onSubmit={() => undefined} saveButtonBarState="default" + onWarehouseEdit={() => undefined} + warehouses={warehouseList} /> )); diff --git a/src/storybook/stories/products/ProductUpdatePage.tsx b/src/storybook/stories/products/ProductUpdatePage.tsx index 4deb5d08e..acff0e2d3 100644 --- a/src/storybook/stories/products/ProductUpdatePage.tsx +++ b/src/storybook/stories/products/ProductUpdatePage.tsx @@ -30,11 +30,11 @@ const props: ProductUpdatePageProps = { onDelete: () => undefined, onImageDelete: () => undefined, onImageUpload: () => undefined, - onProductShow: () => undefined, onSubmit: () => undefined, onVariantAdd: () => undefined, onVariantShow: () => undefined, onVariantsAdd: () => undefined, + onWarehousesEdit: () => undefined, placeholderImage, product, saveButtonBarState: "default", @@ -73,7 +73,28 @@ storiesOf("Views / Products / Product edit", module) {...props} product={{ ...props.product, - variants: [] + productType: { + ...product.productType, + hasVariants: false + } + }} + /> + )) + .add("no stock and no variants", () => ( + )) diff --git a/src/storybook/stories/products/ProductVariantCreatePage.tsx b/src/storybook/stories/products/ProductVariantCreatePage.tsx index 9269ae5e2..2d83d76c5 100644 --- a/src/storybook/stories/products/ProductVariantCreatePage.tsx +++ b/src/storybook/stories/products/ProductVariantCreatePage.tsx @@ -3,6 +3,7 @@ import React from "react"; import placeholderImage from "@assets/images/placeholder255x255.png"; import { ProductErrorCode } from "@saleor/types/globalTypes"; +import { warehouseList } from "@saleor/warehouses/fixtures"; import ProductVariantCreatePage from "../../../products/components/ProductVariantCreatePage"; import { product as productFixture } from "../../../products/fixtures"; import Decorator from "../../Decorator"; @@ -14,19 +15,22 @@ storiesOf("Views / Products / Create product variant", module) .add("default", () => ( undefined} onSubmit={() => undefined} onVariantClick={undefined} saveButtonBarState="default" + warehouses={warehouseList} + onWarehouseEdit={() => undefined} /> )) .add("with errors", () => ( undefined} onSubmit={() => undefined} onVariantClick={undefined} saveButtonBarState="default" + warehouses={warehouseList} + onWarehouseEdit={() => undefined} /> )) .add("when loading data", () => ( undefined} onSubmit={() => undefined} onVariantClick={undefined} saveButtonBarState="default" + warehouses={warehouseList} + onWarehouseEdit={() => undefined} /> )) .add("add first variant", () => ( undefined} onVariantClick={undefined} saveButtonBarState="default" + warehouses={warehouseList} + onWarehouseEdit={() => undefined} /> )); diff --git a/src/storybook/stories/products/ProductVariantPage.tsx b/src/storybook/stories/products/ProductVariantPage.tsx index e8413b3e4..4cd3853ce 100644 --- a/src/storybook/stories/products/ProductVariantPage.tsx +++ b/src/storybook/stories/products/ProductVariantPage.tsx @@ -23,6 +23,7 @@ storiesOf("Views / Products / Product variant details", module) onSubmit={() => undefined} onVariantClick={() => undefined} saveButtonBarState="default" + onWarehousesEdit={() => undefined} /> )) .add("when loading data", () => ( @@ -38,6 +39,7 @@ storiesOf("Views / Products / Product variant details", module) onSubmit={() => undefined} onVariantClick={() => undefined} saveButtonBarState="default" + onWarehousesEdit={() => undefined} /> )) .add("attribute errors", () => ( @@ -69,5 +71,6 @@ storiesOf("Views / Products / Product variant details", module) message: "Generic form error", ...error }))} + onWarehousesEdit={() => undefined} /> )); diff --git a/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.stories.tsx b/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.stories.tsx index ff58e35b2..2dcb9ca69 100644 --- a/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.stories.tsx +++ b/src/warehouses/components/WarehouseCreatePage/WarehouseCreatePage.stories.tsx @@ -2,8 +2,8 @@ import { storiesOf } from "@storybook/react"; import React from "react"; import Decorator from "@saleor/storybook/Decorator"; -import { formError } from "@saleor/storybook/misc"; import { countries } from "@saleor/fixtures"; +import { WarehouseErrorCode } from "@saleor/types/globalTypes"; import WarehouseCreatePage, { WarehouseCreatePageProps, WarehouseCreatePageFormData @@ -39,8 +39,10 @@ storiesOf("Views / Warehouses / Create warehouse", module) "postalCode", "streetAddress1", "streetAddress2" - ] as Array).map(field => - formError(field) - )} + ] as Array).map(field => ({ + __typename: "WarehouseError", + code: WarehouseErrorCode.INVALID, + field + }))} /> )); diff --git a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.stories.tsx b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.stories.tsx index 5a3dd646b..bf7e9ab4f 100644 --- a/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.stories.tsx +++ b/src/warehouses/components/WarehouseDetailsPage/WarehouseDetailsPage.stories.tsx @@ -3,7 +3,7 @@ import React from "react"; import { address, countries } from "@saleor/fixtures"; import Decorator from "@saleor/storybook/Decorator"; -import { formError } from "@saleor/storybook/misc"; +import { WarehouseErrorCode } from "@saleor/types/globalTypes"; import { warehouseList } from "../../fixtures"; import WarehouseDetailsPage, { WarehouseDetailsPageProps, @@ -48,8 +48,10 @@ storiesOf("Views / Warehouses / Warehouse details", module) "postalCode", "streetAddress1", "streetAddress2" - ] as Array).map(field => - formError(field) - )} + ] as Array).map(field => ({ + __typename: "WarehouseError", + code: WarehouseErrorCode.INVALID, + field + }))} /> ));