Commit graph

353 commits

Author SHA1 Message Date
Chris
e80847b01f
Fix project name overflow and add 6-word validation limit (#972)
* Fix project name overflow and add validation

This commit addresses issue #971 by implementing both UI fixes and
validation to prevent excessively long project names.

Changes:
1. Add word-break and line-clamp to ProjectBanner.tsx to handle
   overflow gracefully with line-clamp-3 for names
2. Add frontend validation in ProjectModal.tsx limiting names to
   6 words maximum
3. Add backend validation in project.js model with custom wordCount
   validator
4. Show user-friendly error messages when validation fails

This ensures project names remain concise and UI-friendly while
preventing the extreme overflow cases that were possible before.

Fixes #971

* Add overflow-hidden to make line-clamp work properly

The line-clamp utility requires explicit overflow-hidden to function
correctly. Without it, the text continues to display in full rather
than being truncated with ellipsis.

* Fix line-clamp using inline CSS styles

Tailwind's line-clamp utilities weren't working, so switched to using
inline styles with the standard CSS approach:
- display: -webkit-box
- -webkit-line-clamp: 3
- -webkit-box-orient: vertical

This ensures the text truncation works reliably across browsers.

* Use Tailwind line-clamp utilities (already defined in CSS)

The project already has line-clamp-1/2/3 utilities properly defined
in tailwind.css with all the necessary webkit properties. Simplified
the component to use these existing utilities instead of inline styles.

* Add dedicated CSS classes with !important for line-clamp

Created custom project-name-clamp and project-desc-clamp classes
with !important flags to ensure they override any conflicting styles.
This should finally fix the text truncation issue.

* Use component-scoped styles for line-clamp

Adding inline style tag in the component to ensure the line-clamp
CSS is definitely loaded and applied. This bypasses any potential
issues with external CSS compilation or loading order.

* Change project name line-clamp from 3 to 2 lines

Limiting project name display to 2 lines with ellipsis for better
visual density and cleaner appearance.

* Increase line-height for project name in banner

Added line-height: 1.3 to project name for better readability
and visual spacing between lines.
2026-03-24 17:36:24 +02:00
Chris
402d5b05e1
Fix Today page task completion issues (#970)
* Fix Today page task completion issues

- Fix completed task border color staying as priority color
  - Add isInCompletedSection prop to TaskItem for explicit completed state
  - Tasks in completed section now always show green border regardless of priority
  - Fixes race condition where status wasn't updated during optimistic UI update

- Fix completed task reappearing after unmarking and page refresh
  - Add defensive check in backend to force clear completed_at when status is not DONE
  - Add development logging in tasksService for debugging completion toggle
  - Ensures database state is consistent even if handleCompletionStatus doesn't clear it

- Update TaskList and TasksToday components to pass isInCompletedSection prop
  - Explicitly marks tasks rendered in the completed section
  - Prevents border color flickering during state transitions

* Add comprehensive logging to debug completion issues

* Fix duplicate API requests causing completion state issues

- Separate state update logic from API call in handleTaskUpdate
- Create new updateTaskInState function for state-only updates
- Pass onTaskCompletionToggle to completed section to avoid duplicate calls
- This fixes the persistence issue where unmarked tasks came back after refresh
- Completion toggles now only make ONE API call instead of two

* Add debug logging to updateTaskInState
2026-03-24 16:45:31 +02:00
Chris
22349fb46f
Fix visual overlap between subtasks icon and status dropdown (#958)
* Fix visual overlap between subtasks icon and status dropdown

Increased right padding from pr-44 to pr-48 in TaskHeader desktop view
to prevent the subtasks toggle button from overlapping with the expanded
status dropdown icon.

Fixes #957

* Improve fix for subtasks icon and status dropdown overlap

- Removed flex-1 from task name container to prevent unnecessary expansion
- Wrapped SubtasksToggleButton in flex-shrink-0 div to maintain its width
- Increased right padding from pr-48 to pr-56 for better spacing
- This prevents the subtasks icon from overlapping with the status dropdown

Fixes #957

* Fix subtasks icon placement to be adjacent to task name

Moved SubtasksToggleButton to be directly after the task name within
the same flex container, instead of in a separate container. This positions
the icon immediately next to the task name on the left, rather than being
pushed to the right where it overlaps with the status dropdown.

Fixes #957
2026-03-22 12:12:28 +02:00
Chris
2444e36f47
Fix date format inconsistency in Task detail screen (#956)
* Fix date format inconsistency in Task detail screen (#938)

Replace browser-dependent toLocaleDateString() with explicit country-based
date formatting to ensure consistent date formats based on user's timezone.

Problem:
- User with English language + Greek timezone saw MM/DD/YYYY format
- Expected DD/MM/YYYY format based on timezone/country
- Browser's Intl.DateTimeFormat had incomplete locale support for
  combined locales like "en-GR"

Solution:
- Add country-to-format mapping in dateUtils.ts (60+ countries)
- New formatDateByCountry() for dates (DD/MM/YYYY, MM/DD/YYYY, YYYY/MM/DD)
- New formatDateTimeByCountry() for datetimes with 24h time
- Update TaskDueDateCard and TaskDeferUntilCard to use new functions
- Uses date-fns for consistent cross-browser formatting

Testing:
- Added 40 comprehensive test cases covering all format types
- Verified with Greece (DD/MM), US (MM/DD), Japan (YYYY/MM/DD)
- All tests passing

Fixes #938

* chore: remove unused import in dateUtils.ts
2026-03-21 18:47:33 +02:00
Chris
b63f684190
feat: Add MCP Integration with client-agnostic instructions (#953) 2026-03-20 16:55:49 +02:00
debode
024ef0a522
fix: use getAssetPath() for logo images in Navbar and Login (#946)
Both Navbar.tsx and Login.tsx hardcode absolute paths for the logo
images ('/wide-logo-light.png', '/wide-logo-dark.png'). This breaks
when tududi is served behind a reverse proxy with a subpath, such as
Home Assistant ingress.

The getAssetPath() helper from config/paths already handles base path
detection (including HA ingress auto-detection), and Login.tsx already
uses it for the login graphic. This commit applies the same pattern to
the logo images.

Changes:
- Navbar.tsx: add getAssetPath to import, use it for logo src
- Login.tsx: use getAssetPath for logo src (was already imported)
2026-03-18 15:26:25 +02:00
Chris
f1ea7843a7
Fix date format inconsistency in Defer Until field (#941)
Fixes #938

The Defer Until field was using i18n.language directly instead of
resolveUserLocale(), causing it to display dates in MM/DD/YYYY format
(US default) regardless of timezone setting.

Now uses the same locale resolution pattern as the Due Date field,
which combines language with timezone-derived country code (e.g.,
"en" + Greek timezone → "en-GR" → DD/MM/YYYY format).

Changes:
- Import useMemo and resolveUserLocale
- Add displayLocale memo to resolve timezone-aware locale
- Use displayLocale instead of i18n.language in toLocaleString()
2026-03-14 08:04:00 +02:00
Chris
23131d686a
Fix sidebar toggle causing unnecessary task list reload (#888) (#937)
Remove isSidebarOpen from the useEffect dependency array and from the
API request parameters in Tasks.tsx. The sidebar visibility state has no
bearing on which tasks should be fetched, so toggling it should not
trigger a data re-fetch.
2026-03-10 18:37:07 +02:00
Chris
1a1b70b5e7
Fix subtask completion not persisting to backend (#920) (#936)
The toggle handler required onSubtaskUpdate callback to make the API
call, but TaskSubtasksCard never provided it. Extract a shared handler
that calls toggleTaskCompletion for persisted subtasks regardless of
whether onSubtaskUpdate is provided, falling back to updating local
state via onSubtasksChange.
2026-03-10 17:30:45 +02:00
Chris
c33682bac0
Fix subtask completion not persisting when onSubtaskUpdate is not provided (#920) (#932)
When toggling subtask completion in TaskSubtasksSection, the toggle handler
required onSubtaskUpdate callback to make the API call. Components like
TaskSubtasksCard don't pass this callback, so toggling fell through to the
local-only state update path, never sending a network request.

Add an intermediate code path: when the subtask is persisted but
onSubtaskUpdate is not provided, call toggleTaskCompletion() directly
to persist the change, then update local state.

Fixes #920
2026-03-10 17:23:29 +02:00
Chris
a01dd9f41c
Fix subtask icons invisible on Today page (#839) (#935)
The SubtasksToggleButton was placed inside the same flex container as
the task name with truncate, causing it to be squeezed to zero width.
Wrap the task name in an inner flex container (matching the upcoming
view layout) so the button stays visible.
2026-03-10 17:15:06 +02:00
Chris
45ea578393
Fix tag view showing completed projects when Open filter is active (#933) (#934) 2026-03-10 17:07:45 +02:00
Chris
8fea7020bb
Fix: Show Projects with due dates in Upcoming view (#928)
* Add projects with due dates to upcoming view

Fetch and include projects with due_date_at in the upcoming range
when type=upcoming is requested. Projects are filtered by ownership
or permissions and exclude completed/archived projects.

Part of #925

* Display upcoming projects in Upcoming view

Add UI to show projects with due dates in the Upcoming view.
Projects are displayed in a separate section below tasks with
links to project details and formatted due dates.

Fixes #925

* Fix prettier formatting errors
2026-03-09 23:36:14 +02:00
Chris
9f61bbbb21
Fix date format to respect timezone preference, not just language (#898) (#916)
Date fields in the task edit page used i18n.language (e.g. "en") to
determine date format, giving MM/DD for English even when the user's
timezone indicates a DD/MM region (e.g. Europe/Athens).

Enhance resolveUserLocale to derive the country from the user's
timezone and combine it with the language (e.g. "en" + "GR" = "en-GR")
so date formatting follows regional conventions.
2026-03-06 15:44:15 +02:00
Chris
aa686702e9
Fix defer date validation for recurring task instances (#910)
* Fix defer date validation for recurring task instances

* fixup! Fix defer date validation for recurring task instances
2026-03-05 08:20:30 +02:00
Chris
0bde44e460
Fix task name not being saved for new tasks (#905) 2026-03-04 18:13:37 +02:00
Chris
74d2027d17
Introduce focus mode in notes (#891) 2026-03-03 00:29:03 +02:00
Chris
b81abd9bfe
Fix abandoned 'New Task' persisting when navigating away without changes (#889) 2026-03-02 18:28:54 +02:00
Chris
a80e9b5aba
Fix redirect after task deletion to return to originating view (#887) 2026-03-01 16:07:02 +02:00
Chris
96db8c1362
Fix 819 (#869)
* Fix projects order persist to localstorage

* Fix tags page not showing completed tasks
2026-02-27 01:07:08 +02:00
Chris
1167a3a940
Fix projects order persist to localstorage (#868) 2026-02-27 00:35:44 +02:00
Chris
0146b87a4b
Fix status dropdown z-index behind subtasks in project view (#866) 2026-02-26 19:53:59 +02:00
Chris
6e3b1b4099
Fix tag validation error messages not shown to user (#861) 2026-02-24 14:49:49 +02:00
Chris
a0cd6db1a2
Fix Sunday selection in monthly weekday recurrence (#859) 2026-02-24 13:46:48 +02:00
Chris
9c3f0fe851
Fix new task in mobile (#857) 2026-02-24 13:03:38 +02:00
Chris
d127070f76
Auto focus on new task (#856)
* Auto focus on new task

* fixup! Auto focus on new task
2026-02-24 12:28:19 +02:00
Chris
8bc93247d7
Fix timezone missed rollout (#832) 2026-02-10 22:28:14 +02:00
Chris
d5d8b8f1a7
Fix date comparison bugs causing false past due warnings and Today view miscategorization (#826) 2026-02-07 22:40:33 +02:00
Chris
3ee54dbdc7
Fix an issue with breaking inbox input on long strings (#823) 2026-02-07 09:03:13 +02:00
Chris
f562101ca5
Fix subtasks dissapearing issue (#811) 2026-02-01 14:16:04 +02:00
Chris
2f13d0d4a7
Fix saving subtasks on edit (#806) 2026-01-31 08:29:44 +02:00
Chris Veleris
bdc33d3113 Fix project links in productivity assistant 2026-01-23 23:25:08 +02:00
Chris
6922bc8916
Set stalled projects active without tasks (#793) 2026-01-23 23:06:35 +02:00
Chris
5dbf12be98
Fix task detail status change (#789) 2026-01-22 18:53:46 +02:00
Chris
1369fc4849
Fix issue with dropdown spilling over (#788) 2026-01-22 17:48:50 +02:00
Chris
8ceae37785
Fix missing spacing between lists and headings in markdown (#775) 2026-01-14 17:42:26 +02:00
Chris
438b08720c
Fix long timeout in bookmark note creation (#767) 2026-01-07 19:08:28 +02:00
Chris
b4de9c23eb
Fix recurrence occurences (#750) 2025-12-29 12:13:08 +02:00
Chris
703f6fe506
Add custom keyboard shortcuts (#749)
* Add custom keyboard shortcuts

* fixup! Add custom keyboard shortcuts
2025-12-28 21:58:21 +02:00
Chris
8c839199e1
Add completed date (#747) 2025-12-28 18:40:58 +02:00
Chris
e71f5caf33
Fix note edit delete buttons (#746) 2025-12-28 18:17:29 +02:00
Chris
3f37113a2c
Add tooltips (#744) 2025-12-28 12:03:50 +02:00
Chris
2c68643dce
Fix Today page sorting not updating after priority change (#743) 2025-12-28 11:03:54 +02:00
Chris
628c532a07
Fix midnight UTC default date (#742) 2025-12-28 10:33:42 +02:00
Chris
21b797c1ad
Fix tags order (#741) 2025-12-28 10:13:03 +02:00
Chris
d51fb021b1
Fix style in metrics (#740) 2025-12-28 08:50:08 +02:00
Chris
eee1bbc013
Fix bug 722 (#737)
* Fix project statuses

* Refactor project states

* Add translations
2025-12-28 07:51:15 +02:00
Chris
e73c354e7e
Fix bug 733 (#735)
* Refactor today

* fixup! Refactor today

* fixup! fixup! Refactor today
2025-12-27 21:00:52 +02:00
Chris
ad8ab3ec72
Fix refactor pt2 (#734)
* Cleanup task routes

* Cleanup frontend tasks

* Clean tasks

* Cleanup project uid

* Cleanup quick capture old modal

* Cleanup taskmodal

* Move all icons to shared components

* Test inbox flow

* fixup! Test inbox flow
2025-12-27 17:46:34 +02:00
Chris
b6ecdbec90
Fix recur instance done (#727)
* Fix recur instance done

* Fix completed not showing
2025-12-19 17:37:04 +02:00