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