Update custome translations to i18n and various improvements

This commit is contained in:
2025-12-03 21:53:04 +00:00
parent a54c729e46
commit 6fb6583ae3
16 changed files with 364 additions and 195 deletions

View File

@@ -48,13 +48,11 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
<div className="flex items-center justify-between">
<div className="flex items-center gap-2">
<CardTitle className="text-lg">
{day.isTemplate ? t.regularPlan : t.dayNumber.replace('{{number}}', String(dayIndex + 1))}
{day.isTemplate ? t('regularPlan') : t('deviatingPlan')}
</CardTitle>
{day.isTemplate && (
<Badge variant="secondary" className="text-xs">
{t.day} 1
</Badge>
)}
<Badge variant="secondary" className="text-xs">
{t('day')} {dayIndex + 1}
</Badge>
</div>
<div className="flex gap-2">
{canAddDay && (
@@ -62,7 +60,7 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
onClick={() => onAddDay(day.id)}
size="sm"
variant="outline"
title={t.cloneDay}
title={t('cloneDay')}
>
<Copy className="h-4 w-4" />
</Button>
@@ -73,7 +71,7 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
size="sm"
variant="outline"
className="border-destructive text-destructive hover:bg-destructive hover:text-destructive-foreground"
title={t.removeDay}
title={t('removeDay')}
>
<Trash2 className="h-4 w-4" />
</Button>
@@ -84,41 +82,49 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
<CardContent className="space-y-3">
{/* Dose table header */}
<div className="grid grid-cols-[120px_1fr_auto] gap-3 text-sm font-medium text-muted-foreground">
<div>{t.time}</div>
<div>{t.ldx} (mg)</div>
<div>{t('time')}</div>
<div>{t('ldx')} (mg)</div>
<div></div>
</div>
{/* Dose rows */}
{day.doses.map((dose) => (
<div key={dose.id} className="grid grid-cols-[120px_1fr_auto] gap-3 items-center">
<FormTimeInput
value={dose.time}
onChange={(value) => onUpdateDose(day.id, dose.id, 'time', value)}
required={true}
errorMessage={t.errorTimeRequired}
/>
<FormNumericInput
value={dose.ldx}
onChange={(value) => onUpdateDose(day.id, dose.id, 'ldx', value)}
increment={doseIncrement}
min={0}
unit="mg"
required={true}
errorMessage={t.errorNumberRequired}
/>
<Button
onClick={() => onRemoveDose(day.id, dose.id)}
size="sm"
variant="ghost"
disabled={day.isTemplate && day.doses.length === 1}
className="h-9 w-9 p-0"
title={t.removeDose}
>
<Trash2 className="h-4 w-4" />
</Button>
</div>
))}
{day.doses.map((dose) => {
// Check for duplicate times
const duplicateTimeCount = day.doses.filter(d => d.time === dose.time).length;
const hasDuplicateTime = duplicateTimeCount > 1;
return (
<div key={dose.id} className="grid grid-cols-[120px_1fr_auto] gap-3 items-center">
<FormTimeInput
value={dose.time}
onChange={(value) => onUpdateDose(day.id, dose.id, 'time', value)}
required={true}
warning={hasDuplicateTime}
errorMessage={t('errorTimeRequired')}
warningMessage={t('warningDuplicateTime')}
/>
<FormNumericInput
value={dose.ldx}
onChange={(value) => onUpdateDose(day.id, dose.id, 'ldx', value)}
increment={doseIncrement}
min={0}
unit="mg"
required={true}
errorMessage={t('errorNumberRequired')}
/>
<Button
onClick={() => onRemoveDose(day.id, dose.id)}
size="sm"
variant="ghost"
disabled={day.isTemplate && day.doses.length === 1}
className="h-9 w-9 p-0"
title={t('removeDose')}
>
<Trash2 className="h-4 w-4" />
</Button>
</div>
);
})}
{/* Add dose button */}
{day.doses.length < 5 && (
@@ -129,7 +135,7 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
className="w-full mt-2"
>
<Plus className="h-4 w-4 mr-2" />
{t.addDose}
{t('addDose')}
</Button>
)}
</CardContent>
@@ -144,7 +150,7 @@ const DaySchedule: React.FC<DayScheduleProps> = ({
className="w-full"
>
<Plus className="h-4 w-4 mr-2" />
{t.addDay}
{t('addDay')}
</Button>
)}
</div>