Conversation
added 6 commits
September 26, 2026 00:26
Overhaul of the chore scheduling UI and model: - Unified schedule form (ChoreScheduleFields): repeat mode, interval, one-time and event-driven schedules in a single editor - Repeat-after-completion modes (until-completed / once-completed) with automatic child schedule generation - Calendar-event-driven chores: a schedule can trigger when a calendar event title matches a keyword (calendar_match), with a matched-today indicator in the admin table - Multi-user assignment: create the same schedule for several users at once; all-users option on the widget quick-add - Custom emoji icons per chore (ChoreIconPicker, choreIcons registry) - Consolidated schedule fields and clearer next-occurrence labels (choreScheduleUtils) - One-time schedules with a future due date stay hidden until that date - Schema 27 migration adds the calendar_match column - Server: schedule CRUD validates and stores the new fields; bulk creation writes all columns including calendar_match; deleting a chore cascades to its schedules Note: the schedule admin table is rebuilt here and does not yet include the sortable headers from upstream jherforth#183; re-applying that sort on the new table structure is left as a follow-up.
- Register the schema 27 migration (calendar_match column) - Deleting a chore cascades to its schedules - GET /api/chore-schedules filters future-dated one-time schedules and supports the new duration modes - POST /api/chore-schedules validates the new fields (interval for once-completed, crontab parsing, parent schedule references) and stores calendar_match - POST /api/chore-schedules/bulk creates per-user schedules including calendar_match (fixes a column/placeholder mismatch that made every bulk create fail) - PATCH /api/chore-schedules/:id accepts the new fields including calendar_match - getTodaysRegularChoresForUser hides future-dated one-time schedules
All-day events are cached as UTC midnight. The calendar-match query converted start_time with 'localtime', which shifts all-day events to the previous day on servers behind UTC, so event-driven chores appeared a day early and were missing on the actual event day. Compare the UTC date directly for all-day events; timed events keep the localtime conversion.
The match pill already tinted green on a match, but the signal was too subtle to diagnose a non-matching keyword (e.g. a typo like Columbia vs Colombia). Show an explicit check/cross suffix and a tooltip explaining what a miss means.
The calendar-match example read 'Columbia - Practice', and the typo got copied into a real schedule keyword that then failed to match the 'Colombia ...' calendar events. Use neutral, correctly spelled examples.
…edule UI The scheduling overhaul dropped the sortable column headers that upstream PR jherforth#183 added to the chore definitions and schedule tables. Re-port them onto the new tables: Title/Clams/Schedules sort on the definitions table; Chore/Assigned To/Next Occurrence/Clams on the schedule table. Pickers keep their own alphabetical order. Next Occurrence sorts on the parsed instant via a new nextOccurrenceAt() helper (label and key share one parse, as upstream did). Calendar-driven schedules sort as 'today' when an event matches, otherwise last with one-time and unparseable rows.
Author
|
Closing for now — I'll re-open after testing the branch locally. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Overhauls chore scheduling in the Admin Panel (schema 27):
calendar_match). The chore becomes due at the event start and stays visible all day.Columbiavs the event'sColombia— is visible at a glance.Bug fixes included
localtimeshifted UTC-midnight events to the previous date). All-day events now comparedate(start_time)directly.PATCH /api/chore-schedules/:idsilently droppedcalendar_matchedits; the field is now accepted and persisted (this also fixes the bulk-insert column/placeholder mismatch found during review).Testing
nextOccurrenceAtsort key).America/Los_Angeles: old query found 0 events for the intended day, new query found 1.Notes