@amityco/react-native-social-uikit 4.1.1-dfb439b1.0 → 4.1.1-e85011d9.0

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.
Files changed (48) hide show
  1. package/lib/commonjs/core/assets/icons/xml.js +1 -15
  2. package/lib/commonjs/core/assets/icons/xml.js.map +1 -1
  3. package/lib/commonjs/core/hooks/usePostByIds.js +38 -0
  4. package/lib/commonjs/core/hooks/usePostByIds.js.map +1 -0
  5. package/lib/commonjs/social/components/MediaViewer/MediaViewer.js +3 -24
  6. package/lib/commonjs/social/components/MediaViewer/MediaViewer.js.map +1 -1
  7. package/lib/commonjs/social/features/post/Composer/PostComposer.js +32 -39
  8. package/lib/commonjs/social/features/post/Composer/PostComposer.js.map +1 -1
  9. package/lib/module/core/assets/icons/xml.js +0 -12
  10. package/lib/module/core/assets/icons/xml.js.map +1 -1
  11. package/lib/module/core/hooks/usePostByIds.js +32 -0
  12. package/lib/module/core/hooks/usePostByIds.js.map +1 -0
  13. package/lib/module/social/components/MediaViewer/MediaViewer.js +4 -25
  14. package/lib/module/social/components/MediaViewer/MediaViewer.js.map +1 -1
  15. package/lib/module/social/features/post/Composer/PostComposer.js +34 -41
  16. package/lib/module/social/features/post/Composer/PostComposer.js.map +1 -1
  17. package/lib/typescript/core/assets/icons/xml.d.ts +0 -2
  18. package/lib/typescript/core/assets/icons/xml.d.ts.map +1 -1
  19. package/lib/typescript/core/hooks/usePostByIds.d.ts +8 -0
  20. package/lib/typescript/core/hooks/usePostByIds.d.ts.map +1 -0
  21. package/lib/typescript/social/components/MediaViewer/MediaViewer.d.ts.map +1 -1
  22. package/lib/typescript/social/features/post/Composer/PostComposer.d.ts.map +1 -1
  23. package/package.json +1 -3
  24. package/src/core/assets/icons/xml.ts +0 -16
  25. package/src/core/hooks/usePostByIds.ts +33 -0
  26. package/src/social/components/MediaViewer/MediaViewer.tsx +1 -30
  27. package/src/social/features/post/Composer/PostComposer.tsx +48 -65
  28. package/lib/commonjs/social/components/MediaSelector/MediaSelector.js +0 -164
  29. package/lib/commonjs/social/components/MediaSelector/MediaSelector.js.map +0 -1
  30. package/lib/commonjs/social/components/MediaSelector/index.js +0 -13
  31. package/lib/commonjs/social/components/MediaSelector/index.js.map +0 -1
  32. package/lib/commonjs/social/components/MediaSelector/styles.js +0 -130
  33. package/lib/commonjs/social/components/MediaSelector/styles.js.map +0 -1
  34. package/lib/module/social/components/MediaSelector/MediaSelector.js +0 -158
  35. package/lib/module/social/components/MediaSelector/MediaSelector.js.map +0 -1
  36. package/lib/module/social/components/MediaSelector/index.js +0 -2
  37. package/lib/module/social/components/MediaSelector/index.js.map +0 -1
  38. package/lib/module/social/components/MediaSelector/styles.js +0 -123
  39. package/lib/module/social/components/MediaSelector/styles.js.map +0 -1
  40. package/lib/typescript/social/components/MediaSelector/MediaSelector.d.ts +0 -14
  41. package/lib/typescript/social/components/MediaSelector/MediaSelector.d.ts.map +0 -1
  42. package/lib/typescript/social/components/MediaSelector/index.d.ts +0 -2
  43. package/lib/typescript/social/components/MediaSelector/index.d.ts.map +0 -1
  44. package/lib/typescript/social/components/MediaSelector/styles.d.ts +0 -116
  45. package/lib/typescript/social/components/MediaSelector/styles.d.ts.map +0 -1
  46. package/src/social/components/MediaSelector/MediaSelector.tsx +0 -231
  47. package/src/social/components/MediaSelector/index.tsx +0 -1
  48. package/src/social/components/MediaSelector/styles.ts +0 -124
@@ -120,22 +120,6 @@ export const pauseControlIcon = (
120
120
  ): string => `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
121
121
  <path d="M9.1875 20.0898H5.8125C4.86328 20.0898 4.125 19.3516 4.125 18.4023V6.02734C4.125 5.11328 4.86328 4.33984 5.8125 4.33984H9.1875C10.1016 4.33984 10.875 5.11328 10.875 6.02734V18.4023C10.875 19.3516 10.1016 20.0898 9.1875 20.0898ZM19.875 18.4023C19.875 19.3516 19.1016 20.0898 18.1875 20.0898H14.8125C13.8633 20.0898 13.125 19.3516 13.125 18.4023V6.02734C13.125 5.11328 13.8633 4.33984 14.8125 4.33984H18.1875C19.1016 4.33984 19.875 5.11328 19.875 6.02734V18.4023Z" fill="${color}"/>
122
122
  </svg>`;
