|
@@ -0,0 +1,36 @@
|
|
|
|
|
+import { NavidromeRestAlbum, NavidromeRestArtist, NavidromeRestPlaylist } from '../network/NavidromeRestApi'
|
|
|
|
|
+
|
|
|
|
|
+function normalizeKeyword(keyword: string): string {
|
|
|
|
|
+ return keyword.trim().toLowerCase()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function includesKeyword(value: string | undefined, keyword: string): boolean {
|
|
|
|
|
+ if (keyword.length === 0) {
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+ return (value ?? '').trim().toLowerCase().includes(keyword)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function filterArtistsByKeyword(items: NavidromeRestArtist[], keyword: string): NavidromeRestArtist[] {
|
|
|
|
|
+ const normalized = normalizeKeyword(keyword)
|
|
|
|
|
+ if (normalized.length === 0) {
|
|
|
|
|
+ return [...items]
|
|
|
|
|
+ }
|
|
|
|
|
+ return items.filter((item: NavidromeRestArtist) => includesKeyword(item.name, normalized))
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function filterAlbumsByKeyword(items: NavidromeRestAlbum[], keyword: string): NavidromeRestAlbum[] {
|
|
|
|
|
+ const normalized = normalizeKeyword(keyword)
|
|
|
|
|
+ if (normalized.length === 0) {
|
|
|
|
|
+ return [...items]
|
|
|
|
|
+ }
|
|
|
|
|
+ return items.filter((item: NavidromeRestAlbum) => includesKeyword(item.name, normalized))
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function filterPlaylistsByKeyword(items: NavidromeRestPlaylist[], keyword: string): NavidromeRestPlaylist[] {
|
|
|
|
|
+ const normalized = normalizeKeyword(keyword)
|
|
|
|
|
+ if (normalized.length === 0) {
|
|
|
|
|
+ return [...items]
|
|
|
|
|
+ }
|
|
|
|
|
+ return items.filter((item: NavidromeRestPlaylist) => includesKeyword(item.name, normalized))
|
|
|
|
|
+}
|