- 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
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
var _nonSecure = require("nanoid/non-secure");
|
|
/**
|
|
* Base router object that can be used when writing custom routers.
|
|
* This provides few helper methods to handle common actions such as `RESET`.
|
|
*/
|
|
const BaseRouter = {
|
|
getStateForAction(state, action) {
|
|
switch (action.type) {
|
|
case 'SET_PARAMS':
|
|
{
|
|
const index = action.source ? state.routes.findIndex(r => r.key === action.source) : state.index;
|
|
if (index === -1) {
|
|
return null;
|
|
}
|
|
return {
|
|
...state,
|
|
routes: state.routes.map((r, i) => i === index ? {
|
|
...r,
|
|
params: {
|
|
...r.params,
|
|
...action.payload.params
|
|
}
|
|
} : r)
|
|
};
|
|
}
|
|
case 'RESET':
|
|
{
|
|
const nextState = action.payload;
|
|
if (nextState.routes.length === 0 || nextState.routes.some(route => !state.routeNames.includes(route.name))) {
|
|
return null;
|
|
}
|
|
if (nextState.stale === false) {
|
|
if (state.routeNames.length !== nextState.routeNames.length || nextState.routeNames.some(name => !state.routeNames.includes(name))) {
|
|
return null;
|
|
}
|
|
return {
|
|
...nextState,
|
|
routes: nextState.routes.map(route => route.key ? route : {
|
|
...route,
|
|
key: `${route.name}-${(0, _nonSecure.nanoid)()}`
|
|
})
|
|
};
|
|
}
|
|
return nextState;
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
},
|
|
shouldActionChangeFocus(action) {
|
|
return action.type === 'NAVIGATE';
|
|
}
|
|
};
|
|
var _default = BaseRouter;
|
|
exports.default = _default;
|
|
//# sourceMappingURL=BaseRouter.js.map
|