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
|
@@ -176,6 +176,29 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
|
|
|
176
176
|
val cpuAbi = if (Build.SUPPORTED_ABIS.isNotEmpty()) Build.SUPPORTED_ABIS[0] else "unknown"
|
|
177
177
|
map.putString("cpuAbi", cpuAbi)
|
|
178
178
|
|
|
179
|
+
// 6. Application Identifiers (Legal & Non-PII)
|
|
180
|
+
try {
|
|
181
|
+
val packageManager = reactContext.packageManager
|
|
182
|
+
val packageName = reactContext.packageName
|
|
183
|
+
val packageInfo = packageManager.getPackageInfo(packageName, 0)
|
|
184
|
+
val appInfo = packageManager.getApplicationInfo(packageName, 0)
|
|
185
|
+
val appName = packageManager.getApplicationLabel(appInfo).toString()
|
|
186
|
+
val appVersion = packageInfo.versionName ?: "unknown"
|
|
187
|
+
val appBuild = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
188
|
+
packageInfo.longVersionCode.toString()
|
|
189
|
+
} else {
|
|
190
|
+
@Suppress("DEPRECATION")
|
|
191
|
+
packageInfo.versionCode.toString()
|
|
192
|
+
}
|
|
193
|
+
map.putString("appName", appName)
|
|
194
|
+
map.putString("appPackageName", packageName)
|
|
195
|
+
map.putString("appBundleId", packageName)
|
|
196
|
+
map.putString("appVersion", appVersion)
|
|
197
|
+
map.putString("appBuild", appBuild)
|
|
198
|
+
} catch (e: Exception) {
|
|
199
|
+
// Ignore app info fallback
|
|
200
|
+
}
|
|
201
|
+
|
|
179
202
|
promise.resolve(map)
|
|
180
203
|
} catch (e: Exception) {
|
|
181
204
|
promise.reject("DEVICE_METRICS_ERROR", e.message, e)
|
|
@@ -645,7 +668,6 @@ class InAppInspectorFloatingView(
|
|
|
645
668
|
private var touchDownY = 0f
|
|
646
669
|
private var touchDownTime = 0L
|
|
647
670
|
private var isDragging = false
|
|
648
|
-
private val badgeView: android.view.View
|
|
649
671
|
|
|
650
672
|
init {
|
|
651
673
|
val density = context.resources.displayMetrics.density
|
|
@@ -823,28 +845,10 @@ class InAppInspectorFloatingView(
|
|
|
823
845
|
isFocusable = false
|
|
824
846
|
}
|
|
825
847
|
addView(iconView, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT))
|
|
826
|
-
|
|
827
|
-
// 3. Status Badge Dot (Top-Right)
|
|
828
|
-
val badgeSize = (10f * density).toInt()
|
|
829
|
-
badgeView = android.view.View(context).apply {
|
|
830
|
-
val badgeDrawable = android.graphics.drawable.GradientDrawable().apply {
|
|
831
|
-
shape = android.graphics.drawable.GradientDrawable.OVAL
|
|
832
|
-
setColor(android.graphics.Color.parseColor("#22C55E"))
|
|
833
|
-
setStroke((1.5f * density).toInt(), android.graphics.Color.parseColor("#0F172A"))
|
|
834
|
-
}
|
|
835
|
-
background = badgeDrawable
|
|
836
|
-
visibility = GONE
|
|
837
|
-
}
|
|
838
|
-
val badgeParams = LayoutParams(badgeSize, badgeSize).apply {
|
|
839
|
-
gravity = android.view.Gravity.TOP or android.view.Gravity.END
|
|
840
|
-
topMargin = (4f * density).toInt()
|
|
841
|
-
rightMargin = (4f * density).toInt()
|
|
842
|
-
}
|
|
843
|
-
addView(badgeView, badgeParams)
|
|
844
848
|
}
|
|
845
849
|
|
|
846
850
|
fun setBadgeVisible(visible: Boolean) {
|
|
847
|
-
|
|
851
|
+
// Active badge dot removed
|
|
848
852
|
}
|
|
849
853
|
|
|
850
854
|
override fun onTouchEvent(event: android.view.MotionEvent): Boolean {
|
|
@@ -867,7 +871,8 @@ class InAppInspectorFloatingView(
|
|
|
867
871
|
val dx = event.rawX - touchDownX
|
|
868
872
|
val dy = event.rawY - touchDownY
|
|
869
873
|
|
|
870
|
-
|
|
874
|
+
val dist = Math.hypot(dx.toDouble(), dy.toDouble())
|
|
875
|
+
if (!isDragging && dist > 16 * density) {
|
|
871
876
|
isDragging = true
|
|
872
877
|
}
|
|
873
878
|
|
|
@@ -882,12 +887,12 @@ class InAppInspectorFloatingView(
|
|
|
882
887
|
}
|
|
883
888
|
return true
|
|
884
889
|
}
|
|
885
|
-
android.view.MotionEvent.ACTION_UP
|
|
886
|
-
animate().scaleX(1.0f).scaleY(1.0f).setDuration(
|
|
890
|
+
android.view.MotionEvent.ACTION_UP -> {
|
|
891
|
+
animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start()
|
|
887
892
|
val elapsed = System.currentTimeMillis() - touchDownTime
|
|
888
893
|
val totalDist = Math.hypot((event.rawX - touchDownX).toDouble(), (event.rawY - touchDownY).toDouble())
|
|
889
894
|
|
|
890
|
-
if (!isDragging && totalDist <
|
|
895
|
+
if (!isDragging && totalDist < 24 * density && elapsed < 850) {
|
|
891
896
|
onTap()
|
|
892
897
|
} else if (isDragging) {
|
|
893
898
|
// Smooth native snap to nearest horizontal side
|
|
@@ -898,6 +903,10 @@ class InAppInspectorFloatingView(
|
|
|
898
903
|
}
|
|
899
904
|
return true
|
|
900
905
|
}
|
|
906
|
+
android.view.MotionEvent.ACTION_CANCEL -> {
|
|
907
|
+
animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start()
|
|
908
|
+
return true
|
|
909
|
+
}
|
|
901
910
|
}
|
|
902
911
|
return super.onTouchEvent(event)
|
|
903
912
|
}
|
|
@@ -10,8 +10,8 @@ const react_native_1 = require("react-native");
|
|
|
10
10
|
const AppColors_1 = require("../styles/AppColors");
|
|
11
11
|
const AppFonts_1 = require("../styles/AppFonts");
|
|
12
12
|
const helpers_1 = require("../helpers");
|
|
13
|
-
const HighlightText_1 = __importDefault(require("./HighlightText"));
|
|
14
13
|
const CopyButton_1 = __importDefault(require("./CopyButton"));
|
|
14
|
+
const LogSyntaxHighlighter_1 = __importDefault(require("./LogSyntaxHighlighter"));
|
|
15
15
|
const NetworkIcons_1 = require("./NetworkIcons");
|
|
16
16
|
const InspectorContext_1 = require("./Inspector/InspectorContext");
|
|
17
17
|
const getLogMessageWithBadges = (message, searchStr, textStyle, highlightStyle, numberOfLines) => {
|
|
@@ -79,10 +79,10 @@ const getLogMessageWithBadges = (message, searchStr, textStyle, highlightStyle,
|
|
|
79
79
|
</react_native_1.View>);
|
|
80
80
|
})}
|
|
81
81
|
</react_native_1.View>
|
|
82
|
-
<
|
|
82
|
+
<LogSyntaxHighlighter_1.default text={remainingText} search={searchStr} style={textStyle} numberOfLines={numberOfLines} detectLinks={true}/>
|
|
83
83
|
</react_native_1.View>);
|
|
84
84
|
}
|
|
85
|
-
return (<
|
|
85
|
+
return (<LogSyntaxHighlighter_1.default text={message} search={searchStr} style={textStyle} numberOfLines={numberOfLines} detectLinks={true}/>);
|
|
86
86
|
};
|
|
87
87
|
exports.ConsoleLogCard = react_1.default.memo(function ConsoleLogCard({ item, searchStr = '', }) {
|
|
88
88
|
const { setSelectedLog } = (0, InspectorContext_1.useInspector)();
|
|
@@ -240,10 +240,10 @@ exports.ConsoleLogCard = react_1.default.memo(function ConsoleLogCard({ item, se
|
|
|
240
240
|
{jsonContent ? (<>
|
|
241
241
|
{jsonContent.header ? (getLogMessageWithBadges(jsonContent.header, searchStr, [styles.messageText, { color: AppColors_1.AppColors.primaryBlack }], styles.highlight, 2)) : null}
|
|
242
242
|
{jsonPreview && (<react_native_1.View style={styles.jsonPreviewContainer}>
|
|
243
|
-
<
|
|
243
|
+
<LogSyntaxHighlighter_1.default text={jsonPreview.text} search={searchStr} style={[
|
|
244
244
|
styles.jsonPreviewText,
|
|
245
245
|
{ color: AppColors_1.AppColors.primaryBlack },
|
|
246
|
-
]}
|
|
246
|
+
]} detectLinks={false} numberOfLines={5}/>
|
|
247
247
|
</react_native_1.View>)}
|
|
248
248
|
</>) : (getLogMessageWithBadges(item.message, searchStr, [styles.messageText, { color: AppColors_1.AppColors.primaryBlack }], styles.highlight, 3))}
|
|
249
249
|
</react_native_1.View>
|
|
@@ -40,7 +40,6 @@ const react_1 = __importStar(require("react"));
|
|
|
40
40
|
const react_native_1 = require("react-native");
|
|
41
41
|
const InspectorContext_1 = require("./InspectorContext");
|
|
42
42
|
const AnalyticsEventCard_1 = __importDefault(require("../AnalyticsEventCard"));
|
|
43
|
-
const AnalyticsDetail_1 = __importDefault(require("../AnalyticsDetail"));
|
|
44
43
|
const AnalyticsFilterModal_1 = __importDefault(require("./AnalyticsFilterModal"));
|
|
45
44
|
const EndOfListFooter_1 = __importDefault(require("../EndOfListFooter"));
|
|
46
45
|
const styles_1 = __importDefault(require("../../styles"));
|
|
@@ -161,16 +160,25 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
161
160
|
return { ...prev, categories: nextCategories };
|
|
162
161
|
});
|
|
163
162
|
};
|
|
164
|
-
// 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (
|
|
163
|
+
// 12-Bucket GA4 Realtime Stacked Histogram & Spline Wave Graph (60s live rolling stream)
|
|
165
164
|
const BUCKET_COUNT = 12;
|
|
166
165
|
const chartHeight = 64;
|
|
167
166
|
const svgWidth = 320;
|
|
168
167
|
const [selectedBucketIdx, setSelectedBucketIdx] = (0, react_1.useState)(null);
|
|
168
|
+
const [liveTick, setLiveTick] = (0, react_1.useState)(0);
|
|
169
|
+
(0, react_1.useEffect)(() => {
|
|
170
|
+
if (!isTrackingEnabled)
|
|
171
|
+
return;
|
|
172
|
+
const interval = setInterval(() => {
|
|
173
|
+
setLiveTick(t => (t + 1) % 100000);
|
|
174
|
+
}, 1000);
|
|
175
|
+
return () => clearInterval(interval);
|
|
176
|
+
}, [isTrackingEnabled]);
|
|
169
177
|
const histogramData = (0, react_1.useMemo)(() => {
|
|
170
178
|
const buckets = [];
|
|
171
179
|
const now = Date.now();
|
|
172
|
-
const windowMs = 60000; // 60s window
|
|
173
|
-
const bucketDuration = windowMs / BUCKET_COUNT;
|
|
180
|
+
const windowMs = 60000; // 60s live rolling window
|
|
181
|
+
const bucketDuration = windowMs / BUCKET_COUNT; // 5s per bucket
|
|
174
182
|
for (let i = 0; i < BUCKET_COUNT; i++) {
|
|
175
183
|
const bucketAgeSec = Math.round(((BUCKET_COUNT - 1 - i) * bucketDuration) / 1000);
|
|
176
184
|
buckets.push({
|
|
@@ -235,7 +243,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
235
243
|
peakVal,
|
|
236
244
|
eventRate,
|
|
237
245
|
};
|
|
238
|
-
}, [filteredAnalyticsEvents, chartHeight, svgWidth, t]);
|
|
246
|
+
}, [filteredAnalyticsEvents, chartHeight, svgWidth, liveTick, t]);
|
|
239
247
|
const selectedBucket = selectedBucketIdx != null ? histogramData.buckets[selectedBucketIdx] : null;
|
|
240
248
|
return (<react_native_1.View style={styles_1.default.analyticsHeaderCard}>
|
|
241
249
|
{/* ── 1. Top Header Row (GA4 Style) ─────────────────────────────────── */}
|
|
@@ -307,7 +315,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
307
315
|
}}/>)}
|
|
308
316
|
</react_native_1.View>
|
|
309
317
|
|
|
310
|
-
{/* Multi-Select Category Buttons
|
|
318
|
+
{/* Multi-Select Category Buttons */}
|
|
311
319
|
<react_native_1.View style={{
|
|
312
320
|
flexDirection: 'row',
|
|
313
321
|
flexWrap: 'wrap',
|
|
@@ -336,18 +344,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
336
344
|
elevation: 2,
|
|
337
345
|
},
|
|
338
346
|
]}>
|
|
339
|
-
<react_native_1.View style={{
|
|
340
|
-
width: 12,
|
|
341
|
-
height: 12,
|
|
342
|
-
borderRadius: 3,
|
|
343
|
-
borderWidth: 1.2,
|
|
344
|
-
borderColor: isAllSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.indigo400,
|
|
345
|
-
backgroundColor: isAllSelected ? AppColors_1.AppColors.white : 'transparent',
|
|
346
|
-
alignItems: 'center',
|
|
347
|
-
justifyContent: 'center',
|
|
348
|
-
}}>
|
|
349
|
-
{isAllSelected && <NetworkIcons_1.CheckIcon color={AppColors_1.AppColors.indigo600Alt} size={8}/>}
|
|
350
|
-
</react_native_1.View>
|
|
351
347
|
<NetworkIcons_1.LayersIcon color={isAllSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.indigo600Alt} size={11}/>
|
|
352
348
|
<react_native_1.Text style={{
|
|
353
349
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -383,18 +379,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
383
379
|
elevation: 2,
|
|
384
380
|
},
|
|
385
381
|
]}>
|
|
386
|
-
<react_native_1.View style={{
|
|
387
|
-
width: 12,
|
|
388
|
-
height: 12,
|
|
389
|
-
borderRadius: 3,
|
|
390
|
-
borderWidth: 1.2,
|
|
391
|
-
borderColor: isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.amber500,
|
|
392
|
-
backgroundColor: isSelected ? AppColors_1.AppColors.white : 'transparent',
|
|
393
|
-
alignItems: 'center',
|
|
394
|
-
justifyContent: 'center',
|
|
395
|
-
}}>
|
|
396
|
-
{isSelected && <NetworkIcons_1.CheckIcon color={AppColors_1.AppColors.amber600} size={8}/>}
|
|
397
|
-
</react_native_1.View>
|
|
398
382
|
<NetworkIcons_1.CartIcon color={isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.amber700} size={11}/>
|
|
399
383
|
<react_native_1.Text style={{
|
|
400
384
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -430,18 +414,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
430
414
|
elevation: 2,
|
|
431
415
|
},
|
|
432
416
|
]}>
|
|
433
|
-
<react_native_1.View style={{
|
|
434
|
-
width: 12,
|
|
435
|
-
height: 12,
|
|
436
|
-
borderRadius: 3,
|
|
437
|
-
borderWidth: 1.2,
|
|
438
|
-
borderColor: isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.sky400,
|
|
439
|
-
backgroundColor: isSelected ? AppColors_1.AppColors.white : 'transparent',
|
|
440
|
-
alignItems: 'center',
|
|
441
|
-
justifyContent: 'center',
|
|
442
|
-
}}>
|
|
443
|
-
{isSelected && <NetworkIcons_1.CheckIcon color={AppColors_1.AppColors.sky600} size={8}/>}
|
|
444
|
-
</react_native_1.View>
|
|
445
417
|
<NetworkIcons_1.GlobeIcon color={isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.sky600} size={11}/>
|
|
446
418
|
<react_native_1.Text style={{
|
|
447
419
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -477,18 +449,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
477
449
|
elevation: 2,
|
|
478
450
|
},
|
|
479
451
|
]}>
|
|
480
|
-
<react_native_1.View style={{
|
|
481
|
-
width: 12,
|
|
482
|
-
height: 12,
|
|
483
|
-
borderRadius: 3,
|
|
484
|
-
borderWidth: 1.2,
|
|
485
|
-
borderColor: isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple400,
|
|
486
|
-
backgroundColor: isSelected ? AppColors_1.AppColors.white : 'transparent',
|
|
487
|
-
alignItems: 'center',
|
|
488
|
-
justifyContent: 'center',
|
|
489
|
-
}}>
|
|
490
|
-
{isSelected && <NetworkIcons_1.CheckIcon color={AppColors_1.AppColors.violet600} size={8}/>}
|
|
491
|
-
</react_native_1.View>
|
|
492
452
|
<NetworkIcons_1.BoltIcon color={isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>
|
|
493
453
|
<react_native_1.Text style={{
|
|
494
454
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -524,18 +484,6 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
524
484
|
elevation: 2,
|
|
525
485
|
},
|
|
526
486
|
]}>
|
|
527
|
-
<react_native_1.View style={{
|
|
528
|
-
width: 12,
|
|
529
|
-
height: 12,
|
|
530
|
-
borderRadius: 3,
|
|
531
|
-
borderWidth: 1.2,
|
|
532
|
-
borderColor: isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.pink400,
|
|
533
|
-
backgroundColor: isSelected ? AppColors_1.AppColors.white : 'transparent',
|
|
534
|
-
alignItems: 'center',
|
|
535
|
-
justifyContent: 'center',
|
|
536
|
-
}}>
|
|
537
|
-
{isSelected && <NetworkIcons_1.CheckIcon color={AppColors_1.AppColors.pink600} size={8}/>}
|
|
538
|
-
</react_native_1.View>
|
|
539
487
|
<NetworkIcons_1.SparkleIcon color={isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.brandPurple} size={11}/>
|
|
540
488
|
<react_native_1.Text style={{
|
|
541
489
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -731,7 +679,7 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
731
679
|
</react_native_1.View>
|
|
732
680
|
</react_native_1.View>)}
|
|
733
681
|
|
|
734
|
-
{/* Timeline Axis Labels */}
|
|
682
|
+
{/* Timeline Axis Labels (60s Realtime Rolling Stream) */}
|
|
735
683
|
<react_native_1.View style={{
|
|
736
684
|
flexDirection: 'row',
|
|
737
685
|
justifyContent: 'space-between',
|
|
@@ -743,21 +691,21 @@ const AnalyticsHeader = react_1.default.memo(() => {
|
|
|
743
691
|
fontSize: 8.5,
|
|
744
692
|
color: AppColors_1.AppColors.grayTextWeak,
|
|
745
693
|
}}>
|
|
746
|
-
|
|
694
|
+
-60s
|
|
747
695
|
</react_native_1.Text>
|
|
748
696
|
<react_native_1.Text style={{
|
|
749
697
|
fontFamily: AppFonts_1.AppFonts.interMedium,
|
|
750
698
|
fontSize: 8.5,
|
|
751
699
|
color: AppColors_1.AppColors.grayTextWeak,
|
|
752
700
|
}}>
|
|
753
|
-
|
|
701
|
+
-40s
|
|
754
702
|
</react_native_1.Text>
|
|
755
703
|
<react_native_1.Text style={{
|
|
756
704
|
fontFamily: AppFonts_1.AppFonts.interMedium,
|
|
757
705
|
fontSize: 8.5,
|
|
758
706
|
color: AppColors_1.AppColors.grayTextWeak,
|
|
759
707
|
}}>
|
|
760
|
-
|
|
708
|
+
-20s
|
|
761
709
|
</react_native_1.Text>
|
|
762
710
|
<react_native_1.Text style={{
|
|
763
711
|
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
@@ -997,7 +945,7 @@ const AnalyticsTab = react_1.default.memo(() => {
|
|
|
997
945
|
<AnalyticsFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)}/>
|
|
998
946
|
|
|
999
947
|
<react_native_1.View style={{ flex: 1 }} onLayout={() => setIsAnalyticsLayoutReady(true)}>
|
|
1000
|
-
{
|
|
948
|
+
{isAnalyticsLayoutReady ? (<react_native_1.FlatList data={filteredAnalyticsEvents} keyExtractor={keyExtractor} ListHeaderComponent={AnalyticsHeader} renderItem={renderItem} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} ListEmptyComponent={<react_native_1.View style={styles_1.default.emptyContainer}>
|
|
1001
949
|
<react_native_1.View style={styles_1.default.emptyIconWrap}>
|
|
1002
950
|
<NetworkIcons_1.EmptyRadarIcon color={AppColors_1.AppColors.purple} size={32}/>
|
|
1003
951
|
</react_native_1.View>
|