- 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
64 lines
2.6 KiB
JavaScript
64 lines
2.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const Manifest_1 = require("@expo/config-plugins/build/android/Manifest");
|
|
const config_plugins_1 = require("expo/config-plugins");
|
|
function withExpoLocalizationIos(config, data) {
|
|
const mergedConfig = { ...config.extra, ...data };
|
|
if (mergedConfig?.supportsRTL == null && mergedConfig?.forcesRTL == null)
|
|
return config;
|
|
if (!config.ios)
|
|
config.ios = {};
|
|
if (!config.ios.infoPlist)
|
|
config.ios.infoPlist = {};
|
|
if (mergedConfig?.supportsRTL != null) {
|
|
config.ios.infoPlist.ExpoLocalization_supportsRTL = mergedConfig?.supportsRTL;
|
|
}
|
|
if (mergedConfig?.forcesRTL != null) {
|
|
config.ios.infoPlist.ExpoLocalization_forcesRTL = mergedConfig?.forcesRTL;
|
|
}
|
|
return config;
|
|
}
|
|
function withExpoLocalizationAndroid(config, data) {
|
|
if (data.allowDynamicLocaleChangesAndroid) {
|
|
config = (0, config_plugins_1.withAndroidManifest)(config, (config) => {
|
|
const mainActivity = (0, Manifest_1.getMainActivityOrThrow)(config.modResults);
|
|
if (!mainActivity.$['android:configChanges']?.includes('locale')) {
|
|
mainActivity.$['android:configChanges'] += '|locale';
|
|
}
|
|
if (!mainActivity.$['android:configChanges']?.includes('layoutDirection')) {
|
|
mainActivity.$['android:configChanges'] += '|layoutDirection';
|
|
}
|
|
return config;
|
|
});
|
|
}
|
|
return (0, config_plugins_1.withStringsXml)(config, (config) => {
|
|
const mergedConfig = { ...config.extra, ...data };
|
|
if (mergedConfig?.supportsRTL != null) {
|
|
config.modResults = config_plugins_1.AndroidConfig.Strings.setStringItem([
|
|
{
|
|
$: { name: 'ExpoLocalization_supportsRTL', translatable: 'false' },
|
|
_: String(mergedConfig?.supportsRTL ?? 'unset'),
|
|
},
|
|
], config.modResults);
|
|
}
|
|
if (mergedConfig?.forcesRTL != null) {
|
|
config.modResults = config_plugins_1.AndroidConfig.Strings.setStringItem([
|
|
{
|
|
$: { name: 'ExpoLocalization_forcesRTL', translatable: 'false' },
|
|
_: String(mergedConfig?.forcesRTL ?? 'unset'),
|
|
},
|
|
], config.modResults);
|
|
}
|
|
return config;
|
|
});
|
|
}
|
|
function withExpoLocalization(config, data = {
|
|
allowDynamicLocaleChangesAndroid: true,
|
|
}) {
|
|
return (0, config_plugins_1.withPlugins)(config, [
|
|
[withExpoLocalizationIos, data],
|
|
[withExpoLocalizationAndroid, data],
|
|
]);
|
|
}
|
|
exports.default = withExpoLocalization;
|