feat: Enhance task filtering, smart scheduling, audit logs and translations
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-12-17 14:26:54 +01:00
parent 9819d8db0b
commit 2579df0b89
32 changed files with 2219 additions and 456 deletions
+24 -20
View File
@@ -611,26 +611,30 @@ export default function TaskDetailsModal({
{/* Estimated Duration */}
<div>
<label className="text-sm font-medium block mb-2">{t('taskDetails.estimatedDuration')}</label>
<Select
value={editedEstimatedDuration ? editedEstimatedDuration.toString() : "0"}
onValueChange={(val) => setEditedEstimatedDuration(val === "0" ? undefined : parseInt(val))}
>
<SelectTrigger>
<SelectValue placeholder={t('taskCreation.duration')} />
</SelectTrigger>
<SelectContent>
<SelectItem value="0">{t('taskCreation.durationNone')}</SelectItem>
<SelectItem value="15">15m</SelectItem>
<SelectItem value="30">30m</SelectItem>
<SelectItem value="45">45m</SelectItem>
<SelectItem value="60">1h</SelectItem>
<SelectItem value="90">1.5h</SelectItem>
<SelectItem value="120">2h</SelectItem>
<SelectItem value="240">4h</SelectItem>
<SelectItem value="480">8h (1 Day)</SelectItem>
</SelectContent>
</Select>
<label className="text-sm font-medium block mb-2">{t('taskDetails.estimatedDuration')} ({t('planning.minutes')})</label>
<div className="space-y-2">
<Input
type="number"
min="0"
step="5"
placeholder={t('planning.durationPlaceholder')}
value={editedEstimatedDuration || ''}
onChange={(e) => setEditedEstimatedDuration(e.target.value ? parseInt(e.target.value) : undefined)}
data-testid="input-edit-duration"
/>
<div className="flex flex-wrap gap-1">
{[15, 30, 45, 60, 90, 120].map((mins) => (
<Badge
key={mins}
variant={editedEstimatedDuration === mins ? "default" : "outline"}
className="cursor-pointer text-xs"
onClick={() => setEditedEstimatedDuration(mins)}
>
{mins}m
</Badge>
))}
</div>
</div>
</div>
{/* Dependencies */}