Skip to content

Instructor-dashboard tab of FeedbackXBlock no longer works with Verawood #62

Open

Description

@mboisson

With Verawood's new frontend-base instructor-dashboard, the instructions to add the Feedback tab to the instructor dashboard no longer work.

See https://discuss.openedx.org/t/course-feedback-instructor-view-no-longer-visible-with-new-instructor-dashboard/19282/2

Activity

  1. changed the title [-]FeedbackXBlock no longer works with Verawood[/-] [+]Instructor-dashboard tab of FeedbackXBlock no longer works with Verawood[/+] on Aug 20, 2026
  2. mboisson commented on Aug 20, 2026

    @mboisson
    Author

    @farhan any idea on this ?

  3. moved this to 🔖 Ready in Aximprovements Teamon Aug 24, 2026
  4. farhan commented on Aug 24, 2026

    @farhan
    Contributor

    @mboisson Thanks for the heads-up, we'll look into it.

    For context, here are a couple of earlier related PRs:

  5. farhan commented on Aug 28, 2026

    @farhan
    Contributor
  6. feanil commented on Sep 1, 2026

    @feanil
    Contributor

    It looks like Salman is doing an initial review. Please let me know if you need me to review it specifically or otherwise need help landing this.

  7. farhan commented on Sep 1, 2026

    @farhan
    Contributor

    @feanil Actually it's just agnatically created PR, we paused working on it for now.
    Let us know if this is the priority over modernization work
    It needs architectural learning curve to evaluate and review the code.

  8. moved this from 🔖 Ready to 📋 Backlog in Aximprovements Teamon Sep 2, 2026
  9. mboisson commented on Sep 28, 2026

    @mboisson
    Author

    any update on this ?

  10. farhan commented on Sep 29, 2026

    @farhan
    Contributor

    @mboisson aximprovements team didn't prioritize it yet

    feel free to take over the PR, it also needs work on the FE side

  11. mboisson commented on Sep 29, 2026

    @mboisson
    Author

    For what it's worth, I tried #75, and while I may be missing something, it still did not add the tab back in the instructor dashboard.

  12. mboisson commented on Oct 13, 2026

    @mboisson
    Author

    I managed to modify the PR and add the Course Feedback tab. However, it tries to load instructor-dashboard/<course ID>/feedback (because the URL was hardcoded by gemini) here main...calculquebec:xblocks-extra:fix_for_verawood#diff-3a72514214068cc20b07ac5179a31608e90e8fa5e0dbd046427693a36a789b1eR73
    which returns a page not found in the inside page.

    Any idea what would be the correct URL to load ?

  13. mboisson commented on Oct 13, 2026

    @mboisson
    Author

    Here is the Gemini analysis for why the URL isn't working
    ▸ Thought for 22s, 2.6k tokens
    The generated URL is indeed correct, following the expected pattern for instructor dashboard tabs. The "Page Not Found" error arises because the "feedback" tab lacks a corresponding route registration within the frontend application. This is because the tab isn't defined in defaultTabs or registered through the slot widget mechanism.
    Yes, the URL in xblocks-extra is:

    "url": f"/instructor-dashboard/{course_key}/{FEEDBACK_TAB_ID}"
    # => /instructor-dashboard/course-v1:CQ+CIP101+v1/feedback
    

    1. Is the URL format correct?

    Yes. This matches how core Open edX tabs construct their URLs in serializers_v2.py:

    • _build_tab_url('INSTRUCTOR_MICROFRONTEND_URL', course_key, 'grading') produces /instructor-dashboard/{course_key}/grading
    • cohorts produces /instructor-dashboard/{course_key}/cohorts
    • feedback produces /instructor-dashboard/{course_key}/feedback

    2. Why does it result in "Page Not Found"?

    In frontend-app-instructor-dashboard (routes.tsx:35-49), routing is handled entirely client-side by React Router:

    const TabContent = () => {
      const { tabId } = useParams<{ tabId: string }>();
      const routeWidgets = useWidgetProps('org.openedx.frontend.slot.instructorDashboard.routes.v1') as InstructorRouteProps[];
    
      const tabRoutes = [
        ...defaultTabs.filter(
          defaultTab => !routeWidgets.some(slotTab => slotTab.tabId === defaultTab.tabId)
        ),
        ...routeWidgets
      ];
    
      const foundTab = tabRoutes.find(tab => tab.tabId === tabId);
    
      return foundTab ? foundTab.content : <PageNotFound />;
    };
    

    When you click the tab:

    1. tabId is "feedback".
    2. defaultTabs only contains core tabs (course_info, enrollments, grading, cohorts, etc.).
    3. routeWidgets contains tabs registered into the slot org.openedx.frontend.slot.instructorDashboard.routes.v1.
    4. Because feedback has no frontend widget registered in routeWidgets and is not in defaultTabs, foundTab is undefined, and it renders .

    3. Confirmation in the git history

    This is confirmed by the commit in xblocks-extra that originally introduced this filter (0c09016):

    │ "feat: add Course Feedback tab to new instructor dashboard
    │
    │ Part 1 of 2: this adds the tab entry; rendering its content still requires a frontend route component registered in the org.openedx.frontend.slot.instructorDashboard.routes.v1 slot (follow-up)."

    4. Could the URL point to a legacy page instead?

    If the URL was intended to point to a legacy Django page:

    • In InstructorNav.tsx:71-82, any URL starting with / (const isInternal = tab.url.startsWith('/')) is intercepted by React Router , which fails if not handled inside the MFE.
    • Even if given an absolute URL (https://...), the legacy instructor dashboard endpoint in Verawood (instructor_dashboard_2) redirects back to the MFE unless the instructor.legacy_instructor_dashboard waffle flag is explicitly enabled.

    The URL in xblocks-extra is the expected MFE route, but the frontend route slot registration for feedback is missing.

  14. mboisson commented on Oct 13, 2026

    @mboisson
    Author

    Ok, I managed to implement the new tab. I used
    f7a1f18

    but I also had to inject a custom app to render the page, which I did through a plugin:
    calculquebec/tutor-plugins@25e30a1

    I am not sure how to combine the two into xblocks-extra, but hopefully this is useful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions