v2.1
Ship configurator updates with catalog DB included for server deploy. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 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 }]
|
||||
]
|
||||
})
|
||||
];
|
||||
Reference in New Issue
Block a user