Conversation
|
Third commit: scroll to the bottom when a search runs. A chart click already scrolled to the newest results via The search button and the Enter key both route through a single event — Verified: |
|
Fifth commit — and this one is almost certainly the staging bug. The scan had no far sideA page request drops the query's timestamp range so it can page past it, and kept only a one-sided partition bound: WHERE EXTRACT(DATE FROM t0.timestamp) <= '2026-09-14'
AND (t0.timestamp < TIMESTAMP_MICROS(?) OR ...)Nothing bounds the other end, so on BigQuery that reads every partition the source has ever had. On a small table it returns; on a production table it does not. A page now moves by the window you are looking atThe scan is Two consequences, both wanted:
The buttons say what they do
Verification
|
4fa544b to
26ae0c0
Compare
The button drove its spinner from `phx-click-loading`, which LiveView applies
only while the event round trip is in flight. `load_events` hands the query to
`SearchQueryExecutor` and returns immediately, so the spinner stopped in
milliseconds while a BigQuery page query still took seconds.
`EventPagination` now carries a `loading_intent` and a fourth button state,
`:loading`. `load_events` marks the intent, and the page result and page error
handlers clear it. The button renders its spinner from that state. A hidden
button stays hidden, and `disabled={@State != :ready}` already covers
`:loading`, so a second click cannot queue behind the first.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBPF1knvgfghTSdxuYryGL
26ae0c0 to
9332ab7
Compare
Squashes the nine-PR load more stack into one commit: #3976, #3977, #3978, #3979, #3980, #3981, #3982, #3984 and #3986. Merged as a unit so that main never carries the intermediate states that #3984 corrects. Pagination - Keep the "Load more" spinner up until the page query returns. - Bound a page request to the window in view and say so on the button. - Store one page window per search in `EventPagination`. The label, the query, the cursor shift and the range growth all read it. The window no longer doubles on each click. - Set the page window from a tail result too. A soft pause, play and pause used to leave the window nil and drop the next page request. - Write an implied timestamp range into the query on a page request. - Keep a one-sided `t:` bound when a page request makes the range explicit. - Clamp a "next" range extension at now. Each empty click used to push the range max another window into the future. - Cap the cursor of an empty "next" page at the request time. - Remove timestamp clauses that can never match. - Stop hiding the load more buttons on a short page. - Disable the other button while a page request runs. - Drop a page result or page error that no request waits for. - Clear the page spinner when a search fails to parse. - Log a page request that the LiveView drops. Scrolling - The LiveView drives every scroll. Every initial event page and every tail append pushes `scroll-to-bottom`. The server owns scroll intent. The hook owns viewport stability. Cleanup - Remove the unused sentinel row: the extra fetched row, `fetch_limit/0` and the `has_more?` field that nothing reads. - Build the chart range in the search timezone. An implied range is no longer UTC written as local time. - Remove the 750ms LiveView latency simulator in dev. Tests - Cover event pagination against a bigquery source and a postgres source. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Stack 1/7 — "Load more" pagination fixes.
phx-click-loadingcovers only the event round trip. The query runs async.EventPaginationgets a:loadingbutton state.load_eventssets it. The page result and the page error clear it.🤖 Generated with Claude Code
https://claude.ai/code/session_01YBPF1knvgfghTSdxuYryGL