feat: add hooks to product module's workflows (#8389)

This commit is contained in:
Harminder Virk authored and GitHub committed 2024-08-01 22:02:07 +05:30
1 parent 5ed5b45cce
commit 6efdba1967
19 files changed
+247 -72

No files matched your search

@@ -4,6 +4,7 @@ import { batchLinkProductsToCollectionStep } from "../steps/batch-link-products-
export const batchLinkProductsToCollectionWorkflowId = export const batchLinkProductsToCollectionWorkflowId =
"batch-link-products-to-collection" "batch-link-products-to-collection"
export const batchLinkProductsToCollectionWorkflow = createWorkflow( export const batchLinkProductsToCollectionWorkflow = createWorkflow(
batchLinkProductsToCollectionWorkflowId, batchLinkProductsToCollectionWorkflowId,
(input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => { (input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => {
@@ -2,18 +2,28 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { createCollectionsStep } from "../steps" import { createCollectionsStep } from "../steps"
type WorkflowInput = { collections: ProductTypes.CreateProductCollectionDTO[] } type WorkflowInput = {
collections: ProductTypes.CreateProductCollectionDTO[]
additional_data?: Record<string, unknown>
}
export const createCollectionsWorkflowId = "create-collections" export const createCollectionsWorkflowId = "create-collections"
export const createCollectionsWorkflow = createWorkflow( export const createCollectionsWorkflow = createWorkflow(
createCollectionsWorkflowId, createCollectionsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const collections = createCollectionsStep(input.collections)
): WorkflowResponse<ProductTypes.ProductCollectionDTO[]> => { const collectionsCreated = createHook("collectionsCreated", {
return new WorkflowResponse(createCollectionsStep(input.collections)) collections,
additional_data: input.additional_data,
})
return new WorkflowResponse(collections, {
hooks: [collectionsCreated],
})
} }
) )
@@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { createProductOptionsStep } from "../steps" import { createProductOptionsStep } from "../steps"
type WorkflowInput = { product_options: ProductTypes.CreateProductOptionDTO[] } type WorkflowInput = {
product_options: ProductTypes.CreateProductOptionDTO[]
additional_data?: Record<string, unknown>
}
export const createProductOptionsWorkflowId = "create-product-options" export const createProductOptionsWorkflowId = "create-product-options"
export const createProductOptionsWorkflow = createWorkflow( export const createProductOptionsWorkflow = createWorkflow(
createProductOptionsWorkflowId, createProductOptionsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const productOptions = createProductOptionsStep(input.product_options)
): WorkflowResponse<ProductTypes.ProductOptionDTO[]> => { const productOptionsCreated = createHook("productOptionsCreated", {
return new WorkflowResponse(createProductOptionsStep(input.product_options)) product_options: productOptions,
additional_data: input.additional_data,
})
return new WorkflowResponse(productOptions, {
hooks: [productOptionsCreated],
})
} }
) )
@@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { createProductTagsStep } from "../steps" import { createProductTagsStep } from "../steps"
type WorkflowInput = { product_tags: ProductTypes.CreateProductTagDTO[] } type WorkflowInput = {
product_tags: ProductTypes.CreateProductTagDTO[]
additional_data?: Record<string, unknown>
}
export const createProductTagsWorkflowId = "create-product-tags" export const createProductTagsWorkflowId = "create-product-tags"
export const createProductTagsWorkflow = createWorkflow( export const createProductTagsWorkflow = createWorkflow(
createProductTagsWorkflowId, createProductTagsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const productTags = createProductTagsStep(input.product_tags)
): WorkflowResponse<ProductTypes.ProductTagDTO[]> => { const productTagsCreated = createHook("productTagsCreated", {
return new WorkflowResponse(createProductTagsStep(input.product_tags)) product_tags: productTags,
additional_data: input.additional_data,
})
return new WorkflowResponse(productTags, {
hooks: [productTagsCreated],
})
} }
) )
@@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { createProductTypesStep } from "../steps" import { createProductTypesStep } from "../steps"
type WorkflowInput = { product_types: ProductTypes.CreateProductTypeDTO[] } type WorkflowInput = {
product_types: ProductTypes.CreateProductTypeDTO[]
additional_data?: Record<string, unknown>
}
export const createProductTypesWorkflowId = "create-product-types" export const createProductTypesWorkflowId = "create-product-types"
export const createProductTypesWorkflow = createWorkflow( export const createProductTypesWorkflow = createWorkflow(
createProductTypesWorkflowId, createProductTypesWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const productTypes = createProductTypesStep(input.product_types)
): WorkflowResponse<ProductTypes.ProductTypeDTO[]> => { const productTypesCreated = createHook("productTypesCreated", {
return new WorkflowResponse(createProductTypesStep(input.product_types)) product_types: productTypes,
additional_data: input.additional_data,
})
return new WorkflowResponse(productTypes, {
hooks: [productTypesCreated],
})
} }
) )
@@ -3,6 +3,7 @@ import { InventoryTypes, PricingTypes, ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
@@ -24,6 +25,7 @@ type WorkflowInput = {
required_quantity?: number required_quantity?: number
}[] }[]
})[] })[]
additional_data?: Record<string, unknown>
} }
const buildLink = ( const buildLink = (
@@ -118,11 +120,10 @@ const buildVariantItemCreateMap = (data: {
} }
export const createProductVariantsWorkflowId = "create-product-variants" export const createProductVariantsWorkflowId = "create-product-variants"
export const createProductVariantsWorkflow = createWorkflow( export const createProductVariantsWorkflow = createWorkflow(
createProductVariantsWorkflowId, createProductVariantsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductVariantDTO[]> => {
// Passing prices to the product module will fail, we want to keep them for after the variant is created. // Passing prices to the product module will fail, we want to keep them for after the variant is created.
const variantsWithoutPrices = transform({ input }, (data) => const variantsWithoutPrices = transform({ input }, (data) =>
data.input.product_variants.map((v) => ({ data.input.product_variants.map((v) => ({
@@ -224,6 +225,13 @@ export const createProductVariantsWorkflow = createWorkflow(
} }
) )
return new WorkflowResponse(response) const productVariantsCreated = createHook("productVariantsCreated", {
product_variants: response,
additional_data: input.additional_data,
})
return new WorkflowResponse(response, {
hooks: [productVariantsCreated],
})
} }
) )
@@ -7,6 +7,7 @@ import { isPresent } from "@medusajs/utils"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
@@ -16,14 +17,14 @@ import { createProductVariantsWorkflow } from "./create-product-variants"
type WorkflowInput = { type WorkflowInput = {
products: CreateProductWorkflowInputDTO[] products: CreateProductWorkflowInputDTO[]
additional_data?: Record<string, unknown>
} }
export const createProductsWorkflowId = "create-products" export const createProductsWorkflowId = "create-products"
export const createProductsWorkflow = createWorkflow( export const createProductsWorkflow = createWorkflow(
createProductsWorkflowId, createProductsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductDTO[]> => {
// Passing prices to the product module will fail, we want to keep them for after the product is created. // Passing prices to the product module will fail, we want to keep them for after the product is created.
const productWithoutExternalRelations = transform({ input }, (data) => const productWithoutExternalRelations = transform({ input }, (data) =>
data.input.products.map((p) => ({ data.input.products.map((p) => ({
@@ -98,6 +99,13 @@ export const createProductsWorkflow = createWorkflow(
} }
) )
return new WorkflowResponse(response) const productsCreated = createHook("productsCreated", {
products: response,
additional_data: input.additional_data,
})
return new WorkflowResponse(response, {
hooks: [productsCreated],
})
} }
) )
@@ -1,12 +1,25 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteCollectionsStep } from "../steps" import { deleteCollectionsStep } from "../steps"
type WorkflowInput = { ids: string[] } type WorkflowInput = { ids: string[] }
export const deleteCollectionsWorkflowId = "delete-collections" export const deleteCollectionsWorkflowId = "delete-collections"
export const deleteCollectionsWorkflow = createWorkflow( export const deleteCollectionsWorkflow = createWorkflow(
deleteCollectionsWorkflowId, deleteCollectionsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
return deleteCollectionsStep(input.ids) const deletedCollections = deleteCollectionsStep(input.ids)
const collectionsDeleted = createHook("collectionsDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedCollections, {
hooks: [collectionsDeleted],
})
} }
) )
@@ -1,4 +1,9 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductOptionsStep } from "../steps" import { deleteProductOptionsStep } from "../steps"
type WorkflowInput = { ids: string[] } type WorkflowInput = { ids: string[] }
@@ -6,7 +11,14 @@ type WorkflowInput = { ids: string[] }
export const deleteProductOptionsWorkflowId = "delete-product-options" export const deleteProductOptionsWorkflowId = "delete-product-options"
export const deleteProductOptionsWorkflow = createWorkflow( export const deleteProductOptionsWorkflow = createWorkflow(
deleteProductOptionsWorkflowId, deleteProductOptionsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
return deleteProductOptionsStep(input.ids) const deletedProductOptions = deleteProductOptionsStep(input.ids)
const productOptionsDeleted = createHook("productOptionsDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedProductOptions, {
hooks: [productOptionsDeleted],
})
} }
) )
@@ -1,4 +1,9 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductTagsStep } from "../steps" import { deleteProductTagsStep } from "../steps"
type WorkflowInput = { ids: string[] } type WorkflowInput = { ids: string[] }
@@ -6,7 +11,14 @@ type WorkflowInput = { ids: string[] }
export const deleteProductTagsWorkflowId = "delete-product-tags" export const deleteProductTagsWorkflowId = "delete-product-tags"
export const deleteProductTagsWorkflow = createWorkflow( export const deleteProductTagsWorkflow = createWorkflow(
deleteProductTagsWorkflowId, deleteProductTagsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
return deleteProductTagsStep(input.ids) const deletedProductTags = deleteProductTagsStep(input.ids)
const productTagsDeleted = createHook("productTagsDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedProductTags, {
hooks: [productTagsDeleted],
})
} }
) )
@@ -1,4 +1,9 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductTypesStep } from "../steps" import { deleteProductTypesStep } from "../steps"
type WorkflowInput = { ids: string[] } type WorkflowInput = { ids: string[] }
@@ -6,7 +11,14 @@ type WorkflowInput = { ids: string[] }
export const deleteProductTypesWorkflowId = "delete-product-types" export const deleteProductTypesWorkflowId = "delete-product-types"
export const deleteProductTypesWorkflow = createWorkflow( export const deleteProductTypesWorkflow = createWorkflow(
deleteProductTypesWorkflowId, deleteProductTypesWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
return deleteProductTypesStep(input.ids) const deletedProductTypes = deleteProductTypesStep(input.ids)
const productTypesDeleted = createHook("productTypesDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedProductTypes, {
hooks: [productTypesDeleted],
})
} }
) )
@@ -1,4 +1,9 @@
import { createWorkflow, WorkflowData } from "@medusajs/workflows-sdk" import {
createHook,
createWorkflow,
WorkflowData,
WorkflowResponse,
} from "@medusajs/workflows-sdk"
import { deleteProductVariantsStep } from "../steps" import { deleteProductVariantsStep } from "../steps"
import { removeRemoteLinkStep } from "../../common" import { removeRemoteLinkStep } from "../../common"
import { Modules } from "@medusajs/utils" import { Modules } from "@medusajs/utils"
@@ -8,11 +13,18 @@ type WorkflowInput = { ids: string[] }
export const deleteProductVariantsWorkflowId = "delete-product-variants" export const deleteProductVariantsWorkflowId = "delete-product-variants"
export const deleteProductVariantsWorkflow = createWorkflow( export const deleteProductVariantsWorkflow = createWorkflow(
deleteProductVariantsWorkflowId, deleteProductVariantsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
removeRemoteLinkStep({ removeRemoteLinkStep({
[Modules.PRODUCT]: { variant_id: input.ids }, [Modules.PRODUCT]: { variant_id: input.ids },
}).config({ name: "remove-variant-link-step" }) }).config({ name: "remove-variant-link-step" })
return deleteProductVariantsStep(input.ids) const deletedProductVariants = deleteProductVariantsStep(input.ids)
const productVariantsDeleted = createHook("productVariantsDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedProductVariants, {
hooks: [productVariantsDeleted],
})
} }
) )
@@ -1,8 +1,10 @@
import { import {
createHook,
createWorkflow, createWorkflow,
parallelize, parallelize,
transform, transform,
WorkflowData, WorkflowData,
WorkflowResponse,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { removeRemoteLinkStep } from "../../common" import { removeRemoteLinkStep } from "../../common"
import { deleteProductsStep } from "../steps/delete-products" import { deleteProductsStep } from "../steps/delete-products"
@@ -14,7 +16,7 @@ type WorkflowInput = { ids: string[] }
export const deleteProductsWorkflowId = "delete-products" export const deleteProductsWorkflowId = "delete-products"
export const deleteProductsWorkflow = createWorkflow( export const deleteProductsWorkflow = createWorkflow(
deleteProductsWorkflowId, deleteProductsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => { (input: WorkflowData<WorkflowInput>) => {
const productsToDelete = getProductsStep({ ids: input.ids }) const productsToDelete = getProductsStep({ ids: input.ids })
const variantsToBeDeleted = transform({ productsToDelete }, (data) => { const variantsToBeDeleted = transform({ productsToDelete }, (data) => {
return data.productsToDelete return data.productsToDelete
@@ -32,6 +34,12 @@ export const deleteProductsWorkflow = createWorkflow(
deleteProductsStep(input.ids) deleteProductsStep(input.ids)
) )
return deletedProduct const productsDeleted = createHook("productsDeleted", {
ids: input.ids,
})
return new WorkflowResponse(deletedProduct, {
hooks: [productsDeleted],
})
} }
) )
@@ -2,6 +2,7 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { updateCollectionsStep } from "../steps" import { updateCollectionsStep } from "../steps"
@@ -9,6 +10,7 @@ import { updateCollectionsStep } from "../steps"
type UpdateCollectionsStepInput = { type UpdateCollectionsStepInput = {
selector: ProductTypes.FilterableProductCollectionProps selector: ProductTypes.FilterableProductCollectionProps
update: ProductTypes.UpdateProductCollectionDTO update: ProductTypes.UpdateProductCollectionDTO
additional_data?: Record<string, unknown>
} }
type WorkflowInput = UpdateCollectionsStepInput type WorkflowInput = UpdateCollectionsStepInput
@@ -16,9 +18,15 @@ type WorkflowInput = UpdateCollectionsStepInput
export const updateCollectionsWorkflowId = "update-collections" export const updateCollectionsWorkflowId = "update-collections"
export const updateCollectionsWorkflow = createWorkflow( export const updateCollectionsWorkflow = createWorkflow(
updateCollectionsWorkflowId, updateCollectionsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const updatedCollections = updateCollectionsStep(input)
): WorkflowResponse<ProductTypes.ProductCollectionDTO[]> => { const collectionsUpdated = createHook("collectionsUpdated", {
return new WorkflowResponse(updateCollectionsStep(input)) additional_data: input.additional_data,
collections: updateCollectionsStep,
})
return new WorkflowResponse(updatedCollections, {
hooks: [collectionsUpdated],
})
} }
) )
@@ -2,6 +2,7 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { updateProductOptionsStep } from "../steps" import { updateProductOptionsStep } from "../steps"
@@ -9,6 +10,7 @@ import { updateProductOptionsStep } from "../steps"
type UpdateProductOptionsStepInput = { type UpdateProductOptionsStepInput = {
selector: ProductTypes.FilterableProductOptionProps selector: ProductTypes.FilterableProductOptionProps
update: ProductTypes.UpdateProductOptionDTO update: ProductTypes.UpdateProductOptionDTO
additional_data?: Record<string, unknown>
} }
type WorkflowInput = UpdateProductOptionsStepInput type WorkflowInput = UpdateProductOptionsStepInput
@@ -16,9 +18,15 @@ type WorkflowInput = UpdateProductOptionsStepInput
export const updateProductOptionsWorkflowId = "update-product-options" export const updateProductOptionsWorkflowId = "update-product-options"
export const updateProductOptionsWorkflow = createWorkflow( export const updateProductOptionsWorkflow = createWorkflow(
updateProductOptionsWorkflowId, updateProductOptionsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const updatedProductOptions = updateProductOptionsStep(input)
): WorkflowResponse<ProductTypes.ProductOptionDTO[]> => { const productOptionsUpdated = createHook("productOptionsUpdated", {
return new WorkflowResponse(updateProductOptionsStep(input)) product_options: updatedProductOptions,
additional_data: input.additional_data,
})
return new WorkflowResponse(updatedProductOptions, {
hooks: [productOptionsUpdated],
})
} }
) )
@@ -2,6 +2,7 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { updateProductTagsStep } from "../steps" import { updateProductTagsStep } from "../steps"
@@ -9,6 +10,7 @@ import { updateProductTagsStep } from "../steps"
type UpdateProductTagsStepInput = { type UpdateProductTagsStepInput = {
selector: ProductTypes.FilterableProductTypeProps selector: ProductTypes.FilterableProductTypeProps
update: ProductTypes.UpdateProductTypeDTO update: ProductTypes.UpdateProductTypeDTO
additional_data?: Record<string, unknown>
} }
type WorkflowInput = UpdateProductTagsStepInput type WorkflowInput = UpdateProductTagsStepInput
@@ -16,9 +18,14 @@ type WorkflowInput = UpdateProductTagsStepInput
export const updateProductTagsWorkflowId = "update-product-tags" export const updateProductTagsWorkflowId = "update-product-tags"
export const updateProductTagsWorkflow = createWorkflow( export const updateProductTagsWorkflow = createWorkflow(
updateProductTagsWorkflowId, updateProductTagsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const updatedProductTags = updateProductTagsStep(input)
): WorkflowResponse<ProductTypes.ProductTagDTO[]> => { const productTagsUpdated = createHook("productTagsUpdated", {
return new WorkflowResponse(updateProductTagsStep(input)) product_tags: updatedProductTags,
additional_data: input.additional_data,
})
return new WorkflowResponse(updatedProductTags, {
hooks: [productTagsUpdated],
})
} }
) )
@@ -2,6 +2,7 @@ import { ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { updateProductTypesStep } from "../steps" import { updateProductTypesStep } from "../steps"
@@ -9,6 +10,7 @@ import { updateProductTypesStep } from "../steps"
type UpdateProductTypesStepInput = { type UpdateProductTypesStepInput = {
selector: ProductTypes.FilterableProductTypeProps selector: ProductTypes.FilterableProductTypeProps
update: ProductTypes.UpdateProductTypeDTO update: ProductTypes.UpdateProductTypeDTO
additional_data?: Record<string, unknown>
} }
type WorkflowInput = UpdateProductTypesStepInput type WorkflowInput = UpdateProductTypesStepInput
@@ -16,9 +18,15 @@ type WorkflowInput = UpdateProductTypesStepInput
export const updateProductTypesWorkflowId = "update-product-types" export const updateProductTypesWorkflowId = "update-product-types"
export const updateProductTypesWorkflow = createWorkflow( export const updateProductTypesWorkflow = createWorkflow(
updateProductTypesWorkflowId, updateProductTypesWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput> const updatedProductTypes = updateProductTypesStep(input)
): WorkflowResponse<ProductTypes.ProductTypeDTO[]> => { const productTypesUpdated = createHook("productTypesUpdated", {
return new WorkflowResponse(updateProductTypesStep(input)) product_types: updatedProductTypes,
additional_data: input.additional_data,
})
return new WorkflowResponse(updatedProductTypes, {
hooks: [productTypesUpdated],
})
} }
) )
@@ -2,6 +2,7 @@ import { PricingTypes, ProductTypes } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createHook,
createWorkflow, createWorkflow,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
@@ -22,14 +23,14 @@ type UpdateProductVariantsStepInput =
})[] })[]
} }
type WorkflowInput = UpdateProductVariantsStepInput type WorkflowInput = UpdateProductVariantsStepInput & {
additional_data?: Record<string, unknown>
}
export const updateProductVariantsWorkflowId = "update-product-variants" export const updateProductVariantsWorkflowId = "update-product-variants"
export const updateProductVariantsWorkflow = createWorkflow( export const updateProductVariantsWorkflow = createWorkflow(
updateProductVariantsWorkflowId, updateProductVariantsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductVariantDTO[]> => {
// Passing prices to the product module will fail, we want to keep them for after the variant is updated. // Passing prices to the product module will fail, we want to keep them for after the variant is updated.
const updateWithoutPrices = transform({ input }, (data) => { const updateWithoutPrices = transform({ input }, (data) => {
if ("product_variants" in data.input) { if ("product_variants" in data.input) {
@@ -120,7 +121,7 @@ export const updateProductVariantsWorkflow = createWorkflow(
updatedPriceSets, updatedPriceSets,
}, },
(data) => { (data) => {
return data.updatedVariants.map((variant, i) => { return data.updatedVariants.map((variant) => {
const linkForVariant = data.variantPriceSetLinks?.find( const linkForVariant = data.variantPriceSetLinks?.find(
(link) => link.variant_id === variant.id (link) => link.variant_id === variant.id
) )
@@ -134,6 +135,13 @@ export const updateProductVariantsWorkflow = createWorkflow(
} }
) )
return new WorkflowResponse(response) const productVariantsUpdated = createHook("productVariantsUpdated", {
product_variants: response,
additional_data: input.additional_data,
})
return new WorkflowResponse(response, {
hooks: [productVariantsUpdated],
})
} }
) )
@@ -7,6 +7,7 @@ import {
} from "@medusajs/types" } from "@medusajs/types"
import { arrayDifference, Modules } from "@medusajs/utils" import { arrayDifference, Modules } from "@medusajs/utils"
import { import {
createHook,
createWorkflow, createWorkflow,
transform, transform,
WorkflowData, WorkflowData,
@@ -26,6 +27,7 @@ type UpdateProductsStepInputSelector = {
sales_channels?: { id: string }[] sales_channels?: { id: string }[]
variants?: UpdateProductVariantWorkflowInputDTO[] variants?: UpdateProductVariantWorkflowInputDTO[]
} }
additional_data?: Record<string, unknown>
} }
type UpdateProductsStepInputProducts = { type UpdateProductsStepInputProducts = {
@@ -33,6 +35,7 @@ type UpdateProductsStepInputProducts = {
sales_channels?: { id: string }[] sales_channels?: { id: string }[]
variants?: UpdateProductVariantWorkflowInputDTO[] variants?: UpdateProductVariantWorkflowInputDTO[]
})[] })[]
additional_data?: Record<string, unknown>
} }
type UpdateProductsStepInput = type UpdateProductsStepInput =
@@ -210,9 +213,7 @@ function prepareToDeleteSalesChannelLinks({
export const updateProductsWorkflowId = "update-products" export const updateProductsWorkflowId = "update-products"
export const updateProductsWorkflow = createWorkflow( export const updateProductsWorkflow = createWorkflow(
updateProductsWorkflowId, updateProductsWorkflowId,
( (input: WorkflowData<WorkflowInput>) => {
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductDTO[]> => {
const previousVariantIds = getVariantIdsForProductsStep(input) const previousVariantIds = getVariantIdsForProductsStep(input)
const toUpdateInput = transform({ input }, prepareUpdateProductInput) const toUpdateInput = transform({ input }, prepareUpdateProductInput)
@@ -248,9 +249,15 @@ export const updateProductsWorkflow = createWorkflow(
}) })
dismissRemoteLinkStep(toDeleteSalesChannelLinks) dismissRemoteLinkStep(toDeleteSalesChannelLinks)
createRemoteLinkStep(salesChannelLinks) createRemoteLinkStep(salesChannelLinks)
return new WorkflowResponse(updatedProducts) const productsUpdated = createHook("productsUpdated", {
products: updatedProducts,
additional_data: input.additional_data,
})
return new WorkflowResponse(updatedProducts, {
hooks: [productsUpdated],
})
} }
) )