From dbb10ff0514b6cd46597f57e5a588e8d81336db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Sun, 1 Sep 2024 09:49:14 +0200 Subject: [PATCH] feat(dashboard): order edits in timeline (#8899) **What** - add order edit confirmed/created events in the timeline - add order change endpoint clients - panel for active edit and pending edit - few fixes around the edit domain --- .../dashboard/src/hooks/api/order-edits.tsx | 12 +++ .../dashboard/src/hooks/api/orders.tsx | 27 +++++ .../dashboard/src/i18n/translations/en.json | 12 ++- .../order-active-edit-section.tsx | 36 +++++-- .../order-activity-section/order-timeline.tsx | 100 +++++++++++++++++- .../order-summary-section.tsx | 11 +- packages/core/js-sdk/src/admin/order.ts | 15 +++ .../types/src/http/order/admin/entities.ts | 1 + .../types/src/http/order/admin/queries.ts | 4 + packages/core/types/src/http/order/common.ts | 7 ++ 10 files changed, 213 insertions(+), 12 deletions(-) diff --git a/packages/admin-next/dashboard/src/hooks/api/order-edits.tsx b/packages/admin-next/dashboard/src/hooks/api/order-edits.tsx index f6378db891..796d975aa4 100644 --- a/packages/admin-next/dashboard/src/hooks/api/order-edits.tsx +++ b/packages/admin-next/dashboard/src/hooks/api/order-edits.tsx @@ -50,6 +50,10 @@ export const useRequestOrderEdit = ( queryClient.invalidateQueries({ queryKey: ordersQueryKeys.preview(id), }) + + queryClient.invalidateQueries({ + queryKey: ordersQueryKeys.changes(id), + }) options?.onSuccess?.(data, variables, context) }, ...options, @@ -74,6 +78,10 @@ export const useConfirmOrderEdit = ( queryClient.invalidateQueries({ queryKey: ordersQueryKeys.preview(id), }) + + queryClient.invalidateQueries({ + queryKey: ordersQueryKeys.changes(id), + }) options?.onSuccess?.(data, variables, context) }, ...options, @@ -94,6 +102,10 @@ export const useCancelOrderEdit = ( queryClient.invalidateQueries({ queryKey: ordersQueryKeys.preview(orderId), }) + + queryClient.invalidateQueries({ + queryKey: ordersQueryKeys.changes(id), + }) options?.onSuccess?.(data, variables, context) }, ...options, diff --git a/packages/admin-next/dashboard/src/hooks/api/orders.tsx b/packages/admin-next/dashboard/src/hooks/api/orders.tsx index 43ca8ade9b..45d4b565cd 100644 --- a/packages/admin-next/dashboard/src/hooks/api/orders.tsx +++ b/packages/admin-next/dashboard/src/hooks/api/orders.tsx @@ -18,12 +18,17 @@ const _orderKeys = queryKeysFactory(ORDERS_QUERY_KEY) as TQueryKey< string > & { preview: (orderId: string) => any + changes: (orderId: string) => any } _orderKeys.preview = function (id: string) { return [this.detail(id), "preview"] } +_orderKeys.changes = function (id: string) { + return [this.detail(id), "changes"] +} + export const ordersQueryKeys = _orderKeys export const useOrder = ( @@ -81,6 +86,28 @@ export const useOrders = ( return { ...data, ...rest } } +export const useOrderChanges = ( + id: string, + query?: HttpTypes.AdminOrderChangesFilters, + options?: Omit< + UseQueryOptions< + HttpTypes.AdminOrderChangesResponse, + Error, + HttpTypes.AdminOrderChangesResponse, + QueryKey + >, + "queryFn" | "queryKey" + > +) => { + const { data, ...rest } = useQuery({ + queryFn: async () => sdk.admin.order.listChanges(id, query), + queryKey: ordersQueryKeys.changes(id), + ...options, + }) + + return { ...data, ...rest } +} + export const useCreateOrderFulfillment = ( orderId: string, options?: UseMutationOptions< diff --git a/packages/admin-next/dashboard/src/i18n/translations/en.json b/packages/admin-next/dashboard/src/i18n/translations/en.json index cd5e23e8c1..9d8a3ea4ff 100644 --- a/packages/admin-next/dashboard/src/i18n/translations/en.json +++ b/packages/admin-next/dashboard/src/i18n/translations/en.json @@ -105,6 +105,7 @@ "revoke": "Revoke", "cancel": "Cancel", "forceConfirm": "Force confirm", + "continueEdit": "Continue edit", "enable": "Enable", "disable": "Disable", "undo": "Undo", @@ -837,7 +838,8 @@ "summary": { "requestReturn": "Request return", "allocateItems": "Allocate items", - "editOrder": "Edit order" + "editOrder": "Edit order", + "editOrderContinue": "Continue order edit" }, "payment": { "title": "Payments", @@ -890,7 +892,8 @@ "createSuccessToast": "Order edit request created", "activeChangeError": "There is already active order change on the order (return, claim, exchange etc.). Please finish or cancel the change before editing the order.", "panel": { - "title": "Order edit requested" + "title": "Order edit requested", + "titlePending": "Order edit pending" }, "toast": { "canceledSuccessfully": "Order edit cancelled", @@ -1162,6 +1165,11 @@ "created": "Exchange #{{exchangeId}} requested", "itemsInbound": "{{count}} item to return", "itemsOutbound": "{{count}} item to send" + }, + "edit": { + "requested": "Order edit #{{editId}} requested", + "requested": "Order edit #{{editId}} requested", + "confirmed": "Order edit #{{editId}} confirmed" } } } diff --git a/packages/admin-next/dashboard/src/routes/orders/order-detail/components/order-active-edit-section/order-active-edit-section.tsx b/packages/admin-next/dashboard/src/routes/orders/order-detail/components/order-active-edit-section/order-active-edit-section.tsx index 4b901e9541..bd3cc3d541 100644 --- a/packages/admin-next/dashboard/src/routes/orders/order-detail/components/order-active-edit-section/order-active-edit-section.tsx +++ b/packages/admin-next/dashboard/src/routes/orders/order-detail/components/order-active-edit-section/order-active-edit-section.tsx @@ -10,6 +10,7 @@ import { import { useMemo } from "react" import { HttpTypes } from "@medusajs/types" import { Thumbnail } from "../../../../../components/common/thumbnail" +import { useNavigate } from "react-router-dom" type OrderActiveEditSectionProps = { order: HttpTypes.AdminOrder @@ -51,12 +52,15 @@ export const OrderActiveEditSection = ({ order, }: OrderActiveEditSectionProps) => { const { t } = useTranslation() + const navigate = useNavigate() const { order: orderPreview } = useOrderPreview(order.id) const { mutateAsync: cancelOrderEdit } = useCancelOrderEdit(order.id) const { mutateAsync: confirmOrderEdit } = useConfirmOrderEdit(order.id) + const isPending = orderPreview.order_change?.status === "pending" + const [addedItems, removedItems] = useMemo(() => { const added = [] const removed = [] @@ -125,7 +129,13 @@ export const OrderActiveEditSection = ({