32 lines
1 KiB
TypeScript
32 lines
1 KiB
TypeScript
import { FORMAT_GROUPS } from "./variants";
|
|
import type { MedusaCart } from "./medusa";
|
|
|
|
/** All physical SKU suffixes (CD, SACD, LP). */
|
|
const PHYSICAL_SUFFIXES = new Set(
|
|
FORMAT_GROUPS.find((g) => g.slug === "physical")?.variants?.map((v) => v.suffix.toUpperCase()) ?? [],
|
|
);
|
|
|
|
/** All digital SKU suffixes. */
|
|
const DIGITAL_SUFFIXES = new Set(
|
|
FORMAT_GROUPS.find((g) => g.slug === "digital")
|
|
?.subgroups?.flatMap((sg) => sg.variants.map((v) => v.suffix.toUpperCase())) ?? [],
|
|
);
|
|
|
|
function skuSuffix(sku: string | null | undefined): string | null {
|
|
if (!sku) return null;
|
|
return sku.split("_").pop()?.toUpperCase() ?? null;
|
|
}
|
|
|
|
export function hasPhysicalItems(cart: MedusaCart): boolean {
|
|
return cart.items.some((item) => {
|
|
const suffix = skuSuffix(item.variant?.sku);
|
|
return suffix !== null && PHYSICAL_SUFFIXES.has(suffix);
|
|
});
|
|
}
|
|
|
|
export function hasDigitalItems(cart: MedusaCart): boolean {
|
|
return cart.items.some((item) => {
|
|
const suffix = skuSuffix(item.variant?.sku);
|
|
return suffix !== null && DIGITAL_SUFFIXES.has(suffix);
|
|
});
|
|
}
|