feat: implement product detail page and define catalog interfaces

This commit is contained in:
2026-07-01 09:47:47 -03:00
parent b7420c2110
commit 526e8fa76e
2 changed files with 16 additions and 9 deletions

View File

@@ -1,6 +1,5 @@
export interface Product {
id: number;
tenant_codigo: string;
category_id: number;
brand_id: number | null;
slug: string;
@@ -17,7 +16,7 @@ export interface ProductAttributeOption {
value: string;
label: string;
sort_order: number;
metadata: Record<string, any> | null;
metadata: Record<string, unknown> | null;
}
export interface ProductAttribute {
@@ -25,19 +24,27 @@ export interface ProductAttribute {
codigo: string;
nombre: string;
is_required: boolean;
metadata_schema: Record<string, any> | null;
metadata_schema: Record<string, unknown> | null;
type: string;
options: ProductAttributeOption[];
}
export interface ProductVariant {
variant_id: number;
id: number;
stock: number;
definitions: Record<string, string>;
images: string[];
}
export interface ProductVariantMap {
variant_id: number;
stock: number;
attributes: Record<string, string>;
}
export interface ProductDetail extends Product {
attributes: ProductAttribute[];
default_variant: ProductVariant | null;
variants_map: ProductVariantMap[];
variant: ProductVariant | null;
}

View File

@@ -49,8 +49,8 @@ export class ProductDetailPageComponent implements OnInit, OnDestroy {
protected readonly carouselImages = computed(() => {
const prod = this.product();
if (!prod) return [];
if (prod.default_variant?.images && prod.default_variant.images.length > 0) {
return prod.default_variant.images;
if (prod.variant?.images && prod.variant.images.length > 0) {
return prod.variant.images;
}
if (prod.images && prod.images.length > 0) {
return prod.images;
@@ -181,7 +181,7 @@ export class ProductDetailPageComponent implements OnInit, OnDestroy {
}
private initializeSelections(product: ProductDetail): void {
const defaultVariant = product.default_variant;
const defaultVariant = product.variant;
const selections: Record<number, number> = {};
for (const attribute of product.attributes) {
@@ -202,7 +202,7 @@ export class ProductDetailPageComponent implements OnInit, OnDestroy {
return null;
}
const defaultValue = this.getDefaultVariantAttributeValue(attribute, variant.attributes);
const defaultValue = this.getDefaultVariantAttributeValue(attribute, variant.definitions);
if (!defaultValue) {
return null;
}