fix(dashboard, medusa): mark shipped flow (#8065)
* fix: mark shipped routing * fix: naming
This commit is contained in:
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>
|
||||||
|
|||||||
+2
-4
@@ -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(),
|
||||||
})
|
})
|
||||||
+8
-5
@@ -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: () => {
|
||||||
|
|||||||
+1
-1
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
File renamed without changes.
@@ -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",
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user