From ee826390eabf49f42b73f9ca32d559ed59310e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Sun, 14 Jul 2024 18:00:16 +0200 Subject: [PATCH] fix(dashboard): reservation and price list fixes (#8110) * wip: reservation fixes, PL fixes * fix: delete message and cache invalidation * fix: invalidate inventory item details when reservation is created/updated/deleted * fix: align design * fix: location levels cache --- .../dashboard/src/hooks/api/price-lists.tsx | 8 +++---- .../dashboard/src/hooks/api/reservations.tsx | 22 +++++++++++++++++++ .../dashboard/src/i18n/translations/en.json | 1 + .../inventory-item-general-section.tsx | 4 +++- .../reservation-list-table.tsx | 20 +++++++++++++++-- .../use-reservation-list-table-columns.tsx | 18 +++------------ .../hooks/use-delete-price-list-action.tsx | 2 +- 7 files changed, 52 insertions(+), 23 deletions(-) diff --git a/packages/admin-next/dashboard/src/hooks/api/price-lists.tsx b/packages/admin-next/dashboard/src/hooks/api/price-lists.tsx index a73aca7459..7c3fd1d43d 100644 --- a/packages/admin-next/dashboard/src/hooks/api/price-lists.tsx +++ b/packages/admin-next/dashboard/src/hooks/api/price-lists.tsx @@ -70,7 +70,7 @@ export const useCreatePriceList = ( return useMutation({ mutationFn: (payload) => sdk.admin.priceList.create(payload, query), onSuccess: (data, variables, context) => { - queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.list() }) + queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.lists() }) queryClient.invalidateQueries({ queryKey: customerGroupsQueryKeys.all }) @@ -92,9 +92,9 @@ export const useUpdatePriceList = ( return useMutation({ mutationFn: (payload) => sdk.admin.priceList.update(id, payload, query), onSuccess: (data, variables, context) => { - queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.list() }) + queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.lists() }) queryClient.invalidateQueries({ - queryKey: priceListsQueryKeys.detail(id), + queryKey: priceListsQueryKeys.details(), }) queryClient.invalidateQueries({ queryKey: customerGroupsQueryKeys.all }) @@ -116,7 +116,7 @@ export const useDeletePriceList = ( return useMutation({ mutationFn: () => sdk.admin.priceList.delete(id), onSuccess: (data, variables, context) => { - queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.list() }) + queryClient.invalidateQueries({ queryKey: priceListsQueryKeys.lists() }) options?.onSuccess?.(data, variables, context) }, diff --git a/packages/admin-next/dashboard/src/hooks/api/reservations.tsx b/packages/admin-next/dashboard/src/hooks/api/reservations.tsx index 3941c86a9e..679547ac6f 100644 --- a/packages/admin-next/dashboard/src/hooks/api/reservations.tsx +++ b/packages/admin-next/dashboard/src/hooks/api/reservations.tsx @@ -19,6 +19,10 @@ import { InventoryTypes } from "@medusajs/types" import { client } from "../../lib/client" import { queryClient } from "../../lib/query-client" import { queryKeysFactory } from "../../lib/query-key-factory" +import { + inventoryItemLevelsQueryKeys, + inventoryItemsQueryKeys, +} from "./inventory.tsx" const RESERVATION_ITEMS_QUERY_KEY = "reservation_items" as const export const reservationItemsQueryKeys = queryKeysFactory( @@ -77,6 +81,12 @@ export const useUpdateReservationItem = ( queryClient.invalidateQueries({ queryKey: reservationItemsQueryKeys.lists(), }) + queryClient.invalidateQueries({ + queryKey: inventoryItemsQueryKeys.details(), + }) + queryClient.invalidateQueries({ + queryKey: inventoryItemLevelsQueryKeys.details(), + }) options?.onSuccess?.(data, variables, context) }, ...options, @@ -93,6 +103,12 @@ export const useCreateReservationItem = ( queryClient.invalidateQueries({ queryKey: reservationItemsQueryKeys.lists(), }) + queryClient.invalidateQueries({ + queryKey: inventoryItemsQueryKeys.details(), + }) + queryClient.invalidateQueries({ + queryKey: inventoryItemLevelsQueryKeys.details(), + }) options?.onSuccess?.(data, variables, context) }, ...options, @@ -112,6 +128,12 @@ export const useDeleteReservationItem = ( queryClient.invalidateQueries({ queryKey: reservationItemsQueryKeys.detail(id), }) + queryClient.invalidateQueries({ + queryKey: inventoryItemsQueryKeys.details(), + }) + queryClient.invalidateQueries({ + queryKey: inventoryItemLevelsQueryKeys.details(), + }) options?.onSuccess?.(data, variables, context) }, ...options, diff --git a/packages/admin-next/dashboard/src/i18n/translations/en.json b/packages/admin-next/dashboard/src/i18n/translations/en.json index ff9e735362..28a2013089 100644 --- a/packages/admin-next/dashboard/src/i18n/translations/en.json +++ b/packages/admin-next/dashboard/src/i18n/translations/en.json @@ -579,6 +579,7 @@ "header": "Reservation of {{itemName}}", "editItemDetails": "Edit reservation", "lineItemId": "Line item ID", + "orderID": "Order ID", "description": "Description", "location": "Location", "inStockAtLocation": "In stock at this location", diff --git a/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx b/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx index 67b8fdb0f0..e1eb5e2676 100644 --- a/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx +++ b/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-general-section.tsx @@ -16,7 +16,9 @@ export const InventoryItemGeneralSection = ({ return (
- {inventoryItem.title ?? inventoryItem.sku} + + {inventoryItem.title ?? inventoryItem.sku} {t("fields.details")} + r.location_id), + }) + + const data = useMemo(() => { + const locationMap = new Map((stock_locations || []).map((l) => [l.id, l])) + + return (reservations || []).map((r) => ({ + ...r, + location: locationMap.get(r.location_id), + })) + }, [reservations, stock_locations]) + const columns = useReservationTableColumn({ sku: inventoryItem.sku! }) const { table } = useDataTable({ - data: reservations ?? [], + data: data ?? [], columns, count, enablePagination: true, diff --git a/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns.tsx b/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns.tsx index d9fd4de014..3e256b0eb2 100644 --- a/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns.tsx +++ b/packages/admin-next/dashboard/src/routes/inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns.tsx @@ -5,6 +5,8 @@ import { ReservationActions } from "./reservation-actions" import { createColumnHelper } from "@tanstack/react-table" import { useMemo } from "react" import { useTranslation } from "react-i18next" +import { DateCell } from "../../../../../components/table/table-cells/common/date-cell" +import { CreatedAtCell } from "../../../../../components/table/table-cells/common/created-at-cell" /** * Adds missing properties to the InventoryItemDTO type. @@ -81,21 +83,7 @@ export const useReservationTableColumn = ({ sku }: { sku: string }) => { }), columnHelper.accessor("created_at", { header: t("fields.createdAt"), - cell: ({ getValue }) => { - const createdAt = getValue() - - if (!createdAt) { - return - } - - return ( -
- - {createdAt instanceof Date ? createdAt.toString() : createdAt} - -
- ) - }, + cell: ({ getValue }) => , }), columnHelper.display({ id: "actions", diff --git a/packages/admin-next/dashboard/src/routes/price-lists/common/hooks/use-delete-price-list-action.tsx b/packages/admin-next/dashboard/src/routes/price-lists/common/hooks/use-delete-price-list-action.tsx index 9c42b50f7d..a6f20c4d10 100644 --- a/packages/admin-next/dashboard/src/routes/price-lists/common/hooks/use-delete-price-list-action.tsx +++ b/packages/admin-next/dashboard/src/routes/price-lists/common/hooks/use-delete-price-list-action.tsx @@ -34,7 +34,7 @@ export const useDeletePriceListAction = ({ onSuccess: () => { toast.success( t("priceLists.delete.successToast", { - name: priceList.title, + title: priceList.title, }) )