123
- // Ported from web UIKit icons/Backward10 — skip back 10 seconds.
124
- export const backward10Icon = (
125
- color: string = '#FFFFFF'
126
- ): string => `<svg width="24" height="24" viewBox="0 0 26 28" fill="none" xmlns="http://www.w3.org/2000/svg">
127
- <path d="M11 19V12L9 13.3125" stroke="${color}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
128
- <ellipse cx="15.5" cy="15.5" rx="1.75" ry="3.5" stroke="${color}" stroke-width="1.5" fill="none"/>
129
- <path d="M4.81605 6.80412C-0.0309168 11.1977 -0.296082 18.579 4.22379 23.2905C8.74366 28.0021 16.337 28.2599 21.1839 23.8663C26.0309 19.4726 26.2961 12.0914 21.7762 7.37984C19.2053 4.69988 15.64 3.46089 12.1514 3.69923M13.8571 1L10.8008 3.83294L13.8571 6.87098" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
130
- </svg>`;
131
- // Ported from web UIKit icons/Forward10 — skip forward 10 seconds.
132
- export const forward10Icon = (
133
- color: string = '#FFFFFF'
134
- ): string => `<svg width="24" height="24" viewBox="0 0 26 28" fill="none" xmlns="http://www.w3.org/2000/svg">
135
- <path d="M11 19V12L9 13.3125" stroke="${color}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
136
- <ellipse cx="15.5" cy="15.5" rx="1.75" ry="3.5" stroke="${color}" stroke-width="1.5" fill="none"/>
137
- <path d="M21.1839 6.80412C26.0309 11.1977 26.2961 18.579 21.7762 23.2905C17.2563 28.0021 9.66302 28.2599 4.81605 23.8663C-0.0309169 19.4726 -0.296081 12.0914 4.22379 7.37984C6.7947 4.69988 10.36 3.46089 13.8486 3.69923M12.1429 1L15.1992 3.83294L12.1429 6.87098" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
138
- </svg>`;
139
123
  export const cameraIcon: string = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
140
124
  <path d="M19.5 19.5H4.5C4.10218 19.5 3.72064 19.342 3.43934 19.0607C3.15804 18.7794 3 18.3978 3 18V7.5C3 7.10218 3.15804 6.72064 3.43934 6.43934C3.72064 6.15804 4.10218 6 4.5 6H7.49945L8.99945 3.75H14.9995L16.4995 6H19.5C19.8978 6 20.2794 6.15804 20.5607 6.43934C20.842 6.72064 21 7.10218 21 7.5V18C21 18.3978 20.842 18.7794 20.5607 19.0607C20.2794 19.342 19.8978 19.5 19.5 19.5Z" stroke="#292B32" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
141
125
  <path d="M12 15.75C13.864 15.75 15.375 14.239 15.375 12.375C15.375 10.511 13.864 9 12 9C10.136 9 8.625 10.511 8.625 12.375C8.625 14.239 10.136 15.75 12 15.75Z" stroke="#292B32" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
@@ -0,0 +1,33 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { PostRepository } from '@amityco/ts-sdk-react-native';
3
+
4
+ /**
5
+ * Resolve a list of post ids to their loaded post objects — the same approach
6
+ * the web UIKit uses (core/hooks/usePostByIds) to load an edited post's child
7
+ * media. Uses the batch `getPostByIds` API, which is properly awaited, instead
8
+ * of the racy per-id live-object fetch.
9
+ */
10
+ export const usePostByIds = (postIds: string[]) => {
11
+ const [posts, setPosts] = useState<Amity.Post[]>([]);
12
+ // Depend on a stable string key so a fresh `[]`/array identity each render
13
+ // doesn't re-trigger the effect (and loop).
14
+ const key = (postIds ?? []).join(',');
15
+
16
+ useEffect(() => {
17
+ let active = true;
18
+ async function run() {
19
+ if (!key) {
20
+ setPosts((prev) => (prev.length ? [] : prev));
21
+ return;
22
+ }
23
+ const response = await PostRepository.getPostByIds(key.split(','));
24
+ if (active) setPosts(response.data);
25
+ }
26
+ run();
27
+ return () => {
28
+ active = false;
29
+ };
30
+ }, [key]);
31
+
32
+ return posts;
33
+ };
@@ -24,9 +24,7 @@ import Video, {
24
24
  } from 'react-native-video';
25
25
  import { SvgXml } from 'react-native-svg';
