offset audio after playback and add songs
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user