@@ -17,6 +17,7 @@ import { ActionMenu, ActionMenuItem } from "../action-menu";
1717import { useFavoritesStore } from "@/stores/favorites" ;
1818import { PhotoMoveModal } from "../modals/photo-move-modal" ;
1919import { useAlert } from "../alert" ;
20+ import { useShare } from "../modals/photo-share" ;
2021
2122interface TopActionsProps {
2223 onDetailsToggle : ( ) => void ;
@@ -27,28 +28,6 @@ interface TopActionsProps {
2728 store : PhotoContainerStore ;
2829}
2930
30- function getMimeTypeFromExtension ( extension : string ) {
31- switch ( extension . toLowerCase ( ) ) {
32- case "jpg" :
33- case "jpeg" :
34- return "image/jpeg" ;
35- case "png" :
36- return "image/png" ;
37- case "gif" :
38- return "image/gif" ;
39- case "mp4" :
40- return "video/mp4" ;
41- case "mov" :
42- return "video/quicktime" ;
43- case "webm" :
44- return "video/webm" ;
45- case "webp" :
46- return "image/webp" ;
47- default :
48- return "application/octet-stream" ;
49- }
50- }
51-
5231function TopActions ( {
5332 onDetailsToggle,
5433 onFacesToggle,
@@ -78,42 +57,13 @@ function TopActions({
7857 closeMenu ( ) ;
7958 store . setCover ?.( photo . id ) ;
8059 } , [ closeMenu , store , photo . id ] ) ;
81- const [ canShare , setCanShare ] = useState ( false ) ;
82- useEffect ( ( ) => {
83- async function checkSharingAvailability ( ) {
84- const available = await Sharing . isAvailableAsync ( ) ;
85- setCanShare ( available ) ;
86- }
87- checkSharingAvailability ( ) ;
88- } , [ ] ) ;
60+
61+ const [ share , canShare ] = useShare ( ) ;
8962
9063 const handleSystemShareClick = useCallback ( async ( ) => {
9164 closeMenu ( ) ;
92- if ( ! canShare ) return ;
93-
94- // Construction de l'URL distante de l'image (originale) via store
95- const imageUrl = photosStore . getImage ( photo . publicId ) ;
96-
97- // Télécharger l'image dans un fichier temporaire (obligatoire pour expo-sharing sur mobile)
98- if ( Platform . OS !== "web" ) {
99- const fileName = `shared-${ photo . publicId } .jpg` ;
100- const baseDir = Paths . cache ;
101- const tmpPath = `${ baseDir } ${ fileName } ` ;
102- const download = await File . downloadFileAsync (
103- imageUrl ,
104- new Directory ( tmpPath )
105- ) ;
106- await Sharing . shareAsync ( download . uri , {
107- dialogTitle : "Partager l'image" ,
108- mimeType : download . type ,
109- } ) ;
110- } else {
111- await Sharing . shareAsync ( imageUrl , {
112- dialogTitle : "Partager l'image" ,
113- mimeType : getMimeTypeFromExtension ( imageUrl . split ( "." ) . pop ( ) || "jpg" ) ,
114- } ) ;
115- }
116- } , [ canShare , closeMenu , photo . publicId , photosStore ] ) ;
65+ await share ( photo ) ;
66+ } , [ closeMenu , photo , share ] ) ;
11767
11868 const handleRotate = useCallback (
11969 async ( angle : number ) => {
0 commit comments