26
26
  import {
27
- backward10Icon,
28
27
  clearIcon,
29
- forward10Icon,
30
28
  pauseControlIcon,
31
29
  playControlIcon,
32
30
  soundOnIcon,
@@ -153,16 +151,6 @@ export function MediaViewer({
153
151
  revealControls();
154
152
  }, [revealControls]);
155
153
 
156
- const seekBy = useCallback(
157
- (delta: number) => {
158
- const next = Math.max(0, Math.min(duration || 0, progress + delta));
159
- videoRef.current?.seek(next);
160
- setProgress(next);
161
- revealControls();
162
- },
163
- [duration, progress, revealControls]
164
- );
165
-
166
154
  const onLoad = useCallback((data: OnLoadData) => {
167
155
  setDuration(data.duration ?? 0);
168
156
  }, []);
@@ -240,18 +228,8 @@ export function MediaViewer({
240
228
  />
241
229
  {controlsVisible && (
242
230
  <>
243
- {/* Centered skip / play-pause / skip row */}
231
+ {/* Centered play/pause */}
244
232
  <View style={styles.centerControls} pointerEvents="box-none">
245
- <TouchableOpacity
246
- style={styles.centerBtn}
247
- onPress={() => seekBy(-10)}
248
- >
249
- <SvgXml
250
- xml={backward10Icon('#FFFFFF')}
251
- width={24}
252
- height={24}
253
- />
254
- </TouchableOpacity>
255
233
  <TouchableOpacity style={styles.centerBtn} onPress={togglePlay}>
256
234
  <SvgXml
257
235
  xml={
@@ -263,12 +241,6 @@ export function MediaViewer({
263
241
  height={24}
264
242
  />
265
243
  </TouchableOpacity>
266
- <TouchableOpacity
267
- style={styles.centerBtn}
268
- onPress={() => seekBy(10)}
269
- >
270
- <SvgXml xml={forward10Icon('#FFFFFF')} width={24} height={24} />
271
- </TouchableOpacity>
272
244
  </View>
273
245
 
274
246
  {/* Bottom bar: time + scrubbable progress */}
@@ -299,7 +271,6 @@ export function MediaViewer({
299
271
  controlsVisible,
300
272
  setControlsVisible,
301
273
  revealControls,
302
- seekBy,
303
274
  togglePlay,
304
275
  userPaused,
305
276
  progress,
@@ -37,11 +37,8 @@ import uiSlice from '../../../../core/stores/slices/uiSlice';
37
37
  import { amityPostsFormatter } from '../../../../core/utils/post';
38
38
  import useAuth from '../../../../core/hooks/useAuth';
39
39
  import globalfeedSlice from '../../../../core/stores/slices/globalfeedSlice';
40
- import {
41
- createPostToFeed,
42
- editPost,
43
- getPostById,
44
- } from '../../../../core/legacy/feed';
40
+ import { createPostToFeed, editPost } from '../../../../core/legacy/feed';
41
+ import { usePostByIds } from '../../../../core/hooks/usePostByIds';
45
42
  import TextKeyElement from '../../../elements/TextKeyElement/TextKeyElement';
46
43
  import AmityMediaAttachmentComponent from '../components/MediaAttachment';
47
44
  import AmityDetailedMediaAttachmentComponent from '../components/DetailedMediaAttachment';
@@ -49,9 +46,9 @@ import { useKeyboardStatus } from '../../../hooks';
49
46
  import ImagePicker, {
50
47
  type Asset,
51
48
  launchCamera,
49
+ launchImageLibrary,
52
50
  } from 'react-native-image-picker';
53
51
  import { SelectedMediaComponent } from '../../../components/SelectedMediaComponent';
54
- import { MediaSelector } from '../../../components/MediaSelector';
55
52
  import { NativeStackNavigationProp } from '@react-navigation/native-stack';
56
53
  import { RootStackParamList } from '../../../../core/routes/RouteParamList';
57
54
  import {
@@ -115,9 +112,6 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
115
112
  const [isSwipeup, setIsSwipeup] = useState(true);
116
113
  const [deletedPostIds, setDeletedPostIds] = useState<string[]>([]);
117
114
  const [isUploading, setIsUploading] = useState(false);
118
- const [mediaSelectorType, setMediaSelectorType] = useState<
119
- 'photo' | 'video' | null
120
- >(null);
121
115
  const [hasChangedAttachment, setHasChangedAttachment] = useState(false);
122
116
  const [imageErrors, setImageErrors] = useState<Set<string>>(new Set());
123
117
  const [videoErrors, setVideoErrors] = useState<Set<string>>(new Set());
@@ -198,22 +192,19 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
198
192
  []
199
193
  );
200
194
 
195
+ // Load the edited post's child media the same way the web UIKit does
196
+ // (usePostByIds → batch getPostByIds), instead of the racy per-id fetch.
197
+ const childrenPosts = usePostByIds(post?.children ?? []);
198
+
201
199
  const getPostInfo = useCallback(
202
- async (postArray: string[]) => {
200
+ async (response: Amity.Post[]) => {
203
201
  try {
204
- const response = await Promise.all(
205
- postArray.map(async (id: string) => {
206
- const { data } = await getPostById(id);
207
- return data;
208
- })
209
- );
210
-
211
202
  const images: IDisplayImage[] = [];
212
203
  const videos: IDisplayImage[] = [];
213
204
 
214
205
  for (const item of response) {
215
206
  if (item?.dataType === 'image') {
216
- const fileId = item?.data?.fileId;
207
+ const fileId = (item as Amity.Post<'image'>)?.data?.fileId;
217
208
  const url = await getImage({
218
209
  fileId: fileId,
219
210
  imageSize: ImageSizeState.full,
@@ -226,8 +217,9 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
226
217
  postId: item.postId,
227
218
  });
228
219
  } else if (item?.dataType === 'video') {
229
- const fileId = item?.data?.videoFileId?.original;
230
- const thumbnailFileId = item?.data?.thumbnailFileId;
220
+ const videoData = (item as Amity.Post<'video'>)?.data;
221
+ const fileId = videoData?.videoFileId?.original;
222
+ const thumbnailFileId = videoData?.thumbnailFileId;
231
223
  const fileUrls = await Promise.allSettled(
232
224
  [fileId, thumbnailFileId].map(async (id) => {
233
225
  return await getImage({
@@ -268,8 +260,8 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
268
260
  }, []);
269
261
 
270
262
  useEffect(() => {
271
- post?.children && getPostInfo(post?.children);
272
- }, [getPostInfo, post?.children]);
263
+ if (childrenPosts.length > 0) getPostInfo(childrenPosts);
264
+ }, [getPostInfo, childrenPosts]);
273
265
 
274
266
  const getMentionPositions = useCallback(
275
267
  (text: string, mentioneeIds: string[]) => {
@@ -584,34 +576,31 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
584
576
  ]);
585
577
  }, [displayImages.length, displayVideos.length, pickCamera]);
586
578
 
587
- const onPressImage = useCallback(async () => {
588
- if (displayImages.length >= 10)
589
- return Alert.alert(
590
- 'Maximum upload limit reached',
591
- "You've reached the upload limit of 10 images. Any additional images will not be saved."
592
- );
593
- setMediaSelectorType('photo');
594
- }, [displayImages.length]);
595
-
596
- const onPressVideo = useCallback(async () => {
597
- if (displayVideos.length >= 10)
598
- return Alert.alert(
599
- 'Maximum upload limit reached',
600
- "You've reached the upload limit of 10 videos. Any additional videos will not be saved."
601
- );
602
- setMediaSelectorType('video');
603
- }, [displayVideos.length]);
604
-
605
- // Receives new URIs from the custom media selector. Silently drops duplicates
606
- // (already-selected files) and caps the total at 10, per PDT-4314.
607
- const handleSelectedMedia = useCallback(
608
- (uris: string[]) => {
609
- const type = mediaSelectorType;
610
- setMediaSelectorType(null);
611
- if (!type || uris.length === 0) return;
579
+ // Open the native OS camera roll (matches the web UIKit's native file
580
+ // picker). Appends the picked media, de-duplicating by uri and capping at 10.
581
+ const pickFromLibrary = useCallback(
582
+ async (mediaType: 'photo' | 'video') => {
583
+ const isPhoto = mediaType === 'photo';
584
+ const current = isPhoto ? displayImages.length : displayVideos.length;
585
+ if (current >= 10)
586
+ return Alert.alert(
587
+ 'Maximum upload limit reached',
588
+ `You've reached the upload limit of 10 ${
589
+ isPhoto ? 'images' : 'videos'
590
+ }. Any additional ${isPhoto ? 'images' : 'videos'} will not be saved.`
591
+ );
592
+ const result: ImagePicker.ImagePickerResponse = await launchImageLibrary({
593
+ mediaType,
594
+ quality: 1,
595
+ selectionLimit: 10 - current,
596
+ });
597
+ if (result.didCancel || !result.assets?.length) return;
598
+ const uris = result.assets
599
+ .map((a: Asset) => a.uri)
600
+ .filter(Boolean) as string[];
612
601
  const mediaOj = processMedia(uris);
613
602
  if (!mediaOj) return;
614
- const setter = type === 'photo' ? setDisplayImages : setDisplayVideos;
603
+ const setter = isPhoto ? setDisplayImages : setDisplayVideos;
615
604
  setter((prev) => {
616
605
  const existingUrls = new Set(prev.map((m) => m.url));
617
606
  const additions = mediaOj.filter((m) => !existingUrls.has(m.url));
@@ -619,7 +608,17 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
619
608
  return updated.length > 10 ? updated.slice(0, 10) : updated;
620
609
  });
621
610
  },
622
- [mediaSelectorType, processMedia]
611
+ [displayImages.length, displayVideos.length, processMedia]
612
+ );
613
+
614
+ const onPressImage = useCallback(
615
+ () => pickFromLibrary('photo'),
616
+ [pickFromLibrary]
617
+ );
618
+
619
+ const onPressVideo = useCallback(
620
+ () => pickFromLibrary('video'),
621
+ [pickFromLibrary]
623
622
  );
624
623
 
625
624
  const handleImageUploadError = useCallback(
@@ -860,22 +859,6 @@ const AmityPostComposerPage: FC<AmityPostComposerPageType> = ({
860
859
  </View>
861
860
  </KeyboardAvoidingView>
862
861
  <StatusBar backgroundColor={themeStyles.colors.background} />
863
- <MediaSelector
864
- visible={mediaSelectorType !== null}
865
- mediaType={mediaSelectorType ?? 'photo'}
866
- existing={(mediaSelectorType === 'video'
867
- ? displayVideos
868
- : displayImages
869
- ).map((m) => m.url)}
870
- remaining={
871
- 10 -
872
- (mediaSelectorType === 'video'
873
- ? displayVideos.length
874
- : displayImages.length)
875
- }
876
- onClose={() => setMediaSelectorType(null)}
877
- onConfirm={handleSelectedMedia}
878
- />
879
862
  </SafeAreaView>
880
863
  );
881
864
  };
@@ -1,164 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MediaSelector = MediaSelector;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _cameraRoll = require("@react-native-camera-roll/camera-roll");
10
- var _styles = require("./styles");
11
- const PAGE_SIZE = 90;
12
- async function ensureLibraryPermission(mediaType) {
13
- if (_reactNative.Platform.OS !== 'android') return true;
14
- const version = typeof _reactNative.Platform.Version === 'number' ? _reactNative.Platform.Version : parseInt(_reactNative.Platform.Version, 10);
15
- const perms = version >= 33 ? [mediaType === 'photo' ? _reactNative.PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES : _reactNative.PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO] : [_reactNative.PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE];
16
- try {
17
- const result = await _reactNative.PermissionsAndroid.requestMultiple(perms);
18
- return Object.values(result).every(status => status === _reactNative.PermissionsAndroid.RESULTS.GRANTED);
19
- } catch {
20
- return false;
21
- }
22
- }
23
- function formatDuration(seconds) {
24
- if (!seconds || seconds <= 0) return '';
25
- const total = Math.round(seconds);
26
- const mins = Math.floor(total / 60);
27
- const secs = total % 60;
28
- return `${mins}:${secs.toString().padStart(2, '0')}`;
29
- }
30
- function MediaSelector({
31
- visible,
32
- mediaType,
33
- existing,
34
- remaining,
35
- onClose,
36
- onConfirm
37
- }) {
38
- const {
39
- styles
40
- } = (0, _styles.useStyles)();
41
- const [items, setItems] = (0, _react.useState)([]);
42
- const [selected, setSelected] = (0, _react.useState)([]);
43
- const [cursor, setCursor] = (0, _react.useState)(undefined);
44
- const [hasNextPage, setHasNextPage] = (0, _react.useState)(false);
45
- const [loading, setLoading] = (0, _react.useState)(false);
46
- const loadPage = (0, _react.useCallback)(async after => {
47
- if (loading) return;
48
- setLoading(true);
49
- try {
50
- const res = await _cameraRoll.CameraRoll.getPhotos({
51
- first: PAGE_SIZE,
52
- after,
53
- assetType: mediaType === 'photo' ? 'Photos' : 'Videos',
54
- include: ['filename', 'playableDuration']
55
- });
56
- setItems(prev => after ? [...prev, ...res.edges] : res.edges);
57
- setCursor(res.page_info.end_cursor);
58
- setHasNextPage(res.page_info.has_next_page);
59
- } catch {
60
- // permission denied / empty library — leave the list empty
61
- } finally {
62
- setLoading(false);
63
- }
64
- }, [loading, mediaType]);
65
-
66
- // Reset and (re)load whenever the selector opens. A fresh open starts with an
67
- // empty selection; previously-added items are handled by duplicate detection.
68
- (0, _react.useEffect)(() => {
69
- if (!visible) return;
70
- setSelected([]);
71
- setItems([]);
72
- setCursor(undefined);
73
- setHasNextPage(false);
74
- (async () => {
75
- const granted = await ensureLibraryPermission(mediaType);
76
- if (granted) loadPage();
77
- })();
78
- }, [visible, mediaType]);
79
- const toggle = (0, _react.useCallback)(uri => {
80
- setSelected(prev => {
81
- const index = prev.indexOf(uri);
82
- if (index !== -1) {
83
- // Deselect: removing from the array renumbers the rest automatically.
84
- return prev.filter(u => u !== uri);
85
- }
86
- if (prev.length >= remaining) return prev; // respect the cap silently
87
- return [...prev, uri];
88
- });
89
- }, [remaining]);
90
- const handleConfirm = (0, _react.useCallback)(() => {
91
- const deduped = selected.filter(uri => !existing.includes(uri));
92
- onConfirm(deduped);
93
- }, [selected, existing, onConfirm]);
94
- const onEndReached = (0, _react.useCallback)(() => {
95
- if (hasNextPage && !loading) loadPage(cursor);
96
- }, [hasNextPage, loading, cursor, loadPage]);
97
- const renderItem = (0, _react.useCallback)(({
98
- item
99
- }) => {
100
- const uri = item.node.image.uri;
101
- const order = selected.indexOf(uri);
102
- const isSelected = order !== -1;
103
- const duration = mediaType === 'video' ? formatDuration(item.node.image.playableDuration) : '';
104
- return /*#__PURE__*/React.createElement(_reactNative.TouchableWithoutFeedback, {
105
- onPress: () => toggle(uri)
106
- }, /*#__PURE__*/React.createElement(_reactNative.View, {
107
- style: styles.cell
108
- }, /*#__PURE__*/React.createElement(_reactNative.Image, {
109
- style: styles.cell__image,
110
- source: {
111
- uri
112
- }
113
- }), !!duration && /*#__PURE__*/React.createElement(_reactNative.Text, {
114
- style: styles.cell__videoDuration
115
- }, duration), isSelected ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_reactNative.View, {
116
- style: styles.cell__selectedOverlay
117
- }), /*#__PURE__*/React.createElement(_reactNative.View, {
118
- style: styles.cell__badge
119
- }, /*#__PURE__*/React.createElement(_reactNative.Text, {
120
- style: styles.cell__badgeLabel
121
- }, order + 1))) : /*#__PURE__*/React.createElement(_reactNative.View, {
122
- style: styles.cell__badgeEmpty
123
- })));
124
- }, [selected, mediaType, toggle, styles]);
125
- return /*#__PURE__*/React.createElement(_reactNative.Modal, {
126
- visible: visible,
127
- animationType: "slide",
128
- onRequestClose: onClose,
129
- presentationStyle: "fullScreen"
130
- }, /*#__PURE__*/React.createElement(_reactNative.View, {
131
- style: styles.container
132
- }, /*#__PURE__*/React.createElement(_reactNative.View, {
133
- style: styles.header
134
- }, /*#__PURE__*/React.createElement(_reactNative.TouchableOpacity, {
135
- style: styles.headerButton,
136
- onPress: onClose
137
- }, /*#__PURE__*/React.createElement(_reactNative.Text, {
138
- style: styles.headerClose
139
- }, "Cancel")), /*#__PURE__*/React.createElement(_reactNative.Text, {
140
- style: styles.headerTitle
141
- }, mediaType === 'photo' ? 'Photos' : 'Videos'), /*#__PURE__*/React.createElement(_reactNative.TouchableOpacity, {
142
- style: styles.headerButton__right,
143
- disabled: selected.length === 0,
144
- onPress: handleConfirm
145
- }, /*#__PURE__*/React.createElement(_reactNative.Text, {
146
- style: selected.length === 0 ? styles.headerAdd__disabled : styles.headerAdd
147
- }, selected.length > 0 ? `Add (${selected.length})` : 'Add'))), /*#__PURE__*/React.createElement(_reactNative.FlatList, {
148
- data: items,
149
- numColumns: 3,
150
- keyExtractor: item => item.node.image.uri,
151
- renderItem: renderItem,
152
- contentContainerStyle: styles.grid,
153
- onEndReached: onEndReached,
154
- onEndReachedThreshold: 0.6,
155
- initialNumToRender: 30,
156
- windowSize: 5,
157
- ListEmptyComponent: !loading ? /*#__PURE__*/React.createElement(_reactNative.View, {
158
- style: styles.empty
159
- }, /*#__PURE__*/React.createElement(_reactNative.Text, {
160
- style: styles.empty__text
161
- }, "No ", mediaType === 'photo' ? 'photos' : 'videos', " found on this device.")) : null
162
- })));
163
- }
164
- //# sourceMappingURL=MediaSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_reactNative","_cameraRoll","_styles","PAGE_SIZE","ensureLibraryPermission","mediaType","Platform","OS","version","Version","parseInt","perms","PermissionsAndroid","PERMISSIONS","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","result","requestMultiple","Object","values","every","status","RESULTS","GRANTED","formatDuration","seconds","total","Math","round","mins","floor","secs","toString","padStart","MediaSelector","visible","existing","remaining","onClose","onConfirm","styles","useStyles","items","setItems","useState","selected","setSelected","cursor","setCursor","undefined","hasNextPage","setHasNextPage","loading","setLoading","loadPage","useCallback","after","res","CameraRoll","getPhotos","first","assetType","include","prev","edges","page_info","end_cursor","has_next_page","useEffect","granted","toggle","uri","index","indexOf","filter","u","length","handleConfirm","deduped","includes","onEndReached","renderItem","item","node","image","order","isSelected","duration","playableDuration","React","createElement","TouchableWithoutFeedback","onPress","View","style","cell","Image","cell__image","source","Text","cell__videoDuration","Fragment","cell__selectedOverlay","cell__badge","cell__badgeLabel","cell__badgeEmpty","Modal","animationType","onRequestClose","presentationStyle","container","header","TouchableOpacity","headerButton","headerClose","headerTitle","headerButton__right","disabled","headerAdd__disabled","headerAdd","FlatList","data","numColumns","keyExtractor","contentContainerStyle","grid","onEndReachedThreshold","initialNumToRender","windowSize","ListEmptyComponent","empty","empty__text"],"sourceRoot":"../../../../../src","sources":["social/components/MediaSelector/MediaSelector.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAWA,IAAAE,WAAA,GAAAF,OAAA;AAIA,IAAAG,OAAA,GAAAH,OAAA;AAcA,MAAMI,SAAS,GAAG,EAAE;AAEpB,eAAeC,uBAAuBA,CACpCC,SAA4B,EACV;EAClB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE,OAAO,IAAI;EAC1C,MAAMC,OAAO,GACX,OAAOF,qBAAQ,CAACG,OAAO,KAAK,QAAQ,GAChCH,qBAAQ,CAACG,OAAO,GAChBC,QAAQ,CAACJ,qBAAQ,CAACG,OAAO,EAAE,EAAE,CAAC;EACpC,MAAME,KAAK,GACTH,OAAO,IAAI,EAAE,GACT,CACEH,SAAS,KAAK,OAAO,GACjBO,+BAAkB,CAACC,WAAW,CAACC,iBAAiB,GAChDF,+BAAkB,CAACC,WAAW,CAACE,gBAAgB,CACpD,GACD,CAACH,+BAAkB,CAACC,WAAW,CAACG,qBAAqB,CAAC;EAC5D,IAAI;IACF,MAAMC,MAAM,GAAG,MAAML,+BAAkB,CAACM,eAAe,CAACP,KAAK,CAAC;IAC9D,OAAOQ,MAAM,CAACC,MAAM,CAACH,MAAM,CAAC,CAACI,KAAK,CAC/BC,MAAM,IAAKA,MAAM,KAAKV,+BAAkB,CAACW,OAAO,CAACC,OACpD,CAAC;EACH,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF;AAEA,SAASC,cAAcA,CAACC,OAAgB,EAAU;EAChD,IAAI,CAACA,OAAO,IAAIA,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE;EACvC,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAC;EACjC,MAAMI,IAAI,GAAGF,IAAI,CAACG,KAAK,CAACJ,KAAK,GAAG,EAAE,CAAC;EACnC,MAAMK,IAAI,GAAGL,KAAK,GAAG,EAAE;EACvB,OAAO,GAAGG,IAAI,IAAIE,IAAI,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD;AAEO,SAASC,aAAaA,CAAC;EAC5BC,OAAO;EACP/B,SAAS;EACTgC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPC;AACkB,CAAC,EAAE;EACrB,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,iBAAS,EAAC,CAAC;EAC9B,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAC,eAAQ,EAAoB,EAAE,CAAC;EACzD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAF,eAAQ,EAAW,EAAE,CAAC;EACtD,MAAM,CAACG,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAJ,eAAQ,EAAqBK,SAAS,CAAC;EACnE,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAP,eAAQ,EAAC,KAAK,CAAC;EACrD,MAAM,CAACQ,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAT,eAAQ,EAAC,KAAK,CAAC;EAE7C,MAAMU,QAAQ,GAAG,IAAAC,kBAAW,EAC1B,MAAOC,KAAc,IAAK;IACxB,IAAIJ,OAAO,EAAE;IACbC,UAAU,CAAC,IAAI,CAAC;IAChB,IAAI;MACF,MAAMI,GAAG,GAAG,MAAMC,sBAAU,CAACC,SAAS,CAAC;QACrCC,KAAK,EAAE1D,SAAS;QAChBsD,KAAK;QACLK,SAAS,EAAEzD,SAAS,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ;QACtD0D,OAAO,EAAE,CAAC,UAAU,EAAE,kBAAkB;MAC1C,CAAC,CAAC;MACFnB,QAAQ,CAAEoB,IAAI,IAAMP,KAAK,GAAG,CAAC,GAAGO,IAAI,EAAE,GAAGN,GAAG,CAACO,KAAK,CAAC,GAAGP,GAAG,CAACO,KAAM,CAAC;MACjEhB,SAAS,CAACS,GAAG,CAACQ,SAAS,CAACC,UAAU,CAAC;MACnCf,cAAc,CAACM,GAAG,CAACQ,SAAS,CAACE,aAAa,CAAC;IAC7C,CAAC,CAAC,MAAM;MACN;IAAA,CACD,SAAS;MACRd,UAAU,CAAC,KAAK,CAAC;IACnB;EACF,CAAC,EACD,CAACD,OAAO,EAAEhD,SAAS,CACrB,CAAC;;EAED;EACA;EACA,IAAAgE,gBAAS,EAAC,MAAM;IACd,IAAI,CAACjC,OAAO,EAAE;IACdW,WAAW,CAAC,EAAE,CAAC;IACfH,QAAQ,CAAC,EAAE,CAAC;IACZK,SAAS,CAACC,SAAS,CAAC;IACpBE,cAAc,CAAC,KAAK,CAAC;IACrB,CAAC,YAAY;MACX,MAAMkB,OAAO,GAAG,MAAMlE,uBAAuB,CAACC,SAAS,CAAC;MACxD,IAAIiE,OAAO,EAAEf,QAAQ,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC;EACN,CAAC,EAAE,CAACnB,OAAO,EAAE/B,SAAS,CAAC,CAAC;EAExB,MAAMkE,MAAM,GAAG,IAAAf,kBAAW,EACvBgB,GAAW,IAAK;IACfzB,WAAW,CAAEiB,IAAI,IAAK;MACpB,MAAMS,KAAK,GAAGT,IAAI,CAACU,OAAO,CAACF,GAAG,CAAC;MAC/B,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE;QAChB;QACA,OAAOT,IAAI,CAACW,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKJ,GAAG,CAAC;MACtC;MACA,IAAIR,IAAI,CAACa,MAAM,IAAIvC,SAAS,EAAE,OAAO0B,IAAI,CAAC,CAAC;MAC3C,OAAO,CAAC,GAAGA,IAAI,EAAEQ,GAAG,CAAC;IACvB,CAAC,CAAC;EACJ,CAAC,EACD,CAAClC,SAAS,CACZ,CAAC;EAED,MAAMwC,aAAa,GAAG,IAAAtB,kBAAW,EAAC,MAAM;IACtC,MAAMuB,OAAO,GAAGjC,QAAQ,CAAC6B,MAAM,CAAEH,GAAG,IAAK,CAACnC,QAAQ,CAAC2C,QAAQ,CAACR,GAAG,CAAC,CAAC;IACjEhC,SAAS,CAACuC,OAAO,CAAC;EACpB,CAAC,EAAE,CAACjC,QAAQ,EAAET,QAAQ,EAAEG,SAAS,CAAC,CAAC;EAEnC,MAAMyC,YAAY,GAAG,IAAAzB,kBAAW,EAAC,MAAM;IACrC,IAAIL,WAAW,IAAI,CAACE,OAAO,EAAEE,QAAQ,CAACP,MAAM,CAAC;EAC/C,CAAC,EAAE,CAACG,WAAW,EAAEE,OAAO,EAAEL,MAAM,EAAEO,QAAQ,CAAC,CAAC;EAE5C,MAAM2B,UAAU,GAAG,IAAA1B,kBAAW,EAC5B,CAAC;IAAE2B;EAAgC,CAAC,KAAK;IACvC,MAAMX,GAAG,GAAGW,IAAI,CAACC,IAAI,CAACC,KAAK,CAACb,GAAG;IAC/B,MAAMc,KAAK,GAAGxC,QAAQ,CAAC4B,OAAO,CAACF,GAAG,CAAC;IACnC,MAAMe,UAAU,GAAGD,KAAK,KAAK,CAAC,CAAC;IAC/B,MAAME,QAAQ,GACZnF,SAAS,KAAK,OAAO,GACjBoB,cAAc,CAAC0D,IAAI,CAACC,IAAI,CAACC,KAAK,CAACI,gBAAgB,CAAC,GAChD,EAAE;IACR,oBACEC,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA4F,wBAAwB;MAACC,OAAO,EAAEA,CAAA,KAAMtB,MAAM,CAACC,GAAG;IAAE,gBACnDkB,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;MAACC,KAAK,EAAEtD,MAAM,CAACuD;IAAK,gBACvBN,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAiG,KAAK;MAACF,KAAK,EAAEtD,MAAM,CAACyD,WAAY;MAACC,MAAM,EAAE;QAAE3B;MAAI;IAAE,CAAE,CAAC,EACpD,CAAC,CAACgB,QAAQ,iBACTE,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;MAACL,KAAK,EAAEtD,MAAM,CAAC4D;IAAoB,GAAEb,QAAe,CAC1D,EACAD,UAAU,gBACTG,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAY,QAAA,qBACEZ,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;MAACC,KAAK,EAAEtD,MAAM,CAAC8D;IAAsB,CAAE,CAAC,eAC7Cb,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;MAACC,KAAK,EAAEtD,MAAM,CAAC+D;IAAY,gBAC9Bd,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;MAACL,KAAK,EAAEtD,MAAM,CAACgE;IAAiB,GAAEnB,KAAK,GAAG,CAAQ,CACnD,CACN,CAAC,gBAEHI,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;MAACC,KAAK,EAAEtD,MAAM,CAACiE;IAAiB,CAAE,CAErC,CACkB,CAAC;EAE/B,CAAC,EACD,CAAC5D,QAAQ,EAAEzC,SAAS,EAAEkE,MAAM,EAAE9B,MAAM,CACtC,CAAC;EAED,oBACEiD,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA2G,KAAK;IACJvE,OAAO,EAAEA,OAAQ;IACjBwE,aAAa,EAAC,OAAO;IACrBC,cAAc,EAAEtE,OAAQ;IACxBuE,iBAAiB,EAAC;EAAY,gBAE9BpB,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;IAACC,KAAK,EAAEtD,MAAM,CAACsE;EAAU,gBAC5BrB,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;IAACC,KAAK,EAAEtD,MAAM,CAACuE;EAAO,gBACzBtB,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAiH,gBAAgB;IAAClB,KAAK,EAAEtD,MAAM,CAACyE,YAAa;IAACrB,OAAO,EAAEtD;EAAQ,gBAC7DmD,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;IAACL,KAAK,EAAEtD,MAAM,CAAC0E;EAAY,GAAC,QAAY,CAC7B,CAAC,eACnBzB,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;IAACL,KAAK,EAAEtD,MAAM,CAAC2E;EAAY,GAC7B/G,SAAS,KAAK,OAAO,GAAG,QAAQ,GAAG,QAChC,CAAC,eACPqF,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAiH,gBAAgB;IACflB,KAAK,EAAEtD,MAAM,CAAC4E,mBAAoB;IAClCC,QAAQ,EAAExE,QAAQ,CAAC+B,MAAM,KAAK,CAAE;IAChCgB,OAAO,EAAEf;EAAc,gBAEvBY,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;IACHL,KAAK,EACHjD,QAAQ,CAAC+B,MAAM,KAAK,CAAC,GACjBpC,MAAM,CAAC8E,mBAAmB,GAC1B9E,MAAM,CAAC+E;EACZ,GAEA1E,QAAQ,CAAC+B,MAAM,GAAG,CAAC,GAAG,QAAQ/B,QAAQ,CAAC+B,MAAM,GAAG,GAAG,KAChD,CACU,CACd,CAAC,eACPa,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAyH,QAAQ;IACPC,IAAI,EAAE/E,KAAM;IACZgF,UAAU,EAAE,CAAE;IACdC,YAAY,EAAGzC,IAAI,IAAKA,IAAI,CAACC,IAAI,CAACC,KAAK,CAACb,GAAI;IAC5CU,UAAU,EAAEA,UAAW;IACvB2C,qBAAqB,EAAEpF,MAAM,CAACqF,IAAK;IACnC7C,YAAY,EAAEA,YAAa;IAC3B8C,qBAAqB,EAAE,GAAI;IAC3BC,kBAAkB,EAAE,EAAG;IACvBC,UAAU,EAAE,CAAE;IACdC,kBAAkB,EAChB,CAAC7E,OAAO,gBACNqC,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAA8F,IAAI;MAACC,KAAK,EAAEtD,MAAM,CAAC0F;IAAM,gBACxBzC,KAAA,CAAAC,aAAA,CAAC3F,YAAA,CAAAoG,IAAI;MAACL,KAAK,EAAEtD,MAAM,CAAC2F;IAAY,GAAC,KAC5B,EAAC/H,SAAS,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ,EAAC,wBAE5C,CACF,CAAC,GACL;EACL,CACF,CACG,CACD,CAAC;AAEZ","ignoreList":[]}
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "MediaSelector", {
7
- enumerable: true,
8
- get: function () {
9
- return _MediaSelector.MediaSelector;
10
- }
11
- });
12
- var _MediaSelector = require("./MediaSelector");
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_MediaSelector","require"],"sourceRoot":"../../../../../src","sources":["social/components/MediaSelector/index.tsx"],"mappings":";;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA","ignoreList":[]}
@@ -1,130 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useStyles = void 0;
7
- var _reactNative = require("react-native");
8
- var _reactNativePaper = require("react-native-paper");
9
- const NUM_COLUMNS = 3;
10
- const CELL_GAP = 2;
11
- const useStyles = () => {
12
- const theme = (0, _reactNativePaper.useTheme)();
13
- const {
14
- width
15
- } = (0, _reactNative.useWindowDimensions)();
16
- const cellSize = Math.floor((width - CELL_GAP * (NUM_COLUMNS - 1)) / NUM_COLUMNS);
17
- const styles = _reactNative.StyleSheet.create({
18
- container: {
19
- flex: 1,
20
- backgroundColor: theme.colors.background
21
- },
22
- header: {
23
- flexDirection: 'row',
24
- alignItems: 'center',
25
- justifyContent: 'space-between',
26
- paddingHorizontal: 16,
27
- height: 56
28
- },
29
- headerButton: {
30
- minWidth: 64
31
- },
32
- headerButton__right: {
33
- minWidth: 64,
34
- alignItems: 'flex-end'
35
- },
36
- headerTitle: {
37
- color: theme.colors.base,
38
- fontSize: 16,
39
- fontWeight: '600'
40
- },
41
- headerClose: {
42
- color: theme.colors.base,
43
- fontSize: 16
44
- },
45
- headerAdd: {
46
- color: theme.colors.primary,
47
- fontSize: 16,
48
- fontWeight: '600'
49
- },
50
- headerAdd__disabled: {
51
- color: theme.colors.baseShade3,
52
- fontSize: 16,
53
- fontWeight: '600'
54
- },
55
- grid: {
56
- paddingBottom: 24
57
- },
58
- cell: {
59
- width: cellSize,
60
- height: cellSize,
61
- marginRight: CELL_GAP,
62
- marginBottom: CELL_GAP,
63
- backgroundColor: theme.colors.baseShade4
64
- },
65
- cell__image: {
66
- width: '100%',
67
- height: '100%'
68
- },
69
- cell__selectedOverlay: {
70
- ..._reactNative.StyleSheet.absoluteFillObject,
71
- borderWidth: 2,
72
- borderColor: theme.colors.primary
73
- },
74
- cell__badge: {
75
- position: 'absolute',
76
- top: 6,
77
- right: 6,
78
- minWidth: 22,
79
- height: 22,
80
- borderRadius: 11,
81
- paddingHorizontal: 5,
82
- alignItems: 'center',
83
- justifyContent: 'center',
84
- backgroundColor: theme.colors.primary
85
- },
86
- cell__badgeEmpty: {
87
- position: 'absolute',
88
- top: 6,
89
- right: 6,
90
- width: 22,
91
- height: 22,
92
- borderRadius: 11,
93
- borderWidth: 1.5,
94
- borderColor: '#FFFFFF',
95
- backgroundColor: 'rgba(0,0,0,0.2)'
96
- },
97
- cell__badgeLabel: {
98
- color: '#FFFFFF',
99
- fontSize: 12,
100
- fontWeight: '700'
101
- },
102
- cell__videoDuration: {
103
- position: 'absolute',
104
- bottom: 6,
105
- right: 6,
106
- color: '#FFFFFF',
107
- fontSize: 11,
108
- fontWeight: '600',
109
- textShadowColor: 'rgba(0,0,0,0.6)',
110
- textShadowRadius: 2
111
- },
112
- empty: {
113
- flex: 1,
114
- alignItems: 'center',
115
- justifyContent: 'center',
116
- padding: 32
117
- },
118
- empty__text: {
119
- color: theme.colors.baseShade1,
120
- fontSize: 14,
121
- textAlign: 'center'
122
- }
123
- });
124
- return {
125
- styles,
126
- theme
127
- };
128
- };
129
- exports.useStyles = useStyles;
130
- //# sourceMappingURL=styles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativePaper","NUM_COLUMNS","CELL_GAP","useStyles","theme","useTheme","width","useWindowDimensions","cellSize","Math","floor","styles","StyleSheet","create","container","flex","backgroundColor","colors","background","header","flexDirection","alignItems","justifyContent","paddingHorizontal","height","headerButton","minWidth","headerButton__right","headerTitle","color","base","fontSize","fontWeight","headerClose","headerAdd","primary","headerAdd__disabled","baseShade3","grid","paddingBottom","cell","marginRight","marginBottom","baseShade4","cell__image","cell__selectedOverlay","absoluteFillObject","borderWidth","borderColor","cell__badge","position","top","right","borderRadius","cell__badgeEmpty","cell__badgeLabel","cell__videoDuration","bottom","textShadowColor","textShadowRadius","empty","padding","empty__text","baseShade1","textAlign","exports"],"sourceRoot":"../../../../../src","sources":["social/components/MediaSelector/styles.ts"],"mappings":"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","ignoreList":[]}