From ecd19eaa50fa3d6d4c7bd7b0a3113ff5aa30d6e3 Mon Sep 17 00:00:00 2001 From: leon-morival Date: Mon, 3 Nov 2025 10:18:29 +0100 Subject: [PATCH] fix: share music --- src/data/data.js | 6 +----- src/layouts/Page.js | 17 +++++++++++++++-- src/screens/Studio/ChooseGenre.js | 15 +++++++++++++-- src/utils/shareSheet.js | 7 ++----- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/data/data.js b/src/data/data.js index 2c3fabf..309cd42 100644 --- a/src/data/data.js +++ b/src/data/data.js @@ -163,7 +163,7 @@ export const SONG_STYLE = [ description: "Pour un style exubérant ", }, { - title: "Melancholic", + title: "Mélancolique", description: "ambiance mélancolique", }, { @@ -182,10 +182,6 @@ export const SONG_STYLE = [ title: "Mysterious", description: "Pour un sentiment de mystère", }, - { - title: "Melancholic", - description: "ambiance mélancolique", - }, { title: OTHER_STYLE_OPTION, description: "Décris ton style personnalisé", diff --git a/src/layouts/Page.js b/src/layouts/Page.js index 1b67efd..687f6fc 100644 --- a/src/layouts/Page.js +++ b/src/layouts/Page.js @@ -46,6 +46,19 @@ export default ({ const computedWidth = width ?? (isWeb ? "60%" : "100%"); + const shareButtonElement = (() => { + if (!shareBtn) return null; + if (typeof React?.isValidElement === "function") { + if (React.isValidElement(shareBtn)) { + return shareBtn; + } + } + if (typeof shareBtn === "object" && !Array.isArray(shareBtn)) { + return ; + } + return ; + })(); + return ( {bottomStickyContent?.()} - {(shareBtn || connect) && isWeb && ( + {(shareButtonElement || connect) && isWeb && ( - {shareBtn && } + {shareButtonElement} {connect && } )} diff --git a/src/screens/Studio/ChooseGenre.js b/src/screens/Studio/ChooseGenre.js index 5847d75..00d5499 100644 --- a/src/screens/Studio/ChooseGenre.js +++ b/src/screens/Studio/ChooseGenre.js @@ -1,5 +1,5 @@ import { View } from "react-native"; -import React, { useState } from "react"; +import React, { useMemo, useState } from "react"; import CreateLyricsHeader from "../Writing/components/CreateLyricsHeader"; import { CHOOSE_GENRE } from "../../data/data"; import ItemContainer from "../../components/ItemContainer/ItemContainer"; @@ -7,6 +7,17 @@ import ListSelection from "../../components/ListSelection/ListSelection"; const ChooseGenre = ({ selected = [], setSelected }) => { const [containerLayout, setContainerLayout] = useState(null); + const genreOptions = useMemo(() => { + const seen = new Set(); + return (CHOOSE_GENRE ?? []).filter((item) => { + const title = item?.title; + if (!title) return true; + const key = title.trim().toLowerCase(); + if (seen.has(key)) return false; + seen.add(key); + return true; + }); + }, []); // Selection handled by ListSelection @@ -22,7 +33,7 @@ const ChooseGenre = ({ selected = [], setSelected }) => { > { return musiclandShareUrl; }; -export const createMusicSharePayload = ({ - projectId, - title, - artist, -} = {}) => { +export const createMusicSharePayload = ({ projectId, title, artist } = {}) => { if (!projectId) return null; const baseUrl = trimTrailingSlash(resolveBaseShareUrl()); + if (!baseUrl) return null; const shareUrl = `${baseUrl}/music/${projectId}`; let shareMessage = musiclandShareMessage;