diff --git a/src/app/home/recent-playlists/recent-playlists.component.ts b/src/app/home/recent-playlists/recent-playlists.component.ts index 5fc9e1af0..564e55ad0 100644 --- a/src/app/home/recent-playlists/recent-playlists.component.ts +++ b/src/app/home/recent-playlists/recent-playlists.component.ts @@ -19,6 +19,7 @@ import { Playlist } from '../../../../shared/playlist.interface'; import { DataService } from '../../services/data.service'; import * as PlaylistActions from '../../state/actions'; import { + selectActiveTypeFilters, selectAllPlaylistsMeta, selectPlaylistsLoadingFlag, } from '../../state/selectors'; @@ -47,20 +48,43 @@ export class RecentPlaylistsComponent implements OnDestroy { playlists$ = combineLatest([ this.store.select(selectAllPlaylistsMeta), this.searchQuery, + // eslint-disable-next-line @ngrx/avoid-combining-selectors + this.store.select(selectActiveTypeFilters), ]).pipe( - // eslint-disable-next-line @ngrx/avoid-mapping-selectors - map(([playlists, searchQuery]) => + map(([playlists, searchQuery, filters]) => playlists - .sort((a, b) => a.position - b.position) + .filter((item) => { + const isStalkerFilter = + item.macAddress && filters.includes('stalker'); + const isXtreamFilter = + item.username && + item.password && + item.serverUrl && + filters.includes('xtream'); + const isM3uFilter = + !item.username && + !item.password && + !item.serverUrl && + !item.macAddress && + filters.includes('m3u'); + + return ( + (isStalkerFilter && filters.includes('stalker')) || + (isXtreamFilter && filters.includes('xtream')) || + (isM3uFilter && filters.includes('m3u')) + ); + }) .filter((item) => item.title.toLowerCase().includes(searchQuery.toLowerCase()) ) + .sort((a, b) => a.position - b.position) ) ); allPlaylistsLoaded = this.store.selectSignal(selectPlaylistsLoadingFlag); @Input() sidebarMode = false; + @Output() playlistClicked = new EventEmitter(); /** IPC Renderer commands list with callbacks */ commandsList = [ @@ -113,8 +137,6 @@ export class RecentPlaylistsComponent implements OnDestroy { isMigrationPossible = false; migrationMessage = ''; - @Output() playlistClicked = new EventEmitter(); - constructor( private dialog: MatDialog, private dialogService: DialogService, diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html index 9fc126b14..577bad3f7 100644 --- a/src/app/shared/components/header/header.component.html +++ b/src/app/shared/components/header/header.component.html @@ -21,14 +21,15 @@ data-test-id="filter-playlist-by-name" > search - + --> --> + + + +
+

{{ 'HOME.FILTER_BY_TYPE' | translate }}:

+ @for (type of playlistTypes; track $index) { +

+ {{ type.title }} +

+ } +
+
+