)}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
)
}
@@ -314,7 +314,7 @@ const findRuleValue = (
rules: HttpTypes.AdminShippingOptionPriceRule[],
operator: string
) => {
- const fallbackValue = ["eq", "gt", "lt"].includes(operator) ? undefined : ""
+ const fallbackValue = ["eq", "gt", "lt"].includes(operator) ? undefined : null
return (
rules?.find((r) => r.attribute === "total" && r.operator === operator)
From 848e2c877777bdbddb1df7f8266b49f05884a74d Mon Sep 17 00:00:00 2001
From: Kasper Fabricius Kristensen
<45367945+kasperkristensen@users.noreply.github.com>
Date: Mon, 9 Dec 2024 09:06:25 +0100
Subject: [PATCH 13/13] update according to new API
---
.../shipping-option-price-cell.tsx | 2 +-
.../src/routes/locations/common/constants.ts | 3 ++
.../common/utils/price-rule-helpers.ts | 41 +++++++++++++++++
...location-fulfillment-providers-section.tsx | 5 +-
.../create-shipping-options-form.tsx | 29 ++----------
.../edit-shipping-options-pricing-form.tsx | 46 ++++++-------------
6 files changed, 65 insertions(+), 61 deletions(-)
create mode 100644 packages/admin/dashboard/src/routes/locations/common/utils/price-rule-helpers.ts
diff --git a/packages/admin/dashboard/src/routes/locations/common/components/shipping-option-price-cell/shipping-option-price-cell.tsx b/packages/admin/dashboard/src/routes/locations/common/components/shipping-option-price-cell/shipping-option-price-cell.tsx
index 0f2522ced32ac..856e4ad93957b 100644
--- a/packages/admin/dashboard/src/routes/locations/common/components/shipping-option-price-cell/shipping-option-price-cell.tsx
+++ b/packages/admin/dashboard/src/routes/locations/common/components/shipping-option-price-cell/shipping-option-price-cell.tsx
@@ -118,7 +118,7 @@ const OuterComponent = ({
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
- if (isAnchor && (e.metaKey || e.ctrlKey) && e.key === "b") {
+ if (isAnchor && (e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "b") {
e.preventDefault()
buttonRef.current?.click()
}
diff --git a/packages/admin/dashboard/src/routes/locations/common/constants.ts b/packages/admin/dashboard/src/routes/locations/common/constants.ts
index 04fbf0c17f29e..3d5e2e30e1407 100644
--- a/packages/admin/dashboard/src/routes/locations/common/constants.ts
+++ b/packages/admin/dashboard/src/routes/locations/common/constants.ts
@@ -11,3 +11,6 @@ export enum ShippingOptionPriceType {
export const GEO_ZONE_STACKED_MODAL_ID = "geo-zone"
export const CONDITIONAL_PRICES_STACKED_MODAL_ID = "conditional-prices"
+
+export const ITEM_TOTAL_ATTRIBUTE = "item_total"
+export const REGION_ID_ATTRIBUTE = "region_id"
diff --git a/packages/admin/dashboard/src/routes/locations/common/utils/price-rule-helpers.ts b/packages/admin/dashboard/src/routes/locations/common/utils/price-rule-helpers.ts
new file mode 100644
index 0000000000000..a47493f0a9aa1
--- /dev/null
+++ b/packages/admin/dashboard/src/routes/locations/common/utils/price-rule-helpers.ts
@@ -0,0 +1,41 @@
+import { castNumber } from "../../../../lib/cast-number"
+import { ITEM_TOTAL_ATTRIBUTE } from "../constants"
+
+const createPriceRule = (
+ attribute: string,
+ operator: string,
+ value: string | number
+) => {
+ const rule = {
+ attribute,
+ operator,
+ value: castNumber(value),
+ }
+
+ return rule
+}
+
+export const buildShippingOptionPriceRules = (rule: {
+ gte?: string | number | null
+ lte?: string | number | null
+ gt?: string | number | null
+ lt?: string | number | null
+ eq?: string | number | null
+}) => {
+ const conditions = [
+ { value: rule.gte, operator: "gte" },
+ { value: rule.lte, operator: "lte" },
+ { value: rule.gt, operator: "gt" },
+ { value: rule.lt, operator: "lt" },
+ { value: rule.eq, operator: "eq" },
+ ]
+
+ const conditionsWithValues = conditions.filter(({ value }) => value) as {
+ value: string | number
+ operator: string
+ }[]
+
+ return conditionsWithValues.map(({ operator, value }) =>
+ createPriceRule(ITEM_TOTAL_ATTRIBUTE, operator, value)
+ )
+}
diff --git a/packages/admin/dashboard/src/routes/locations/location-detail/components/location-fulfillment-providers-section/location-fulfillment-providers-section.tsx b/packages/admin/dashboard/src/routes/locations/location-detail/components/location-fulfillment-providers-section/location-fulfillment-providers-section.tsx
index cc68879a0de92..0a94bb2504dea 100644
--- a/packages/admin/dashboard/src/routes/locations/location-detail/components/location-fulfillment-providers-section/location-fulfillment-providers-section.tsx
+++ b/packages/admin/dashboard/src/routes/locations/location-detail/components/location-fulfillment-providers-section/location-fulfillment-providers-section.tsx
@@ -1,6 +1,7 @@
import { HandTruck, PencilSquare } from "@medusajs/icons"
import { HttpTypes } from "@medusajs/types"
import { Container, Heading } from "@medusajs/ui"
+import { Fragment } from "react"
import { useTranslation } from "react-i18next"
import { ActionMenu } from "../../../../../components/common/action-menu"
@@ -50,7 +51,7 @@ function LocationsFulfillmentProvidersSection({
{fulfillment_providers?.map((fulfillmentProvider) => {
return (
- <>
+
@@ -58,7 +59,7 @@ function LocationsFulfillmentProvidersSection({
{formatProvider(fulfillmentProvider.id)}
- >
+
)
})}
diff --git a/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create/components/create-shipping-options-form/create-shipping-options-form.tsx b/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create/components/create-shipping-options-form/create-shipping-options-form.tsx
index f14473f6ed5b5..1ed449e6c8533 100644
--- a/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create/components/create-shipping-options-form/create-shipping-options-form.tsx
+++ b/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create/components/create-shipping-options-form/create-shipping-options-form.tsx
@@ -13,6 +13,7 @@ import { KeyboundForm } from "../../../../../components/utilities/keybound-form"
import { useCreateShippingOptions } from "../../../../../hooks/api/shipping-options"
import { castNumber } from "../../../../../lib/cast-number"
import { ShippingOptionPriceType } from "../../../common/constants"
+import { buildShippingOptionPriceRules } from "../../../common/utils/price-rule-helpers"
import { CreateShippingOptionDetailsForm } from "./create-shipping-option-details-form"
import { CreateShippingOptionsPricesForm } from "./create-shipping-options-prices-form"
import {
@@ -62,30 +63,6 @@ export function CreateShippingOptionsForm({
const { mutateAsync, isPending: isLoading } = useCreateShippingOptions()
- const createPriceRule = (
- attribute: string,
- operator: string,
- value: string | number
- ) => ({
- attribute,
- operator,
- value: castNumber(value),
- })
-
- const buildRules = (rule: {
- gte?: string | number | null
- lte?: string | number | null
- }) => {
- const conditions = [
- { value: rule.gte, operator: "gte" },
- { value: rule.lte, operator: "lte" },
- ]
-
- return conditions
- .filter(({ value }) => value)
- .map(({ operator, value }) => createPriceRule("total", operator, value!))
- }
-
const handleSubmit = form.handleSubmit(async (data) => {
const currencyPrices = Object.entries(data.currency_prices)
.map(([code, value]) => {
@@ -120,7 +97,7 @@ export function CreateShippingOptionsForm({
value?.map((rule) => ({
region_id: region_id,
amount: castNumber(rule.amount),
- rules: buildRules(rule),
+ rules: buildShippingOptionPriceRules(rule),
})) || []
return prices?.filter(Boolean)
@@ -133,7 +110,7 @@ export function CreateShippingOptionsForm({
value?.map((rule) => ({
currency_code,
amount: castNumber(rule.amount),
- rules: buildRules(rule),
+ rules: buildShippingOptionPriceRules(rule),
})) || []
return prices?.filter(Boolean)
diff --git a/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing/components/create-shipping-options-form/edit-shipping-options-pricing-form.tsx b/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing/components/create-shipping-options-form/edit-shipping-options-pricing-form.tsx
index b38c5b8acb383..8b2659b251b76 100644
--- a/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing/components/create-shipping-options-form/edit-shipping-options-pricing-form.tsx
+++ b/packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing/components/create-shipping-options-form/edit-shipping-options-pricing-form.tsx
@@ -22,13 +22,18 @@ import { useStore } from "../../../../../hooks/api/store"
import { castNumber } from "../../../../../lib/cast-number"
import { ConditionalPriceForm } from "../../../common/components/conditional-price-form"
import { ShippingOptionPriceProvider } from "../../../common/components/shipping-option-price-provider"
-import { CONDITIONAL_PRICES_STACKED_MODAL_ID } from "../../../common/constants"
+import {
+ CONDITIONAL_PRICES_STACKED_MODAL_ID,
+ ITEM_TOTAL_ATTRIBUTE,
+ REGION_ID_ATTRIBUTE,
+} from "../../../common/constants"
import { useShippingOptionPriceColumns } from "../../../common/hooks/use-shipping-option-price-columns"
import {
UpdateConditionalPrice,
UpdateConditionalPriceSchema,
} from "../../../common/schema"
import { ConditionalPriceInfo } from "../../../common/types"
+import { buildShippingOptionPriceRules } from "../../../common/utils/price-rule-helpers"
type PriceRecord = {
id?: string
@@ -124,30 +129,6 @@ export function EditShippingOptionsPricingForm({
[currencies, regions]
)
- const createPriceRule = (
- attribute: string,
- operator: string,
- value: string | number
- ) => ({
- attribute,
- operator,
- value: castNumber(value),
- })
-
- const buildRules = (rule: UpdateConditionalPrice) => {
- const conditions = [
- { value: rule.gte, operator: "gte" },
- { value: rule.lte, operator: "lte" },
- { value: rule.gt, operator: "gt" },
- { value: rule.lt, operator: "lt" },
- { value: rule.eq, operator: "eq" },
- ]
-
- return conditions
- .filter(({ value }) => value)
- .map(({ operator, value }) => createPriceRule("total", operator, value!))
- }
-
const handleSubmit = form.handleSubmit(async (data) => {
const currencyPrices = Object.entries(data.currency_prices)
.map(([code, value]) => {
@@ -182,7 +163,7 @@ export function EditShippingOptionsPricingForm({
id: rule.id,
currency_code,
amount: castNumber(rule.amount),
- rules: buildRules(rule),
+ rules: buildShippingOptionPriceRules(rule),
}))
)
@@ -212,7 +193,7 @@ export function EditShippingOptionsPricingForm({
id: rule.id,
region_id,
amount: castNumber(rule.amount),
- rules: buildRules(rule),
+ rules: buildShippingOptionPriceRules(rule),
}))
)
@@ -317,8 +298,9 @@ const findRuleValue = (
const fallbackValue = ["eq", "gt", "lt"].includes(operator) ? undefined : null
return (
- rules?.find((r) => r.attribute === "total" && r.operator === operator)
- ?.value || fallbackValue
+ rules?.find(
+ (r) => r.attribute === ITEM_TOTAL_ATTRIBUTE && r.operator === operator
+ )?.value || fallbackValue
)
}
@@ -363,7 +345,7 @@ const getDefaultValues = (prices: HttpTypes.AdminShippingOptionPrice[]) => {
return
}
- if (hasAttributes(price, ["total"], ["region_id"])) {
+ if (hasAttributes(price, [ITEM_TOTAL_ATTRIBUTE], [REGION_ID_ATTRIBUTE])) {
const code = price.currency_code!
if (!conditional_currency_prices[code]) {
conditional_currency_prices[code] = []
@@ -372,13 +354,13 @@ const getDefaultValues = (prices: HttpTypes.AdminShippingOptionPrice[]) => {
return
}
- if (hasAttributes(price, ["region_id"], ["total"])) {
+ if (hasAttributes(price, [REGION_ID_ATTRIBUTE], [ITEM_TOTAL_ATTRIBUTE])) {
const regionId = price.price_rules[0].value
region_prices[regionId] = price.amount
return
}
- if (hasAttributes(price, ["region_id", "total"])) {
+ if (hasAttributes(price, [REGION_ID_ATTRIBUTE, ITEM_TOTAL_ATTRIBUTE])) {
const regionId = price.price_rules[0].value
if (!conditional_region_prices[regionId]) {
conditional_region_prices[regionId] = []