Skip to content

feat: Prevent full-page loading state during background refetch - #264

Merged
JoachimLK merged 3 commits into
mainfrom
fix/pipeline-search-focus-loss
Aug 9, 2026
Merged

feat: Prevent full-page loading state during background refetch#264
JoachimLK merged 3 commits into
mainfrom
fix/pipeline-search-focus-loss

Conversation

@JoachimLK

@JoachimLK JoachimLK commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Update the loading logic to only display a full-page spinner on initial load. Subsequent fetches (searching, filtering, or sorting) now preserve the existing UI and display a subtle inline indicator to prevent focus loss and layout shifts.

Summary

  • What does this PR change?
  • Why is this needed?

PR title must follow Conventional Commits — e.g. feat(jobs): add bulk import or fix: handle null salary. The squash-merged title is what release-please uses to generate the changelog and pick the next version. PRs with non-conventional titles are blocked by CI.

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Chore

Validation

  • I tested locally
  • I added/updated relevant documentation
  • I verified multi-tenant scoping and auth behavior for affected API paths

DCO

  • All commits in this PR are signed off (Signed-off-by) via git commit -s

Summary by CodeRabbit

  • Bug Fixes
    • Preserved existing job and candidate data while searches, sorting, filtering, and stage changes refresh results.
    • Added clearer background refresh feedback with an inline spinner and subtle list fading.
    • Prevented error messages from replacing valid, previously loaded content during refreshes.

Update the loading logic to only display a full-page spinner on initial
load. Subsequent fetches (searching, filtering, or sorting) now preserve
the existing UI and display a subtle inline indicator to prevent focus
loss and layout shifts.
@railway-app

railway-app Bot commented Aug 8, 2026

Copy link
Copy Markdown

🚅 Deployed to the reqcore-pr-264 environment in applirank

Service Status Web Updated (UTC)
applirank ✅ Success (View Logs) Aug 8, 2026 at 7:31 pm

@railway-app
railway-app Bot temporarily deployed to applirank / reqcore-pr-264 August 8, 2026 18:30 Destroyed
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@JoachimLK, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 1 minute

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c2224d72-00ef-4d4a-b62a-cbae394d66eb

📥 Commits

Reviewing files that changed from the base of the PR and between 583c39d and d803e41.

📒 Files selected for processing (7)
  • app/pages/dashboard/jobs/[id]/index.vue
  • ee/app/components/CandidateMessagingPanel.vue
  • server/scripts/seed-data/automation.ts
  • server/scripts/seed-data/top-applications.ts
  • server/scripts/seed.ts
  • tests/unit/demo-automation-seed.test.ts
  • tests/unit/demo-top-applications-seed.test.ts
📝 Walkthrough

Walkthrough

The dashboard now distinguishes initial loading from background application refetches. Existing data remains visible during searches, sorting, filtering, and stage changes. Refreshes show an inline spinner and a faded candidate list.

Changes

Application refresh handling

Layer / File(s) Summary
Loading and candidate refresh states
app/pages/dashboard/jobs/[id]/index.vue
Initial loading now applies only when data is unavailable. Refetch errors do not replace existing data. The candidate count bar shows a spinner, and the candidate list fades during refreshes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • reqcore-inc/reqcore#47: Introduced the job application search, sorting, filtering, and stage-change behavior refined here.
  • reqcore-inc/reqcore#244: Modified the pipeline dashboard loading, refetch, and error-state behavior.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the change, but the Summary template remains unfilled and all Type, Validation, and DCO items are unchecked. Complete the Summary section, select the change type, record validation results, and confirm the DCO status.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change and follows the Conventional Commits format.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/pipeline-search-focus-loss

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/pages/dashboard/jobs/`[id]/index.vue:
- Line 1458: Update the dashboard error-rendering logic around the job error
condition so appError is surfaced even when appData remains available. Keep the
existing candidate content mounted for stale data, and add a non-blocking error
message with a retry action for failed background search, filter, sort, or stage
requests, reusing the page’s existing retry mechanism.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9a02e7d9-a8ca-42f6-bdde-73b115d79862

📥 Commits

Reviewing files that changed from the base of the PR and between cb38fdc and 583c39d.

📒 Files selected for processing (1)
  • app/pages/dashboard/jobs/[id]/index.vue

<!-- Error -->
<div
v-else-if="jobError || appError"
v-else-if="(jobError && !jobData) || (appError && !appData)"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Surface failed background refetches without hiding stale data.

When appError exists and appData is still present, this condition is false. The previous candidate list remains visible with no error or retry action. After a failed search, filter, sort, or stage request, the controls can describe data that was not loaded. A user can act on stale candidates without knowing the refresh failed.

Keep the previous content mounted, but show a non-blocking error message with a retry action when appError && appData.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/pages/dashboard/jobs/`[id]/index.vue at line 1458, Update the dashboard
error-rendering logic around the job error condition so appError is surfaced
even when appData remains available. Keep the existing candidate content mounted
for stale data, and add a non-blocking error message with a retry action for
failed background search, filter, sort, or stage requests, reusing the page’s
existing retry mechanism.

- Extract job-specific questions and automation rules into dedicated
  configuration files.
- Extend automation coverage to include all five demo jobs.
- Update seed script to utilize the centralized automation data.
- Add unit tests to validate rule integrity, question references, and
  trigger conditions.
@railway-app
railway-app Bot temporarily deployed to applirank / reqcore-pr-264 August 8, 2026 18:39 Destroyed
- Retain previous candidate detail in view during navigation to prevent
  layout tearing, replacing the skeleton with a dimming effect.
- Cache conversation previews in the messaging panel to show content
  immediately upon candidate selection.
- Limit demo database to top 3 applications per pipeline status to
  reduce seed size and focus on relevant records.
@railway-app
railway-app Bot temporarily deployed to applirank / reqcore-pr-264 August 8, 2026 19:28 Destroyed
@JoachimLK
JoachimLK merged commit a648803 into main Aug 9, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant