From 41528ddecf6933483db4511785d3fca1689bdcf2 Mon Sep 17 00:00:00 2001 From: Riqwan Thamir Date: Thu, 13 Jun 2024 21:29:02 +0200 Subject: [PATCH] fix: ability to update price list status on admin (#7699) --- .../dashboard/src/i18n/translations/en.json | 4 ++ .../src/routes/pricing/common/constants.ts | 5 +++ .../src/routes/pricing/common/utils.ts | 19 +++++---- .../edit-price-list-form.tsx | 39 ++++++++++++++++++- .../dashboard/src/types/api-payloads.ts | 2 +- .../types/src/pricing/common/price-list.ts | 8 ++++ 6 files changed, 67 insertions(+), 10 deletions(-) diff --git a/packages/admin-next/dashboard/src/i18n/translations/en.json b/packages/admin-next/dashboard/src/i18n/translations/en.json index 7cf0c4be41..cb6186c910 100644 --- a/packages/admin-next/dashboard/src/i18n/translations/en.json +++ b/packages/admin-next/dashboard/src/i18n/translations/en.json @@ -1257,7 +1257,11 @@ "pricesHeader": "Prices" }, "fields": { + "statusTooltip": "Status can also be expired or scheduled depending on the start and end date.", "typeHint": "Choose the type of price you want to create.", + "statusHint": "Choose if price should be published to users", + "draftTypeHint": "Prices will not be visible to users in a draft state", + "activeTypeHint": "Prices are visibile to users in an active state", "saleTypeHint": "Sale prices are temporary price changes for products.", "overrideTypeHint": "Overrides are usually used to create customer-specific prices.", "startDateLabel": "Price list has a start date?", diff --git a/packages/admin-next/dashboard/src/routes/pricing/common/constants.ts b/packages/admin-next/dashboard/src/routes/pricing/common/constants.ts index 24218e56e8..aecee622a1 100644 --- a/packages/admin-next/dashboard/src/routes/pricing/common/constants.ts +++ b/packages/admin-next/dashboard/src/routes/pricing/common/constants.ts @@ -6,6 +6,11 @@ export enum PriceListStatus { DRAFT = "draft", } +export enum PriceListDateStatus { + SCHEDULED = "scheduled", + EXPIRED = "expired", +} + /** * Re-implementation of enum from `@medusajs/medusa` as it cannot be imported */ diff --git a/packages/admin-next/dashboard/src/routes/pricing/common/utils.ts b/packages/admin-next/dashboard/src/routes/pricing/common/utils.ts index 5e69ba3085..c5546e2435 100644 --- a/packages/admin-next/dashboard/src/routes/pricing/common/utils.ts +++ b/packages/admin-next/dashboard/src/routes/pricing/common/utils.ts @@ -1,6 +1,6 @@ -import { PriceListDTO, HttpTypes } from "@medusajs/types" +import { HttpTypes, PriceListDTO } from "@medusajs/types" import { TFunction } from "i18next" -import { PriceListStatus } from "./constants" +import { PriceListDateStatus, PriceListStatus } from "./constants" const getValues = (priceList: PriceListDTO) => { const startsAt = priceList.starts_at @@ -25,25 +25,30 @@ export const getPriceListStatus = ( let text = t("pricing.status.active") let color: "red" | "grey" | "orange" | "green" = "green" - - if (isScheduled) { - color = "orange" - text = t("pricing.status.scheduled") - } + let status: string = PriceListStatus.ACTIVE if (isDraft) { color = "grey" text = t("pricing.status.draft") + status = PriceListStatus.DRAFT } if (isExpired) { color = "red" text = t("pricing.status.expired") + status = PriceListDateStatus.EXPIRED + } + + if (isScheduled) { + color = "orange" + text = t("pricing.status.scheduled") + status = PriceListDateStatus.SCHEDULED } return { color, text, + status, } } diff --git a/packages/admin-next/dashboard/src/routes/pricing/pricing-edit/components/edit-price-list-form/edit-price-list-form.tsx b/packages/admin-next/dashboard/src/routes/pricing/pricing-edit/components/edit-price-list-form/edit-price-list-form.tsx index e38d71e50c..8fee19bb66 100644 --- a/packages/admin-next/dashboard/src/routes/pricing/pricing-edit/components/edit-price-list-form/edit-price-list-form.tsx +++ b/packages/admin-next/dashboard/src/routes/pricing/pricing-edit/components/edit-price-list-form/edit-price-list-form.tsx @@ -10,13 +10,14 @@ import { useRouteModal, } from "../../../../../components/route-modal" import { useUpdatePriceList } from "../../../../../hooks/api/price-lists" -import { PriceListType } from "../../../common/constants" +import { PriceListStatus, PriceListType } from "../../../common/constants" type EditPriceListFormProps = { priceList: PriceListDTO } const EditPriceListFormSchema = z.object({ + status: z.nativeEnum(PriceListStatus), type: z.nativeEnum(PriceListType), title: z.string().min(1), description: z.string().min(1), @@ -28,9 +29,10 @@ export const EditPriceListForm = ({ priceList }: EditPriceListFormProps) => { const form = useForm>({ defaultValues: { - type: priceList.type, + type: priceList.type as PriceListType, title: priceList.title, description: priceList.description, + status: priceList.status as PriceListStatus, }, resolver: zodResolver(EditPriceListFormSchema), }) @@ -52,6 +54,39 @@ export const EditPriceListForm = ({ priceList }: EditPriceListFormProps) => { onSubmit={handleSubmit} > + { + return ( + +
+ + {t("fields.status")} + + {t("pricing.fields.statusHint")} +
+ + + + + + + + +
+ ) + }} + /> + export type AddPriceListPricesReq = { prices: { currency_code: string diff --git a/packages/core/types/src/pricing/common/price-list.ts b/packages/core/types/src/pricing/common/price-list.ts index 3d31cd02ca..f826f0f525 100644 --- a/packages/core/types/src/pricing/common/price-list.ts +++ b/packages/core/types/src/pricing/common/price-list.ts @@ -38,6 +38,10 @@ export interface PriceListDTO { * The price list's title. */ title?: string + /** + * The price list's description. + */ + description?: string /** * The price list is enabled starting from this date. */ @@ -46,6 +50,10 @@ export interface PriceListDTO { * The price list's status. */ status?: PriceListStatus + /** + * The price list's type. + */ + type?: PriceListType /** * The price list expires after this date. */