Skip to content

feat(dashboard): team overview at /manage/<team>/overview - #351

Merged
harshtandiya merged 3 commits into
developfrom
version-2-dashboard-team-overview
Aug 19, 2026
Merged

feat(dashboard): team overview at /manage/<team>/overview#351
harshtandiya merged 3 commits into
developfrom
version-2-dashboard-team-overview

Conversation

@harshtandiya

@harshtandiya harshtandiya commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

What changed

First slice of the team section: a real page at /manage/team/overview, plus the header
and routing the rest of the team pages hang off.

The active team is ambient state, not a path segmentdata/teams holds the selection
in localStorage and every team-scoped page reads it, so paths are fixed and switching teams
re-reads the open page. This follows frappe/central, where the console keeps the active
team in useSession and routes stay flat (/servers, /team/members).

  • APIbuzz.api.teams.get_team_overview(team) returns the team and its enabled
    members. Membership is the authorization and the query reads past permissions, same as
    get_my_teams: Buzz Team is readable by Event Manager only, but a Frontdesk or Viewer
    member still works inside the team. An unknown team raises NotATeamMember, not a
    not-found, so a non-member can't probe team ids.
  • Dataget_team_overview moves off createResource onto useCall with the
    selected team as reactive params. useTeamOverview() owns the watcher rather than the
    module, so only the pages that read one issue a request, and the page owns its first
    fetch (so loading is true before it paints).
  • Page — hero (logo, name, slug, Settings), up to three upcoming events with a fade and
    a "See all events" link, member avatars alongside. Events are filtered out of the
    get_my_events feed via useMyEvents() in the new data/events.ts; no second endpoint.
    MyEvents.vue now shares that fetcher instead of declaring its own.
  • Header — pages declare their own via frappe-ui's PageHeader. The target sits in
    ManagerLayout rather than DesktopShell's, so it renders inside the rounded panel (the
    registry is a stack, last target wins). The panel owns its scroll, hence scroll=false.

Gotchas:

Demo

image

Testing

  • bench --site testbuzz.localhost run-tests --module buzz.api.teams.test_teams — 9/9,
    covering member-only access, enabled-members filtering and the NotATeamMember refusal.
  • yarn typecheck clean at every branch tip in the stack; yarn test:unit (93) and
    yarn build clean.
  • buzz.localhost can't run tests at all — its before_tests dies on
    [Event Venue, Test Venue]: team, unrelated to this.

🤖 Generated with Claude Code

@greptile-apps

greptile-apps Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR adds a membership-authorized team overview API and a dashboard overview driven by the active team stored in client state.

  • Adds team details, enabled-member data, and backend access tests.
  • Adds overview routing, team navigation, event previews, member avatars, and page-header support.
  • Refactors the personal event feed into a shared composable.

Confidence Score: 3/5

The PR is not yet safe to merge because the Create Event and Manage members controls expose visible actions that do nothing.

TeamPageHeader renders Create Event without navigation or a handler, and the previously reported Manage members button remains similarly unwired.

Files Needing Attention: dashboard/src/components/dashboard/teams/TeamPageHeader.vue, dashboard/src/pages/manage/teams/TeamOverview.vue

Important Files Changed

Filename Overview
buzz/api/teams/services.py Adds the membership-gated overview service and enabled-member query without an identified blocking defect.
dashboard/src/data/teams.ts Adds reactive active-team overview loading tied to the stored team selection.
dashboard/src/pages/manage/teams/TeamOverview.vue Builds the overview page, but the previously reported Manage members action remains unwired.
dashboard/src/components/dashboard/teams/TeamPageHeader.vue Adds ambient-team breadcrumbs and an unwired Create Event primary action.
dashboard/src/router.ts Adds fixed team overview routes and explicit placeholder routing for unfinished team sections.
dashboard/src/layouts/ManagerLayout.vue Adds the in-panel page-header target, panel-owned scrolling, and team navigation entries.

Fix all with Greploop Fix All in Claude Code Fix All in Codex

Prompt To Fix All With AI
### Issue 1
dashboard/src/components/dashboard/teams/TeamPageHeader.vue:18
**Create Event action is inert**

When a team member clicks the visible Create Event action, the button has neither a route nor a click handler, so the click has no effect.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (6): Last reviewed commit: "feat(dashboard): team overview page at /..." | Re-trigger Greptile

Comment thread dashboard/src/components/dashboard/teams/TeamPageHeader.vue Outdated
Comment thread dashboard/src/components/dashboard/teams/TeamHero.vue Outdated
</Avatar>
</div>

<Button variant="ghost" label="Manage members" class="w-fit" />

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.

P1 Manage members action is inert

When a team member clicks Manage members, the button has no route or click handler, so the visible management action does nothing even though the dashboard defines /manage/<team>/members as a team-scoped destination.

Suggested change
<Button variant="ghost" label="Manage members" class="w-fit" />
<Button
variant="ghost"
label="Manage members"
class="w-fit"
:route="`/manage/${teamId}/members`"
/>
Prompt To Fix With AI
This is a comment left during a code review.
Path: dashboard/src/pages/manage/teams/TeamOverview.vue
Line: 113

