Commit ef2519a
feat(stream): add search, date range and account filters to the stream
Adds three optional restrictions to the activity stream, exposed both on
the v2 API and in the app UI:
- `search` matches the activity's file path, case insensitively
- `from`/`to` bound the stream by an inclusive Unix timestamp range
- `actor` restricts it to activities authored by one account
Backend: validation and normalisation live in a new immutable
SearchCriteria value object, so the query builder only ever sees range
checked input. Invalid criteria return 400 rather than running a query
that cannot answer them. A date range is served by the existing
activity_user_time index and an actor by activity_filter_by, so both stay
index-ordered; the substring search stays bounded because every stream
query is already anchored to a single affecteduser. The active criteria
are carried into the pagination Link header so the next page does not
silently widen back to the unfiltered stream.
Frontend: a filter bar above the feed with a debounced search field, an
account picker built from the accounts seen so far, and date range
presets alongside a custom range. The criteria are mirrored into the URL
so a filtered view can be bookmarked and shared, and the feed grows a
filter specific empty state that can clear them again.
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent 932d60e commit ef2519a
50 files changed
Lines changed: 2131 additions & 169 deletions
File tree
- docs
- js
- lib
- Controller
- Exception
- src
- __tests__
- components
- models
- utils
- views
- tests
- Controller
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
52 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
53 | 89 | | |
54 | 90 | | |
55 | 91 | | |
| |||
58 | 94 | | |
59 | 95 | | |
60 | 96 | | |
| 97 | + | |
61 | 98 | | |
62 | 99 | | |
63 | 100 | | |
| |||
Lines changed: 87 additions & 0 deletions
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
27 | 34 | | |
28 | 35 | | |
29 | 36 | | |
| |||
Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 0 additions & 87 deletions
This file was deleted.
Lines changed: 0 additions & 1 deletion
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
This file was deleted.
0 commit comments