mirror of
https://github.com/Jellify-Music/App.git
synced 2026-03-17 18:51:24 -05:00
use buildYearsParam utility in shuffle, clean up dependency arrays
- Replace duplicated year-range building logic in shuffle.ts with the existing buildYearsParam utility - Remove stable function import (triggerHaptic) from useCallback dependency arrays in GenreSelection
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
ItemSortBy,
|
||||
} from '@jellyfin/sdk/lib/generated-client/models'
|
||||
import { mapDtoToTrack } from '../../../utils/mapping/item-to-track'
|
||||
import buildYearsParam from '../../../utils/mapping/build-years-param'
|
||||
import { QueuingType } from '../../../enums/queuing-type'
|
||||
import { useStreamingDeviceProfileStore } from '../../../stores/device-profile'
|
||||
import { ApiLimits } from '../../../configs/query.config'
|
||||
@@ -130,18 +131,7 @@ export async function handleShuffle(keepCurrentTrack: boolean = true): Promise<J
|
||||
apiFilters.push(ItemFilter.IsUnplayed)
|
||||
}
|
||||
|
||||
// Build years param for year range filter
|
||||
const yearsParam =
|
||||
yearMin != null || yearMax != null
|
||||
? (() => {
|
||||
const min = yearMin ?? 0
|
||||
const max = yearMax ?? new Date().getFullYear()
|
||||
if (min > max) return undefined
|
||||
const years: string[] = []
|
||||
for (let y = min; y <= max; y++) years.push(String(y))
|
||||
return years.length > 0 ? years : undefined
|
||||
})()
|
||||
: undefined
|
||||
const yearsParam = buildYearsParam(yearMin, yearMax)
|
||||
|
||||
// Fetch random tracks from Jellyfin with filters
|
||||
const data = await nitroFetch<{ Items: BaseItemDto[] }>(api, '/Items', {
|
||||
|
||||
@@ -62,19 +62,16 @@ export default function GenreSelectionScreen({
|
||||
return result
|
||||
}, [genresByLetter])
|
||||
|
||||
const toggleGenre = useCallback(
|
||||
(genreId: string) => {
|
||||
triggerHaptic('impactLight')
|
||||
setSelectedGenreIds((prev) => {
|
||||
if (prev.includes(genreId)) {
|
||||
return prev.filter((id) => id !== genreId)
|
||||
} else {
|
||||
return [...prev, genreId]
|
||||
}
|
||||
})
|
||||
},
|
||||
[triggerHaptic],
|
||||
)
|
||||
const toggleGenre = useCallback((genreId: string) => {
|
||||
triggerHaptic('impactLight')
|
||||
setSelectedGenreIds((prev) => {
|
||||
if (prev.includes(genreId)) {
|
||||
return prev.filter((id) => id !== genreId)
|
||||
} else {
|
||||
return [...prev, genreId]
|
||||
}
|
||||
})
|
||||
}, [])
|
||||
|
||||
const handleSave = useCallback(() => {
|
||||
triggerHaptic('impactLight')
|
||||
@@ -84,7 +81,7 @@ export default function GenreSelectionScreen({
|
||||
isDownloaded: selectedGenreIds.length > 0 ? false : undefined,
|
||||
})
|
||||
navigation.goBack()
|
||||
}, [selectedGenreIds, navigation, triggerHaptic])
|
||||
}, [selectedGenreIds, navigation])
|
||||
|
||||
const handleClear = useCallback(() => {
|
||||
triggerHaptic('impactLight')
|
||||
@@ -92,7 +89,7 @@ export default function GenreSelectionScreen({
|
||||
useLibraryStore.getState().setTracksFilters({
|
||||
genreIds: undefined,
|
||||
})
|
||||
}, [triggerHaptic])
|
||||
}, [])
|
||||
|
||||
const allLoadedGenreIds = useMemo(
|
||||
() => genres?.map((g) => g.Id!).filter(Boolean) ?? [],
|
||||
@@ -104,7 +101,7 @@ export default function GenreSelectionScreen({
|
||||
const handleSelectAll = useCallback(() => {
|
||||
triggerHaptic('impactLight')
|
||||
setSelectedGenreIds([...allLoadedGenreIds])
|
||||
}, [allLoadedGenreIds, triggerHaptic])
|
||||
}, [allLoadedGenreIds])
|
||||
|
||||
const renderListHeader = useCallback(
|
||||
() => (
|
||||
|
||||
Reference in New Issue
Block a user