feat(catalog): adopt subject-aware availability contract
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import { CatalogAvailability } from './catalog.interface';
|
||||
|
||||
export const AVAILABLE_CATALOG_AVAILABILITY: CatalogAvailability = {
|
||||
subject: 'product',
|
||||
maximum_quantity: null,
|
||||
restrictions: [],
|
||||
capabilities: {
|
||||
display: true,
|
||||
select_variant: true,
|
||||
change_quantity: true,
|
||||
add_to_cart: true,
|
||||
@@ -11,21 +13,25 @@ export const AVAILABLE_CATALOG_AVAILABILITY: CatalogAvailability = {
|
||||
},
|
||||
};
|
||||
|
||||
export function createCatalogAvailability(maximumQuantity: number | null): CatalogAvailability {
|
||||
export function createCatalogAvailability(
|
||||
maximumQuantity: number | null,
|
||||
subject: CatalogAvailability['subject'] = 'product',
|
||||
): CatalogAvailability {
|
||||
const unavailable = maximumQuantity === 0;
|
||||
|
||||
return {
|
||||
subject,
|
||||
maximum_quantity: maximumQuantity,
|
||||
restrictions: unavailable
|
||||
? [
|
||||
{
|
||||
code: 'out_of_stock',
|
||||
message: 'Este producto no tiene stock disponible.',
|
||||
scope: 'product',
|
||||
},
|
||||
]
|
||||
: [],
|
||||
capabilities: {
|
||||
display: !unavailable,
|
||||
select_variant: !unavailable,
|
||||
change_quantity: !unavailable,
|
||||
add_to_cart: !unavailable,
|
||||
|
||||
@@ -52,10 +52,10 @@ export type InventoryPolicy = 'tracked' | 'unlimited';
|
||||
export interface CatalogRestriction {
|
||||
code: 'out_of_stock' | 'user_quota_reached' | string;
|
||||
message: string;
|
||||
scope: 'product' | 'variant' | string;
|
||||
}
|
||||
|
||||
export interface CatalogCapabilities {
|
||||
display: boolean;
|
||||
select_variant: boolean;
|
||||
change_quantity: boolean;
|
||||
add_to_cart: boolean;
|
||||
@@ -63,6 +63,7 @@ export interface CatalogCapabilities {
|
||||
}
|
||||
|
||||
export interface CatalogAvailability {
|
||||
subject: 'product' | 'variant';
|
||||
maximum_quantity: number | null;
|
||||
restrictions: CatalogRestriction[];
|
||||
capabilities: CatalogCapabilities;
|
||||
|
||||
@@ -24,6 +24,7 @@ export interface VariantSelectorVariant {
|
||||
values: Record<string, VariantAttributeValue>;
|
||||
availability?: {
|
||||
capabilities: {
|
||||
display: boolean;
|
||||
select_variant: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user