Comment:
**Manage members action is inert**

When a team member clicks **Manage members**, the button has no route or click handler, so the visible management action does nothing even though the dashboard defines `/manage/<team>/members` as a team-scoped destination.

```suggestion
					<Button
						variant="ghost"
						label="Manage members"
						class="w-fit"
						:route="`/manage/${teamId}/members`"
					/>
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code Fix in Codex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Still inert here, deliberately: /manage/team/members does not exist until the next PR in the stack, which adds both the route and the wiring on this button. The suggested fix cannot apply on this branch — the named route is not registered yet.

Note the path in the suggestion is also out of date. Team scoping moved out of the URL in response to the other review on this PR, following how frappe/central does it, so the destination is a fixed /manage/team/members with no team id in the path.

Flagging rather than silently deferring: if this PR were to merge alone, that button would ship dead.

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.

Fair point, and the path correction is noted — I missed that team scoping moved out of the URL, so /manage/team/members is right, not /manage/${teamId}/members.

The inert button is reasonable given the stacked PR setup. One small thing worth considering: a brief inline comment on the button would make the intent self-documenting for anyone reviewing this PR in isolation, so it doesn't read as an accidental omission:

Suggested change
<Button variant="ghost" label="Manage members" class="w-fit" />
<Button variant="ghost" label="Manage members" class="w-fit" />
<!-- Route wired in the follow-up PR that adds /manage/team/members -->

Otherwise, no objection — closing the comment.

@harshtandiya
harshtandiya force-pushed the version-2-dashboard-talks branch from 1df6b60 to 846f6ed Compare August 17, 2026 13:30
@harshtandiya
harshtandiya force-pushed the version-2-dashboard-team-overview branch from a570feb to 50e0c6c Compare August 17, 2026 13:30
@harshtandiya
harshtandiya force-pushed the version-2-dashboard-talks branch from 846f6ed to 2f246bd Compare August 18, 2026 10:59
Base automatically changed from version-2-dashboard-talks to develop August 19, 2026 05:55
harshtandiya and others added 2 commits August 19, 2026 11:31
get_team_overview returns one team with its enabled members, for the team
dashboard. Membership is the authorization and the query reads past
permissions, like get_my_teams: Buzz Team is readable by Event Manager only,
while a Frontdesk or Viewer member still works inside the team.

An unknown team raises NotATeamMember rather than a not-found, so a
non-member cannot probe team ids.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Events page files cards under a date heading, so the card only carries a
time. A standalone list has no heading to lean on — showDate puts the day
label beside the time for those callers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@harshtandiya
harshtandiya force-pushed the version-2-dashboard-team-overview branch from 50e0c6c to 34cff5a Compare August 19, 2026 06:14
@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

UI Demo Check — a screenshot or demo is attached.

@harshtandiya
harshtandiya force-pushed the version-2-dashboard-team-overview branch from 34cff5a to d870159 Compare August 19, 2026 07:20
The active team is ambient state, not a path segment: data/teams holds the
selection in localStorage and every team-scoped page reads it, so the paths are
fixed and a switch re-reads the page in place. This follows frappe/central,
where the console keeps the active team in useSession and routes stay flat.

get_team_overview moves off createResource onto useCall with the selected team
as its params, so it refetches itself on a switch and no page drives it. One
watcher covers the first read: get_my_teams settles the selection after the
module loads, so there is nothing to ask about until it does.

The page shows the team, up to three of its upcoming events (filtered out of
the feed the Events page already loads), and the member avatars.

Pages declare their header through frappe-ui's PageHeader. The target lives in
ManagerLayout rather than DesktopShell's own, so the header sits inside the
rounded panel; the registry is a stack and the last target registered wins.
The panel now owns its scroll, which is why DesktopShell takes scroll=false.

Members has no page yet — a second catch-all sends /manage/team/<section> to
WorkInProgress, the way the unscoped sidebar links already work. /manage/team
redirects to the overview so the bare path is not a dead end.

Trade-off: an overview link is no longer shareable across teams — it opens
whichever team the recipient last used.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@harshtandiya
harshtandiya force-pushed the version-2-dashboard-team-overview branch from d870159 to afff9d3 Compare August 19, 2026 07:40
<template>
<PageHeader class="border-none pt-2">
<Breadcrumbs :items="items" />
<Button variant="solid" icon-left="plus" label="Create Event" />

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.

P1 Create Event action is inert

When a team member clicks the visible Create Event action, the button has neither a route nor a click handler, so the click has no effect.

Prompt To Fix With AI
This is a comment left during a code review.
Path: dashboard/src/components/dashboard/teams/TeamPageHeader.vue
Line: 18

Comment:
**Create Event action is inert**

When a team member clicks the visible Create Event action, the button has neither a route nor a click handler, so the click has no effect.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code Fix in Codex

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

fixed in later stacked PRs

@harshtandiya
harshtandiya merged commit e038ec7 into develop Aug 19, 2026
9 of 10 checks passed
@harshtandiya
harshtandiya deleted the version-2-dashboard-team-overview branch August 19, 2026 08:54
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