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:
Riqwan Thamir
2024-08-08 12:20:13 +00:00
committed by GitHub
parent 9cd66bc842
commit 85ed025705
20 changed files with 1052 additions and 83 deletions
@@ -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(),
})
)
+2
View File
@@ -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,
])