react-native-inapp-inspector 2.3.15 → 2.3.16
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 +1 -0
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +0 -22
- package/dist/commonjs/components/Inspector/ConsoleTab.js +0 -22
- package/dist/commonjs/components/Inspector/CrashTab.js +0 -23
- package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +56 -4
- package/dist/commonjs/components/Inspector/MainScreen.js +45 -3
- package/dist/commonjs/components/Inspector/NetworkTab.js +27 -38
- package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
- package/dist/commonjs/components/Inspector/PerformanceTab.js +8 -1
- package/dist/commonjs/components/Inspector/ReduxTab.js +0 -22
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1035 -173
- package/dist/commonjs/components/Inspector/StorageTab.js +0 -23
- package/dist/commonjs/components/Inspector/TabBar.js +50 -15
- package/dist/commonjs/components/NetworkIcons.d.ts +5 -0
- package/dist/commonjs/components/NetworkIcons.js +33 -2
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +1 -0
- package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
- package/dist/commonjs/helpers/remoteConfig.js +165 -0
- package/dist/commonjs/helpers/searchQueryParser.js +2 -0
- package/dist/commonjs/helpers/telemetry.d.ts +5 -0
- package/dist/commonjs/helpers/telemetry.js +339 -8
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +32 -2
- package/dist/commonjs/styles/AppFonts.d.ts +2 -0
- package/dist/commonjs/styles/AppFonts.js +1 -0
- package/dist/commonjs/styles/index.d.ts +22 -0
- package/dist/commonjs/styles/index.js +19 -0
- package/dist/commonjs/types/enums.d.ts +1 -0
- package/dist/commonjs/types/enums.js +1 -0
- package/dist/commonjs/types/interfaces.d.ts +12 -0
- package/dist/esm/components/Inspector/AnalyticsTab.js +1 -23
- package/dist/esm/components/Inspector/ConsoleTab.js +1 -23
- package/dist/esm/components/Inspector/CrashTab.js +1 -24
- package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +57 -5
- package/dist/esm/components/Inspector/MainScreen.js +46 -4
- package/dist/esm/components/Inspector/NetworkTab.js +28 -39
- package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
- package/dist/esm/components/Inspector/PerformanceTab.js +8 -1
- package/dist/esm/components/Inspector/ReduxTab.js +1 -23
- package/dist/esm/components/Inspector/SettingsPanel.js +1038 -176
- package/dist/esm/components/Inspector/StorageTab.js +0 -23
- package/dist/esm/components/Inspector/TabBar.js +50 -15
- package/dist/esm/components/NetworkIcons.d.ts +5 -0
- package/dist/esm/components/NetworkIcons.js +26 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -0
- package/dist/esm/helpers/remoteConfig.d.ts +4 -0
- package/dist/esm/helpers/remoteConfig.js +160 -0
- package/dist/esm/helpers/searchQueryParser.js +2 -0
- package/dist/esm/helpers/telemetry.d.ts +5 -0
- package/dist/esm/helpers/telemetry.js +332 -9
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +30 -2
- package/dist/esm/styles/AppFonts.d.ts +2 -0
- package/dist/esm/styles/AppFonts.js +1 -0
- package/dist/esm/styles/index.d.ts +22 -0
- package/dist/esm/styles/index.js +19 -0
- package/dist/esm/types/enums.d.ts +1 -0
- package/dist/esm/types/enums.js +1 -0
- package/dist/esm/types/interfaces.d.ts +12 -0
- package/package.json +1 -1
- package/src/components/Inspector/AnalyticsTab.tsx +0 -23
- package/src/components/Inspector/ConsoleTab.tsx +0 -23
- package/src/components/Inspector/CrashTab.tsx +0 -23
- package/src/components/Inspector/FeedbackModal.tsx +626 -0
- package/src/components/Inspector/InspectorHeader.tsx +78 -2
- package/src/components/Inspector/MainScreen.tsx +59 -3
- package/src/components/Inspector/NetworkTab.tsx +69 -78
- package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
- package/src/components/Inspector/PerformanceTab.tsx +8 -1
- package/src/components/Inspector/ReduxTab.tsx +0 -23
- package/src/components/Inspector/SettingsPanel.tsx +1162 -197
- package/src/components/Inspector/StorageTab.tsx +0 -23
- package/src/components/Inspector/TabBar.tsx +57 -20
- package/src/components/NetworkIcons.tsx +92 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/index.ts +1 -0
- package/src/helpers/remoteConfig.ts +212 -0
- package/src/helpers/searchQueryParser.ts +3 -0
- package/src/helpers/telemetry.ts +381 -10
- package/src/index.tsx +42 -0
- package/src/styles/AppFonts.ts +2 -0
- package/src/styles/index.ts +20 -1
- package/src/types/enums.ts +1 -0
- package/src/types/interfaces.ts +12 -0
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
NpmIcon,
|
|
43
43
|
ResetIcon,
|
|
44
44
|
BoltIcon,
|
|
45
|
+
InfoCircleIcon,
|
|
45
46
|
} from '../NetworkIcons';
|
|
46
47
|
|
|
47
48
|
const InspectorHeader = React.memo(() => {
|
|
@@ -70,6 +71,9 @@ const InspectorHeader = React.memo(() => {
|
|
|
70
71
|
runClearAllWithAnimation,
|
|
71
72
|
settingsPage,
|
|
72
73
|
setSettingsPage,
|
|
74
|
+
setSettingsActiveSubTab,
|
|
75
|
+
isFeedbackOpen,
|
|
76
|
+
setIsFeedbackOpen,
|
|
73
77
|
resetToDefaults,
|
|
74
78
|
closeModal,
|
|
75
79
|
detailTitle,
|
|
@@ -147,7 +151,7 @@ const InspectorHeader = React.memo(() => {
|
|
|
147
151
|
(activeTab === 'crash' && selectedCrash != null);
|
|
148
152
|
|
|
149
153
|
const isSettingsView = settingsPage !== null;
|
|
150
|
-
const isAnySelected = isDetailView || isSettingsView;
|
|
154
|
+
const isAnySelected = isDetailView || isSettingsView || isFeedbackOpen;
|
|
151
155
|
|
|
152
156
|
const settingsModuleTitle = useMemo(() => {
|
|
153
157
|
switch (settingsPage) {
|
|
@@ -206,6 +210,10 @@ const InspectorHeader = React.memo(() => {
|
|
|
206
210
|
]}>
|
|
207
211
|
<TouchableScale
|
|
208
212
|
onPress={() => {
|
|
213
|
+
if (isFeedbackOpen) {
|
|
214
|
+
setIsFeedbackOpen(false);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
209
217
|
if (isSettingsView) {
|
|
210
218
|
if (settingsPage === 'main') {
|
|
211
219
|
setSettingsPage(null);
|
|
@@ -249,7 +257,50 @@ const InspectorHeader = React.memo(() => {
|
|
|
249
257
|
<WhiteBackNavigation />
|
|
250
258
|
</TouchableScale>
|
|
251
259
|
|
|
252
|
-
{
|
|
260
|
+
{isFeedbackOpen ? (
|
|
261
|
+
<View style={{gap: 2, flex: 1, minWidth: 0}}>
|
|
262
|
+
<View
|
|
263
|
+
style={{flexDirection: 'row', alignItems: 'center', gap: 6}}>
|
|
264
|
+
<Text
|
|
265
|
+
style={{
|
|
266
|
+
fontFamily: AppFonts.interBold,
|
|
267
|
+
fontSize: isNarrow ? 14 : 16,
|
|
268
|
+
color: AppColors.white,
|
|
269
|
+
letterSpacing: -0.2,
|
|
270
|
+
}}
|
|
271
|
+
numberOfLines={1}>
|
|
272
|
+
Support & Feedback
|
|
273
|
+
</Text>
|
|
274
|
+
<View
|
|
275
|
+
style={{
|
|
276
|
+
backgroundColor: `${AppColors.white}26`,
|
|
277
|
+
paddingHorizontal: isNarrow ? 4 : 6,
|
|
278
|
+
paddingVertical: 1.5,
|
|
279
|
+
borderRadius: 10,
|
|
280
|
+
borderWidth: 1,
|
|
281
|
+
borderColor: `${AppColors.white}20`,
|
|
282
|
+
}}>
|
|
283
|
+
<Text
|
|
284
|
+
style={{
|
|
285
|
+
fontFamily: AppFonts.interBold,
|
|
286
|
+
fontSize: isNarrow ? 8 : 9,
|
|
287
|
+
color: AppColors.white,
|
|
288
|
+
}}>
|
|
289
|
+
v{LIB_VERSION}
|
|
290
|
+
</Text>
|
|
291
|
+
</View>
|
|
292
|
+
</View>
|
|
293
|
+
<Text
|
|
294
|
+
style={{
|
|
295
|
+
fontFamily: AppFonts.interRegular,
|
|
296
|
+
fontSize: isNarrow ? 9.5 : 10.5,
|
|
297
|
+
color: `${AppColors.white}CC`,
|
|
298
|
+
}}
|
|
299
|
+
numberOfLines={1}>
|
|
300
|
+
Direct line to maintainers & developers
|
|
301
|
+
</Text>
|
|
302
|
+
</View>
|
|
303
|
+
) : isSettingsView ? (
|
|
253
304
|
<View style={{gap: 2, flex: 1, minWidth: 0}}>
|
|
254
305
|
<View
|
|
255
306
|
style={{flexDirection: 'row', alignItems: 'center', gap: 6}}>
|
|
@@ -997,6 +1048,9 @@ const InspectorHeader = React.memo(() => {
|
|
|
997
1048
|
|
|
998
1049
|
{!isAnySelected && (
|
|
999
1050
|
<TouchableScale
|
|
1051
|
+
accessible={true}
|
|
1052
|
+
accessibilityRole="button"
|
|
1053
|
+
accessibilityLabel="Settings"
|
|
1000
1054
|
onPress={() => setSettingsPage('main')}
|
|
1001
1055
|
hitSlop={15}
|
|
1002
1056
|
style={[
|
|
@@ -1011,6 +1065,28 @@ const InspectorHeader = React.memo(() => {
|
|
|
1011
1065
|
</TouchableScale>
|
|
1012
1066
|
)}
|
|
1013
1067
|
|
|
1068
|
+
{!isAnySelected && (
|
|
1069
|
+
<TouchableScale
|
|
1070
|
+
accessible={true}
|
|
1071
|
+
accessibilityRole="button"
|
|
1072
|
+
accessibilityLabel="About and System Specifications"
|
|
1073
|
+
onPress={() => {
|
|
1074
|
+
setSettingsActiveSubTab('about');
|
|
1075
|
+
setSettingsPage('main');
|
|
1076
|
+
}}
|
|
1077
|
+
hitSlop={15}
|
|
1078
|
+
style={[
|
|
1079
|
+
styles.closeButtonSquare,
|
|
1080
|
+
{
|
|
1081
|
+
width: buttonSize,
|
|
1082
|
+
height: buttonSize,
|
|
1083
|
+
borderRadius: isNarrow ? 6 : 7,
|
|
1084
|
+
},
|
|
1085
|
+
]}>
|
|
1086
|
+
<InfoCircleIcon color={AppColors.white} size={isNarrow ? 12 : 14} />
|
|
1087
|
+
</TouchableScale>
|
|
1088
|
+
)}
|
|
1089
|
+
|
|
1014
1090
|
<TouchableOpacity
|
|
1015
1091
|
onPress={closeModal}
|
|
1016
1092
|
hitSlop={{top: 12, bottom: 12, left: 12, right: 12}}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
StatusBar,
|
|
9
9
|
StyleSheet,
|
|
10
10
|
Text,
|
|
11
|
+
TouchableOpacity,
|
|
11
12
|
View,
|
|
12
13
|
} from 'react-native';
|
|
13
14
|
import {useInspector} from './InspectorContext';
|
|
@@ -32,7 +33,11 @@ import StorageTab from './StorageTab';
|
|
|
32
33
|
import DebuggingTab from './DebuggingTab';
|
|
33
34
|
import SettingsPanel from './SettingsPanel';
|
|
34
35
|
import NpmUpdateToast from './NpmUpdateToast';
|
|
36
|
+
import NpmStarPrompt from './NpmStarPrompt';
|
|
37
|
+
import FeedbackModal from './FeedbackModal';
|
|
35
38
|
import Toast from '../Toast';
|
|
39
|
+
import TouchableScale from '../TouchableScale';
|
|
40
|
+
import {HeadphonesIcon} from '../NetworkIcons';
|
|
36
41
|
import styles from '../../styles';
|
|
37
42
|
import {AppColors} from '../../styles/AppColors';
|
|
38
43
|
import NavigationTracker from './NavigationTracker';
|
|
@@ -51,6 +56,8 @@ const MainScreen = () => {
|
|
|
51
56
|
selectedReduxAction,
|
|
52
57
|
selectedCrash,
|
|
53
58
|
settingsPage,
|
|
59
|
+
isFeedbackOpen,
|
|
60
|
+
setIsFeedbackOpen,
|
|
54
61
|
activeTab,
|
|
55
62
|
isReady,
|
|
56
63
|
enabled,
|
|
@@ -93,6 +100,19 @@ const MainScreen = () => {
|
|
|
93
100
|
}
|
|
94
101
|
}, [settingsPage !== null]);
|
|
95
102
|
|
|
103
|
+
const feedbackAnim = useRef(new Animated.Value(0)).current;
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (isFeedbackOpen) {
|
|
106
|
+
feedbackAnim.setValue(0);
|
|
107
|
+
Animated.spring(feedbackAnim, {
|
|
108
|
+
toValue: 1,
|
|
109
|
+
friction: 8,
|
|
110
|
+
tension: 65,
|
|
111
|
+
useNativeDriver: true,
|
|
112
|
+
}).start();
|
|
113
|
+
}
|
|
114
|
+
}, [isFeedbackOpen]);
|
|
115
|
+
|
|
96
116
|
const tabAnim = useRef(new Animated.Value(1)).current;
|
|
97
117
|
useEffect(() => {
|
|
98
118
|
tabAnim.setValue(0);
|
|
@@ -139,8 +159,8 @@ const MainScreen = () => {
|
|
|
139
159
|
<InspectorHeader />
|
|
140
160
|
|
|
141
161
|
<View style={{flex: 1}}>
|
|
142
|
-
{/* ─── Horizontal Scrollable Tab Bar inside Content (Always visible) ─── */}
|
|
143
|
-
{!isDetailActive && <TabBar />}
|
|
162
|
+
{/* ─── Horizontal Scrollable Tab Bar inside Content (Always visible unless in detail/settings/feedback) ─── */}
|
|
163
|
+
{!isDetailActive && settingsPage === null && !isFeedbackOpen && <TabBar />}
|
|
144
164
|
|
|
145
165
|
{isReady ? (
|
|
146
166
|
<View style={{flex: 1}}>
|
|
@@ -159,7 +179,7 @@ const MainScreen = () => {
|
|
|
159
179
|
},
|
|
160
180
|
],
|
|
161
181
|
},
|
|
162
|
-
(isDetailActive || settingsPage !== null) && {
|
|
182
|
+
(isDetailActive || settingsPage !== null || isFeedbackOpen) && {
|
|
163
183
|
pointerEvents: 'none',
|
|
164
184
|
},
|
|
165
185
|
]}>
|
|
@@ -236,6 +256,39 @@ const MainScreen = () => {
|
|
|
236
256
|
<SettingsPanel />
|
|
237
257
|
</Animated.View>
|
|
238
258
|
)}
|
|
259
|
+
|
|
260
|
+
{/* Support & Feedback Layer - Rendered inside in-app inspector covering full content card */}
|
|
261
|
+
{isFeedbackOpen && (
|
|
262
|
+
<Animated.View
|
|
263
|
+
style={[
|
|
264
|
+
StyleSheet.absoluteFill,
|
|
265
|
+
{
|
|
266
|
+
backgroundColor: AppColors.primaryLight,
|
|
267
|
+
opacity: feedbackAnim,
|
|
268
|
+
transform: [
|
|
269
|
+
{
|
|
270
|
+
translateY: feedbackAnim.interpolate({
|
|
271
|
+
inputRange: [0, 1],
|
|
272
|
+
outputRange: [24, 0],
|
|
273
|
+
}),
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
]}>
|
|
278
|
+
<FeedbackModal onClose={() => setIsFeedbackOpen(false)} />
|
|
279
|
+
</Animated.View>
|
|
280
|
+
)}
|
|
281
|
+
|
|
282
|
+
{/* Floating Support & Feedback Button (in place of scroll-to-top) */}
|
|
283
|
+
{!isDetailActive && settingsPage === null && !isFeedbackOpen && (
|
|
284
|
+
<TouchableOpacity
|
|
285
|
+
activeOpacity={0.8}
|
|
286
|
+
onPress={() => setIsFeedbackOpen(true)}
|
|
287
|
+
hitSlop={{top: 10, bottom: 10, left: 10, right: 10}}
|
|
288
|
+
style={styles.supportFab}>
|
|
289
|
+
<HeadphonesIcon color={AppColors.white} size={20} />
|
|
290
|
+
</TouchableOpacity>
|
|
291
|
+
)}
|
|
239
292
|
</View>
|
|
240
293
|
|
|
241
294
|
{/* Bottom floating toast notification */}
|
|
@@ -243,6 +296,9 @@ const MainScreen = () => {
|
|
|
243
296
|
|
|
244
297
|
{/* NPM Version Update Toast with timeout progress bar */}
|
|
245
298
|
<NpmUpdateToast />
|
|
299
|
+
|
|
300
|
+
{/* 5-Day Periodic Star & Support Prompt */}
|
|
301
|
+
<NpmStarPrompt />
|
|
246
302
|
</View>
|
|
247
303
|
</View>
|
|
248
304
|
</ErrorBoundary>
|
|
@@ -570,16 +570,24 @@ const NetworkTab = React.memo(() => {
|
|
|
570
570
|
</View>
|
|
571
571
|
</View>
|
|
572
572
|
|
|
573
|
-
{/* Quick Filter Horizontal Chips Bar with
|
|
574
|
-
<View
|
|
573
|
+
{/* Quick Filter Horizontal Chips Bar with Sticky "More Filters" on Right */}
|
|
574
|
+
<View
|
|
575
|
+
style={{
|
|
576
|
+
flexDirection: 'row',
|
|
577
|
+
alignItems: 'center',
|
|
578
|
+
marginBottom: 8,
|
|
579
|
+
paddingHorizontal: 12,
|
|
580
|
+
gap: 6,
|
|
581
|
+
}}>
|
|
575
582
|
<ScrollView
|
|
576
583
|
horizontal
|
|
577
584
|
showsHorizontalScrollIndicator={false}
|
|
585
|
+
style={{flex: 1}}
|
|
578
586
|
contentContainerStyle={{
|
|
579
|
-
paddingHorizontal: 12,
|
|
580
587
|
flexDirection: 'row',
|
|
581
588
|
alignItems: 'center',
|
|
582
589
|
gap: 6,
|
|
590
|
+
paddingRight: 6,
|
|
583
591
|
}}>
|
|
584
592
|
{QUICK_CHIPS.map(chip => {
|
|
585
593
|
const isActive = quickFilter === chip.id;
|
|
@@ -646,67 +654,73 @@ const NetworkTab = React.memo(() => {
|
|
|
646
654
|
</TouchableScale>
|
|
647
655
|
);
|
|
648
656
|
})}
|
|
657
|
+
</ScrollView>
|
|
649
658
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
659
|
+
<TouchableScale
|
|
660
|
+
onPress={() => setIsFilterModalOpen(true)}
|
|
661
|
+
style={{flexShrink: 0}}>
|
|
662
|
+
<View
|
|
663
|
+
style={{
|
|
664
|
+
flexDirection: 'row',
|
|
665
|
+
alignItems: 'center',
|
|
666
|
+
paddingHorizontal: 10,
|
|
667
|
+
paddingVertical: 4.5,
|
|
668
|
+
borderRadius: 8,
|
|
669
|
+
backgroundColor:
|
|
670
|
+
statusFilters.size > 0 || methodFilters.size > 0
|
|
671
|
+
? `${AppColors.purple}20`
|
|
672
|
+
: AppColors.grayBackground,
|
|
673
|
+
borderWidth: 1,
|
|
674
|
+
borderColor:
|
|
675
|
+
statusFilters.size > 0 || methodFilters.size > 0
|
|
676
|
+
? AppColors.purple
|
|
677
|
+
: AppColors.grayBorderSecondary,
|
|
678
|
+
gap: 5,
|
|
679
|
+
shadowColor: AppColors.black,
|
|
680
|
+
shadowOpacity: 0.04,
|
|
681
|
+
shadowRadius: 2,
|
|
682
|
+
shadowOffset: {width: 0, height: 1},
|
|
683
|
+
elevation: 1,
|
|
684
|
+
}}>
|
|
685
|
+
<FilterIcon
|
|
686
|
+
size={11}
|
|
687
|
+
color={
|
|
688
|
+
statusFilters.size > 0 || methodFilters.size > 0
|
|
689
|
+
? AppColors.purple
|
|
690
|
+
: AppColors.grayText
|
|
691
|
+
}
|
|
692
|
+
/>
|
|
693
|
+
<Text
|
|
653
694
|
style={{
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
paddingVertical: 4.5,
|
|
658
|
-
borderRadius: 8,
|
|
659
|
-
backgroundColor:
|
|
660
|
-
statusFilters.size > 0 || methodFilters.size > 0
|
|
661
|
-
? `${AppColors.purple}20`
|
|
662
|
-
: AppColors.grayBackground,
|
|
663
|
-
borderWidth: 1,
|
|
664
|
-
borderColor:
|
|
695
|
+
fontFamily: AppFonts.interBold,
|
|
696
|
+
fontSize: 10.5,
|
|
697
|
+
color:
|
|
665
698
|
statusFilters.size > 0 || methodFilters.size > 0
|
|
666
699
|
? AppColors.purple
|
|
667
|
-
: AppColors.
|
|
668
|
-
gap: 5,
|
|
700
|
+
: AppColors.grayText,
|
|
669
701
|
}}>
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
? AppColors.purple
|
|
675
|
-
: AppColors.grayText
|
|
676
|
-
}
|
|
677
|
-
/>
|
|
678
|
-
<Text
|
|
702
|
+
More Filters
|
|
703
|
+
</Text>
|
|
704
|
+
{(statusFilters.size > 0 || methodFilters.size > 0) && (
|
|
705
|
+
<View
|
|
679
706
|
style={{
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
? AppColors.purple
|
|
685
|
-
: AppColors.grayText,
|
|
707
|
+
backgroundColor: AppColors.purple,
|
|
708
|
+
paddingHorizontal: 4.5,
|
|
709
|
+
paddingVertical: 1,
|
|
710
|
+
borderRadius: 6,
|
|
686
711
|
}}>
|
|
687
|
-
|
|
688
|
-
</Text>
|
|
689
|
-
{(statusFilters.size > 0 || methodFilters.size > 0) && (
|
|
690
|
-
<View
|
|
712
|
+
<Text
|
|
691
713
|
style={{
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
borderRadius: 6,
|
|
714
|
+
fontFamily: AppFonts.interBold,
|
|
715
|
+
fontSize: 8.5,
|
|
716
|
+
color: AppColors.white,
|
|
696
717
|
}}>
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
{statusFilters.size + methodFilters.size}
|
|
704
|
-
</Text>
|
|
705
|
-
</View>
|
|
706
|
-
)}
|
|
707
|
-
</View>
|
|
708
|
-
</TouchableScale>
|
|
709
|
-
</ScrollView>
|
|
718
|
+
{statusFilters.size + methodFilters.size}
|
|
719
|
+
</Text>
|
|
720
|
+
</View>
|
|
721
|
+
)}
|
|
722
|
+
</View>
|
|
723
|
+
</TouchableScale>
|
|
710
724
|
</View>
|
|
711
725
|
|
|
712
726
|
{/* Active Filter Helper Status Bar */}
|
|
@@ -791,29 +805,6 @@ const NetworkTab = React.memo(() => {
|
|
|
791
805
|
]}
|
|
792
806
|
keyboardShouldPersistTaps="handled"
|
|
793
807
|
/>
|
|
794
|
-
{/* #2 — always-visible scroll-to-top, bottom right */}
|
|
795
|
-
<TouchableScale
|
|
796
|
-
onPress={() => {
|
|
797
|
-
try {
|
|
798
|
-
apisListRef.current?.scrollToOffset({
|
|
799
|
-
offset: 0,
|
|
800
|
-
animated: true,
|
|
801
|
-
});
|
|
802
|
-
} catch {
|
|
803
|
-
try {
|
|
804
|
-
apisListRef.current?.scrollToIndex({
|
|
805
|
-
index: 0,
|
|
806
|
-
animated: true,
|
|
807
|
-
});
|
|
808
|
-
} catch {}
|
|
809
|
-
}
|
|
810
|
-
}}
|
|
811
|
-
hitSlop={12}
|
|
812
|
-
style={styles.scrollTopBtn}>
|
|
813
|
-
<View style={{transform: [{rotate: '180deg'}]}}>
|
|
814
|
-
<ChevronIcon color={AppColors.white} size={18} />
|
|
815
|
-
</View>
|
|
816
|
-
</TouchableScale>
|
|
817
808
|
|
|
818
809
|
{/* Modern Network Filter Modal */}
|
|
819
810
|
<NetworkFilterModal
|