offset audio after playback and add songs

This commit is contained in:
Thomas Demirdjian
2026-03-12 10:58:43 +01:00
parent fd299e8543
commit ebdf9862a7
25 changed files with 4794 additions and 449 deletions
+59
View File
@@ -0,0 +1,59 @@
import { useEffect, useMemo, useState } from 'react'
import useAlgoliaSearch from 'react-native-minuit/src/hooks/useAlgoliaSearch'
import { AlgoliaProjectConfig } from '../data/keys'
import { hasCoverAsset, hydrateProjects } from './searchProjectAssets'
const batchSize = 12
const usePlaylistMusicSearch = () => {
const [search, setSearch] = useState('')
const [hydratedMusics, setHydratedMusics] = useState(null)
const normalizedSearch = useMemo(() => search.trim(), [search])
const { hits: musics, loading } = useAlgoliaSearch({
query: normalizedSearch,
algoliaObject: AlgoliaProjectConfig,
batch: batchSize,
condition: normalizedSearch.length > 0,
searchParams: {
filters: 'hasSong:true',
},
})
useEffect(() => {
let isCancelled = false
const nextMusics = Array.isArray(musics) ? musics : []
const requiresHydration =
nextMusics.length > 0 && nextMusics.some((project) => !hasCoverAsset(project))
if (!requiresHydration) {
setHydratedMusics(null)
return () => {
isCancelled = true
}
}
setHydratedMusics(null)
;(async () => {
const hydrated = await hydrateProjects(nextMusics, { ensureCover: true })
if (!isCancelled) {
setHydratedMusics(hydrated)
}
})()
return () => {
isCancelled = true
}
}, [musics])
return {
search,
setSearch,
musics: hydratedMusics ?? musics,
loading,
hasSearch: normalizedSearch.length > 0,
}
}
export default usePlaylistMusicSearch