Skip to content

Commit f15f1b7

Browse files
authored
chore: sort test screens by test number (#2814)
## Description Adds sorting of test screens in the menu to example apps. ## Changes - add sorting of test screens before rendering example app menu ## Screenshots / GIFs ### Before ![Simulator Screenshot - iPhone 16 Pro - 2025-03-28 at 10 31 08](https://github.com/user-attachments/assets/b6718d26-6223-41e1-b478-c26f214ca813) ### After ![Simulator Screenshot - iPhone 16 Pro - 2025-03-28 at 10 30 49](https://github.com/user-attachments/assets/115667e5-6864-49c8-b05f-08b0c74f8c6c) ## Test code and steps to reproduce Open example app. ## Checklist - [x] Included code example that can be used to test this change - [ ] Ensured that CI passes
1 parent 6b47580 commit f15f1b7

1 file changed

Lines changed: 35 additions & 16 deletions

File tree

apps/Example.tsx

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -148,18 +148,34 @@ if (isTestSectionEnabled()) {
148148
});
149149
}
150150

151-
152151
const screens = Object.keys(SCREENS);
153152
const examples = screens.filter(name => SCREENS[name].type === 'example');
154153
const playgrounds = screens.filter(name => SCREENS[name].type === 'playground');
155-
const tests = isTestSectionEnabled() ? screens.filter(name => SCREENS[name].type === 'test') : [];
154+
const tests = isTestSectionEnabled()
155+
? screens
156+
.filter(name => SCREENS[name].type === 'test')
157+
.sort((name1, name2) => {
158+
const testNumber1 = Number(name1.substring(4));
159+
const testNumber2 = Number(name2.substring(4));
160+
161+
if (Number.isNaN(testNumber1) && Number.isNaN(testNumber2)) {
162+
return 0;
163+
} else if (Number.isNaN(testNumber1)) {
164+
return 1;
165+
} else if (Number.isNaN(testNumber2)) {
166+
return -1;
167+
} else {
168+
return testNumber1 - testNumber2;
169+
}
170+
})
171+
: [];
156172

157173
type RootStackParamList = {
158174
Main: undefined;
159175
Tests: undefined;
160176
} & {
161-
[P in keyof typeof SCREENS]: undefined;
162-
};
177+
[P in keyof typeof SCREENS]: undefined;
178+
};
163179

164180
const Stack = createNativeStackNavigator<RootStackParamList>();
165181

@@ -210,17 +226,19 @@ const MainScreen = ({ navigation }: MainScreenProps): React.JSX.Element => {
210226
disabled={!isPlatformReady(name)}
211227
/>
212228
))}
229+
{isTestSectionEnabled() && (
230+
<ThemedText style={styles.label}>Tests</ThemedText>
231+
)}
213232
{isTestSectionEnabled() &&
214-
<ThemedText style={styles.label}>Tests</ThemedText>}
215-
{isTestSectionEnabled() && tests.map(name => (
216-
<ListItem
217-
key={name}
218-
testID={`root-screen-tests-${name}`}
219-
title={SCREENS[name].title}
220-
onPress={() => navigation.navigate(name)}
221-
disabled={false}
222-
/>
223-
))}
233+
tests.map(name => (
234+
<ListItem
235+
key={name}
236+
testID={`root-screen-tests-${name}`}
237+
title={SCREENS[name].title}
238+
onPress={() => navigation.navigate(name)}
239+
disabled={false}
240+
/>
241+
))}
224242
</ScrollView>
225243
);
226244
};
@@ -245,8 +263,9 @@ const ExampleApp = (): React.JSX.Element => {
245263
<Stack.Screen
246264
name="Main"
247265
options={{
248-
title: `${Platform.isTV ? '📺' : '📱'
249-
} React Native Screens Examples`,
266+
title: `${
267+
Platform.isTV ? '📺' : '📱'
268+
} React Native Screens Examples`,
250269
}}
251270
component={MainScreen}
252271
/>

0 commit comments

Comments
 (0)