Enhance UploadToShowDialog: add 'apply to all' functionality for batch show assignment, improve UI layout for better user experience, and update translations for new options.

This commit is contained in:
Leonid Pershin
2026-07-25 19:17:00 +03:00
parent da0ac79079
commit 7c1b807e5e
2 changed files with 25 additions and 4 deletions
@@ -46,6 +46,10 @@ export function UploadToShowDialog({ files, onClose }: { files: File[]; onClose:
const assignment = (name: string): string =>
name in overrides ? overrides[name] : (matchedByName.get(name) ?? '')
/** Проставить одно шоу (или «в библиотеку») всем файлам разом. */
const applyToAll = (showId: string) =>
setOverrides(Object.fromEntries(files.map((f) => [f.name, showId])))
// Предпросмотр: что распарсим для каждого файла при текущих настройках, в порядке добавления.
const previews = useMemo(() => {
const opts = {
@@ -104,11 +108,26 @@ export function UploadToShowDialog({ files, onClose }: { files: File[]; onClose:
)}
</p>
<div className="flex items-center justify-between text-sm">
<div className="flex flex-wrap items-center justify-between gap-2 text-sm">
<span className="font-medium">{t('admin.media.toShowPreview')}</span>
<span className="text-muted-foreground">
{t('admin.media.toShowMatched', { matched: matchedCount, total: files.length })}
</span>
<div className="flex items-center gap-2">
<span className="text-muted-foreground">
{t('admin.media.toShowMatched', { matched: matchedCount, total: files.length })}
</span>
<Select value="" onValueChange={(v) => applyToAll(v === LIBRARY_VALUE ? '' : v)}>
<SelectTrigger className="h-8 w-52">
<SelectValue placeholder={t('admin.media.applyToAll')} />
</SelectTrigger>
<SelectContent>
<SelectItem value={LIBRARY_VALUE}>{t('admin.media.toShowLibrary')}</SelectItem>
{shows?.map((s) => (
<SelectItem key={s.id} value={s.id}>
{s.name}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
</div>
<ul className="crt-panel max-h-72 divide-y divide-border overflow-y-auto rounded-md text-sm">
{previews.map((p) => {
+2
View File
@@ -134,6 +134,7 @@ const resources = {
toShowPreview: 'Что распознаем',
toShowRecognized: 'распознано {{recognized}} из {{total}}',
toShowMatched: 'шоу распознано у {{matched}} из {{total}}',
applyToAll: 'Задать всем…',
toShowUnknown: '—',
toShowConfirm: 'Загрузить и добавить',
uploaded: 'Файл загружен, идёт обработка',
@@ -474,6 +475,7 @@ const resources = {
toShowPreview: 'What we detect',
toShowRecognized: '{{recognized}} of {{total}} recognized',
toShowMatched: 'show detected for {{matched}} of {{total}}',
applyToAll: 'Set for all…',
toShowUnknown: '—',
toShowConfirm: 'Upload and add',
uploaded: 'File uploaded, processing started',