fix(dashboard, medusa): mark shipped flow (#8065)

* fix: mark shipped routing

* fix: naming
This commit is contained in:
Frane Polić authored and GitHub committed 2024-07-10 19:37:12 +02:00
1 parent e778870c68
commit b289510b46
11 files changed
+81 -13

No files matched your search

@@ -43,10 +43,10 @@ export const useCancelFulfillment = (
}) })
} }
export const useCreateShipment = ( export const useCreateFulfillmentShipment = (
fulfillmentId: string, fulfillmentId: string,
options?: UseMutationOptions< options?: UseMutationOptions<
{ order: HttpTypes.AdminOrder }, { fulfillment: HttpTypes.AdminFulfillment },
Error, Error,
HttpTypes.AdminCreateFulfillmentShipment HttpTypes.AdminCreateFulfillmentShipment
> >
@@ -9,6 +9,7 @@ import {
import { queryClient } from "../../lib/query-client" import { queryClient } from "../../lib/query-client"
import { queryKeysFactory } from "../../lib/query-key-factory" import { queryKeysFactory } from "../../lib/query-key-factory"
import { sdk } from "../../lib/client" import { sdk } from "../../lib/client"
import { AdminCreateOrderShipment, HttpTypes } from "@medusajs/types"
const ORDERS_QUERY_KEY = "orders" as const const ORDERS_QUERY_KEY = "orders" as const
export const ordersQueryKeys = queryKeysFactory(ORDERS_QUERY_KEY) export const ordersQueryKeys = queryKeysFactory(ORDERS_QUERY_KEY)
@@ -81,6 +82,28 @@ export const useCancelOrderFulfillment = (
}) })
} }
export const useCreateOrderShipment = (
orderId: string,
fulfillmentId: string,
options?: UseMutationOptions<
{ order: HttpTypes.AdminOrder },
Error,
HttpTypes.AdminCreateOrderShipment
>
) => {
return useMutation({
mutationFn: (payload: HttpTypes.AdminCreateOrderShipment) =>
sdk.admin.order.createShipment(orderId, fulfillmentId, payload),
onSuccess: (data: any, variables: any, context: any) => {
queryClient.invalidateQueries({
queryKey: ordersQueryKeys.details(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useCancelOrder = ( export const useCancelOrder = (
orderId: string, orderId: string,
options?: UseMutationOptions<any, Error, any> options?: UseMutationOptions<any, Error, any>
@@ -1,15 +1,13 @@
import { z } from "zod" import { z } from "zod"
export const CreateShipmentSchema = z.object({ export const CreateShipmentSchema = z.object({
labels: z labels: z.array(
.array(
z.object({ z.object({
tracking_number: z.string(), tracking_number: z.string(),
// TODO: this 2 are not optional in the API // TODO: this 2 are not optional in the API
tracking_url: z.string().optional(), tracking_url: z.string().optional(),
label_url: z.string().optional(), label_url: z.string().optional(),
}) })
) ),
.min(1),
send_notification: z.boolean().optional(), send_notification: z.boolean().optional(),
}) })
@@ -11,8 +11,8 @@ import {
RouteFocusModal, RouteFocusModal,
useRouteModal, useRouteModal,
} from "../../../../../components/modals" } from "../../../../../components/modals"
import { useCreateShipment } from "../../../../../hooks/api/fulfillment.tsx"
import { CreateShipmentSchema } from "./constants" import { CreateShipmentSchema } from "./constants"
import { useCreateOrderShipment } from "../../../../../hooks/api"
type OrderCreateFulfillmentFormProps = { type OrderCreateFulfillmentFormProps = {
order: AdminOrder order: AdminOrder
@@ -27,12 +27,11 @@ export function OrderCreateShipmentForm({
const { handleSuccess } = useRouteModal() const { handleSuccess } = useRouteModal()
const { mutateAsync: createShipment, isPending: isMutating } = const { mutateAsync: createShipment, isPending: isMutating } =
useCreateShipment(fulfillment.id) useCreateOrderShipment(order.id, fulfillment.id)
const form = useForm<zod.infer<typeof CreateShipmentSchema>>({ const form = useForm<zod.infer<typeof CreateShipmentSchema>>({
defaultValues: { defaultValues: {
labels: [{ tracking_number: "" }], send_notification: !order.no_notification,
send_notification: !order.no_notification, // TODO: not supported in the API
}, },
resolver: zodResolver(CreateShipmentSchema), resolver: zodResolver(CreateShipmentSchema),
}) })
@@ -45,6 +44,10 @@ export function OrderCreateShipmentForm({
const handleSubmit = form.handleSubmit(async (data) => { const handleSubmit = form.handleSubmit(async (data) => {
await createShipment( await createShipment(
{ {
items: fulfillment.items.map((i) => ({
id: i.line_item_id,
quantity: i.quantity,
})),
labels: data.labels labels: data.labels
.filter((l) => !!l.tracking_number) .filter((l) => !!l.tracking_number)
.map((l) => ({ .map((l) => ({
@@ -52,7 +55,7 @@ export function OrderCreateShipmentForm({
tracking_url: "#", tracking_url: "#",
label_url: "#", label_url: "#",
})), })),
// no_notification: !data.send_notification, no_notification: !data.send_notification,
}, },
{ {
onSuccess: () => { onSuccess: () => {
@@ -8,7 +8,7 @@ export function OrderCreateShipment() {
const { id, f_id } = useParams() const { id, f_id } = useParams()
const { order, isLoading, isError, error } = useOrder(id!, { const { order, isLoading, isError, error } = useOrder(id!, {
fields: "*fulfillments", fields: "*fulfillments,*fulfillments.items",
}) })
if (isError) { if (isError) {
+19
View File
@@ -1,4 +1,5 @@
import { import {
AdminCreateOrderShipment,
FindParams, FindParams,
HttpTypes, HttpTypes,
PaginatedResponse, PaginatedResponse,
@@ -77,4 +78,22 @@ export class Order {
} }
) )
} }
async createShipment(
id: string,
fulfillmentId: string,
body: HttpTypes.AdminCreateOrderShipment,
query?: SelectParams,
headers?: ClientHeaders
) {
return await this.client.fetch<{ order: HttpTypes.AdminOrder }>(
`/admin/orders/${id}/fulfillments/${fulfillmentId}/shipments`,
{
method: "POST",
headers,
body,
query,
}
)
}
} }
@@ -19,6 +19,17 @@ export interface AdminCreateOrderFulfillment {
metadata?: Record<string, any> metadata?: Record<string, any>
} }
export interface AdminCreateOrderShipment {
items: { id: string; quantity: number }[]
labels?: {
tracking_number: string
tracking_url: string
label_url: string
}[]
no_notification?: boolean
metadata?: Record<string, any>
}
export interface AdminCancelOrderFulfillment { export interface AdminCancelOrderFulfillment {
no_notification?: boolean no_notification?: boolean
} }
@@ -9,6 +9,7 @@ import {
AdminGetOrdersParams, AdminGetOrdersParams,
AdminOrderCancelFulfillment, AdminOrderCancelFulfillment,
AdminOrderCreateFulfillment, AdminOrderCreateFulfillment,
AdminOrderCreateShipment,
} from "./validators" } from "./validators"
export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [ export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [
@@ -88,4 +89,15 @@ export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [
), ),
], ],
}, },
{
method: ["POST"],
matcher: "/admin/orders/:id/fulfillments/:fulfillment_id/shipments",
middlewares: [
validateAndTransformBody(AdminOrderCreateShipment),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
] ]
@@ -8,7 +8,7 @@ import {
AdminPostReturnsReqSchema, AdminPostReturnsReqSchema,
} from "./validators" } from "./validators"
export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [ export const adminReturnRoutesMiddlewares: MiddlewareRoute[] = [
{ {
method: ["GET"], method: ["GET"],
matcher: "/admin/returns", matcher: "/admin/returns",
+2
View File
@@ -47,6 +47,7 @@ import { storeProductRoutesMiddlewares } from "./store/products/middlewares"
import { storeRegionRoutesMiddlewares } from "./store/regions/middlewares" import { storeRegionRoutesMiddlewares } from "./store/regions/middlewares"
import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middlewares" import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middlewares"
import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares" import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares"
import { adminReturnRoutesMiddlewares } from "./admin/returns/middlewares"
export const config: MiddlewaresConfig = { export const config: MiddlewaresConfig = {
routes: [ routes: [
@@ -67,6 +68,7 @@ export const config: MiddlewaresConfig = {
...adminWorkflowsExecutionsMiddlewares, ...adminWorkflowsExecutionsMiddlewares,
...storeRegionRoutesMiddlewares, ...storeRegionRoutesMiddlewares,
...adminRegionRoutesMiddlewares, ...adminRegionRoutesMiddlewares,
...adminReturnRoutesMiddlewares,
...adminUserRoutesMiddlewares, ...adminUserRoutesMiddlewares,
...adminInviteRoutesMiddlewares, ...adminInviteRoutesMiddlewares,
...adminTaxRateRoutesMiddlewares, ...adminTaxRateRoutesMiddlewares,