react-native-inapp-inspector 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/reports/problems/problems-report.html +659 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +33 -24
- package/dist/commonjs/components/ConsoleLogCard.js +5 -5
- package/dist/commonjs/components/EndOfListFooter.js +1 -1
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +19 -71
- package/dist/commonjs/components/Inspector/BundleTab.js +670 -188
- package/dist/commonjs/components/Inspector/ConsoleTab.js +109 -98
- package/dist/commonjs/components/Inspector/CrashTab.js +2 -1
- package/dist/commonjs/components/Inspector/InspectorHeader.js +102 -19
- package/dist/commonjs/components/Inspector/MainScreen.js +151 -17
- package/dist/commonjs/components/Inspector/NetworkTab.js +104 -20
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1111 -1385
- package/dist/commonjs/components/Inspector/TabBar.js +3 -4
- package/dist/commonjs/components/Inspector/TelemetryConsentModal.d.ts +3 -0
- package/dist/commonjs/components/Inspector/TelemetryConsentModal.js +212 -0
- package/dist/commonjs/components/JsonViewer.js +9 -4
- package/dist/commonjs/components/LogCard.js +31 -1
- package/dist/commonjs/components/LogSyntaxHighlighter.d.ts +16 -0
- package/dist/commonjs/components/LogSyntaxHighlighter.js +130 -0
- package/dist/commonjs/components/NetworkIcons.d.ts +2 -0
- package/dist/commonjs/components/NetworkIcons.js +10 -1
- package/dist/commonjs/components/Slider.d.ts +13 -0
- package/dist/commonjs/components/Slider.js +261 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.js +1 -1
- package/dist/commonjs/customHooks/crashHandler.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +2 -0
- package/dist/commonjs/helpers/index.js +16 -0
- package/dist/commonjs/helpers/searchQueryParser.d.ts +6 -0
- package/dist/commonjs/helpers/searchQueryParser.js +236 -0
- package/dist/commonjs/helpers/settingsStore.js +13 -13
- package/dist/commonjs/helpers/telemetry.d.ts +99 -0
- package/dist/commonjs/helpers/telemetry.js +398 -0
- package/dist/commonjs/index.d.ts +2 -0
- package/dist/commonjs/index.js +30 -21
- package/dist/commonjs/native/NativeInspector.d.ts +5 -0
- package/dist/commonjs/native/NativeInspector.js +3 -2
- package/dist/commonjs/styles/index.js +35 -35
- package/dist/esm/components/ConsoleLogCard.js +5 -5
- package/dist/esm/components/EndOfListFooter.js +2 -2
- package/dist/esm/components/Inspector/AnalyticsTab.js +21 -73
- package/dist/esm/components/Inspector/BundleTab.js +670 -188
- package/dist/esm/components/Inspector/ConsoleTab.js +110 -99
- package/dist/esm/components/Inspector/CrashTab.js +2 -1
- package/dist/esm/components/Inspector/InspectorHeader.js +103 -20
- package/dist/esm/components/Inspector/MainScreen.js +119 -18
- package/dist/esm/components/Inspector/NetworkTab.js +105 -21
- package/dist/esm/components/Inspector/SettingsPanel.js +1114 -1388
- package/dist/esm/components/Inspector/TabBar.js +4 -5
- package/dist/esm/components/Inspector/TelemetryConsentModal.d.ts +3 -0
- package/dist/esm/components/Inspector/TelemetryConsentModal.js +175 -0
- package/dist/esm/components/JsonViewer.js +9 -4
- package/dist/esm/components/LogCard.js +32 -2
- package/dist/esm/components/LogSyntaxHighlighter.d.ts +16 -0
- package/dist/esm/components/LogSyntaxHighlighter.js +123 -0
- package/dist/esm/components/NetworkIcons.d.ts +2 -0
- package/dist/esm/components/NetworkIcons.js +7 -0
- package/dist/esm/components/Slider.d.ts +13 -0
- package/dist/esm/components/Slider.js +222 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.js +1 -1
- package/dist/esm/customHooks/crashHandler.js +1 -1
- package/dist/esm/helpers/index.d.ts +2 -0
- package/dist/esm/helpers/index.js +2 -0
- package/dist/esm/helpers/searchQueryParser.d.ts +6 -0
- package/dist/esm/helpers/searchQueryParser.js +233 -0
- package/dist/esm/helpers/settingsStore.js +13 -13
- package/dist/esm/helpers/telemetry.d.ts +99 -0
- package/dist/esm/helpers/telemetry.js +380 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +20 -21
- package/dist/esm/native/NativeInspector.d.ts +5 -0
- package/dist/esm/native/NativeInspector.js +3 -2
- package/dist/esm/styles/index.js +35 -35
- package/ios/{NetworkInspectorModule.m → NetworkInspectorModule.mm} +193 -97
- package/package.json +2 -2
|
@@ -43,10 +43,10 @@ const getRawStyles = (colors) => ({
|
|
|
43
43
|
header: {
|
|
44
44
|
flexDirection: 'row',
|
|
45
45
|
alignItems: 'center',
|
|
46
|
-
paddingHorizontal:
|
|
47
|
-
paddingVertical:
|
|
46
|
+
paddingHorizontal: 10,
|
|
47
|
+
paddingVertical: 8,
|
|
48
48
|
zIndex: 10,
|
|
49
|
-
minHeight:
|
|
49
|
+
minHeight: 52,
|
|
50
50
|
shadowColor: colors.black,
|
|
51
51
|
shadowOffset: { width: 0, height: 2 },
|
|
52
52
|
shadowOpacity: 0.08,
|
|
@@ -70,7 +70,7 @@ const getRawStyles = (colors) => ({
|
|
|
70
70
|
flexDirection: 'row',
|
|
71
71
|
alignItems: 'center',
|
|
72
72
|
justifyContent: 'flex-end',
|
|
73
|
-
gap:
|
|
73
|
+
gap: 5,
|
|
74
74
|
},
|
|
75
75
|
headerTitle: {
|
|
76
76
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -172,7 +172,7 @@ const getRawStyles = (colors) => ({
|
|
|
172
172
|
fontSize: 12,
|
|
173
173
|
letterSpacing: 0.2,
|
|
174
174
|
},
|
|
175
|
-
listContent: { paddingBottom:
|
|
175
|
+
listContent: { paddingBottom: react_native_1.Platform.OS === 'ios' ? 44 : 32 },
|
|
176
176
|
// #2 — scroll-to-top button, always shown at the bottom right.
|
|
177
177
|
scrollTopBtn: {
|
|
178
178
|
position: 'absolute',
|
|
@@ -193,9 +193,9 @@ const getRawStyles = (colors) => ({
|
|
|
193
193
|
},
|
|
194
194
|
detailScroll: { flex: 1 },
|
|
195
195
|
closeButtonSquare: {
|
|
196
|
-
width:
|
|
197
|
-
height:
|
|
198
|
-
borderRadius:
|
|
196
|
+
width: 30,
|
|
197
|
+
height: 30,
|
|
198
|
+
borderRadius: 7,
|
|
199
199
|
backgroundColor: `${colors.white}2B`,
|
|
200
200
|
alignItems: 'center',
|
|
201
201
|
justifyContent: 'center',
|
|
@@ -414,12 +414,12 @@ const getRawStyles = (colors) => ({
|
|
|
414
414
|
},
|
|
415
415
|
clearBtn: { padding: 4 },
|
|
416
416
|
domainHeaderCard: {
|
|
417
|
-
marginHorizontal:
|
|
418
|
-
marginTop:
|
|
417
|
+
marginHorizontal: 8,
|
|
418
|
+
marginTop: 10,
|
|
419
419
|
marginBottom: 4,
|
|
420
|
-
paddingHorizontal:
|
|
421
|
-
paddingVertical:
|
|
422
|
-
borderRadius:
|
|
420
|
+
paddingHorizontal: 8,
|
|
421
|
+
paddingVertical: 7,
|
|
422
|
+
borderRadius: 9,
|
|
423
423
|
backgroundColor: colors.grayBackground,
|
|
424
424
|
borderWidth: 1,
|
|
425
425
|
borderColor: colors.grayBorderSecondary,
|
|
@@ -441,18 +441,18 @@ const getRawStyles = (colors) => ({
|
|
|
441
441
|
flex: 1,
|
|
442
442
|
minWidth: 0,
|
|
443
443
|
marginRight: 6,
|
|
444
|
-
gap:
|
|
444
|
+
gap: 6,
|
|
445
445
|
},
|
|
446
446
|
domainIconWrap: {
|
|
447
|
-
width:
|
|
448
|
-
height:
|
|
449
|
-
borderRadius:
|
|
447
|
+
width: 22,
|
|
448
|
+
height: 22,
|
|
449
|
+
borderRadius: 5,
|
|
450
450
|
alignItems: 'center',
|
|
451
451
|
justifyContent: 'center',
|
|
452
452
|
},
|
|
453
453
|
domainTitleText: {
|
|
454
454
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
455
|
-
fontSize: 13
|
|
455
|
+
fontSize: 13,
|
|
456
456
|
fontWeight: '700',
|
|
457
457
|
color: colors.primaryBlack,
|
|
458
458
|
textTransform: 'capitalize',
|
|
@@ -514,23 +514,23 @@ const getRawStyles = (colors) => ({
|
|
|
514
514
|
flexDirection: 'row',
|
|
515
515
|
alignItems: 'center',
|
|
516
516
|
gap: 3,
|
|
517
|
-
paddingHorizontal:
|
|
518
|
-
paddingVertical:
|
|
519
|
-
borderRadius:
|
|
517
|
+
paddingHorizontal: 5,
|
|
518
|
+
paddingVertical: 2.5,
|
|
519
|
+
borderRadius: 5,
|
|
520
520
|
borderWidth: 1,
|
|
521
521
|
borderColor: colors.grayBorderSecondary,
|
|
522
522
|
backgroundColor: colors.primaryLight,
|
|
523
523
|
},
|
|
524
524
|
domainStatText: {
|
|
525
525
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
526
|
-
fontSize:
|
|
526
|
+
fontSize: 9.5,
|
|
527
527
|
},
|
|
528
528
|
treeNodeRow: {
|
|
529
529
|
flexDirection: 'row',
|
|
530
530
|
alignItems: 'stretch',
|
|
531
|
-
marginHorizontal:
|
|
532
|
-
paddingRight:
|
|
533
|
-
paddingLeft:
|
|
531
|
+
marginHorizontal: 8,
|
|
532
|
+
paddingRight: 4,
|
|
533
|
+
paddingLeft: 0,
|
|
534
534
|
backgroundColor: colors.grayBackground,
|
|
535
535
|
borderLeftWidth: 1,
|
|
536
536
|
borderRightWidth: 1,
|
|
@@ -544,14 +544,14 @@ const getRawStyles = (colors) => ({
|
|
|
544
544
|
paddingBottom: 6,
|
|
545
545
|
},
|
|
546
546
|
treeLines: {
|
|
547
|
-
width:
|
|
547
|
+
width: 14,
|
|
548
548
|
position: 'relative',
|
|
549
549
|
},
|
|
550
550
|
modernTreeLine: {
|
|
551
551
|
position: 'absolute',
|
|
552
|
-
left:
|
|
552
|
+
left: 7,
|
|
553
553
|
top: 0,
|
|
554
|
-
width:
|
|
554
|
+
width: 7,
|
|
555
555
|
height: '100%',
|
|
556
556
|
borderLeftWidth: 1.5,
|
|
557
557
|
opacity: 0.5,
|
|
@@ -559,19 +559,19 @@ const getRawStyles = (colors) => ({
|
|
|
559
559
|
modernTreeLineLast: {
|
|
560
560
|
height: '50%',
|
|
561
561
|
borderBottomWidth: 1.5,
|
|
562
|
-
borderBottomLeftRadius:
|
|
562
|
+
borderBottomLeftRadius: 8,
|
|
563
563
|
},
|
|
564
564
|
modernTreeBranch: {
|
|
565
565
|
position: 'absolute',
|
|
566
|
-
left:
|
|
566
|
+
left: 7,
|
|
567
567
|
top: '50%',
|
|
568
|
-
width:
|
|
568
|
+
width: 7,
|
|
569
569
|
borderTopWidth: 1.5,
|
|
570
570
|
opacity: 0.5,
|
|
571
571
|
},
|
|
572
572
|
treeCardWrapper: {
|
|
573
573
|
flex: 1,
|
|
574
|
-
paddingVertical: 3
|
|
574
|
+
paddingVertical: 3,
|
|
575
575
|
},
|
|
576
576
|
card: {
|
|
577
577
|
marginHorizontal: 0,
|
|
@@ -611,10 +611,10 @@ const getRawStyles = (colors) => ({
|
|
|
611
611
|
gap: 5,
|
|
612
612
|
},
|
|
613
613
|
smallCheckbox: {
|
|
614
|
-
width:
|
|
615
|
-
height:
|
|
614
|
+
width: 15,
|
|
615
|
+
height: 15,
|
|
616
616
|
borderRadius: 4,
|
|
617
|
-
borderWidth: 1.
|
|
617
|
+
borderWidth: 1.8,
|
|
618
618
|
borderColor: colors.grayTextWeak,
|
|
619
619
|
alignItems: 'center',
|
|
620
620
|
justifyContent: 'center',
|
|
@@ -4,8 +4,8 @@ import { Pressable, StyleSheet, Text, View, } from 'react-native';
|
|
|
4
4
|
import { AppColors } from '../styles/AppColors';
|
|
5
5
|
import { AppFonts } from '../styles/AppFonts';
|
|
6
6
|
import { formatTime, getJsonContent, getJsonPreviewText, parseStackLine, openInVSCode, } from '../helpers';
|
|
7
|
-
import HighlightText from './HighlightText';
|
|
8
7
|
import CopyButton from './CopyButton';
|
|
8
|
+
import LogSyntaxHighlighter from './LogSyntaxHighlighter';
|
|
9
9
|
import { ChevronIcon, ExternalLinkIcon, FlaskIcon, ZapIcon, GlobeIcon, DiceIcon, AtomIcon, BarChartIcon, KeyIcon, SmartphoneIcon, AlertTriangleIcon, BugIcon, TagIcon, } from './NetworkIcons';
|
|
10
10
|
import { useInspector } from './Inspector/InspectorContext';
|
|
11
11
|
const getLogMessageWithBadges = (message, searchStr, textStyle, highlightStyle, numberOfLines) => {
|
|
@@ -73,10 +73,10 @@ const getLogMessageWithBadges = (message, searchStr, textStyle, highlightStyle,
|
|
|
73
73
|
</View>);
|
|
74
74
|
})}
|
|
75
75
|
</View>
|
|
76
|
-
<
|
|
76
|
+
<LogSyntaxHighlighter text={remainingText} search={searchStr} style={textStyle} numberOfLines={numberOfLines} detectLinks={true}/>
|
|
77
77
|
</View>);
|
|
78
78
|
}
|
|
79
|
-
return (<
|
|
79
|
+
return (<LogSyntaxHighlighter text={message} search={searchStr} style={textStyle} numberOfLines={numberOfLines} detectLinks={true}/>);
|
|
80
80
|
};
|
|
81
81
|
export const ConsoleLogCard = React.memo(function ConsoleLogCard({ item, searchStr = '', }) {
|
|
82
82
|
const { setSelectedLog } = useInspector();
|
|
@@ -234,10 +234,10 @@ export const ConsoleLogCard = React.memo(function ConsoleLogCard({ item, searchS
|
|
|
234
234
|
{jsonContent ? (<>
|
|
235
235
|
{jsonContent.header ? (getLogMessageWithBadges(jsonContent.header, searchStr, [styles.messageText, { color: AppColors.primaryBlack }], styles.highlight, 2)) : null}
|
|
236
236
|
{jsonPreview && (<View style={styles.jsonPreviewContainer}>
|
|
237
|
-
<
|
|
237
|
+
<LogSyntaxHighlighter text={jsonPreview.text} search={searchStr} style={[
|
|
238
238
|
styles.jsonPreviewText,
|
|
239
239
|
{ color: AppColors.primaryBlack },
|
|
240
|
-
]}
|
|
240
|
+
]} detectLinks={false} numberOfLines={5}/>
|
|
241
241
|
</View>)}
|
|
242
242
|
</>) : (getLogMessageWithBadges(item.message, searchStr, [styles.messageText, { color: AppColors.primaryBlack }], styles.highlight, 3))}
|
|
243
243
|
</View>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { StyleSheet, Text, View } from 'react-native';
|
|
2
|
+
import { Platform, StyleSheet, Text, View } from 'react-native';
|
|
3
3
|
import { AppColors } from '../styles/AppColors';
|
|
4
4
|
import { AppFonts } from '../styles/AppFonts';
|
|
5
5
|
import { CheckIcon } from './NetworkIcons';
|
|
@@ -27,7 +27,7 @@ const styles = StyleSheet.create({
|
|
|
27
27
|
justifyContent: 'center',
|
|
28
28
|
paddingHorizontal: 16,
|
|
29
29
|
paddingTop: 16,
|
|
30
|
-
paddingBottom:
|
|
30
|
+
paddingBottom: Platform.OS === 'ios' ? 44 : 32,
|
|
31
31
|
gap: 8,
|
|
32
32
|
},
|
|
33
33
|
dividerLine: {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import React, { useCallback, useState, useMemo } from 'react';
|
|
1
|
+
import React, { useCallback, useState, useMemo, useEffect } from 'react';
|
|
2
2
|
import { FlatList, Pressable, Text, TextInput, TouchableOpacity, View, } from 'react-native';
|
|
3
3
|
import { animateNextLayout, useInspector } from './InspectorContext';
|
|
4
4
|
import AnalyticsEventCard from '../AnalyticsEventCard';
|
|
5
|
-
import AnalyticsDetail from '../AnalyticsDetail';
|
|
6
5
|
import AnalyticsFilterModal from './AnalyticsFilterModal';
|
|
7
6
|
import EndOfListFooter from '../EndOfListFooter';
|
|
8
7
|
import styles from '../../styles';
|
|
@@ -13,7 +12,7 @@ import Svg, { Path, Rect, Line, Circle, G, Defs, LinearGradient as SvgLinearGrad
|
|
|
13
12
|
import TouchableScale from '../TouchableScale';
|
|
14
13
|
import { getCurrentUserId, getCurrentUserProperties, getDefaultEventParameters, getCollectionEnabled, } from '../../customHooks/analyticsLogger';
|
|
15
14
|
import { getEventCategory, } from '../../helpers';
|
|
16
|
-
import { LayersIcon,
|
|
15
|
+
import { LayersIcon, SearchIcon, ClearIcon, TrashIcon, EmptyRadarIcon, HeaderPauseIcon, FilterIcon, CartIcon, GlobeIcon, BoltIcon, SparkleIcon, PinIcon, MoneyIcon, } from '../NetworkIcons';
|
|
17
16
|
const AnalyticsHeader = React.memo(() => {
|
|
18
17
|
const { t } = useTranslation();
|
|
19
18
|
const { analyticsEvents, filteredAnalyticsEvents, analyticsFilters, setAnalyticsFilters, analyticsHeaderExpanded, setAnalyticsHeaderExpanded, } = useInspector();
|
|
@@ -123,16 +122,25 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
123
122
|
return { ...prev, categories: nextCategories };
|
|
124
123
|
});
|
|
125
124
|
};
|
|
126
|
-
// 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (
|
|
125
|
+
// 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (60s live rolling stream)
|
|
127
126
|
const BUCKET_COUNT = 12;
|
|
128
127
|
const chartHeight = 64;
|
|
129
128
|
const svgWidth = 320;
|
|
130
129
|
const [selectedBucketIdx, setSelectedBucketIdx] = useState(null);
|
|
130
|
+
const [liveTick, setLiveTick] = useState(0);
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (!isTrackingEnabled)
|
|
133
|
+
return;
|
|
134
|
+
const interval = setInterval(() => {
|
|
135
|
+
setLiveTick(t => (t + 1) % 100000);
|
|
136
|
+
}, 1000);
|
|
137
|
+
return () => clearInterval(interval);
|
|
138
|
+
}, [isTrackingEnabled]);
|
|
131
139
|
const histogramData = useMemo(() => {
|
|
132
140
|
const buckets = [];
|
|
133
141
|
const now = Date.now();
|
|
134
|
-
const windowMs = 60000; // 60s window
|
|
135
|
-
const bucketDuration = windowMs / BUCKET_COUNT;
|
|
142
|
+
const windowMs = 60000; // 60s live rolling window
|
|
143
|
+
const bucketDuration = windowMs / BUCKET_COUNT; // 5s per bucket
|
|
136
144
|
for (let i = 0; i < BUCKET_COUNT; i++) {
|
|
137
145
|
const bucketAgeSec = Math.round(((BUCKET_COUNT - 1 - i) * bucketDuration) / 1000);
|
|
138
146
|
buckets.push({
|
|
@@ -197,7 +205,7 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
197
205
|
peakVal,
|
|
198
206
|
eventRate,
|
|
199
207
|
};
|
|
200
|
-
}, [filteredAnalyticsEvents, chartHeight, svgWidth, t]);
|
|
208
|
+
}, [filteredAnalyticsEvents, chartHeight, svgWidth, liveTick, t]);
|
|
201
209
|
const selectedBucket = selectedBucketIdx != null ? histogramData.buckets[selectedBucketIdx] : null;
|
|
202
210
|
return (<View style={styles.analyticsHeaderCard}>
|
|
203
211
|
{/* ── 1. Top Header Row (GA4 Style) ─────────────────────────────────── */}
|
|
@@ -269,7 +277,7 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
269
277
|
}}/>)}
|
|
270
278
|
</View>
|
|
271
279
|
|
|
272
|
-
{/* Multi-Select Category Buttons
|
|
280
|
+
{/* Multi-Select Category Buttons */}
|
|
273
281
|
<View style={{
|
|
274
282
|
flexDirection: 'row',
|
|
275
283
|
flexWrap: 'wrap',
|
|
@@ -298,18 +306,6 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
298
306
|
elevation: 2,
|
|
299
307
|
},
|
|
300
308
|
]}>
|
|
301
|
-
<View style={{
|
|
302
|
-
width: 12,
|
|
303
|
-
height: 12,
|
|
304
|
-
borderRadius: 3,
|
|
305
|
-
borderWidth: 1.2,
|
|
306
|
-
borderColor: isAllSelected ? AppColors.white : AppColors.indigo400,
|
|
307
|
-
backgroundColor: isAllSelected ? AppColors.white : 'transparent',
|
|
308
|
-
alignItems: 'center',
|
|
309
|
-
justifyContent: 'center',
|
|
310
|
-
}}>
|
|
311
|
-
{isAllSelected && <CheckIcon color={AppColors.indigo600Alt} size={8}/>}
|
|
312
|
-
</View>
|
|
313
309
|
<LayersIcon color={isAllSelected ? AppColors.white : AppColors.indigo600Alt} size={11}/>
|
|
314
310
|
<Text style={{
|
|
315
311
|
fontFamily: AppFonts.interBold,
|
|
@@ -345,18 +341,6 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
345
341
|
elevation: 2,
|
|
346
342
|
},
|
|
347
343
|
]}>
|
|
348
|
-
<View style={{
|
|
349
|
-
width: 12,
|
|
350
|
-
height: 12,
|
|
351
|
-
borderRadius: 3,
|
|
352
|
-
borderWidth: 1.2,
|
|
353
|
-
borderColor: isSelected ? AppColors.white : AppColors.amber500,
|
|
354
|
-
backgroundColor: isSelected ? AppColors.white : 'transparent',
|
|
355
|
-
alignItems: 'center',
|
|
356
|
-
justifyContent: 'center',
|
|
357
|
-
}}>
|
|
358
|
-
{isSelected && <CheckIcon color={AppColors.amber600} size={8}/>}
|
|
359
|
-
</View>
|
|
360
344
|
<CartIcon color={isSelected ? AppColors.white : AppColors.amber700} size={11}/>
|
|
361
345
|
<Text style={{
|
|
362
346
|
fontFamily: AppFonts.interBold,
|
|
@@ -392,18 +376,6 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
392
376
|
elevation: 2,
|
|
393
377
|
},
|
|
394
378
|
]}>
|
|
395
|
-
<View style={{
|
|
396
|
-
width: 12,
|
|
397
|
-
height: 12,
|
|
398
|
-
borderRadius: 3,
|
|
399
|
-
borderWidth: 1.2,
|
|
400
|
-
borderColor: isSelected ? AppColors.white : AppColors.sky400,
|
|
401
|
-
backgroundColor: isSelected ? AppColors.white : 'transparent',
|
|
402
|
-
alignItems: 'center',
|
|
403
|
-
justifyContent: 'center',
|
|
404
|
-
}}>
|
|
405
|
-
{isSelected && <CheckIcon color={AppColors.sky600} size={8}/>}
|
|
406
|
-
</View>
|
|
407
379
|
<GlobeIcon color={isSelected ? AppColors.white : AppColors.sky600} size={11}/>
|
|
408
380
|
<Text style={{
|
|
409
381
|
fontFamily: AppFonts.interBold,
|
|
@@ -439,18 +411,6 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
439
411
|
elevation: 2,
|
|
440
412
|
},
|
|
441
413
|
]}>
|
|
442
|
-
<View style={{
|
|
443
|
-
width: 12,
|
|
444
|
-
height: 12,
|
|
445
|
-
borderRadius: 3,
|
|
446
|
-
borderWidth: 1.2,
|
|
447
|
-
borderColor: isSelected ? AppColors.white : AppColors.purple400,
|
|
448
|
-
backgroundColor: isSelected ? AppColors.white : 'transparent',
|
|
449
|
-
alignItems: 'center',
|
|
450
|
-
justifyContent: 'center',
|
|
451
|
-
}}>
|
|
452
|
-
{isSelected && <CheckIcon color={AppColors.violet600} size={8}/>}
|
|
453
|
-
</View>
|
|
454
414
|
<BoltIcon color={isSelected ? AppColors.white : AppColors.purple} size={11}/>
|
|
455
415
|
<Text style={{
|
|
456
416
|
fontFamily: AppFonts.interBold,
|
|
@@ -486,18 +446,6 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
486
446
|
elevation: 2,
|
|
487
447
|
},
|
|
488
448
|
]}>
|
|
489
|
-
<View style={{
|
|
490
|
-
width: 12,
|
|
491
|
-
height: 12,
|
|
492
|
-
borderRadius: 3,
|
|
493
|
-
borderWidth: 1.2,
|
|
494
|
-
borderColor: isSelected ? AppColors.white : AppColors.pink400,
|
|
495
|
-
backgroundColor: isSelected ? AppColors.white : 'transparent',
|
|
496
|
-
alignItems: 'center',
|
|
497
|
-
justifyContent: 'center',
|
|
498
|
-
}}>
|
|
499
|
-
{isSelected && <CheckIcon color={AppColors.pink600} size={8}/>}
|
|
500
|
-
</View>
|
|
501
449
|
<SparkleIcon color={isSelected ? AppColors.white : AppColors.brandPurple} size={11}/>
|
|
502
450
|
<Text style={{
|
|
503
451
|
fontFamily: AppFonts.interBold,
|
|
@@ -693,7 +641,7 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
693
641
|
</View>
|
|
694
642
|
</View>)}
|
|
695
643
|
|
|
696
|
-
{/* Timeline Axis Labels */}
|
|
644
|
+
{/* Timeline Axis Labels (60s Realtime Rolling Stream) */}
|
|
697
645
|
<View style={{
|
|
698
646
|
flexDirection: 'row',
|
|
699
647
|
justifyContent: 'space-between',
|
|
@@ -705,21 +653,21 @@ const AnalyticsHeader = React.memo(() => {
|
|
|
705
653
|
fontSize: 8.5,
|
|
706
654
|
color: AppColors.grayTextWeak,
|
|
707
655
|
}}>
|
|
708
|
-
|
|
656
|
+
-60s
|
|
709
657
|
</Text>
|
|
710
658
|
<Text style={{
|
|
711
659
|
fontFamily: AppFonts.interMedium,
|
|
712
660
|
fontSize: 8.5,
|
|
713
661
|
color: AppColors.grayTextWeak,
|
|
714
662
|
}}>
|
|
715
|
-
|
|
663
|
+
-40s
|
|
716
664
|
</Text>
|
|
717
665
|
<Text style={{
|
|
718
666
|
fontFamily: AppFonts.interMedium,
|
|
719
667
|
fontSize: 8.5,
|
|
720
668
|
color: AppColors.grayTextWeak,
|
|
721
669
|
}}>
|
|
722
|
-
|
|
670
|
+
-20s
|
|
723
671
|
</Text>
|
|
724
672
|
<Text style={{
|
|
725
673
|
fontFamily: AppFonts.interBold,
|
|
@@ -959,7 +907,7 @@ const AnalyticsTab = React.memo(() => {
|
|
|
959
907
|
<AnalyticsFilterModal visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)}/>
|
|
960
908
|
|
|
961
909
|
<View style={{ flex: 1 }} onLayout={() => setIsAnalyticsLayoutReady(true)}>
|
|
962
|
-
{
|
|
910
|
+
{isAnalyticsLayoutReady ? (<FlatList data={filteredAnalyticsEvents} keyExtractor={keyExtractor} ListHeaderComponent={AnalyticsHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<View style={styles.emptyContainer}>
|
|
963
911
|
<View style={styles.emptyIconWrap}>
|
|
964
912
|
<EmptyRadarIcon color={AppColors.purple} size={32}/>
|
|
965
913
|
</View>
|