- Storage admin: local folders with a folder picker and NFS sources, connection test, scan and full scan with live progress, enable, disable, delete - path pattern editor with reorder, examples and a preview table that shows which pattern matched and what came from tags; compile errors land under the broken pattern - Library page with counters, scans and unreadable files; search reindex for admins - search box in the top bar: combobox with keyboard navigation, 150 ms debounce, cancelled stale requests, "/" and Ctrl+K, layout fix hint - search page with tabs and paging, artist and album pages, album cards and track lists; unavailable tracks are dimmed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
738 B
TypeScript
20 lines
738 B
TypeScript
import { ApiError } from '@pipu/core';
|
|
import { Link } from '@tanstack/react-router';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
import { useErrorText } from '../shared/lib/errors';
|
|
import s from './page.module.css';
|
|
|
|
/** Сущность каталога не найдена (удалена сканом) или не загрузилась. */
|
|
export function NotFound({ error }: { error: unknown }) {
|
|
const { t } = useTranslation();
|
|
const errorText = useErrorText();
|
|
const missing = error instanceof ApiError && error.status === 404;
|
|
return (
|
|
<div className={s.empty} role="alert">
|
|
<p>{missing ? t('catalog.not_found') : errorText(error)}</p>
|
|
<Link to="/">{t('catalog.back_home')}</Link>
|
|
</div>
|
|
);
|
|
}
|