Преглед изворни кода

Merge pull request #373 from alvinunreal/fix/371-interview-scroll-to-top

feat: auto-scroll to top when submitting interview answers
Alvin пре 3 месеци
родитељ
комит
a037d57bca
2 измењених фајлова са 16 додато и 0 уклоњено
  1. 11 0
      src/interview/interview.test.ts
  2. 5 0
      src/interview/ui.ts

+ 11 - 0
src/interview/interview.test.ts

@@ -1610,6 +1610,17 @@ describe('renderInterviewPage', () => {
     expect(html).toContain('<svg');
     expect(html).not.toContain('https://ohmyopencodeslim.com');
   });
+
+  test('includes smooth scroll-to-top behavior in the submit handler', () => {
+    const html = renderInterviewPage('scroll-test', 'scroll-test');
+
+    expect(html).toContain('function scrollToTop()');
+    expect(html).toContain(
+      "window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });",
+    );
+    expect(html).toContain('overlayText.textContent = "Submitting Answers...";');
+    expect(html).toContain('scrollToTop();');
+  });
 });
 
 /** Discover a free port by briefly binding to port 0, then closing. */

+ 5 - 0
src/interview/ui.ts

@@ -1390,6 +1390,10 @@ export function renderInterviewPage(
         render(data);
       }
 
+      function scrollToTop() {
+        window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });
+      }
+
       document.getElementById('submitButton').addEventListener('click', async () => {
         if (!state.data) return;
         const answers = (state.data.questions || []).map((question) => {
@@ -1403,6 +1407,7 @@ export function renderInterviewPage(
         const overlayText = document.getElementById('loadingText');
         overlay.classList.add('active');
         overlayText.textContent = "Submitting Answers...";
+        scrollToTop();
 
         try {
           const response = await fetch('/api/interviews/' + encodeURIComponent(interviewId) + '/answers', {