feat(smart-app): implement complete mobile app MVP

- App.tsx: full navigation (Auth stack + Main tabs with 5 screens)
- Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen
- HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors
- MapScreen: interactive map with layer toggles (6 layers)
- MarketplaceScreen: categories (6), products (5), search
- ChatScreen: AI chat with quick prompts (4), bot responses
- ProfileScreen: user info, stats, menu (9 items), logout
- AlertsScreen: alert list with severity, acknowledge
- SensorsScreen: sensor list with type filters (6 types), search
- ZonesScreen: zone cards with stats
- SettingsScreen: language picker (FR/EN/ES/DE), privacy, about
- Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n
- Hooks: useSensors, useAlerts, useNotifications, useLocation
- Components: Card, Button, LoadingSpinner, ErrorBoundary, Header
- Services: iotService, notificationService (with axios API client)
- Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN)
- Theme: colors.ts with full design system (Blue Ocean palette)
- Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
This commit is contained in:
Eric FELIXINE
2026-06-01 18:00:35 -04:00
parent 08ca495bde
commit e30ae8ed09
35578 changed files with 3703534 additions and 43 deletions

View File

@@ -0,0 +1,52 @@
"use strict";
const SKIP = Symbol('SKIP');
module.exports = function rewire(babel, options) {
const t = babel.types;
const {
name,
index,
mappings
} = require(options.mappings || '../../mappings.json');
return {
visitor: {
ImportDeclaration(path) {
if (path.node.source.value !== name || path.node[SKIP]) {
return;
}
path.node.source.value = `${name}/${index}`;
path.replaceWithMultiple(path.node.specifiers.reduce((declarations, specifier) => {
const mapping = mappings[specifier.imported.name];
if (mapping) {
const alias = `${name}/${mapping.path}`;
const identifier = t.identifier(specifier.local.name);
let s;
switch (mapping.name) {
case 'default':
s = t.importDefaultSpecifier(identifier);
break;
case '*':
s = t.importNamespaceSpecifier(identifier);
break;
default:
s = t.importSpecifier(identifier, t.identifier(mapping.name));
}
declarations.push(t.importDeclaration([s], t.stringLiteral(alias)));
} else {
const previous = declarations.find(d => d.source.value === path.node.source.value);
if (previous) {
previous.specifiers.push(specifier);
} else {
const node = t.importDeclaration([specifier], path.node.source);
node[SKIP] = true;
declarations.push(node);
}
}
return declarations;
}, []));
path.requeue();
}
}
};
};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["SKIP","Symbol","module","exports","rewire","babel","options","t","types","name","index","mappings","require","visitor","ImportDeclaration","path","node","source","value","replaceWithMultiple","specifiers","reduce","declarations","specifier","mapping","imported","alias","identifier","local","s","importDefaultSpecifier","importNamespaceSpecifier","importSpecifier","push","importDeclaration","stringLiteral","previous","find","d","requeue"],"sourceRoot":"../../../src","sources":["babel/index.js"],"mappings":";;AAAA,MAAMA,IAAI,GAAGC,MAAM,CAAC,MAAM,CAAC;AAE3BC,MAAM,CAACC,OAAO,GAAG,SAASC,MAAMA,CAACC,KAAK,EAAEC,OAAO,EAAE;EAC/C,MAAMC,CAAC,GAAGF,KAAK,CAACG,KAAK;EAErB,MAAM;IAAEC,IAAI;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGC,OAAO,CAACN,OAAO,CAACK,QAAQ,IACxD,qBAAqB,CAAC;EAExB,OAAO;IACLE,OAAO,EAAE;MACPC,iBAAiBA,CAACC,IAAI,EAAE;QACtB,IAAIA,IAAI,CAACC,IAAI,CAACC,MAAM,CAACC,KAAK,KAAKT,IAAI,IAAIM,IAAI,CAACC,IAAI,CAAChB,IAAI,CAAC,EAAE;UACtD;QACF;QAEAe,IAAI,CAACC,IAAI,CAACC,MAAM,CAACC,KAAK,GAAG,GAAGT,IAAI,IAAIC,KAAK,EAAE;QAC3CK,IAAI,CAACI,mBAAmB,CACtBJ,IAAI,CAACC,IAAI,CAACI,UAAU,CAACC,MAAM,CAAC,CAACC,YAAY,EAAEC,SAAS,KAAK;UACvD,MAAMC,OAAO,GAAGb,QAAQ,CAACY,SAAS,CAACE,QAAQ,CAAChB,IAAI,CAAC;UAEjD,IAAIe,OAAO,EAAE;YACX,MAAME,KAAK,GAAG,GAAGjB,IAAI,IAAIe,OAAO,CAACT,IAAI,EAAE;YACvC,MAAMY,UAAU,GAAGpB,CAAC,CAACoB,UAAU,CAACJ,SAAS,CAACK,KAAK,CAACnB,IAAI,CAAC;YAErD,IAAIoB,CAAC;YAEL,QAAQL,OAAO,CAACf,IAAI;cAClB,KAAK,SAAS;gBACZoB,CAAC,GAAGtB,CAAC,CAACuB,sBAAsB,CAACH,UAAU,CAAC;gBACxC;cACF,KAAK,GAAG;gBACNE,CAAC,GAAGtB,CAAC,CAACwB,wBAAwB,CAACJ,UAAU,CAAC;gBAC1C;cACF;gBACEE,CAAC,GAAGtB,CAAC,CAACyB,eAAe,CAACL,UAAU,EAAEpB,CAAC,CAACoB,UAAU,CAACH,OAAO,CAACf,IAAI,CAAC,CAAC;YACjE;YAEAa,YAAY,CAACW,IAAI,CACf1B,CAAC,CAAC2B,iBAAiB,CAAC,CAACL,CAAC,CAAC,EAAEtB,CAAC,CAAC4B,aAAa,CAACT,KAAK,CAAC,CACjD,CAAC;UACH,CAAC,MAAM;YACL,MAAMU,QAAQ,GAAGd,YAAY,CAACe,IAAI,CAC/BC,CAAC,IAAKA,CAAC,CAACrB,MAAM,CAACC,KAAK,KAAKH,IAAI,CAACC,IAAI,CAACC,MAAM,CAACC,KAC7C,CAAC;YAED,IAAIkB,QAAQ,EAAE;cACZA,QAAQ,CAAChB,UAAU,CAACa,IAAI,CAACV,SAAS,CAAC;YACrC,CAAC,MAAM;cACL,MAAMP,IAAI,GAAGT,CAAC,CAAC2B,iBAAiB,CAAC,CAACX,SAAS,CAAC,EAAER,IAAI,CAACC,IAAI,CAACC,MAAM,CAAC;cAC/DD,IAAI,CAAChB,IAAI,CAAC,GAAG,IAAI;cACjBsB,YAAY,CAACW,IAAI,CAACjB,IAAI,CAAC;YACzB;UACF;UAEA,OAAOM,YAAY;QACrB,CAAC,EAAE,EAAE,CACP,CAAC;QAEDP,IAAI,CAACwB,OAAO,CAAC,CAAC;MAChB;IACF;EACF,CAAC;AACH,CAAC","ignoreList":[]}