Skip to content

[7874] Frontend: team dashboards nav entry + view#7894

Open
n-lark wants to merge 8 commits into
mainfrom
7874-team-dashboards
Open

[7874] Frontend: team dashboards nav entry + view#7894
n-lark wants to merge 8 commits into
mainfrom
7874-team-dashboards

Conversation

@n-lark

@n-lark n-lark commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Description

Adds a team-level Dashboards view, a nav entry and list of all the team's hosted-instance dashboards, each opening in an embedded immersive viewer with a drawer switcher. Gated behind the EMBEDDED_DASHBOARD_ENABLED flag.

See test plan: #7874 (comment)

Related Issue(s)

Resolves #7874

Checklist

  • I have read the contribution guidelines
  • Suitable unit/system level tests have been added and they pass
  • Documentation has been updated
    • Upgrade instructions
    • Configuration details
    • Concepts
  • Changes flowforge.yml?
    • Issue/PR raised on FlowFuse/helm to update ConfigMap Template
    • Issue/PR raised on FlowFuse/CloudProject to update values for Staging/Production
  • Link to Changelog Entry PR, or note why one is not needed.

Labels

  • Includes a DB migration? -> add the area:migration label

@n-lark n-lark self-assigned this Jul 21, 2026
</template>
</EmptyState>
<iframe v-else :src="dashboardURL" />
<iframe v-else :src="dashboardURL" :style="{ pointerEvents: disableEvents ? 'none' : 'auto' }" />

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is so the resize can work for the drawer.

.then(({ default: ExpertPanel }) => drawersStore.openRightDrawer({
component: markRaw(ExpertPanel),
header: { title: 'Expert' }
}))

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I know this is sus but we do the same thing below 🔪

@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.64%. Comparing base (382cc9b) to head (51b32ae).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #7894   +/-   ##
=======================================
  Coverage   75.64%   75.64%           
=======================================
  Files         432      432           
  Lines       23079    23081    +2     
  Branches     6122     6122           
=======================================
+ Hits        17457    17459    +2     
  Misses       5622     5622           
Flag Coverage Δ
backend 75.64% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

<template v-else-if="!canAccessTeam">
<TeamInstances :dashboard-role-only="true" />
<TeamDashboards v-if="isEmbeddedDashboardEnabled" />
<TeamInstances v-else :dashboard-role-only="true" />

@n-lark n-lark Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I added a follow up to scale down <TeamInstances /> once the FF is off here since this is the only place that uses :dashboard-role-only="true" .

@n-lark
n-lark force-pushed the 7874-team-dashboards branch from 51b32ae to f7b8497 Compare July 22, 2026 13:30
@n-lark
n-lark changed the base branch from main to 7827-immersive-refactor July 22, 2026 13:31
Base automatically changed from 7827-immersive-refactor to main July 23, 2026 09:15

@cstns cstns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

We should guard against this and show the empty state container when the instance is running but the dashboard itself isn't.

Scenario: I tried to access the dashboard of an instance that had started but wasn't fully running. The logs showed it stuck waiting for missing node types:

23/07/2026 12:35:18  [info]    Waiting for missing types to be registered:
23/07/2026 12:35:18  [info]     - mcp-server
23/07/2026 12:35:18  [info]     - mcp-prompt
23/07/2026 12:35:18  [info]     - mcp-resource
23/07/2026 12:35:18  [info]     - mcp-response
23/07/2026 12:35:18  [info]     - mcp-tool
23/07/2026 12:36:06  [info]    FlowFuse Expert is Loading Advanced Completions...
23/07/2026 12:36:07  [info]    FlowFuse Expert Completions Loaded

How I got here: I had installed the MCP server nodes and deployed a flow using them. Later, the nodes were removed (I unlinked my npm dependencies), which left the instance in this awkward state: started, but with unregistered types blocking the dashboard.

Admittedly this is an edge case, but the current behavior gives no useful feedback to the user, so showing the empty state would be a clear improvement.

Image

@cstns cstns left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Image Image

The empty state component uses the .well type styling, but it's currently missing padding. The content sits too close to the container edges. Compare with the "Edge Devices" empty state (screenshot 1), where the well has comfortable breathing room around the illustration, heading, and CTA. We should match that spacing here so the two empty states feel consistent.

Additionally, the containing element should stretch to 100% height. Right now the well only wraps its content, which leaves the grey area exposed below it (visible in screenshot 2 under the "Dashboard not available" message). Stretching the container to fill the available vertical space, and ideally vertically centering the empty state content within it like the Edge Devices example does, would eliminate the grey strip and make the page feel intentional rather than half-rendered.

NB:
I'll fix my work as well for the instance dashboard view as I made the same mistake on my end

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.

Frontend: team dashboards nav entry + view

2 participants