feat: add completion count

This commit is contained in:
2026-03-10 17:02:38 +01:00
parent 3fb0f7166b
commit 4af8950602
10 changed files with 19 additions and 23 deletions

View File

@@ -135,6 +135,7 @@ export default function HabitItem({ habit, onEdit, onDelete }: HabitItemProps) {
<span className={`text-sm font-medium ${habit.archived ? 'text-gray-400 dark:text-gray-500' : ''}`}>{t('coinsPerCompletion', { count: habit.coinReward })}</span> <span className={`text-sm font-medium ${habit.archived ? 'text-gray-400 dark:text-gray-500' : ''}`}>{t('coinsPerCompletion', { count: habit.coinReward })}</span>
</div> </div>
</div> </div>
<div className='mt-2 text-sm font-medium'>{t("completionCount", { completions: habit.completions.length })}</div>
</CardContent> </CardContent>
<CardFooter className="flex-shrink-0 flex justify-between gap-2"> <CardFooter className="flex-shrink-0 flex justify-between gap-2">
<div className="flex gap-2"> <div className="flex gap-2">

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Completa ({completed}/{target})", "completeButtonCount": "Completa ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Desfés", "undoButton": "Desfés",
"editButton": "Edita" "editButton": "Edita",
"completionCount": "completat {completions} vegades"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Nota massa llarga", "noteTooLongTitle": "Nota massa llarga",

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Abschließen ({completed}/{target})", "completeButtonCount": "Abschließen ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Rückgängig", "undoButton": "Rückgängig",
"editButton": "Bearbeiten" "editButton": "Bearbeiten",
"completionCount": "{completions} mal abgeschlossen"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Notiz zu lang", "noteTooLongTitle": "Notiz zu lang",
@@ -434,8 +435,6 @@
"invalidAmountDescription": "Bitte geben Sie eine gültige positive Zahl ein", "invalidAmountDescription": "Bitte geben Sie eine gültige positive Zahl ein",
"successTitle": "Erfolg", "successTitle": "Erfolg",
"transactionNotFoundDescription": "Transaktion nicht gefunden", "transactionNotFoundDescription": "Transaktion nicht gefunden",
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten.",
"transactionNotFoundDescription": "Transaktion nicht gefunden",
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten." "maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten."
}, },
"DrawingModal": { "DrawingModal": {

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Complete ({completed}/{target})", "completeButtonCount": "Complete ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Undo", "undoButton": "Undo",
"editButton": "Edit" "editButton": "Edit",
"completionCount": "Completed {completions} times"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Note too long", "noteTooLongTitle": "Note too long",

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Completar ({completed}/{target})", "completeButtonCount": "Completar ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Deshacer", "undoButton": "Deshacer",
"editButton": "Editar" "editButton": "Editar",
"completionCount": "{completions} veces completadas"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Nota demasiado larga", "noteTooLongTitle": "Nota demasiado larga",
@@ -442,8 +443,6 @@
"invalidAmountDescription": "Por favor ingresa un número positivo válido", "invalidAmountDescription": "Por favor ingresa un número positivo válido",
"successTitle": "Éxito", "successTitle": "Éxito",
"transactionNotFoundDescription": "Transacción no encontrada", "transactionNotFoundDescription": "Transacción no encontrada",
"maxAmountExceededDescription": "La cantidad no puede exceder {max}.",
"transactionNotFoundDescription": "Transacción no encontrada",
"maxAmountExceededDescription": "La cantidad no puede exceder {max}." "maxAmountExceededDescription": "La cantidad no puede exceder {max}."
} }
} }

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Compléter ({completed}/{target})", "completeButtonCount": "Compléter ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Annuler", "undoButton": "Annuler",
"editButton": "Modifier" "editButton": "Modifier",
"completionCount": "complété {completions} fois"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Note trop longue", "noteTooLongTitle": "Note trop longue",
@@ -434,8 +435,6 @@
"invalidAmountDescription": "Veuillez entrer un nombre positif valide", "invalidAmountDescription": "Veuillez entrer un nombre positif valide",
"successTitle": "Succès", "successTitle": "Succès",
"transactionNotFoundDescription": "Transaction non trouvée", "transactionNotFoundDescription": "Transaction non trouvée",
"maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}.",
"transactionNotFoundDescription": "Transaction non trouvée",
"maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}." "maxAmountExceededDescription": "Le montant ne peut pas dépasser {max}."
}, },
"DrawingModal": { "DrawingModal": {

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "完了({completed}/{target}", "completeButtonCount": "完了({completed}/{target}",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "取り消し", "undoButton": "取り消し",
"editButton": "編集" "editButton": "編集",
"completionCount": "{completions} 回完了しました"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "メモが長すぎます", "noteTooLongTitle": "メモが長すぎます",
@@ -434,8 +435,6 @@
"invalidAmountDescription": "有効な正の数を入力してください", "invalidAmountDescription": "有効な正の数を入力してください",
"successTitle": "成功しました", "successTitle": "成功しました",
"transactionNotFoundDescription": "取引が見つかりません", "transactionNotFoundDescription": "取引が見つかりません",
"maxAmountExceededDescription": "金額は{max}を超えることはできません。",
"transactionNotFoundDescription": "取引が見つかりません",
"maxAmountExceededDescription": "金額は{max}を超えることはできません。" "maxAmountExceededDescription": "金額は{max}を超えることはできません。"
}, },
"DrawingModal": { "DrawingModal": {

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "완료 ({completed}/{target})", "completeButtonCount": "완료 ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "실행 취소", "undoButton": "실행 취소",
"editButton": "수정" "editButton": "수정",
"completionCount": "{completions}번 완료됨"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "메모가 너무 깁니다", "noteTooLongTitle": "메모가 너무 깁니다",
@@ -430,8 +431,6 @@
"invalidAmountDescription": "유효한 양의 숫자를 입력하세요", "invalidAmountDescription": "유효한 양의 숫자를 입력하세요",
"successTitle": "성공", "successTitle": "성공",
"transactionNotFoundDescription": "거래를 찾을 수 없습니다", "transactionNotFoundDescription": "거래를 찾을 수 없습니다",
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다.",
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다." "maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다."
}, },
"Warning": { "Warning": {

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "Выполнить ({completed}/{target})", "completeButtonCount": "Выполнить ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Отменить", "undoButton": "Отменить",
"editButton": "Редактировать" "editButton": "Редактировать",
"completionCount": "завершено {completions} раз"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "Слишком длинная заметка", "noteTooLongTitle": "Слишком длинная заметка",
@@ -434,8 +435,6 @@
"invalidAmountDescription": "Пожалуйста, введите положительное число", "invalidAmountDescription": "Пожалуйста, введите положительное число",
"successTitle": "Успех", "successTitle": "Успех",
"transactionNotFoundDescription": "Транзакция не найдена", "transactionNotFoundDescription": "Транзакция не найдена",
"maxAmountExceededDescription": "Сумма не может превышать {max}.",
"transactionNotFoundDescription": "Транзакция не найдена",
"maxAmountExceededDescription": "Сумма не может превышать {max}." "maxAmountExceededDescription": "Сумма не может превышать {max}."
}, },
"DrawingModal": { "DrawingModal": {

View File

@@ -322,7 +322,8 @@
"completeButtonCount": "完成 ({completed}/{target})", "completeButtonCount": "完成 ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}", "completeButtonCountMobile": "{completed}/{target}",
"undoButton": "撤销", "undoButton": "撤销",
"editButton": "编辑" "editButton": "编辑",
"completionCount": "完成 {completions} 次"
}, },
"TransactionNoteEditor": { "TransactionNoteEditor": {
"noteTooLongTitle": "备注太长", "noteTooLongTitle": "备注太长",
@@ -434,8 +435,6 @@
"invalidAmountDescription": "请输入有效的正数", "invalidAmountDescription": "请输入有效的正数",
"successTitle": "成功", "successTitle": "成功",
"transactionNotFoundDescription": "未找到交易记录", "transactionNotFoundDescription": "未找到交易记录",
"maxAmountExceededDescription": "金额不能超过 {max}。",
"transactionNotFoundDescription": "未找到交易记录",
"maxAmountExceededDescription": "金额不能超过 {max}。" "maxAmountExceededDescription": "金额不能超过 {max}。"
}, },
"DrawingModal": { "DrawingModal": {