Files
apex/server/db/defaultLayouts.js
T
lejayandCursor 30921aade6 v2.1
Ship configurator updates with catalog DB included for server deploy.

Co-authored-by: Cursor <[email protected]>
2026-10-07 17:13:03 +02:00

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 }]
]
})
];