feat(dashboard,js-sdk,medusa): add ability to add outbound items to claim (#8502)
what: - user can add/remove/update outbound items to a claim - adds API to query variants Note: There are several paths that are not implemented yet correctly, but have some code lying around. Those will be tackled in the followup PRs https://github.com/user-attachments/assets/cadb3f7a-982f-44c7-8d7e-9f4f26949f4f RESOLVES CC-330 RESOLVES CC-296
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
import { MiddlewareRoute } from "@medusajs/framework"
|
||||
import { validateAndTransformQuery } from "../../utils/validate-query"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import { AdminGetProductVariantsParams } from "./validators"
|
||||
|
||||
export const adminProductVariantRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/product-variants",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetProductVariantsParams,
|
||||
QueryConfig.listProductVariantQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,39 @@
|
||||
export const defaultAdminProductVariantFields = [
|
||||
"id",
|
||||
"title",
|
||||
"sku",
|
||||
"barcode",
|
||||
"ean",
|
||||
"upc",
|
||||
"allow_backorder",
|
||||
"manage_inventory",
|
||||
"hs_code",
|
||||
"origin_country",
|
||||
"mid_code",
|
||||
"material",
|
||||
"weight",
|
||||
"length",
|
||||
"height",
|
||||
"width",
|
||||
"metadata",
|
||||
"variant_rank",
|
||||
"product_id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"*product",
|
||||
"*prices",
|
||||
"*options",
|
||||
"prices.price_rules.value",
|
||||
"prices.price_rules.attribute",
|
||||
]
|
||||
|
||||
export const retrieveProductVariantQueryConfig = {
|
||||
defaults: defaultAdminProductVariantFields,
|
||||
isList: false,
|
||||
}
|
||||
|
||||
export const listProductVariantQueryConfig = {
|
||||
...retrieveProductVariantQueryConfig,
|
||||
defaultLimit: 50,
|
||||
isList: true,
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { wrapVariantsWithInventoryQuantity } from "../../utils/middlewares"
|
||||
import { refetchEntities } from "../../utils/refetch-entity"
|
||||
import { remapKeysForVariant, remapVariantResponse } from "../products/helpers"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest,
|
||||
res: MedusaResponse<HttpTypes.AdminProductVariantListResponse>
|
||||
) => {
|
||||
const withInventoryQuantity = req.remoteQueryConfig.fields.some((field) =>
|
||||
field.includes("inventory_quantity")
|
||||
)
|
||||
|
||||
if (withInventoryQuantity) {
|
||||
req.remoteQueryConfig.fields = req.remoteQueryConfig.fields.filter(
|
||||
(field) => !field.includes("inventory_quantity")
|
||||
)
|
||||
}
|
||||
|
||||
const { rows: variants, metadata } = await refetchEntities(
|
||||
"variant",
|
||||
{ ...req.filterableFields },
|
||||
req.scope,
|
||||
remapKeysForVariant(req.remoteQueryConfig.fields ?? []),
|
||||
req.remoteQueryConfig.pagination
|
||||
)
|
||||
|
||||
if (withInventoryQuantity) {
|
||||
await wrapVariantsWithInventoryQuantity(req, variants || [])
|
||||
}
|
||||
|
||||
res.json({
|
||||
variants: variants.map(remapVariantResponse),
|
||||
count: metadata.count,
|
||||
offset: metadata.skip,
|
||||
limit: metadata.take,
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { z } from "zod"
|
||||
import { createFindParams, createOperatorMap } from "../../utils/validators"
|
||||
|
||||
export type AdminGetProductVariantsParamsType = z.infer<
|
||||
typeof AdminGetProductVariantsParams
|
||||
>
|
||||
export const AdminGetProductVariantsParams = createFindParams({
|
||||
offset: 0,
|
||||
limit: 50,
|
||||
}).merge(
|
||||
z.object({
|
||||
q: z.string().optional(),
|
||||
id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
manage_inventory: z.boolean().optional(),
|
||||
allow_backorder: z.boolean().optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
deleted_at: createOperatorMap().optional(),
|
||||
$and: z.lazy(() => AdminGetProductVariantsParams.array()).optional(),
|
||||
$or: z.lazy(() => AdminGetProductVariantsParams.array()).optional(),
|
||||
})
|
||||
)
|
||||
@@ -21,6 +21,7 @@ import { adminPricePreferencesRoutesMiddlewares } from "./admin/price-preference
|
||||
import { adminProductCategoryRoutesMiddlewares } from "./admin/product-categories/middlewares"
|
||||
import { adminProductTagRoutesMiddlewares } from "./admin/product-tags/middlewares"
|
||||
import { adminProductTypeRoutesMiddlewares } from "./admin/product-types/middlewares"
|
||||
import { adminProductVariantRoutesMiddlewares } from "./admin/product-variants/middlewares"
|
||||
import { adminProductRoutesMiddlewares } from "./admin/products/middlewares"
|
||||
import { adminPromotionRoutesMiddlewares } from "./admin/promotions/middlewares"
|
||||
import { adminRefundReasonsRoutesMiddlewares } from "./admin/refund-reasons/middlewares"
|
||||
@@ -110,4 +111,5 @@ export default defineMiddlewares([
|
||||
...adminClaimRoutesMiddlewares,
|
||||
...adminRefundReasonsRoutesMiddlewares,
|
||||
...adminExchangeRoutesMiddlewares,
|
||||
...adminProductVariantRoutesMiddlewares,
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user