Skip to content

Commit f5142db

Browse files
committed
feat: Add direct format selection buttons on release page with confirmation modal and styling.
1 parent 6d14f73 commit f5142db

File tree

10 files changed

+531
-93
lines changed

10 files changed

+531
-93
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import React from 'react';
2+
import { useTranslation } from 'react-i18next';
3+
import { type FormatDetails } from './AddAlbumVersionModal';
4+
import { getImageUrl } from '../../utils/imageUrl';
5+
6+
interface ConfirmAddModalProps {
7+
isOpen: boolean;
8+
coverImage?: string;
9+
albumTitle?: string;
10+
format: FormatDetails | null;
11+
onConfirm: () => void;
12+
onCancel: () => void;
13+
}
14+
15+
const ConfirmAddModal: React.FC<ConfirmAddModalProps> = ({
16+
isOpen,
17+
coverImage,
18+
albumTitle,
19+
format,
20+
onConfirm,
21+
onCancel,
22+
}) => {
23+
const { t } = useTranslation();
24+
25+
if (!isOpen || !format) return null;
26+
27+
return (
28+
<dialog className="modal modal-open">
29+
{/* Transparent glassmorphism backdrop */}
30+
<div
31+
className="modal-box border border-base-content/10"
32+
style={{
33+
background: 'color-mix(in srgb, oklch(var(--b2)) 40%, transparent)',
34+
backdropFilter: 'blur(8px)',
35+
WebkitBackdropFilter: 'blur(8px)',
36+
}}
37+
>
38+
<div className="flex gap-4 items-start">
39+
{/* Album cover */}
40+
{coverImage && (
41+
<img
42+
src={getImageUrl(coverImage)}
43+
alt={albumTitle || ''}
44+
className="w-20 h-20 rounded-lg object-cover shadow-md flex-shrink-0"
45+
/>
46+
)}
47+
48+
<div className="flex-1 min-w-0">
49+
<h3 className="font-bold text-lg">{t('versions.confirmAddTitle')}</h3>
50+
{albumTitle && (
51+
<p className="text-sm text-base-content/60 mt-0.5 truncate">{albumTitle}</p>
52+
)}
53+
<div className="mt-2">
54+
<p className="text-base-content/80">
55+
<span className="font-semibold">{format.name}</span>
56+
{format.text && <span className="ml-1 text-accent">{format.text}</span>}
57+
</p>
58+
{format.descriptions?.length > 0 && (
59+
<p className="text-sm text-base-content/50 mt-0.5">
60+
{format.descriptions.join(', ')}
61+
</p>
62+
)}
63+
</div>
64+
</div>
65+
</div>
66+
67+
<div className="modal-action">
68+
<button className="btn btn-ghost" onClick={onCancel}>
69+
{t('common.cancel')}
70+
</button>
71+
<button className="btn btn-primary" onClick={onConfirm}>
72+
{t('versions.confirmAddYes')}
73+
</button>
74+
</div>
75+
</div>
76+
<form method="dialog" className="modal-backdrop" style={{ background: 'rgba(0, 0, 0, 0.15)' }}>
77+
<button onClick={onCancel}>{t('common.close')}</button>
78+
</form>
79+
</dialog>
80+
);
81+
};
82+
83+
export default ConfirmAddModal;

