-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpatch.diff
More file actions
128 lines (124 loc) · 2.99 KB
/
Copy pathpatch.diff
File metadata and controls
128 lines (124 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
--- services/fallbackPhotos.ts
+++ services/fallbackPhotos.ts
@@ -293,7 +293,52 @@
},
];
-export function getFallbackPhotos(query: string, provider: 'unsplash' | 'pixabay' | 'pexels' | 'vecteezy'): any[] {
+export interface FallbackPhotoAdapter {
+ adapt(results: BasePhoto[]): any[];
+}
+
+export const fallbackPhotoAdapters = new Map<string, FallbackPhotoAdapter>();
+
+fallbackPhotoAdapters.set('unsplash', {
+ adapt(results) {
+ return results.map((p, idx) => ({
+ id: `us-fb-${p.id}-${idx}`,
+ url: p.url,
+ thumbnail: p.thumbnail,
+ alt: p.alt,
+ user: {
+ name: p.author,
+ link: p.authorUrl,
+ },
+ }));
+ },
+});
+
+fallbackPhotoAdapters.set('pixabay', {
+ adapt(results) {
+ return results.map((p, idx) => ({
+ id: 1000 + idx,
+ url: p.url,
+ thumbnail: p.thumbnail,
+ alt: p.alt,
+ user: p.author,
+ }));
+ },
+});
+
+fallbackPhotoAdapters.set('pexels', {
+ adapt(results) {
+ return results.map((p, idx) => ({
+ id: 2000 + idx,
+ url: p.url,
+ thumbnail: p.thumbnail,
+ alt: p.alt,
+ photographer: p.author,
+ photographerUrl: p.authorUrl,
+ }));
+ },
+});
+
+fallbackPhotoAdapters.set('vecteezy', {
+ adapt(results) {
+ return results.map((p, idx) => ({
+ id: `vz-fb-${p.id}-${idx}`,
+ type: 'photo',
+ title: p.alt,
+ thumbnail_url: p.thumbnail,
+ preview_url: p.url,
+ }));
+ },
+});
+
+export function registerFallbackPhotoAdapter(provider: string, adapter: FallbackPhotoAdapter) {
+ fallbackPhotoAdapters.set(provider, adapter);
+}
+
+export function getFallbackPhotos(query: string, provider: string): any[] {
const q = (query || '').trim().toLowerCase();
const isDefault = !q || q === 'trending' || q === 'curated' || q === 'all';
@@ -308,41 +353,10 @@
const results = filtered.length > 0 ? filtered : CURATED_PHOTOS;
- switch (provider) {
- case 'unsplash':
- return results.map((p, idx) => ({
- id: `us-fb-${p.id}-${idx}`,
- url: p.url,
- thumbnail: p.thumbnail,
- alt: p.alt,
- user: {
- name: p.author,
- link: p.authorUrl,
- },
- }));
-
- case 'pixabay':
- return results.map((p, idx) => ({
- id: 1000 + idx,
- url: p.url,
- thumbnail: p.thumbnail,
- alt: p.alt,
- user: p.author,
- }));
-
- case 'pexels':
- return results.map((p, idx) => ({
- id: 2000 + idx,
- url: p.url,
- thumbnail: p.thumbnail,
- alt: p.alt,
- photographer: p.author,
- photographerUrl: p.authorUrl,
- }));
-
- case 'vecteezy':
- return results.map((p, idx) => ({
- id: `vz-fb-${p.id}-${idx}`,
- type: 'photo',
- title: p.alt,
- thumbnail_url: p.thumbnail,
- preview_url: p.url,
- }));
-
- default:
- return results;
- }
+ const adapter = fallbackPhotoAdapters.get(provider);
+ if (adapter) {
+ return adapter.adapt(results);
+ }
+
+ return results;
}