feat(cart): refactor CartItem structure to remove nested product object and simplify access to properties
This commit is contained in:
@@ -571,11 +571,9 @@ describe('StoreLayoutComponent', () => {
|
|||||||
precio_unitario: '100.00',
|
precio_unitario: '100.00',
|
||||||
catalog_item_id: 1,
|
catalog_item_id: 1,
|
||||||
variant_id: null,
|
variant_id: null,
|
||||||
product: {
|
nombre: 'Producto',
|
||||||
nombre: 'Producto',
|
imagen: null,
|
||||||
imagen: null,
|
variant: null,
|
||||||
variant: null,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
@@ -625,11 +623,9 @@ describe('StoreLayoutComponent', () => {
|
|||||||
precio_unitario: '100.00',
|
precio_unitario: '100.00',
|
||||||
catalog_item_id: 1,
|
catalog_item_id: 1,
|
||||||
variant_id: null,
|
variant_id: null,
|
||||||
product: {
|
nombre: 'Producto',
|
||||||
nombre: 'Producto',
|
imagen: null,
|
||||||
imagen: null,
|
variant: null,
|
||||||
variant: null,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ export class StoreLayoutComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
|
|
||||||
private mapCartItemToMock(item: CartItem): CartItemMock {
|
private mapCartItemToMock(item: CartItem): CartItemMock {
|
||||||
const fullName = item.product?.nombre ?? '';
|
const fullName = item.nombre ?? '';
|
||||||
let product = fullName;
|
let product = fullName;
|
||||||
let attributes: { label: string; value: string }[] = [];
|
let attributes: { label: string; value: string }[] = [];
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ export class StoreLayoutComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectedVariant = item.product?.variant ?? null;
|
const selectedVariant = item.variant;
|
||||||
|
|
||||||
if (selectedVariant) {
|
if (selectedVariant) {
|
||||||
attributes = Object.entries(selectedVariant.values).map(([label, value]) => ({
|
attributes = Object.entries(selectedVariant.values).map(([label, value]) => ({
|
||||||
@@ -81,7 +81,7 @@ export class StoreLayoutComponent implements OnInit {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
cartItemId: item.id,
|
cartItemId: item.id,
|
||||||
imageUrl: item.product?.imagen ?? null,
|
imageUrl: item.imagen,
|
||||||
product,
|
product,
|
||||||
originalPrice: null,
|
originalPrice: null,
|
||||||
discountedPrice: parseFloat(item.precio_unitario),
|
discountedPrice: parseFloat(item.precio_unitario),
|
||||||
|
|||||||
@@ -1,9 +1,3 @@
|
|||||||
export interface CartItemProduct {
|
|
||||||
nombre: string;
|
|
||||||
imagen: string | null;
|
|
||||||
variant: CartItemVariant | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CartItemVariantOption {
|
export interface CartItemVariantOption {
|
||||||
value: string;
|
value: string;
|
||||||
label: string;
|
label: string;
|
||||||
@@ -27,7 +21,9 @@ export interface CartItem {
|
|||||||
precio_unitario: string;
|
precio_unitario: string;
|
||||||
catalog_item_id: number;
|
catalog_item_id: number;
|
||||||
variant_id: number | null;
|
variant_id: number | null;
|
||||||
product: CartItemProduct | null;
|
nombre: string | null;
|
||||||
|
imagen: string | null;
|
||||||
|
variant: CartItemVariant | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Cart {
|
export interface Cart {
|
||||||
|
|||||||
@@ -24,15 +24,13 @@ describe('CartService', () => {
|
|||||||
precio_unitario: '10.00',
|
precio_unitario: '10.00',
|
||||||
catalog_item_id: 5,
|
catalog_item_id: 5,
|
||||||
variant_id: 10,
|
variant_id: 10,
|
||||||
product: {
|
nombre: 'Test Product (Size: M)',
|
||||||
nombre: 'Test Product (Size: M)',
|
imagen: null,
|
||||||
imagen: null,
|
variant: {
|
||||||
variant: {
|
id: 10,
|
||||||
id: 10,
|
precio: '10.00',
|
||||||
precio: '10.00',
|
stock_tecnico: 1,
|
||||||
stock_tecnico: 1,
|
values: { size: 'M' },
|
||||||
values: { size: 'M' },
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ export class CartComponent {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
cartItemId: item.id,
|
cartItemId: item.id,
|
||||||
productName: item.product?.nombre ?? 'este producto',
|
productName: item.nombre ?? 'este producto',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,9 @@ describe('ProductTicketSelectorComponent', () => {
|
|||||||
precio_unitario: '10000.00',
|
precio_unitario: '10000.00',
|
||||||
catalog_item_id: 7,
|
catalog_item_id: 7,
|
||||||
variant_id: 401,
|
variant_id: 401,
|
||||||
product: null,
|
nombre: 'Entrada',
|
||||||
|
imagen: null,
|
||||||
|
variant: resolvedVariant,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -200,17 +202,15 @@ describe('ProductTicketSelectorComponent', () => {
|
|||||||
precio_unitario: '10000.00',
|
precio_unitario: '10000.00',
|
||||||
catalog_item_id: 7,
|
catalog_item_id: 7,
|
||||||
variant_id: 401,
|
variant_id: 401,
|
||||||
product: {
|
nombre: 'Entrada',
|
||||||
nombre: 'Entrada',
|
imagen: null,
|
||||||
imagen: null,
|
variant: {
|
||||||
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',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -299,15 +299,13 @@ describe('ProductTicketSelectorComponent', () => {
|
|||||||
precio_unitario: '10000.00',
|
precio_unitario: '10000.00',
|
||||||
catalog_item_id: 7,
|
catalog_item_id: 7,
|
||||||
variant_id: 401,
|
variant_id: 401,
|
||||||
product: {
|
nombre: 'Entrada',
|
||||||
nombre: 'Entrada',
|
imagen: null,
|
||||||
imagen: null,
|
variant: {
|
||||||
variant: {
|
id: 401,
|
||||||
id: 401,
|
precio: '10000.00',
|
||||||
precio: '10000.00',
|
stock_tecnico: 0,
|
||||||
stock_tecnico: 0,
|
values: { seat: '1' },
|
||||||
values: { seat: '1' },
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -455,7 +455,7 @@ 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?.variant;
|
const variant = item.variant;
|
||||||
if (!variant || variant.id !== item.variant_id) return null;
|
if (!variant || variant.id !== item.variant_id) return null;
|
||||||
|
|
||||||
const selectedValues = this.normalizeCartValues(variant.values);
|
const selectedValues = this.normalizeCartValues(variant.values);
|
||||||
|
|||||||
Reference in New Issue
Block a user