Compare commits

..

2 Commits

Author SHA1 Message Date
79c264f06d fix: only show areas with content on dashboard 2026-03-10 17:33:41 +01:00
4af8950602 feat: add completion count 2026-03-10 17:02:38 +01:00
11 changed files with 46 additions and 37 deletions

View File

@@ -18,7 +18,7 @@ import { DESKTOP_DISPLAY_ITEM_COUNT } from '@/lib/constants'
import { Habit, WishlistItemType } from '@/lib/types'
import { cn, d2t, getNow, getTodayInTimezone, isHabitDue, isSameDate, isTaskOverdue, t2d } from '@/lib/utils'
import { useAtom } from 'jotai'
import { AlertTriangle, ArrowRight, ChevronDown, ChevronUp, Circle, CircleCheck, Coins, Pin, Plus } from 'lucide-react';
import { AlertTriangle, ArrowRight, ChevronDown, ChevronUp, Circle, CircleCheck, Coins, Pin, Plus } from 'lucide-react'
import { useTranslations } from 'next-intl'
import Link from 'next/link'
import { useState } from 'react'
@@ -409,7 +409,7 @@ export default function DailyOverview({
<CardContent>
<div className="space-y-6">
{/* Tasks Section */}
{habits.some(habit => habit.isTask === true) && (
{dailyTasks.length > 0 && (
<ItemSection
title={t('dailyTasksTitle')}
items={dailyTasks}
@@ -421,16 +421,16 @@ export default function DailyOverview({
)}
{/* Habits Section */}
<ItemSection
{dailyHabits.length > 0 && <ItemSection
title={t('dailyHabitsTitle')}
items={dailyHabits}
emptyMessage={t('noHabitsDueTodayMessage')}
isTask={false}
viewLink="/habits"
addNewItem={() => setModalConfig({ isOpen: true, isTask: false })}
/>
/>}
<div className="space-y-2">
{sortedWishlistItems.length > 0 && <div className="space-y-2">
<div className="flex items-center justify-between mb-2">
<h3 className="font-semibold">{t('wishlistGoalsTitle')}</h3>
<Badge variant="secondary">
@@ -538,6 +538,10 @@ export default function DailyOverview({
</div>
</div>
</div>
}
{dailyHabits.length === 0 && dailyTasks.length === 0 && sortedWishlistItems.length === 0 && <>
{t("emptyAll")}
</>}
</div>
</CardContent>
</Card>

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>
</div>
</div>
<div className='mt-2 text-sm font-medium'>{t("completionCount", { completions: habit.completions.length })}</div>
</CardContent>
<CardFooter className="flex-shrink-0 flex justify-between gap-2">
<div className="flex gap-2">

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Elimina hàbit",
"confirmDeleteDialogMessage": "Estàs segur que vols eliminar \"{name}\"? Aquesta acció no es pot desfer.",
"deleteButton": "Elimina",
"overdueTooltip": "Vençut"
"overdueTooltip": "Vençut",
"emptyAll": "Res a fer."
},
"HabitContextMenuItems": {
"startPomodoro": "Inicia Pomodoro",
@@ -322,7 +323,8 @@
"completeButtonCount": "Completa ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Desfés",
"editButton": "Edita"
"editButton": "Edita",
"completionCount": "completat {completions} vegades"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Nota massa llarga",

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Gewohnheit löschen",
"confirmDeleteDialogMessage": "Sind Sie sicher, dass Sie \"{name}\" löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"deleteButton": "Löschen",
"overdueTooltip": "Überfällig"
"overdueTooltip": "Überfällig",
"emptyAll": "Nichts zu tun."
},
"HabitContextMenuItems": {
"startPomodoro": "Pomodoro starten",
@@ -322,7 +323,8 @@
"completeButtonCount": "Abschließen ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Rückgängig",
"editButton": "Bearbeiten"
"editButton": "Bearbeiten",
"completionCount": "{completions} mal abgeschlossen"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Notiz zu lang",
@@ -434,8 +436,6 @@
"invalidAmountDescription": "Bitte geben Sie eine gültige positive Zahl ein",
"successTitle": "Erfolg",
"transactionNotFoundDescription": "Transaktion nicht gefunden",
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten.",
"transactionNotFoundDescription": "Transaktion nicht gefunden",
"maxAmountExceededDescription": "Der Betrag darf {max} nicht überschreiten."
},
"DrawingModal": {

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Delete Habit",
"confirmDeleteDialogMessage": "Are you sure you want to delete \"{name}\"? This action cannot be undone.",
"deleteButton": "Delete",
"overdueTooltip": "Overdue"
"overdueTooltip": "Overdue",
"emptyAll": "Nothing to do."
},
"HabitContextMenuItems": {
"startPomodoro": "Start Pomodoro",
@@ -322,7 +323,8 @@
"completeButtonCount": "Complete ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Undo",
"editButton": "Edit"
"editButton": "Edit",
"completionCount": "Completed {completions} times"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Note too long",

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Eliminar hábito",
"confirmDeleteDialogMessage": "¿Estás seguro de que quieres eliminar \"{name}\"? Esta acción no se puede deshacer.",
"deleteButton": "Eliminar",
"overdueTooltip": "Vencido"
"overdueTooltip": "Vencido",
"emptyAll": "Nada que hacer."
},
"HabitContextMenuItems": {
"startPomodoro": "Iniciar Pomodoro",
@@ -322,7 +323,8 @@
"completeButtonCount": "Completar ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Deshacer",
"editButton": "Editar"
"editButton": "Editar",
"completionCount": "{completions} veces completadas"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Nota demasiado larga",
@@ -442,8 +444,6 @@
"invalidAmountDescription": "Por favor ingresa un número positivo válido",
"successTitle": "Éxito",
"transactionNotFoundDescription": "Transacción no encontrada",
"maxAmountExceededDescription": "La cantidad no puede exceder {max}.",
"transactionNotFoundDescription": "Transacción no encontrada",
"maxAmountExceededDescription": "La cantidad no puede exceder {max}."
}
}

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Supprimer l'habitude",
"confirmDeleteDialogMessage": "Êtes-vous sûr de vouloir supprimer \"{name}\" ? Cette action est irréversible.",
"deleteButton": "Supprimer",
"overdueTooltip": "En retard"
"overdueTooltip": "En retard",
"emptyAll": "Rien à faire."
},
"HabitContextMenuItems": {
"startPomodoro": "Démarrer Pomodoro",
@@ -322,7 +323,8 @@
"completeButtonCount": "Compléter ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Annuler",
"editButton": "Modifier"
"editButton": "Modifier",
"completionCount": "complété {completions} fois"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Note trop longue",
@@ -434,8 +436,6 @@
"invalidAmountDescription": "Veuillez entrer un nombre positif valide",
"successTitle": "Succès",
"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}."
},
"DrawingModal": {

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "習慣を削除",
"confirmDeleteDialogMessage": "\"{name}\"を削除してもよろしいですか?この操作は元に戻せません。",
"deleteButton": "削除",
"overdueTooltip": "期限超過"
"overdueTooltip": "期限超過",
"emptyAll": "何もする事はありません。"
},
"HabitContextMenuItems": {
"startPomodoro": "ポモドーロを開始",
@@ -322,7 +323,8 @@
"completeButtonCount": "完了({completed}/{target}",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "取り消し",
"editButton": "編集"
"editButton": "編集",
"completionCount": "{completions} 回完了しました"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "メモが長すぎます",
@@ -434,8 +436,6 @@
"invalidAmountDescription": "有効な正の数を入力してください",
"successTitle": "成功しました",
"transactionNotFoundDescription": "取引が見つかりません",
"maxAmountExceededDescription": "金額は{max}を超えることはできません。",
"transactionNotFoundDescription": "取引が見つかりません",
"maxAmountExceededDescription": "金額は{max}を超えることはできません。"
},
"DrawingModal": {

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "습관 삭제",
"confirmDeleteDialogMessage": "정말로 \"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
"deleteButton": "삭제",
"overdueTooltip": "기한이 지남"
"overdueTooltip": "기한이 지남",
"emptyAll": "할 일이 없어요."
},
"HabitContextMenuItems": {
"startPomodoro": "뽀모도로 시작",
@@ -322,7 +323,8 @@
"completeButtonCount": "완료 ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "실행 취소",
"editButton": "수정"
"editButton": "수정",
"completionCount": "{completions}번 완료됨"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "메모가 너무 깁니다",
@@ -430,8 +432,6 @@
"invalidAmountDescription": "유효한 양의 숫자를 입력하세요",
"successTitle": "성공",
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다.",
"transactionNotFoundDescription": "거래를 찾을 수 없습니다",
"maxAmountExceededDescription": "금액은 {max}을(를) 초과할 수 없습니다."
},
"Warning": {

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "Удалить привычку",
"confirmDeleteDialogMessage": "Вы уверены, что хотите удалить \"{name}\"? Это действие нельзя отменить.",
"deleteButton": "Удалить",
"overdueTooltip": "Просрочено"
"overdueTooltip": "Просрочено",
"emptyAll": "Делать нечего."
},
"HabitContextMenuItems": {
"startPomodoro": "Начать помидорку",
@@ -322,7 +323,8 @@
"completeButtonCount": "Выполнить ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "Отменить",
"editButton": "Редактировать"
"editButton": "Редактировать",
"completionCount": "завершено {completions} раз"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "Слишком длинная заметка",
@@ -434,8 +436,6 @@
"invalidAmountDescription": "Пожалуйста, введите положительное число",
"successTitle": "Успех",
"transactionNotFoundDescription": "Транзакция не найдена",
"maxAmountExceededDescription": "Сумма не может превышать {max}.",
"transactionNotFoundDescription": "Транзакция не найдена",
"maxAmountExceededDescription": "Сумма не может превышать {max}."
},
"DrawingModal": {

View File

@@ -48,7 +48,8 @@
"deleteHabitDialogTitle": "删除习惯",
"confirmDeleteDialogMessage": "确定要删除\"{name}\"吗?此操作无法撤消。",
"deleteButton": "删除",
"overdueTooltip": "逾期"
"overdueTooltip": "逾期",
"emptyAll": "无事可做。"
},
"HabitContextMenuItems": {
"startPomodoro": "开始番茄钟",
@@ -322,7 +323,8 @@
"completeButtonCount": "完成 ({completed}/{target})",
"completeButtonCountMobile": "{completed}/{target}",
"undoButton": "撤销",
"editButton": "编辑"
"editButton": "编辑",
"completionCount": "完成 {completions} 次"
},
"TransactionNoteEditor": {
"noteTooLongTitle": "备注太长",
@@ -434,8 +436,6 @@
"invalidAmountDescription": "请输入有效的正数",
"successTitle": "成功",
"transactionNotFoundDescription": "未找到交易记录",
"maxAmountExceededDescription": "金额不能超过 {max}。",
"transactionNotFoundDescription": "未找到交易记录",
"maxAmountExceededDescription": "金额不能超过 {max}。"
},
"DrawingModal": {