more tickets
This commit is contained in:
@@ -159,7 +159,7 @@ const MusicDetails = ({ route }) => {
|
||||
title,
|
||||
artist,
|
||||
}),
|
||||
[projectId, title, artist]
|
||||
[projectId, title, artist],
|
||||
);
|
||||
|
||||
const handleShare = useCallback(() => {
|
||||
@@ -488,7 +488,13 @@ const MusicDetails = ({ route }) => {
|
||||
console.log("MusicDetails seek error", e?.message);
|
||||
}
|
||||
},
|
||||
[trackDescriptor, sliderDurationMs, isCurrentTrack, ensureLoaded, seekTrackTo]
|
||||
[
|
||||
trackDescriptor,
|
||||
sliderDurationMs,
|
||||
isCurrentTrack,
|
||||
ensureLoaded,
|
||||
seekTrackTo,
|
||||
],
|
||||
);
|
||||
|
||||
const handleToggleLoop = useCallback(async () => {
|
||||
@@ -582,13 +588,7 @@ const MusicDetails = ({ route }) => {
|
||||
wasPlayingBeforeSeek.current = false;
|
||||
lastSeekTargetMs.current = null;
|
||||
}
|
||||
}, [
|
||||
ensureLoaded,
|
||||
isCurrentTrack,
|
||||
positionMs,
|
||||
resumeTrack,
|
||||
seekTrackTo,
|
||||
]);
|
||||
}, [ensureLoaded, isCurrentTrack, positionMs, resumeTrack, seekTrackTo]);
|
||||
|
||||
const handleSeekBySeconds = useCallback(
|
||||
async (deltaSeconds) => {
|
||||
@@ -605,7 +605,7 @@ const MusicDetails = ({ route }) => {
|
||||
console.log("MusicDetails seekBy error", e?.message);
|
||||
}
|
||||
},
|
||||
[trackDescriptor, positionMs, isCurrentTrack, ensureLoaded, seekTrackBy]
|
||||
[trackDescriptor, positionMs, isCurrentTrack, ensureLoaded, seekTrackBy],
|
||||
);
|
||||
|
||||
const handleLyricsSeek = useCallback(
|
||||
@@ -638,7 +638,7 @@ const MusicDetails = ({ route }) => {
|
||||
seekTrackTo,
|
||||
isTrackPlaying,
|
||||
resumeTrack,
|
||||
]
|
||||
],
|
||||
);
|
||||
const description = useMemo(() => {
|
||||
// Build a readable text from lyrics with section labels
|
||||
@@ -676,12 +676,12 @@ const MusicDetails = ({ route }) => {
|
||||
// Current time in seconds for highlighting
|
||||
const currentTimeS = useMemo(
|
||||
() => Math.max(0, (positionMs || 0) / 1000),
|
||||
[positionMs]
|
||||
[positionMs],
|
||||
);
|
||||
// Preview lead: show words 0.5s earlier
|
||||
const visibleTimeS = useMemo(
|
||||
() => Math.max(0, currentTimeS + 0.5),
|
||||
[currentTimeS]
|
||||
[currentTimeS],
|
||||
);
|
||||
// Helpers to group aligned words into sections and timed lines
|
||||
const SECTION_TAG_REGEX = /^\s*\[([^\]]+)\]\s*$/i;
|
||||
@@ -844,11 +844,11 @@ const MusicDetails = ({ route }) => {
|
||||
const startS = lines.reduce(
|
||||
(acc, line) =>
|
||||
Math.min(acc, Number.isFinite(line.startS) ? line.startS : acc),
|
||||
Number.POSITIVE_INFINITY
|
||||
Number.POSITIVE_INFINITY,
|
||||
);
|
||||
const endS = lines.reduce(
|
||||
(acc, line) => Math.max(acc, Number(line.endS || 0)),
|
||||
0
|
||||
0,
|
||||
);
|
||||
grouped.push({
|
||||
key: current.key,
|
||||
@@ -910,7 +910,7 @@ const MusicDetails = ({ route }) => {
|
||||
|
||||
const flatLines = useMemo(
|
||||
() => sections.flatMap((section) => section.lines),
|
||||
[sections]
|
||||
[sections],
|
||||
);
|
||||
const currentLineIdx = useMemo(() => {
|
||||
if (!flatLines || flatLines.length === 0) return -1;
|
||||
@@ -941,14 +941,14 @@ const MusicDetails = ({ route }) => {
|
||||
lineRelativeYRef.current[lineIdx] = { sectionKey, relativeY };
|
||||
updateLineAbsoluteOffset(lineIdx);
|
||||
},
|
||||
[updateLineAbsoluteOffset]
|
||||
[updateLineAbsoluteOffset],
|
||||
);
|
||||
const registerSectionOffset = useCallback(
|
||||
(sectionKey, y, lines = []) => {
|
||||
sectionYRef.current[sectionKey] = y;
|
||||
lines.forEach((line) => updateLineAbsoluteOffset(line.globalIdx));
|
||||
},
|
||||
[updateLineAbsoluteOffset]
|
||||
[updateLineAbsoluteOffset],
|
||||
);
|
||||
useEffect(() => {
|
||||
const y = lineYRef.current?.[currentLineIdx];
|
||||
@@ -966,7 +966,9 @@ const MusicDetails = ({ route }) => {
|
||||
topStickyContent={renderWebBackButton}
|
||||
title={action === "userProfile" ? "Mon profil" : "Détail musique"}
|
||||
backgroundImg={
|
||||
action === "userProfile" ? background.profileBG : background.libraryBG2
|
||||
action === "userProfile"
|
||||
? background.profileBG
|
||||
: background.libraryBG2Web
|
||||
}
|
||||
shareBtn={
|
||||
sharePayload
|
||||
@@ -1179,7 +1181,7 @@ const MusicDetails = ({ route }) => {
|
||||
registerSectionOffset(
|
||||
section.key,
|
||||
e.nativeEvent?.layout?.y,
|
||||
section.lines
|
||||
section.lines,
|
||||
)
|
||||
}
|
||||
style={[
|
||||
@@ -1198,7 +1200,7 @@ const MusicDetails = ({ route }) => {
|
||||
registerLineRelativeOffset(
|
||||
line.globalIdx,
|
||||
section.key,
|
||||
e.nativeEvent?.layout?.y ?? 0
|
||||
e.nativeEvent?.layout?.y ?? 0,
|
||||
);
|
||||
}}
|
||||
style={{
|
||||
|
||||
Reference in New Issue
Block a user