Ship configurator updates with catalog DB included for server deploy. Co-authored-by: Cursor <[email protected]>
111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
/**
|
|
* Dispositions types intégrées, insérées dans `layout_presets` (une fois par seed_key).
|
|
* Le client normalise ensuite blocks / rayons (positions System 32, rayon structurel, etc.).
|
|
*/
|
|
|
|
const TYPE_DEFAULTS = {
|
|
penderie: { shelves: 1, drawers: 0, hasRod: true },
|
|
tiroirs: { shelves: 1, drawers: 3, hasRod: false },
|
|
rayonnage: { shelves: 4, drawers: 0, hasRod: false },
|
|
bloc_carre: { shelves: 0, drawers: 0, hasRod: false },
|
|
mixte: { shelves: 2, drawers: 2, hasRod: true }
|
|
};
|
|
|
|
function column(key, index, type, widthMm, overrides = {}) {
|
|
const hasBack = overrides.hasBack ?? false;
|
|
return {
|
|
id: `preset-${key}-c${index + 1}`,
|
|
type,
|
|
moduleCode: type,
|
|
widthMm,
|
|
minWidth: 300,
|
|
maxWidth: type === 'tiroirs' || type === 'mixte' ? 1000 : 1200,
|
|
position: index,
|
|
locked: false,
|
|
...TYPE_DEFAULTS[type],
|
|
drawerType: 'visible',
|
|
hasBack,
|
|
hasBackTop: hasBack,
|
|
...overrides
|
|
};
|
|
}
|
|
|
|
function layout(key, { name, description, widthMm, heightMm = 2400, depthMm = 600, plinthHeightMm = 100, hasBack = false, columns }) {
|
|
return {
|
|
seedKey: key,
|
|
name,
|
|
description,
|
|
config: {
|
|
widthMm,
|
|
heightMm,
|
|
depthMm,
|
|
plinthHeightMm,
|
|
hasBack,
|
|
stackEnabled: columns.some((c) => Array.isArray(c[2]?.blockHeightsMm) && c[2].blockHeightsMm.length >= 2),
|
|
horizontalSpans: [],
|
|
modules: columns.map(([type, w, overrides], i) => column(key, i, type, w, { hasBack, ...overrides }))
|
|
}
|
|
};
|
|
}
|
|
|
|
/*
|
|
* Penderie au-delà de 2000 mm: une colonne en un seul block exige un rayon structurel à mi-hauteur,
|
|
* ce qui coupe la penderie (< 1100 mm sous tringle). Les penderies sont donc empilées: block bas de
|
|
* 1800 mm (≈ 1710 mm sous tringle, manteaux longs ≥ 1600 mm) + surmeuble; la jonction sert de chapelier.
|
|
*/
|
|
const HANGING = { blockHeightsMm: [1800, 500], shelves: 0 };
|
|
const SURMEUBLE = { blockHeightsMm: [2000, 500] };
|
|
const OPEN = { blockDoors: [false] };
|
|
|
|
export const DEFAULT_LAYOUT_PRESETS = [
|
|
layout('penderie-double', {
|
|
name: 'Penderie double',
|
|
description: 'Deux penderies manteaux longs avec surmeubles',
|
|
widthMm: 1200,
|
|
columns: [['penderie', 600, HANGING], ['penderie', 600, HANGING]]
|
|
}),
|
|
layout('classique-3', {
|
|
name: 'Classique 3 colonnes',
|
|
description: 'Penderie, rayonnage et tiroirs',
|
|
widthMm: 1800,
|
|
columns: [['penderie', 600, HANGING], ['rayonnage', 600], ['tiroirs', 600]]
|
|
}),
|
|
layout('dressing-4', {
|
|
name: 'Dressing 4 colonnes',
|
|
description: 'Deux penderies encadrant tiroirs et rayonnage',
|
|
widthMm: 2400,
|
|
columns: [['penderie', 600, HANGING], ['tiroirs', 600], ['rayonnage', 600], ['penderie', 600, HANGING]]
|
|
}),
|
|
layout('grande-penderie', {
|
|
name: 'Grande penderie',
|
|
description: 'Penderie large, rayonnage et penderie avec tiroirs',
|
|
widthMm: 2000,
|
|
columns: [['penderie', 1000, HANGING], ['rayonnage', 500], ['mixte', 500, HANGING]]
|
|
}),
|
|
layout('surmeubles', {
|
|
name: 'Avec surmeubles',
|
|
description: 'Dressing 4 colonnes surmonté de rangements hauts',
|
|
widthMm: 2400,
|
|
heightMm: 2600,
|
|
columns: [
|
|
['penderie', 600, { ...SURMEUBLE, shelves: 0 }],
|
|
['rayonnage', 600, SURMEUBLE],
|
|
['tiroirs', 600, SURMEUBLE],
|
|
['penderie', 600, { ...SURMEUBLE, shelves: 0 }]
|
|
]
|
|
}),
|
|
layout('bibliotheque', {
|
|
name: 'Bibliothèque ouverte',
|
|
description: 'Trois colonnes de rayonnage sans portes, avec dos',
|
|
widthMm: 1500,
|
|
heightMm: 2200,
|
|
depthMm: 350,
|
|
hasBack: true,
|
|
columns: [
|
|
['rayonnage', 500, { ...OPEN, shelves: 5 }],
|
|
['rayonnage', 500, { ...OPEN, shelves: 5 }],
|
|
['rayonnage', 500, { ...OPEN, shelves: 5 }]
|
|
]
|
|
})
|
|
];
|