Feat: Add tax inclusivity to admin (#8003)

* feat: Add price preference to sdk

* feat: Plug tax inclusivity settings for region in UI

* feat: Add price inclusivity indicator to variant and shipping price table columns

* fix: Rename price title to correct variable name

* feat: Add support for tax inclusive crud on region

* fix: Use the region endpoint for updating tax inclusivity

* chore: Factor out price columns from hooks
This commit is contained in:
Stevche Radevski
2024-07-09 09:26:20 +02:00
committed by GitHub
parent 4b391fc3cf
commit cbf2fcd559
34 changed files with 920 additions and 433 deletions

View File

@@ -1,11 +1,13 @@
import { WorkflowTypes } from "@medusajs/types"
import { CreateRegionDTO, WorkflowTypes } from "@medusajs/types"
import {
createWorkflow,
parallelize,
transform,
WorkflowData,
} from "@medusajs/workflows-sdk"
import { createRegionsStep } from "../steps"
import { setRegionsPaymentProvidersStep } from "../steps/set-regions-payment-providers"
import { createPricePreferencesWorkflow } from "../../pricing"
export const createRegionsWorkflowId = "create-regions"
export const createRegionsWorkflow = createWorkflow(
@@ -14,18 +16,22 @@ export const createRegionsWorkflow = createWorkflow(
input: WorkflowData<WorkflowTypes.RegionWorkflow.CreateRegionsWorkflowInput>
): WorkflowData<WorkflowTypes.RegionWorkflow.CreateRegionsWorkflowOutput> => {
const data = transform(input, (data) => {
const regionIndexToPaymentProviders = data.regions.map(
(region, index) => {
return {
region_index: index,
payment_providers: region.payment_providers,
}
const regionIndexToAdditionalData = data.regions.map((region, index) => {
return {
region_index: index,
payment_providers: region.payment_providers,
is_tax_inclusive: region.is_tax_inclusive,
}
)
})
return {
regions: data.regions,
regionIndexToPaymentProviders,
regions: data.regions.map((r) => {
const resp = { ...r }
delete resp.is_tax_inclusive
delete resp.payment_providers
return resp
}),
regionIndexToAdditionalData,
}
})
@@ -33,11 +39,11 @@ export const createRegionsWorkflow = createWorkflow(
const normalizedRegionProviderData = transform(
{
regionIndexToPaymentProviders: data.regionIndexToPaymentProviders,
regionIndexToAdditionalData: data.regionIndexToAdditionalData,
regions,
},
(data) => {
return data.regionIndexToPaymentProviders.map(
return data.regionIndexToAdditionalData.map(
({ region_index, payment_providers }) => {
return {
id: data.regions[region_index].id,
@@ -48,9 +54,32 @@ export const createRegionsWorkflow = createWorkflow(
}
)
setRegionsPaymentProvidersStep({
input: normalizedRegionProviderData,
})
const normalizedRegionPricePreferencesData = transform(
{
regionIndexToAdditionalData: data.regionIndexToAdditionalData,
regions,
},
(data) => {
return data.regionIndexToAdditionalData.map(
({ region_index, is_tax_inclusive }) => {
return {
attribute: "region_id",
value: data.regions[region_index].id,
is_tax_inclusive,
} as WorkflowTypes.PricingWorkflow.CreatePricePreferencesWorkflowInput
}
)
}
)
parallelize(
setRegionsPaymentProvidersStep({
input: normalizedRegionProviderData,
}),
createPricePreferencesWorkflow.runAsStep({
input: normalizedRegionPricePreferencesData,
})
)
return regions
}

View File

@@ -1,11 +1,14 @@
import { WorkflowTypes } from "@medusajs/types"
import {
createWorkflow,
parallelize,
transform,
when,
WorkflowData,
} from "@medusajs/workflows-sdk"
import { updateRegionsStep } from "../steps"
import { setRegionsPaymentProvidersStep } from "../steps/set-regions-payment-providers"
import { updatePricePreferencesWorkflow } from "../../pricing"
export const updateRegionsWorkflowId = "update-regions"
export const updateRegionsWorkflow = createWorkflow(
@@ -13,30 +16,58 @@ export const updateRegionsWorkflow = createWorkflow(
(
input: WorkflowData<WorkflowTypes.RegionWorkflow.UpdateRegionsWorkflowInput>
): WorkflowData<WorkflowTypes.RegionWorkflow.UpdateRegionsWorkflowOutput> => {
const data = transform(input, (data) => {
const normalizedInput = transform(input, (data) => {
const { selector, update } = data
const { payment_providers = [], ...rest } = update
const { payment_providers = [], is_tax_inclusive, ...rest } = update
return {
selector,
update: rest,
payment_providers,
is_tax_inclusive,
}
})
const regions = updateRegionsStep(data)
const regions = updateRegionsStep(normalizedInput)
const upsertProvidersNormalizedInput = transform(
{ data, regions },
{ normalizedInput, regions },
(data) => {
return data.regions.map((region) => {
return {
id: region.id,
payment_providers: data.data.payment_providers,
payment_providers: data.normalizedInput.payment_providers,
}
})
}
)
when({ normalizedInput }, (data) => {
return data.normalizedInput.is_tax_inclusive !== undefined
}).then(() => {
const updatePricePreferencesInput = transform(
{ normalizedInput, regions },
(data) => {
return {
selector: {
$or: data.regions.map((region) => {
return {
attribute: "region_id",
value: region.id,
}
}),
},
update: {
is_tax_inclusive: data.normalizedInput.is_tax_inclusive,
},
} as WorkflowTypes.PricingWorkflow.UpdatePricePreferencesWorkflowInput
}
)
updatePricePreferencesWorkflow.runAsStep({
input: updatePricePreferencesInput,
})
})
setRegionsPaymentProvidersStep({
input: upsertProvidersNormalizedInput,
})