feat(web): board and calendar views, saved filters and label pages
The board is one column per section with native drag-and-drop, which works with a trackpad, a mouse and a screen reader without any of them being reimplemented. Dropping is optimistic: a card that snaps back for 200ms reads as a failed drop. Weeks in the calendar start on Monday. That is ISO 8601 and what every Danish calendar does; a Sunday-first grid makes a Dane misread the month at a glance. On a phone the chips give way to coloured bars — at that width the month's shape is the useful part, not the titles. Label pages run the filter language rather than a bespoke endpoint, so a label page and a saved filter can never disagree about what a label selects. fix(recurrence): "hver mandag", not "hver uge mandag" A weekly rule that names its days does not also need the word for the interval. That is how the phrase is said, and it is what the parser accepts back — the round trip through Describe now holds for weekday rules too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7e4c730049
commit
0ee72d399c
@@ -150,6 +150,31 @@ export const api = {
|
||||
quickAddPreview: (text, signal) =>
|
||||
get(`/tasks/quick-add/preview?text=${encodeURIComponent(text)}`, { signal }),
|
||||
|
||||
// --- filters and labels
|
||||
listFilters: () => get('/filters'),
|
||||
createFilter: (data) => post('/filters', data),
|
||||
updateFilter: (id, data) => patch(`/filters/${id}`, data),
|
||||
deleteFilter: (id) => del(`/filters/${id}`),
|
||||
runFilter: (id) => get(`/filters/${id}/tasks`),
|
||||
previewFilter: (query) => get(`/filters/preview?query=${encodeURIComponent(query)}`),
|
||||
|
||||
listLabels: () => get('/labels'),
|
||||
createLabel: (name) => post('/labels', { name }),
|
||||
deleteLabel: (id) => del(`/labels/${id}`),
|
||||
|
||||
// --- reminders, feed and templates
|
||||
listReminders: (taskId) => get(`/tasks/${taskId}/reminders`),
|
||||
createReminder: (taskId, data) => post(`/tasks/${taskId}/reminders`, data),
|
||||
deleteReminder: (id) => del(`/reminders/${id}`),
|
||||
|
||||
feed: () => get('/feed'),
|
||||
rotateFeed: () => post('/feed/rotate'),
|
||||
|
||||
listTemplates: () => get('/templates'),
|
||||
saveTemplate: (data) => post('/templates', data),
|
||||
useTemplate: (id, data) => post(`/templates/${id}/use`, data),
|
||||
deleteTemplate: (id) => del(`/templates/${id}`),
|
||||
|
||||
// --- views
|
||||
today: () => get('/today'),
|
||||
upcoming: (days) => get(`/upcoming${days ? `?days=${days}` : ''}`),
|
||||
|
||||
Reference in New Issue
Block a user