- 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
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
import type {____ViewStyle_Internal} from './StyleSheetTypes';
|
|
|
|
export default function splitLayoutProps(props: ?____ViewStyle_Internal): {
|
|
outer: ?____ViewStyle_Internal,
|
|
inner: ?____ViewStyle_Internal,
|
|
} {
|
|
let outer: ?____ViewStyle_Internal = null;
|
|
let inner: ?____ViewStyle_Internal = null;
|
|
|
|
if (props != null) {
|
|
// $FlowIgnore[incompatible-exact] Will contain a subset of keys from `props`.
|
|
outer = {};
|
|
// $FlowIgnore[incompatible-exact] Will contain a subset of keys from `props`.
|
|
inner = {};
|
|
|
|
for (const prop of Object.keys(props)) {
|
|
switch (prop) {
|
|
case 'margin':
|
|
case 'marginHorizontal':
|
|
case 'marginVertical':
|
|
case 'marginBottom':
|
|
case 'marginTop':
|
|
case 'marginLeft':
|
|
case 'marginRight':
|
|
case 'flex':
|
|
case 'flexGrow':
|
|
case 'flexShrink':
|
|
case 'flexBasis':
|
|
case 'alignSelf':
|
|
case 'height':
|
|
case 'minHeight':
|
|
case 'maxHeight':
|
|
case 'width':
|
|
case 'minWidth':
|
|
case 'maxWidth':
|
|
case 'position':
|
|
case 'left':
|
|
case 'right':
|
|
case 'bottom':
|
|
case 'top':
|
|
case 'transform':
|
|
case 'transformOrigin':
|
|
case 'rowGap':
|
|
case 'columnGap':
|
|
case 'gap':
|
|
// $FlowFixMe[cannot-write]
|
|
// $FlowFixMe[incompatible-use]
|
|
// $FlowFixMe[prop-missing]
|
|
outer[prop] = props[prop];
|
|
break;
|
|
default:
|
|
// $FlowFixMe[cannot-write]
|
|
// $FlowFixMe[incompatible-use]
|
|
// $FlowFixMe[prop-missing]
|
|
inner[prop] = props[prop];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return {outer, inner};
|
|
}
|