diff --git a/src/products/components/ProductVariantCreateDialog/ProductVariantCreateContent.tsx b/src/products/components/ProductVariantCreateDialog/ProductVariantCreateContent.tsx
index 99bb9a27e..9f66a7220 100644
--- a/src/products/components/ProductVariantCreateDialog/ProductVariantCreateContent.tsx
+++ b/src/products/components/ProductVariantCreateDialog/ProductVariantCreateContent.tsx
@@ -121,6 +121,14 @@ const ProductVariantCreateContent: React.FC<
attributes={selectedAttributes}
currencySymbol={currencySymbol}
data={data}
+ onVariantDataChange={(variantIndex, field, value) =>
+ dispatchFormDataAction({
+ field,
+ type: "changeVariantData",
+ value,
+ variantIndex
+ })
+ }
/>
)}
diff --git a/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.tsx b/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.tsx
index 8ba0e5a9d..a83903d54 100644
--- a/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.tsx
+++ b/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.tsx
@@ -25,6 +25,51 @@ const useStyles = makeStyles((theme: Theme) => ({
}
}));
+function canHitNext(
+ step: ProductVariantCreateStep,
+ data: ProductVariantCreateFormData
+): boolean {
+ switch (step) {
+ case "attributes":
+ return data.attributes.length > 0;
+ case "values":
+ return data.attributes.every(attribute => attribute.values.length > 0);
+ case "prices":
+ if (data.price.all) {
+ if (data.price.value === "") {
+ return false;
+ }
+ } else {
+ if (
+ data.price.attribute === "" ||
+ data.price.values.some(attributeValue => attributeValue.value === "")
+ ) {
+ return false;
+ }
+ }
+
+ if (data.stock.all) {
+ if (data.stock.value === "") {
+ return false;
+ }
+ } else {
+ if (
+ data.stock.attribute === "" ||
+ data.stock.values.some(attributeValue => attributeValue.value === "")
+ ) {
+ return false;
+ }
+ }
+
+ return true;
+ case "summary":
+ return data.variants.every(variant => variant.sku !== "");
+
+ default:
+ return false;
+ }
+}
+
export interface ProductVariantCreateDialogProps
extends Omit<
ProductVariantCreateContentProps,
@@ -110,13 +155,19 @@ const ProductVariantCreateDialog: React.FC<
) : (
-