diff --git a/src/components/AppActionSheet.js b/src/components/AppActionSheet.js index 996c752..b1a39ff 100644 --- a/src/components/AppActionSheet.js +++ b/src/components/AppActionSheet.js @@ -6,7 +6,7 @@ import { useSafeAreaInsets } from "react-native-safe-area-context"; import { isWeb } from "../hooks/useLayoutType"; import { gutters, Palette } from "../styles"; -const AppActionSheet = ({ children, props }) => { +const AppActionSheet = ({ children, ...props }) => { const insets = useSafeAreaInsets(); return ( { const [copied, setCopied] = useState(false); const copyTimeout = useRef(null); const qrOpenTimeout = useRef(null); + const blurProps = + Platform.OS === "android" + ? { experimentalBlurMethod: "dimezisBlurView" } + : {}; const closeSheet = useCallback(() => { - SheetManager.hide("Share"); + return SheetManager.hide("Share"); }, []); const shareText = useMemo(() => { @@ -134,7 +138,7 @@ const ShareModal = ({ payload }) => { if (option?.type === "qr") { const qrTitleValue = qrTitle; - closeSheet(); + const hidePromise = closeSheet(); qrOpenTimeout.current = setTimeout(() => { setGlobal({ shareQrModal: { @@ -144,6 +148,8 @@ const ShareModal = ({ payload }) => { }, }); }, 200); + + await hidePromise; return; } @@ -151,21 +157,21 @@ const ShareModal = ({ payload }) => { if (!target) { await handleSystemShare(); - closeSheet(); + await closeSheet(); return; } try { if (Platform.OS === "web") { window.open(target, "_blank", "noopener,noreferrer"); - closeSheet(); + await closeSheet(); return; } const supported = await Linking.canOpenURL(target); if (supported) { await Linking.openURL(target); - closeSheet(); + await closeSheet(); return; } } catch (error) { @@ -173,14 +179,14 @@ const ShareModal = ({ payload }) => { } await handleSystemShare(); - closeSheet(); + await closeSheet(); }, [closeSheet, handleSystemShare, qrTitle, qrUrl] ); const onSystemShare = useCallback(async () => { await handleSystemShare(); - closeSheet(); + await closeSheet(); }, [closeSheet, handleSystemShare]); const shareOptions = useMemo(() => { @@ -233,8 +239,11 @@ const ShareModal = ({ payload }) => { style={[styles.card, styles.blurCard]} tint="dark" intensity={40} - experimentalBlurMethod="dimezisBlurView" + {...blurProps} > + + + {heading} @@ -264,11 +273,7 @@ const ShareModal = ({ payload }) => { {copied ? Lien copié : null} - + {sectionTitle} {shareOptions.map((option, index) => { @@ -278,7 +283,7 @@ const ShareModal = ({ payload }) => { key={option?.key || index} style={styles.optionBlur} intensity={40} - experimentalBlurMethod="dimezisBlurView" + {...blurProps} > handleShareOption(option)} @@ -304,7 +309,7 @@ const styles = StyleSheet.create({ gap: 24, }, card: { - // backgroundColor: Palette.glass, + backgroundColor: Palette.glass, overflow: "hidden", borderRadius: 24, borderWidth: 1, @@ -315,6 +320,19 @@ const styles = StyleSheet.create({ }, blurCard: { overflow: "hidden", + position: "relative", + }, + closeButton: { + position: "absolute", + top: 16, + right: 16, + width: 32, + height: 32, + borderRadius: 16, + alignItems: "center", + justifyContent: "center", + backgroundColor: "rgba(255, 255, 255, 0.12)", + zIndex: 2, }, heading: { fontSize: 20, diff --git a/src/components/modal/ShareQrModal.js b/src/components/modal/ShareQrModal.js index c73a5f8..63aca82 100644 --- a/src/components/modal/ShareQrModal.js +++ b/src/components/modal/ShareQrModal.js @@ -1,14 +1,19 @@ -import React, { useMemo } from "react"; -import { BlurView } from "expo-blur"; -import { Platform, Pressable, StyleSheet, Text, View } from "react-native"; import { Feather } from "@expo/vector-icons"; import { Portal } from "@gorhom/portal"; +import { BlurView } from "expo-blur"; +import React, { useMemo } from "react"; +import { Platform, Pressable, StyleSheet, Text, View } from "react-native"; -import QrCode from "../QrCode"; import { Palette } from "../../styles"; import { FONT_FAMILY } from "../../styles/Fonts"; +import QrCode from "../QrCode"; -const ShareQrModal = ({ visible, onClose, url, title = "Scannez le QR-code" }) => { +const ShareQrModal = ({ + visible, + onClose, + url, + title = "Scannez le QR-code", +}) => { const shareUrl = useMemo(() => url, [url]); if (!visible) { @@ -26,22 +31,36 @@ const ShareQrModal = ({ visible, onClose, url, title = "Scannez le QR-code" }) = /> - - + + {title} - - Partage ce code pour guider tes contacts directement vers MusicLand. - + Partage Musicland à tes amis. - + - + {shareUrl} diff --git a/src/providers/UserDataProvider.js b/src/providers/UserDataProvider.js index d00374a..1fac189 100644 --- a/src/providers/UserDataProvider.js +++ b/src/providers/UserDataProvider.js @@ -112,17 +112,17 @@ export default ({ children }) => { { selectedProjectId: projectId || null, }, - { merge: true }, + { merge: true } ); console.log("update selected project"); } catch (error) { console.log( "UserDataProvider: unable to persist selectedProjectId", - error?.message || error, + error?.message || error ); } }, - [currentUID], + [currentUID] ); const selectProject = useCallback( @@ -137,12 +137,12 @@ export default ({ children }) => { persistSelectedProjectId(safeId).catch((error) => { console.log( "UserDataProvider: persist selectedProjectId failed", - error?.message || error, + error?.message || error ); }); } }, - [currentUID, persistSelectedProjectId, setSelectedProject], + [currentUID, persistSelectedProjectId, setSelectedProject] ); const resetSelectedProject = useCallback(() => { @@ -159,7 +159,7 @@ export default ({ children }) => { ...partial, updatedAt: firebase.firestore.FieldValue.serverTimestamp(), }, - options, + options ); } catch (e) { console.log("updateProjectData error", e?.message); @@ -170,10 +170,9 @@ export default ({ children }) => { const createNewProject = async ({ hasLyrics = false } = {}) => { try { await setIsLoading(true); - const user = firebase.auth().currentUser; const payload = { - userId: user ? user.uid : currentUID || null, - hasLyrics: !!hasLyrics, + userId: currentUID || null, + userName: currentUserData?.userName || null, createdAt: firebase.firestore.FieldValue.serverTimestamp(), updatedAt: firebase.firestore.FieldValue.serverTimestamp(), }; @@ -195,7 +194,7 @@ export default ({ children }) => { followedBy: arrayUnion(currentUID), lastFollowersUpdateAt: new Date(), }, - { merge: true }, + { merge: true } ); setTooltip({ type: "success", text: "Abonnement mis à jour" }); } @@ -213,7 +212,7 @@ export default ({ children }) => { followedBy: arrayRemove(currentUID), lastFollowersUpdateAt: new Date(), }, - { merge: true }, + { merge: true } ); setTooltip({ type: "success", diff --git a/src/screens/HitParade/HitParade.js b/src/screens/HitParade/HitParade.js index 691cb23..80fa551 100644 --- a/src/screens/HitParade/HitParade.js +++ b/src/screens/HitParade/HitParade.js @@ -32,6 +32,14 @@ const HitParade = () => { condition: true, }); + console.log( + "top songs", + JSON.stringify( + topSongs.map((song) => song.userId), + null, + 2 + ) + ); const { data: topPlaybacks } = useDataFromRef({ ref: projectsRef.where("views", ">", 0).orderBy("views", "desc").limit(50), format: (docs) => docs.filter((d) => d?.playbackUrl != null).slice(0, 10), diff --git a/src/screens/Home/Home.js b/src/screens/Home/Home.js index c181d59..a782f52 100644 --- a/src/screens/Home/Home.js +++ b/src/screens/Home/Home.js @@ -146,6 +146,11 @@ const Home = () => { resetSelectedProject(); setActiveStageIndex(0); if (songwriterAction?.route) { + console.log( + "navigating to", + songwriterAction.route, + songwriterAction.params + ); navigate(songwriterAction.route, songwriterAction.params); } }, [resetSelectedProject, songwriterAction]); diff --git a/src/screens/Writing/WritingLyrics.js b/src/screens/Writing/WritingLyrics.js index 371287e..3952322 100644 --- a/src/screens/Writing/WritingLyrics.js +++ b/src/screens/Writing/WritingLyrics.js @@ -3,7 +3,7 @@ import { Image, StyleSheet, View } from "react-native"; import useMinuit from "react-native-minuit/src/hooks/useMinuit.js"; import { ai } from "../../assets"; import BorderGradientButton from "../../components/BorderGradientButton"; -import FullscreenIntroVideo from "../../components/FullscreenIntroVideo.web"; +import FullscreenIntroVideo from "../../components/FullscreenIntroVideo"; import GradientButton from "../../components/GradientButton"; import MusicLandHeader from "../../components/MusicLandHeader"; import Page from "../../layouts/Page";