feat(ticket-selector): refactor variant handling to use single variant property and update related tests

This commit is contained in:
2026-08-18 08:51:52 -03:00
parent 207c979f71
commit 43e497cf97
6 changed files with 26 additions and 26 deletions

View File

@@ -574,6 +574,7 @@ describe('StoreLayoutComponent', () => {
product: { product: {
nombre: 'Producto', nombre: 'Producto',
imagen: null, imagen: null,
variant: null,
}, },
}, },
], ],
@@ -627,6 +628,7 @@ describe('StoreLayoutComponent', () => {
product: { product: {
nombre: 'Producto', nombre: 'Producto',
imagen: null, imagen: null,
variant: null,
}, },
}, },
], ],

View File

@@ -70,10 +70,7 @@ export class StoreLayoutComponent implements OnInit {
}); });
} }
const variants = item.product?.variants ?? []; const selectedVariant = item.product?.variant ?? null;
const selectedVariant = item.product?.variants?.find(
(variant) => variant.id === item.variant_id,
);
if (selectedVariant) { if (selectedVariant) {
attributes = Object.entries(selectedVariant.values).map(([label, value]) => ({ attributes = Object.entries(selectedVariant.values).map(([label, value]) => ({
@@ -92,7 +89,6 @@ export class StoreLayoutComponent implements OnInit {
attributes, attributes,
quantity: item.cantidad, quantity: item.cantidad,
variantId: item.variant_id, variantId: item.variant_id,
variants,
}; };
} }

View File

@@ -1,7 +1,7 @@
export interface CartItemProduct { export interface CartItemProduct {
nombre: string; nombre: string;
imagen: string | null; imagen: string | null;
variants?: CartItemVariant[]; variant: CartItemVariant | null;
} }
export interface CartItemVariantOption { export interface CartItemVariantOption {

View File

@@ -27,6 +27,12 @@ describe('CartService', () => {
product: { product: {
nombre: 'Test Product (Size: M)', nombre: 'Test Product (Size: M)',
imagen: null, imagen: null,
variant: {
id: 10,
precio: '10.00',
stock_tecnico: 1,
values: { size: 'M' },
},
}, },
}, },
], ],

View File

@@ -203,17 +203,15 @@ describe('ProductTicketSelectorComponent', () => {
product: { product: {
nombre: 'Entrada', nombre: 'Entrada',
imagen: null, imagen: null,
variants: [ variant: {
{ id: 401,
id: 401, precio: '10000.00',
precio: '10000.00', stock_tecnico: 1,
stock_tecnico: 1, values: {
values: { sector: { value: 'a', label: 'Sector A' },
sector: { value: 'a', label: 'Sector A' }, seat: '1',
seat: '1',
},
}, },
], },
}, },
}, },
], ],
@@ -304,14 +302,12 @@ describe('ProductTicketSelectorComponent', () => {
product: { product: {
nombre: 'Entrada', nombre: 'Entrada',
imagen: null, imagen: null,
variants: [ variant: {
{ id: 401,
id: 401, precio: '10000.00',
precio: '10000.00', stock_tecnico: 0,
stock_tecnico: 0, values: { seat: '1' },
values: { seat: '1' }, },
},
],
}, },
}, },
], ],

View File

@@ -455,8 +455,8 @@ export class ProductTicketSelectorComponent {
private createCartRow(item: CartItem, id = this.nextRowId++): TicketSelectionRow | null { private createCartRow(item: CartItem, id = this.nextRowId++): TicketSelectionRow | null {
if (item.variant_id === null) return null; if (item.variant_id === null) return null;
const variant = item.product?.variants?.find(({ id }) => id === item.variant_id); const variant = item.product?.variant;
if (!variant) return null; if (!variant || variant.id !== item.variant_id) return null;
const selectedValues = this.normalizeCartValues(variant.values); const selectedValues = this.normalizeCartValues(variant.values);