@mostajs/setup 2.1.6 → 2.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -443,15 +443,29 @@ export default function SetupWizard({ t: tProp, onComplete, endpoints = {}, dbNa
|
|
|
443
443
|
.then((data) => {
|
|
444
444
|
const seeds = data.config?.seeds ?? [];
|
|
445
445
|
setAvailableSeeds(seeds);
|
|
446
|
-
// Initialize seedOptions from defaults
|
|
446
|
+
// Initialize seedOptions from defaults
|
|
447
447
|
setSeedOptions(prev => {
|
|
448
|
-
if (Object.keys(prev).length > 0)
|
|
449
|
-
return prev;
|
|
450
448
|
const defaults = {};
|
|
451
449
|
for (const s of seeds)
|
|
452
|
-
defaults[s.key] = s.default;
|
|
450
|
+
defaults[s.key] = prev[s.key] ?? s.default;
|
|
453
451
|
return defaults;
|
|
454
452
|
});
|
|
453
|
+
// Load modules from setup.json if not provided via props
|
|
454
|
+
const mods = data.config?.modules ?? [];
|
|
455
|
+
if (mods.length > 0 && availableModules.length === 0) {
|
|
456
|
+
setAvailableModules(mods.map((m) => ({
|
|
457
|
+
key: m.key, packageName: m.packageName || m.key,
|
|
458
|
+
label: m.label || m.key, description: m.description || '',
|
|
459
|
+
icon: m.icon || '', required: m.required || false,
|
|
460
|
+
dependsOn: m.dependsOn || [], installed: false,
|
|
461
|
+
})));
|
|
462
|
+
// Pre-select required modules
|
|
463
|
+
setSelectedModules(prev => {
|
|
464
|
+
if (prev.length > 0)
|
|
465
|
+
return prev;
|
|
466
|
+
return mods.filter((m) => m.required || m.default).map((m) => m.key);
|
|
467
|
+
});
|
|
468
|
+
}
|
|
455
469
|
})
|
|
456
470
|
.catch(() => { });
|
|
457
471
|
}, [hydrated]);
|
|
@@ -750,7 +764,7 @@ export default function SetupWizard({ t: tProp, onComplete, endpoints = {}, dbNa
|
|
|
750
764
|
function canGoNext() {
|
|
751
765
|
switch (step) {
|
|
752
766
|
case 'welcome': return true;
|
|
753
|
-
case 'modules': return selectedModules.length > 0;
|
|
767
|
+
case 'modules': return availableModules.length === 0 || selectedModules.length > 0;
|
|
754
768
|
case 'dialect': return true;
|
|
755
769
|
case 'database':
|
|
756
770
|
if (dialect === 'sqlite' || dialect === 'spanner')
|
|
@@ -793,7 +807,7 @@ export default function SetupWizard({ t: tProp, onComplete, endpoints = {}, dbNa
|
|
|
793
807
|
backgroundColor: check.status === 'ok' ? '#f0fdf4' : check.status === 'warn' ? '#fffbeb' : '#fef2f2',
|
|
794
808
|
border: `1px solid ${check.status === 'ok' ? '#bbf7d0' : check.status === 'warn' ? '#fde68a' : '#fecaca'}`,
|
|
795
809
|
borderRadius: 6, fontSize: 13,
|
|
796
|
-
}, children: [_jsx("span", { style: { fontSize: 16, flexShrink: 0 }, children: check.status === 'ok' ? '✅' : check.status === 'warn' ? '⚠️' : '❌' }), _jsxs("div", { style: { flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600, color: '#111827' }, children: check.label }), _jsx("span", { style: { color: '#6b7280', marginLeft: 8 }, children: check.detail })] })] }, check.key))) }))] }),
|
|
810
|
+
}, children: [_jsx("span", { style: { fontSize: 16, flexShrink: 0 }, children: check.status === 'ok' ? '✅' : check.status === 'warn' ? '⚠️' : '❌' }), _jsxs("div", { style: { flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600, color: '#111827' }, children: check.label }), _jsx("span", { style: { color: '#6b7280', marginLeft: 8 }, children: check.detail })] })] }, check.key))) }))] }), _jsxs("div", { style: S.center, children: [_jsx("button", { style: S.btn('lg'), onClick: goNext, children: setupMode === 'net' ? '🌐 Configurer via NET →' : '🗄️ Configurer la base de donnees →' }), _jsxs("p", { style: { fontSize: 12, color: '#9ca3af', marginTop: 8 }, children: ["Mode : ", _jsx("b", { children: setupMode === 'net' ? 'Serveur @mostajs/net' : 'Acces direct ORM' }), " \u2014 ", STEPS.length, " etapes"] })] })] })), step === 'modules' && (_jsxs("div", { children: [_jsxs("div", { style: S.sectionHeader, children: [_jsx("span", { style: S.sectionIcon, children: "\uD83D\uDCE6" }), _jsxs("div", { children: [_jsx("div", { style: S.sectionTitle, children: t('setup.modules.title') }), _jsx("div", { style: S.sectionDesc, children: t('setup.modules.description') })] })] }), _jsx("div", { style: S.grid2, children: availableModules.map(mod => {
|
|
797
811
|
const isSelected = selectedModules.includes(mod.key);
|
|
798
812
|
const isDetected = detectedModules.includes(mod.key);
|
|
799
813
|
return (_jsxs("div", { style: S.moduleCard(isSelected, !!mod.required), onClick: () => toggleModule(mod.key), children: [_jsxs("div", { style: S.moduleHeader, children: [_jsxs("div", { style: S.moduleLeft, children: [_jsx("span", { style: { fontSize: 20 }, children: mod.icon }), _jsx("span", { style: S.moduleName, children: mod.label })] }), _jsxs("div", { style: S.moduleBadges, children: [mod.discovered && _jsx("span", { style: S.badge('new'), children: "Nouveau" }), isDetected && _jsx("span", { style: S.badge('installed'), children: t('setup.modules.installed') }), mod.required && _jsx("span", { style: S.badge('required'), children: t('setup.modules.required') }), _jsx("input", { type: "checkbox", checked: isSelected, disabled: mod.required, readOnly: true, style: S.checkbox })] })] }), _jsx("div", { style: S.moduleDesc, children: mod.description }), mod.dependsOn?.length ? (_jsxs("div", { style: { fontSize: 11, color: '#9ca3af', marginTop: 4 }, children: ["Depend de : ", mod.dependsOn.join(', ')] })) : null] }, mod.key));
|
package/package.json
CHANGED