1import { Platform } from 'expo-modules-core';
2
3import { optionalRequire } from '../../navigation/routeBuilder';
4import ComponentListScreen, { ListElement } from '../ComponentListScreen';
5
6export const ImageScreens = [
7  {
8    name: 'Comparison with original image',
9    route: 'image/comparison',
10    options: {},
11    getComponent() {
12      return optionalRequire(() => require('./ImageComparisonScreen'));
13    },
14  },
15  {
16    name: 'List with thousands images',
17    route: 'image/flashlist',
18    options: {},
19    getComponent() {
20      return optionalRequire(() => require('./ImageFlashListScreen'));
21    },
22  },
23  {
24    name: 'Image formats',
25    route: 'image/formats',
26    getComponent() {
27      return optionalRequire(() => require('./ImageFormatsScreen'));
28    },
29  },
30  {
31    name: 'Resizable image',
32    route: 'image/resizable',
33    getComponent() {
34      return optionalRequire(() => require('./ImageResizableScreen'));
35    },
36  },
37  {
38    name: 'Content fit and position',
39    route: 'image/content-fit',
40    getComponent() {
41      return optionalRequire(() => require('./ImageContentFitScreen'));
42    },
43  },
44  {
45    name: 'Events',
46    route: 'image/events',
47    getComponent() {
48      return optionalRequire(() => require('./ImageEventsScreen'));
49    },
50  },
51  {
52    name: 'Prioritizing images',
53    route: 'image/priority',
54    getComponent() {
55      return optionalRequire(() => require('./ImagePriorityScreen'));
56    },
57  },
58  {
59    name: 'Placeholder',
60    route: 'image/placeholder',
61    getComponent() {
62      return optionalRequire(() => require('./ImagePlaceholderScreen'));
63    },
64  },
65  {
66    name: 'Background',
67    route: 'image/background',
68    getComponent() {
69      return optionalRequire(() => require('./ImageBackgroundScreen'));
70    },
71  },
72  {
73    name: 'Static responsiveness using srcSet',
74    route: 'image/srcset',
75    getComponent() {
76      return optionalRequire(() => require('./ImageSrcSetScreen'));
77    },
78  },
79  {
80    name: 'Transitions',
81    route: 'image/transitions',
82    getComponent() {
83      return optionalRequire(() => require('./ImageTransitionsScreen'));
84    },
85  },
86  {
87    name: 'Tinting',
88    route: 'image/tinting',
89    getComponent() {
90      return optionalRequire(() => require('./ImageTintingScreen'));
91    },
92  },
93  {
94    name: 'Hash Placeholders',
95    route: 'image/hash-placeholders',
96    getComponent() {
97      return optionalRequire(() => require('./ImageHashPlaceholdersScreen'));
98    },
99  },
100  {
101    name: 'Custom cache key',
102    route: 'image/cache-key',
103    getComponent() {
104      return optionalRequire(() => require('./ImageCacheKeyScreen'));
105    },
106  },
107  {
108    name: 'List of GIFs',
109    route: 'image/gifs',
110    getComponent() {
111      return optionalRequire(() => require('./ImageGifsScreen'));
112    },
113  },
114  {
115    name: 'MediaLibrary and ImagePicker integration',
116    route: 'image/media-library',
117    getComponent() {
118      return optionalRequire(() => require('./ImageMediaLibraryScreen'));
119    },
120  },
121];
122
123if (Platform.OS === 'ios') {
124  ImageScreens.push({
125    name: 'Live Text Interaction',
126    route: 'image/live-text-interaction',
127    getComponent() {
128      return optionalRequire(() => require('./ImageLiveTextInteractionScreen'));
129    },
130  });
131}
132
133export default function ImageScreen() {
134  const apis: ListElement[] = ImageScreens.map((screen) => {
135    return {
136      name: screen.name,
137      isAvailable: true,
138      route: `/components/${screen.route}`,
139    };
140  });
141  return <ComponentListScreen apis={apis} sort={false} />;
142}
143