- MediaBrowseScreen (/app/media): one parameterized screen for all 9 top-level kinds with an in-screen kind switcher, per-kind search box, 100/page paging - SearchScreen (/app/search): grouped per-kind results with counts + 'See all'; TopBar search input now navigates here - TrashScreen (/app/trash): state:FileNotFound results, multi-select + Empty Trash via DELETE /api/media-items and /api/maintenance/empty_trash (confirm dialogs) - Shared media/mediaKinds (icon/label maps, hueOf, duration helpers) + MediaPosterCard; ChannelBuilder and CollectionsScreen now reuse the single-source maps (their exhaustive Record<LibraryBrowseMediaType> had to cover the 6 new kinds anyway) - api: search.ts, mediaItems.ts, maintenance.ts (+ URL-assert tests) - One consolidated 'Browse' nav entry with an in-screen kind switcher instead of 9 per-kind nav rows (deviation from Blazor's per-kind Media links) - Nav: Media group gains Browse/Search/Trash; Settings Classic-UI help trimmed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
18 lines
474 B
TypeScript
18 lines
474 B
TypeScript
import { ApiError, request } from './client';
|
|
|
|
export function deleteMediaItems(ids: number[]): Promise<void> {
|
|
return request<void>('/api/media-items', { body: { ids }, method: 'DELETE' });
|
|
}
|
|
|
|
export function messageFromMediaItemsError(error: unknown, fallback = 'Unable to delete media items'): string {
|
|
if (error instanceof ApiError) {
|
|
return error.detail ?? error.message;
|
|
}
|
|
|
|
if (error instanceof Error) {
|
|
return error.message;
|
|
}
|
|
|
|
return fallback;
|
|
}
|