frontend/src/locales/de/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,15 @@
218218
"select": "Auswählen",
219219
"unknown": "Unbekannt",
220220
"errorLoadingVersions": "Fehler beim Laden der Versionen für dieses Album.",
221-
"errorRetrievingData": "Fehler beim Abrufen der Daten für diese Version."
221+
"errorRetrievingData": "Fehler beim Abrufen der Daten für diese Version.",
222+
"loadingFormats": "Formate werden geladen...",
223+
"seeMore": "{{remaining}} weitere anzeigen ({{total}} insgesamt)",
224+
"noFormats": "Keine Formatinformationen verfügbar",
225+
"clickToAdd": "Klicken zum Hinzufügen dieses Formats",
226+
"selectFormat": "Format zum Hinzufügen auswählen",
227+
"goBack": "Zurück",
228+
"confirmAddTitle": "Zur Sammlung hinzufügen?",
229+
"confirmAddYes": "Ja, hinzufügen"
222230
},
223231
"search": {
224232
"placeholder": "Suchen Sie nach Künstlern oder Alben...",

frontend/src/locales/en/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,15 @@
236236
"select": "Select",
237237
"unknown": "Unknown",
238238
"errorLoadingVersions": "Error loading versions for this album.",
239-
"errorRetrievingData": "Error retrieving data for this version."
239+
"errorRetrievingData": "Error retrieving data for this version.",
240+
"loadingFormats": "Loading formats...",
241+
"seeMore": "Show {{remaining}} more ({{total}} total)",
242+
"noFormats": "No format info available",
243+
"clickToAdd": "Click to add this format to your collection",
244+
"selectFormat": "Select a format to add",
245+
"goBack": "Go Back",
246+
"confirmAddTitle": "Add to your collection?",
247+
"confirmAddYes": "Yes, add it"
240248
},
241249
"search": {
242250
"placeholder": "Search for artists or albums...",

frontend/src/locales/es/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,15 @@
218218
"select": "Seleccionar",
219219
"unknown": "Desconocido",
220220
"errorLoadingVersions": "Error cargando versiones para este álbum.",
221-
"errorRetrievingData": "Error recuperando datos para esta versión."
221+
"errorRetrievingData": "Error recuperando datos para esta versión.",
222+
"loadingFormats": "Cargando formatos...",
223+
"seeMore": "Mostrar {{remaining}} más ({{total}} en total)",
224+
"noFormats": "Sin info de formato disponible",
225+
"clickToAdd": "Clic para añadir este formato a tu colección",
226+
"selectFormat": "Selecciona un formato para añadir",
227+
"goBack": "Volver",
228+
"confirmAddTitle": "¿Añadir a tu colección?",
229+
"confirmAddYes": "Sí, añadir"
222230
},
223231
"search": {
224232
"placeholder": "Buscar artistas o álbumes...",

frontend/src/locales/fr/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,15 @@
236236
"select": "Sélectionner",
237237
"unknown": "Inconnu",
238238
"errorLoadingVersions": "Erreur lors du chargement des versions pour cet album.",
239-
"errorRetrievingData": "Erreur lors de la récupération des données pour cette version."
239+
"errorRetrievingData": "Erreur lors de la récupération des données pour cette version.",
240+
"loadingFormats": "Chargement des formats...",
241+
"seeMore": "Afficher {{remaining}} de plus ({{total}} au total)",
242+
"noFormats": "Aucune info de format disponible",
243+
"clickToAdd": "Cliquer pour ajouter ce format à votre collection",
244+
"selectFormat": "Sélectionnez un format à ajouter",
245+
"goBack": "Retour",
246+
"confirmAddTitle": "Ajouter à votre collection ?",
247+
"confirmAddYes": "Oui, ajouter"
240248
},
241249
"search": {
242250
"placeholder": "Rechercher des artistes ou des albums...",

frontend/src/locales/pt/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,15 @@
218218
"select": "Selecionar",
219219
"unknown": "Desconhecido",
220220
"errorLoadingVersions": "Erro ao carregar versões para este álbum.",
221-
"errorRetrievingData": "Erro ao recuperar dados para esta versão."
221+
"errorRetrievingData": "Erro ao recuperar dados para esta versão.",
222+
"loadingFormats": "Carregando formatos...",
223+
"seeMore": "Mostrar {{remaining}} mais ({{total}} no total)",
224+
"noFormats": "Sem info de formato disponível",
225+
"clickToAdd": "Clique para adicionar este formato à sua coleção",
226+
"selectFormat": "Selecione um formato para adicionar",
227+
"goBack": "Voltar",
228+
"confirmAddTitle": "Adicionar à sua coleção?",
229+
"confirmAddYes": "Sim, adicionar"
222230
},
223231
"search": {
224232
"placeholder": "Buscar artistas ou álbuns...",

frontend/src/locales/zh/translation.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,15 @@
218218
"select": "选择",
219219
"unknown": "未知",
220220
"errorLoadingVersions": "加载此专辑版本出错。",
221-
"errorRetrievingData": "获取此版本数据出错。"
221+
"errorRetrievingData": "获取此版本数据出错。",
222+
"loadingFormats": "正在加载格式...",
223+
"seeMore": "显示更多 {{remaining}} 个(共 {{total}} 个)",
224+
"noFormats": "无格式信息",
225+
"clickToAdd": "点击将此格式添加到收藏",
226+
"selectFormat": "选择要添加的格式",
227+
"goBack": "返回",
228+
"confirmAddTitle": "添加到您的收藏?",
229+
"confirmAddYes": "是的,添加"
222230
},
223231
"search": {
224232
"placeholder": "搜索艺术家或专辑...",

0 commit comments

Comments
 (0)