- 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
147 lines
5.3 KiB
JavaScript
147 lines
5.3 KiB
JavaScript
'use strict';
|
|
|
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
import { flattenArray } from './utils';
|
|
import { makeViewDescriptorsSet } from '../reanimated2/ViewDescriptorsSet';
|
|
import { adaptViewConfig } from '../ConfigHelper';
|
|
import updateProps from '../reanimated2/UpdateProps';
|
|
import { stopMapper, startMapper } from '../reanimated2/mappers';
|
|
import { isSharedValue } from '../reanimated2/isSharedValue';
|
|
import { shouldBeUseWeb } from '../reanimated2/PlatformChecker';
|
|
const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
function isInlineStyleTransform(transform) {
|
|
if (!Array.isArray(transform)) {
|
|
return false;
|
|
}
|
|
return transform.some(t => hasInlineStyles(t));
|
|
}
|
|
function inlinePropsHasChanged(styles1, styles2) {
|
|
if (Object.keys(styles1).length !== Object.keys(styles2).length) {
|
|
return true;
|
|
}
|
|
for (const key of Object.keys(styles1)) {
|
|
if (styles1[key] !== styles2[key]) return true;
|
|
}
|
|
return false;
|
|
}
|
|
function getInlinePropsUpdate(inlineProps) {
|
|
'worklet';
|
|
|
|
const update = {};
|
|
for (const [key, styleValue] of Object.entries(inlineProps)) {
|
|
if (isSharedValue(styleValue)) {
|
|
update[key] = styleValue.value;
|
|
} else if (Array.isArray(styleValue)) {
|
|
update[key] = styleValue.map(item => {
|
|
return getInlinePropsUpdate(item);
|
|
});
|
|
} else if (typeof styleValue === 'object') {
|
|
update[key] = getInlinePropsUpdate(styleValue);
|
|
} else {
|
|
update[key] = styleValue;
|
|
}
|
|
}
|
|
return update;
|
|
}
|
|
function extractSharedValuesMapFromProps(props) {
|
|
const inlineProps = {};
|
|
for (const key in props) {
|
|
const value = props[key];
|
|
if (key === 'style') {
|
|
const styles = flattenArray(props.style ?? []);
|
|
styles.forEach(style => {
|
|
if (!style) {
|
|
return;
|
|
}
|
|
for (const [styleKey, styleValue] of Object.entries(style)) {
|
|
if (isSharedValue(styleValue)) {
|
|
inlineProps[styleKey] = styleValue;
|
|
} else if (styleKey === 'transform' && isInlineStyleTransform(styleValue)) {
|
|
inlineProps[styleKey] = styleValue;
|
|
}
|
|
}
|
|
});
|
|
} else if (isSharedValue(value)) {
|
|
inlineProps[key] = value;
|
|
}
|
|
}
|
|
return inlineProps;
|
|
}
|
|
export function hasInlineStyles(style) {
|
|
if (!style) {
|
|
return false;
|
|
}
|
|
return Object.keys(style).some(key => {
|
|
const styleValue = style[key];
|
|
return isSharedValue(styleValue) || key === 'transform' && isInlineStyleTransform(styleValue);
|
|
});
|
|
}
|
|
export function getInlineStyle(style, shouldGetInitialStyle) {
|
|
if (shouldGetInitialStyle) {
|
|
return getInlinePropsUpdate(style);
|
|
}
|
|
const newStyle = {};
|
|
for (const [key, styleValue] of Object.entries(style)) {
|
|
if (!isSharedValue(styleValue) && !(key === 'transform' && isInlineStyleTransform(styleValue))) {
|
|
newStyle[key] = styleValue;
|
|
}
|
|
}
|
|
return newStyle;
|
|
}
|
|
export class InlinePropManager {
|
|
constructor() {
|
|
_defineProperty(this, "_inlinePropsViewDescriptors", null);
|
|
_defineProperty(this, "_inlinePropsMapperId", null);
|
|
_defineProperty(this, "_inlineProps", {});
|
|
}
|
|
attachInlineProps(animatedComponent, viewInfo) {
|
|
const newInlineProps = extractSharedValuesMapFromProps(animatedComponent.props);
|
|
const hasChanged = inlinePropsHasChanged(newInlineProps, this._inlineProps);
|
|
if (hasChanged) {
|
|
if (!this._inlinePropsViewDescriptors) {
|
|
this._inlinePropsViewDescriptors = makeViewDescriptorsSet();
|
|
const {
|
|
viewTag,
|
|
viewName,
|
|
shadowNodeWrapper,
|
|
viewConfig
|
|
} = viewInfo;
|
|
if (Object.keys(newInlineProps).length && viewConfig) {
|
|
adaptViewConfig(viewConfig);
|
|
}
|
|
this._inlinePropsViewDescriptors.add({
|
|
tag: viewTag,
|
|
name: viewName,
|
|
shadowNodeWrapper: shadowNodeWrapper
|
|
});
|
|
}
|
|
const shareableViewDescriptors = this._inlinePropsViewDescriptors.shareableViewDescriptors;
|
|
const maybeViewRef = SHOULD_BE_USE_WEB ? {
|
|
items: new Set([animatedComponent])
|
|
} // see makeViewsRefSet
|
|
: undefined;
|
|
const updaterFunction = () => {
|
|
'worklet';
|
|
|
|
const update = getInlinePropsUpdate(newInlineProps);
|
|
updateProps(shareableViewDescriptors, update, maybeViewRef);
|
|
};
|
|
this._inlineProps = newInlineProps;
|
|
if (this._inlinePropsMapperId) {
|
|
stopMapper(this._inlinePropsMapperId);
|
|
}
|
|
this._inlinePropsMapperId = null;
|
|
if (Object.keys(newInlineProps).length) {
|
|
this._inlinePropsMapperId = startMapper(updaterFunction, Object.values(newInlineProps));
|
|
}
|
|
}
|
|
}
|
|
detachInlineProps() {
|
|
if (this._inlinePropsMapperId) {
|
|
stopMapper(this._inlinePropsMapperId);
|
|
}
|
|
}
|
|
}
|
|
//# sourceMappingURL=InlinePropManager.js.map
|