613 lines
20 KiB
TypeScript
613 lines
20 KiB
TypeScript
/**
|
|
* Demo catalog content.
|
|
*
|
|
* Brands are fictional on purpose — seeding a repository with real trademarks
|
|
* is a liability nobody needs, and it makes it obvious this is sample data.
|
|
*
|
|
* Every entity carries both locales so the language switcher has something real
|
|
* to switch between. A few fields are deliberately left untranslated (see
|
|
* `sizes`, and the description on one product) to exercise the field-level
|
|
* fallback in `coalesce`.
|
|
*/
|
|
|
|
export interface Localised {
|
|
vi: string;
|
|
en: string;
|
|
}
|
|
|
|
export interface BrandSeed {
|
|
key: string;
|
|
name: Localised;
|
|
slug: Localised;
|
|
description: Localised;
|
|
}
|
|
|
|
export const BRANDS: BrandSeed[] = [
|
|
{
|
|
key: 'velocity',
|
|
name: { vi: 'Velocity', en: 'Velocity' },
|
|
slug: { vi: 'velocity', en: 'velocity' },
|
|
description: {
|
|
vi: 'Đồ chạy bộ hiệu suất cao, thiết kế cho tốc độ và quãng đường dài.',
|
|
en: 'High-performance running gear built for speed and distance.',
|
|
},
|
|
},
|
|
{
|
|
key: 'ridgeline',
|
|
name: { vi: 'Ridgeline', en: 'Ridgeline' },
|
|
slug: { vi: 'ridgeline', en: 'ridgeline' },
|
|
description: {
|
|
vi: 'Trang phục tập luyện bền bỉ cho phòng gym và ngoài trời.',
|
|
en: 'Durable training apparel for the gym and the outdoors.',
|
|
},
|
|
},
|
|
{
|
|
key: 'kinetix',
|
|
name: { vi: 'Kinetix', en: 'Kinetix' },
|
|
slug: { vi: 'kinetix', en: 'kinetix' },
|
|
description: {
|
|
vi: 'Phong cách thể thao đường phố, mặc từ sân tập đến phố.',
|
|
en: 'Sport-street essentials that move from session to street.',
|
|
},
|
|
},
|
|
];
|
|
|
|
export interface CategorySeed {
|
|
path: string;
|
|
parentPath: string | null;
|
|
position: number;
|
|
name: Localised;
|
|
slug: Localised;
|
|
}
|
|
|
|
export const CATEGORIES: CategorySeed[] = [
|
|
{
|
|
path: 'men',
|
|
parentPath: null,
|
|
position: 0,
|
|
name: { vi: 'Nam', en: 'Men' },
|
|
slug: { vi: 'nam', en: 'men' },
|
|
},
|
|
{
|
|
path: 'women',
|
|
parentPath: null,
|
|
position: 1,
|
|
name: { vi: 'Nữ', en: 'Women' },
|
|
slug: { vi: 'nu', en: 'women' },
|
|
},
|
|
|
|
{
|
|
path: 'men/tops',
|
|
parentPath: 'men',
|
|
position: 0,
|
|
name: { vi: 'Áo', en: 'Tops' },
|
|
slug: { vi: 'ao-nam', en: 'mens-tops' },
|
|
},
|
|
{
|
|
path: 'men/bottoms',
|
|
parentPath: 'men',
|
|
position: 1,
|
|
name: { vi: 'Quần', en: 'Bottoms' },
|
|
slug: { vi: 'quan-nam', en: 'mens-bottoms' },
|
|
},
|
|
{
|
|
path: 'men/footwear',
|
|
parentPath: 'men',
|
|
position: 2,
|
|
name: { vi: 'Giày', en: 'Footwear' },
|
|
slug: { vi: 'giay-nam', en: 'mens-footwear' },
|
|
},
|
|
|
|
{
|
|
path: 'women/tops',
|
|
parentPath: 'women',
|
|
position: 0,
|
|
name: { vi: 'Áo', en: 'Tops' },
|
|
slug: { vi: 'ao-nu', en: 'womens-tops' },
|
|
},
|
|
{
|
|
path: 'women/bottoms',
|
|
parentPath: 'women',
|
|
position: 1,
|
|
name: { vi: 'Quần', en: 'Bottoms' },
|
|
slug: { vi: 'quan-nu', en: 'womens-bottoms' },
|
|
},
|
|
{
|
|
path: 'women/footwear',
|
|
parentPath: 'women',
|
|
position: 2,
|
|
name: { vi: 'Giày', en: 'Footwear' },
|
|
slug: { vi: 'giay-nu', en: 'womens-footwear' },
|
|
},
|
|
];
|
|
|
|
export interface CollectionSeed {
|
|
key: string;
|
|
position: number;
|
|
name: Localised;
|
|
slug: Localised;
|
|
description: Localised;
|
|
}
|
|
|
|
export const COLLECTIONS: CollectionSeed[] = [
|
|
{
|
|
key: 'new-arrivals',
|
|
position: 0,
|
|
name: { vi: 'Hàng mới về', en: 'New Arrivals' },
|
|
slug: { vi: 'hang-moi-ve', en: 'new-arrivals' },
|
|
description: {
|
|
vi: 'Những mẫu mới nhất vừa cập bến.',
|
|
en: 'The latest pieces, just landed.',
|
|
},
|
|
},
|
|
{
|
|
key: 'summer-drop',
|
|
position: 1,
|
|
name: { vi: 'Bộ sưu tập Hè', en: 'Summer Drop' },
|
|
slug: { vi: 'bo-suu-tap-he', en: 'summer-drop' },
|
|
description: {
|
|
vi: 'Chất liệu nhẹ, thoáng khí cho những ngày nóng nhất.',
|
|
en: 'Lightweight, breathable fabrics for the hottest sessions.',
|
|
},
|
|
},
|
|
{
|
|
key: 'sale',
|
|
position: 2,
|
|
name: { vi: 'Giảm giá', en: 'Sale' },
|
|
slug: { vi: 'giam-gia', en: 'sale' },
|
|
description: {
|
|
vi: 'Ưu đãi có thời hạn trên các mẫu chọn lọc.',
|
|
en: 'Limited-time pricing on selected styles.',
|
|
},
|
|
},
|
|
];
|
|
|
|
export interface ColourSeed {
|
|
value: string;
|
|
label: Localised;
|
|
hex: string;
|
|
}
|
|
|
|
export const COLOURS: Record<string, ColourSeed> = {
|
|
black: { value: 'black', label: { vi: 'Đen', en: 'Black' }, hex: '#16181d' },
|
|
white: { value: 'white', label: { vi: 'Trắng', en: 'White' }, hex: '#f2f2ef' },
|
|
slate: { value: 'slate', label: { vi: 'Xám đá', en: 'Slate' }, hex: '#4a5361' },
|
|
volt: { value: 'volt', label: { vi: 'Xanh neon', en: 'Volt' }, hex: '#c7f227' },
|
|
crimson: { value: 'crimson', label: { vi: 'Đỏ thẫm', en: 'Crimson' }, hex: '#b4232a' },
|
|
navy: { value: 'navy', label: { vi: 'Xanh navy', en: 'Navy' }, hex: '#1d2a45' },
|
|
sand: { value: 'sand', label: { vi: 'Be cát', en: 'Sand' }, hex: '#d8c9b0' },
|
|
teal: { value: 'teal', label: { vi: 'Xanh ngọc', en: 'Teal' }, hex: '#1f6f6b' },
|
|
};
|
|
|
|
export type Gender = 'MEN' | 'WOMEN' | 'KIDS' | 'UNISEX';
|
|
export type Sport = 'RUNNING' | 'FOOTBALL' | 'TRAINING' | 'GYM' | 'BADMINTON' | 'LIFESTYLE';
|
|
|
|
export interface ProductSeed {
|
|
key: string;
|
|
skuPrefix: string;
|
|
brand: string;
|
|
categoryPath: string;
|
|
genders: Gender[];
|
|
sports: Sport[];
|
|
collections: string[];
|
|
colours: string[];
|
|
sizes: string[];
|
|
/** VND, integer minor units (VND has no minor unit). */
|
|
price: number;
|
|
/** Present on discounted products only. */
|
|
salePrice?: number;
|
|
compareAt?: number;
|
|
weightGrams: number;
|
|
name: Localised;
|
|
slug: Localised;
|
|
shortDescription: Localised;
|
|
description: Localised;
|
|
attributes: { key: string; label: Localised; value: Localised }[];
|
|
}
|
|
|
|
const APPAREL_SIZES = ['XS', 'S', 'M', 'L', 'XL'];
|
|
const SHOE_SIZES = ['39', '40', '41', '42', '43'];
|
|
|
|
export const PRODUCTS: ProductSeed[] = [
|
|
{
|
|
key: 'aero-run-tee',
|
|
skuPrefix: 'VEL-ART',
|
|
brand: 'velocity',
|
|
categoryPath: 'men/tops',
|
|
genders: ['MEN'],
|
|
sports: ['RUNNING', 'TRAINING'],
|
|
collections: ['new-arrivals', 'summer-drop'],
|
|
colours: ['black', 'white', 'volt'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 690000,
|
|
weightGrams: 135,
|
|
name: { vi: 'Áo Chạy Bộ Aero', en: 'Aero Run Tee' },
|
|
slug: { vi: 'ao-chay-bo-aero', en: 'aero-run-tee' },
|
|
shortDescription: {
|
|
vi: 'Áo chạy siêu nhẹ với công nghệ thoát ẩm.',
|
|
en: 'Ultralight running tee with moisture-wicking knit.',
|
|
},
|
|
description: {
|
|
vi: 'Được thiết kế cho những buổi chạy dài dưới nắng. Chất liệu dệt kim siêu nhẹ đưa mồ hôi ra bề mặt và khô nhanh, trong khi đường may phẳng loại bỏ ma sát ở vai và sườn.',
|
|
en: 'Built for long runs in the heat. An ultralight knit pulls sweat to the surface and dries fast, while flatlock seams remove the friction points at the shoulder and ribs.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '92% Polyester, 8% Elastane', en: '92% polyester, 8% elastane' },
|
|
},
|
|
{
|
|
key: 'fit',
|
|
label: { vi: 'Kiểu dáng', en: 'Fit' },
|
|
value: { vi: 'Ôm vừa', en: 'Athletic fit' },
|
|
},
|
|
{
|
|
key: 'care',
|
|
label: { vi: 'Bảo quản', en: 'Care' },
|
|
value: { vi: 'Giặt máy lạnh, không sấy', en: 'Machine wash cold, do not tumble dry' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'tempo-split-short',
|
|
skuPrefix: 'VEL-TSS',
|
|
brand: 'velocity',
|
|
categoryPath: 'men/bottoms',
|
|
genders: ['MEN'],
|
|
sports: ['RUNNING'],
|
|
collections: ['summer-drop'],
|
|
colours: ['black', 'navy'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 850000,
|
|
salePrice: 595000,
|
|
compareAt: 850000,
|
|
weightGrams: 110,
|
|
name: { vi: 'Quần Short Chạy Tempo', en: 'Tempo Split Short' },
|
|
slug: { vi: 'quan-short-chay-tempo', en: 'tempo-split-short' },
|
|
shortDescription: {
|
|
vi: 'Short xẻ tà 4 inch với lớp lót liền.',
|
|
en: 'Four-inch split-hem short with a bonded liner.',
|
|
},
|
|
description: {
|
|
vi: 'Short xẻ tà cho sải chân tự do tuyệt đối. Lớp lót liền giữ form, túi sau có khoá kéo đủ chỗ cho chìa khoá và thẻ.',
|
|
en: 'A split hem gives the stride complete freedom. The bonded liner holds its shape, and the zipped rear pocket takes a key and a card without bouncing.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '100% Polyester tái chế', en: '100% recycled polyester' },
|
|
},
|
|
{
|
|
key: 'inseam',
|
|
label: { vi: 'Chiều dài ống', en: 'Inseam' },
|
|
value: { vi: '10 cm', en: '10 cm' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'forge-training-hoodie',
|
|
skuPrefix: 'RDG-FTH',
|
|
brand: 'ridgeline',
|
|
categoryPath: 'men/tops',
|
|
genders: ['MEN', 'UNISEX'],
|
|
sports: ['GYM', 'TRAINING'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['slate', 'black', 'sand'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 1490000,
|
|
weightGrams: 520,
|
|
name: { vi: 'Áo Hoodie Tập Luyện Forge', en: 'Forge Training Hoodie' },
|
|
slug: { vi: 'ao-hoodie-tap-luyen-forge', en: 'forge-training-hoodie' },
|
|
shortDescription: {
|
|
vi: 'Hoodie nỉ dày cho buổi khởi động và nghỉ giữa hiệp.',
|
|
en: 'Heavyweight fleece hoodie for warm-ups and rest days.',
|
|
},
|
|
description: {
|
|
vi: 'Nỉ bông chải dày 380gsm giữ nhiệt qua phần khởi động, cổ tay bo sườn giữ ống tay đúng chỗ khi kéo tạ.',
|
|
en: 'A brushed 380gsm fleece holds heat through the warm-up, and ribbed cuffs keep the sleeves where you put them under the bar.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '80% Cotton, 20% Polyester', en: '80% cotton, 20% polyester' },
|
|
},
|
|
{
|
|
key: 'weight',
|
|
label: { vi: 'Định lượng', en: 'Fabric weight' },
|
|
value: { vi: '380 gsm', en: '380 gsm' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'grid-training-short',
|
|
skuPrefix: 'RDG-GTS',
|
|
brand: 'ridgeline',
|
|
categoryPath: 'men/bottoms',
|
|
genders: ['MEN'],
|
|
sports: ['GYM', 'TRAINING'],
|
|
collections: ['sale'],
|
|
colours: ['black', 'slate'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 790000,
|
|
salePrice: 550000,
|
|
compareAt: 790000,
|
|
weightGrams: 190,
|
|
name: { vi: 'Quần Short Tập Grid', en: 'Grid Training Short' },
|
|
slug: { vi: 'quan-short-tap-grid', en: 'grid-training-short' },
|
|
shortDescription: {
|
|
vi: 'Short co giãn 4 chiều cho squat và lunge.',
|
|
en: 'Four-way stretch short for squats and lunges.',
|
|
},
|
|
description: {
|
|
vi: 'Vải co giãn bốn chiều với gusset ở đáy quần cho biên độ squat sâu mà không bị kéo căng.',
|
|
en: 'Four-way stretch woven with a gusseted crotch, so a deep squat never pulls the waistband down with it.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '88% Nylon, 12% Elastane', en: '88% nylon, 12% elastane' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'flux-seamless-leggings',
|
|
skuPrefix: 'RDG-FSL',
|
|
brand: 'ridgeline',
|
|
categoryPath: 'women/bottoms',
|
|
genders: ['WOMEN'],
|
|
sports: ['GYM', 'TRAINING'],
|
|
collections: ['new-arrivals', 'summer-drop'],
|
|
colours: ['black', 'teal', 'sand'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 1290000,
|
|
weightGrams: 240,
|
|
name: { vi: 'Quần Legging Liền Mạch Flux', en: 'Flux Seamless Leggings' },
|
|
slug: { vi: 'quan-legging-lien-mach-flux', en: 'flux-seamless-leggings' },
|
|
shortDescription: {
|
|
vi: 'Legging dệt liền mạch, cạp cao, không lộ.',
|
|
en: 'Seamless high-waist leggings with squat-proof knit.',
|
|
},
|
|
description: {
|
|
vi: 'Dệt liền mạch loại bỏ đường may ở đùi trong — nơi gây khó chịu nhất. Cạp cao ôm sát và giữ nguyên vị trí suốt buổi tập.',
|
|
en: 'A seamless knit removes the inner-thigh seam entirely, which is where irritation always starts. The high waistband stays put for the whole session.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '75% Nylon, 25% Elastane', en: '75% nylon, 25% elastane' },
|
|
},
|
|
{
|
|
key: 'rise',
|
|
label: { vi: 'Cạp quần', en: 'Rise' },
|
|
value: { vi: 'Cạp cao', en: 'High rise' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'aria-training-bra',
|
|
skuPrefix: 'RDG-ATB',
|
|
brand: 'ridgeline',
|
|
categoryPath: 'women/tops',
|
|
genders: ['WOMEN'],
|
|
sports: ['GYM', 'TRAINING', 'RUNNING'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['black', 'white', 'crimson'],
|
|
sizes: ['XS', 'S', 'M', 'L'],
|
|
price: 690000,
|
|
weightGrams: 95,
|
|
name: { vi: 'Áo Bra Tập Luyện Aria', en: 'Aria Training Bra' },
|
|
slug: { vi: 'ao-bra-tap-luyen-aria', en: 'aria-training-bra' },
|
|
shortDescription: {
|
|
vi: 'Nâng đỡ mức trung bình, lưng chữ Y thoáng khí.',
|
|
en: 'Medium support with a breathable Y-back.',
|
|
},
|
|
description: {
|
|
vi: 'Nâng đỡ mức trung bình cho tập tạ và chạy nhẹ. Lưng chữ Y mở rộng vai và giữ dây không trượt.',
|
|
en: 'Medium support for lifting and easy runs. The Y-back opens the shoulders and keeps the straps from wandering.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'support',
|
|
label: { vi: 'Mức nâng đỡ', en: 'Support' },
|
|
value: { vi: 'Trung bình', en: 'Medium' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'stride-runner',
|
|
skuPrefix: 'VEL-STR',
|
|
brand: 'velocity',
|
|
categoryPath: 'men/footwear',
|
|
genders: ['MEN', 'UNISEX'],
|
|
sports: ['RUNNING'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['white', 'volt', 'navy'],
|
|
sizes: SHOE_SIZES,
|
|
price: 3290000,
|
|
weightGrams: 245,
|
|
name: { vi: 'Giày Chạy Stride', en: 'Stride Runner' },
|
|
slug: { vi: 'giay-chay-stride', en: 'stride-runner' },
|
|
shortDescription: {
|
|
vi: 'Giày chạy hằng ngày với đế đàn hồi cao.',
|
|
en: 'Daily trainer with a high-rebound midsole.',
|
|
},
|
|
description: {
|
|
vi: 'Đế giữa siêu nhẹ trả lại năng lượng qua từng bước, phù hợp cho cả buổi chạy phục hồi lẫn chạy dài cuối tuần.',
|
|
en: 'A supercritical foam midsole returns energy step after step — equally at home on a recovery jog and a weekend long run.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'drop',
|
|
label: { vi: 'Độ chênh gót', en: 'Heel drop' },
|
|
value: { vi: '8 mm', en: '8 mm' },
|
|
},
|
|
{
|
|
key: 'use',
|
|
label: { vi: 'Mục đích', en: 'Best for' },
|
|
value: { vi: 'Chạy đường nhựa hằng ngày', en: 'Daily road running' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'pivot-court-shoe',
|
|
skuPrefix: 'KNX-PCS',
|
|
brand: 'kinetix',
|
|
categoryPath: 'women/footwear',
|
|
genders: ['WOMEN'],
|
|
sports: ['BADMINTON'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['white', 'teal'],
|
|
sizes: ['36', '37', '38', '39'],
|
|
price: 2490000,
|
|
salePrice: 1990000,
|
|
compareAt: 2490000,
|
|
weightGrams: 280,
|
|
name: { vi: 'Giày Cầu Lông Pivot', en: 'Pivot Court Shoe' },
|
|
slug: { vi: 'giay-cau-long-pivot', en: 'pivot-court-shoe' },
|
|
shortDescription: {
|
|
vi: 'Đế bám sân, hỗ trợ đổi hướng nhanh.',
|
|
en: 'Grippy non-marking outsole for fast direction changes.',
|
|
},
|
|
description: {
|
|
vi: 'Đế ngoài không để lại vệt, bám chắc khi bước lunge về trước và ổn định phần giữa bàn chân khi đổi hướng đột ngột.',
|
|
en: 'A non-marking outsole bites on the forward lunge, and a reinforced midfoot keeps the shoe under you through sharp changes of direction.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'outsole',
|
|
label: { vi: 'Đế ngoài', en: 'Outsole' },
|
|
value: { vi: 'Cao su không vệt', en: 'Non-marking rubber' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'match-football-jersey',
|
|
skuPrefix: 'KNX-MFJ',
|
|
brand: 'kinetix',
|
|
categoryPath: 'men/tops',
|
|
genders: ['MEN', 'UNISEX'],
|
|
sports: ['FOOTBALL'],
|
|
collections: ['summer-drop'],
|
|
colours: ['crimson', 'navy', 'white'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 950000,
|
|
weightGrams: 155,
|
|
name: { vi: 'Áo Đấu Bóng Đá Match', en: 'Match Football Jersey' },
|
|
slug: { vi: 'ao-dau-bong-da-match', en: 'match-football-jersey' },
|
|
shortDescription: {
|
|
vi: 'Áo đấu thoáng khí với lưới thoát nhiệt.',
|
|
en: 'Breathable match jersey with ventilated mesh.',
|
|
},
|
|
description: {
|
|
vi: 'Các tấm lưới đặt đúng vị trí toả nhiệt ở lưng và nách, phần thân dài hơn giữ áo trong quần suốt trận.',
|
|
en: 'Mesh panels sit exactly where heat builds — the back and the underarms — and a longer body keeps the shirt tucked for the full ninety.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '100% Polyester tái chế', en: '100% recycled polyester' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'district-track-jacket',
|
|
skuPrefix: 'KNX-DTJ',
|
|
brand: 'kinetix',
|
|
categoryPath: 'men/tops',
|
|
genders: ['UNISEX'],
|
|
sports: ['LIFESTYLE'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['black', 'sand', 'teal'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 1690000,
|
|
weightGrams: 420,
|
|
name: { vi: 'Áo Khoác Track District', en: 'District Track Jacket' },
|
|
slug: { vi: 'ao-khoac-track-district', en: 'district-track-jacket' },
|
|
shortDescription: {
|
|
vi: 'Áo khoác track phom retro cho phố xá.',
|
|
en: 'Retro-cut track jacket for off-duty days.',
|
|
},
|
|
// Vietnamese description intentionally omitted below to exercise the
|
|
// field-level translation fallback — the VI page shows this English copy.
|
|
description: {
|
|
vi: '',
|
|
en: 'A retro track cut with a full-length zip and side stripes, in a heavier tricot that hangs properly instead of clinging.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'fit',
|
|
label: { vi: 'Kiểu dáng', en: 'Fit' },
|
|
value: { vi: 'Rộng vừa', en: 'Relaxed fit' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'core-lifting-tank',
|
|
skuPrefix: 'RDG-CLT',
|
|
brand: 'ridgeline',
|
|
categoryPath: 'men/tops',
|
|
genders: ['MEN'],
|
|
sports: ['GYM'],
|
|
collections: ['sale', 'summer-drop'],
|
|
colours: ['black', 'slate', 'volt'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 490000,
|
|
salePrice: 340000,
|
|
compareAt: 490000,
|
|
weightGrams: 120,
|
|
name: { vi: 'Áo Ba Lỗ Tập Tạ Core', en: 'Core Lifting Tank' },
|
|
slug: { vi: 'ao-ba-lo-tap-ta-core', en: 'core-lifting-tank' },
|
|
shortDescription: {
|
|
vi: 'Áo ba lỗ nách rộng, thoáng cho ngày tập tạ.',
|
|
en: 'Drop-armhole tank that stays out of the way under the bar.',
|
|
},
|
|
description: {
|
|
vi: 'Nách khoét sâu cho vai chuyển động tự do khi đẩy qua đầu, thân áo đủ dài để không bị kéo lên khi deadlift.',
|
|
en: 'A dropped armhole lets the shoulder travel freely overhead, and the body runs long enough that it does not ride up mid-deadlift.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'material',
|
|
label: { vi: 'Chất liệu', en: 'Material' },
|
|
value: { vi: '60% Cotton, 40% Polyester', en: '60% cotton, 40% polyester' },
|
|
},
|
|
],
|
|
},
|
|
{
|
|
key: 'lumen-running-jacket',
|
|
skuPrefix: 'VEL-LRJ',
|
|
brand: 'velocity',
|
|
categoryPath: 'women/tops',
|
|
genders: ['WOMEN'],
|
|
sports: ['RUNNING', 'LIFESTYLE'],
|
|
collections: ['new-arrivals'],
|
|
colours: ['volt', 'black'],
|
|
sizes: APPAREL_SIZES,
|
|
price: 1890000,
|
|
weightGrams: 180,
|
|
name: { vi: 'Áo Khoác Chạy Lumen', en: 'Lumen Running Jacket' },
|
|
slug: { vi: 'ao-khoac-chay-lumen', en: 'lumen-running-jacket' },
|
|
shortDescription: {
|
|
vi: 'Áo khoác gió nhẹ, phản quang 360°.',
|
|
en: 'Featherweight windbreaker with 360° reflectivity.',
|
|
},
|
|
description: {
|
|
vi: 'Chắn gió mà không giữ nhiệt, chi tiết phản quang quanh thân giúp bạn được nhìn thấy từ mọi hướng khi chạy sớm hoặc tối.',
|
|
en: 'Cuts the wind without trapping heat, and reflective detailing wraps the whole body so early and late runs stay visible from every angle.',
|
|
},
|
|
attributes: [
|
|
{
|
|
key: 'packable',
|
|
label: { vi: 'Gấp gọn', en: 'Packable' },
|
|
value: { vi: 'Gấp vào túi ngực', en: 'Packs into its chest pocket' },
|
|
},
|
|
],
|
|
},
|
|
];
|