@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.
- package/lib/commonjs/core/assets/icons/xml.js +1 -15
- package/lib/commonjs/core/assets/icons/xml.js.map +1 -1
- package/lib/commonjs/core/hooks/usePostByIds.js +38 -0
- package/lib/commonjs/core/hooks/usePostByIds.js.map +1 -0
- package/lib/commonjs/social/components/MediaViewer/MediaViewer.js +3 -24
- package/lib/commonjs/social/components/MediaViewer/MediaViewer.js.map +1 -1
- package/lib/commonjs/social/features/post/Composer/PostComposer.js +32 -39
- package/lib/commonjs/social/features/post/Composer/PostComposer.js.map +1 -1
- package/lib/module/core/assets/icons/xml.js +0 -12
- package/lib/module/core/assets/icons/xml.js.map +1 -1
- package/lib/module/core/hooks/usePostByIds.js +32 -0
- package/lib/module/core/hooks/usePostByIds.js.map +1 -0
- package/lib/module/social/components/MediaViewer/MediaViewer.js +4 -25
- package/lib/module/social/components/MediaViewer/MediaViewer.js.map +1 -1
- package/lib/module/social/features/post/Composer/PostComposer.js +34 -41
- package/lib/module/social/features/post/Composer/PostComposer.js.map +1 -1
- package/lib/typescript/core/assets/icons/xml.d.ts +0 -2
- package/lib/typescript/core/assets/icons/xml.d.ts.map +1 -1
- package/lib/typescript/core/hooks/usePostByIds.d.ts +8 -0
- package/lib/typescript/core/hooks/usePostByIds.d.ts.map +1 -0
- package/lib/typescript/social/components/MediaViewer/MediaViewer.d.ts.map +1 -1
- package/lib/typescript/social/features/post/Composer/PostComposer.d.ts.map +1 -1
- package/package.json +1 -3
- package/src/core/assets/icons/xml.ts +0 -16
- package/src/core/hooks/usePostByIds.ts +33 -0
- package/src/social/components/MediaViewer/MediaViewer.tsx +1 -30
- package/src/social/features/post/Composer/PostComposer.tsx +48 -65
- package/lib/commonjs/social/components/MediaSelector/MediaSelector.js +0 -164
- package/lib/commonjs/social/components/MediaSelector/MediaSelector.js.map +0 -1
- package/lib/commonjs/social/components/MediaSelector/index.js +0 -13
- package/lib/commonjs/social/components/MediaSelector/index.js.map +0 -1
- package/lib/commonjs/social/components/MediaSelector/styles.js +0 -130
- package/lib/commonjs/social/components/MediaSelector/styles.js.map +0 -1
- package/lib/module/social/components/MediaSelector/MediaSelector.js +0 -158
- package/lib/module/social/components/MediaSelector/MediaSelector.js.map +0 -1
- package/lib/module/social/components/MediaSelector/index.js +0 -2
- package/lib/module/social/components/MediaSelector/index.js.map +0 -1
- package/lib/module/social/components/MediaSelector/styles.js +0 -123
- package/lib/module/social/components/MediaSelector/styles.js.map +0 -1
- package/lib/typescript/social/components/MediaSelector/MediaSelector.d.ts +0 -14
- package/lib/typescript/social/components/MediaSelector/MediaSelector.d.ts.map +0 -1
- package/lib/typescript/social/components/MediaSelector/index.d.ts +0 -2
- package/lib/typescript/social/components/MediaSelector/index.d.ts.map +0 -1
- package/lib/typescript/social/components/MediaSelector/styles.d.ts +0 -116
- package/lib/typescript/social/components/MediaSelector/styles.d.ts.map +0 -1
- package/src/social/components/MediaSelector/MediaSelector.tsx +0 -231
- package/src/social/components/MediaSelector/index.tsx +0 -1
- 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
|
|
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
|
-
|
|
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 (
|
|
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
|
|
230
|
-
const
|
|
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
|
-
|
|
272
|
-
}, [getPostInfo,
|
|
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
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
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 =
|
|
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
|
-
[
|
|
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":"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","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":[]}
|