wave: orgs section on maintainer Orgs & Repos page#1904
Merged
Conversation
Adds an "Orgs" section to /wave/maintainers/repos that lists each org the user has at least one approved repo in, with a per-Wave-Program points budget gauge driven by a wave dropdown. Also portals the tooltip popup to <body> so its z-index escapes the page's view-transition stacking context, and dedupes a couple of nested zod entries in package-lock. Renames the "Add repos" action to "Apply repo" and points it straight at the synced-repos list; new "Add org" action links to install-app.
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an Orgs section to the Wave maintainer “Orgs & Repos” page, backed by new per-org points budget fields from the Wave backend, and adjusts tooltip rendering to escape stacking-context z-index issues.
Changes:
- Add an Orgs section to
/wave/maintainers/reposderived from the user’s approved repos, including a Wave Program selector and per-org points budget display. - Extend Wave DTO schemas to accept new
orgPoints*fields (andpointsBudgetOverride). - Portal tooltips to
<body>and bump tooltip z-index to render above view-transition / sidenav stacking contexts.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/routes/(pages)/wave/(base-layout)/maintainers/repos/+page.ts | Fetches approved repos separately (when needed) to derive Orgs section independent of repo list filter. |
| src/routes/(pages)/wave/(base-layout)/maintainers/repos/+page.svelte | Introduces Orgs section UI + Wave Program dropdown; renames Repo Applications action to “Apply repo”. |
| src/lib/utils/wave/types/waveProgram.ts | Adds DTO fields for org-level points budgets and related repo fields. |
| src/lib/components/tooltip/tooltip.svelte | Portals expanded tooltip to <body> and adjusts margin/z-index to avoid stacking-context issues. |
| package-lock.json | Removes duplicate nested zod entries under @web3-onboard/*. |
Comments suppressed due to low confidence (1)
src/lib/components/tooltip/tooltip.svelte:167
- Portaling the expanded tooltip out of the
.tooltipspan means moving the pointer from the trigger to the tooltip content will fireonpointerleaveon the span and immediatelyhide()the tooltip. This makes tooltip content effectively non-interactive (e.g. links/copyable controls inside the tooltip can’t be clicked). Consider keeping the tooltip open while the pointer is over the expanded tooltip as well (e.g. add pointer enter/leave handlers on the expanded element, or track hover state across both trigger and content).
<span
bind:this={tooltipElem}
class="tooltip"
class:disabled
onpointerover={(e) => {
if (!disabled && e.pointerType !== 'touch') handleHover(true);
}}
onpointerleave={() => !disabled && handleHover(false)}
>
<div class="trigger">{@render children?.()}</div>
{#if expanded}
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div
use:portal
transition:fade={{ duration: 200 }}
bind:this={contentElem}
class="expanded-tooltip"
style:left={`${tooltipPos.left}px`}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The list only shows orgs the user has an approved repo in for the selected Wave Program, not every org the user is a member of.
2 tasks
Portaling the tooltip body to <body> moved it out from under the trigger's hover container, so pointerleave on the trigger started firing as soon as the cursor crossed the gap toward the tooltip. Mirror the hover handlers onto the portaled element and add a small grace delay on hide so the gap can be crossed without dismissing.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
src/lib/flows/wave/add-issues-to-wave-program/configure-details.svelte:466
budgetExceededOrgsonly filters onpointsRemaining !== null, butpointsBudgetcan still be null. That would render "{pointsRemaining} of {pointsBudget}" as "N of null". Consider either filtering out org rows with null budgets, or adjusting the copy to handle "unbounded" / unknown budgets.
<div class="budget-warning-row">
<strong>{org.orgLogin}</strong> (org): {org.issueCount} issue{org.issueCount > 1
? 's'
: ''} selected ({org.pointsNeeded} points) but only {org.pointsRemaining} of {org.pointsBudget}
points remaining across the org's approved repos. Some issues will be skipped at this complexity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/wave/maintainers/reposthat lists each org the user has at least one approved repo in, with a per-Wave-Program points budget gauge (used / total, with low/over-budget colors). A dropdown picks which Wave Program to show limits for; defaults to the first one the user participates in.orgPointsBudget/orgPointsUsed/orgPointsRemainingfields from the wave backend (per-org points cap, drips-network/wave#590)./wave/maintainer-onboarding/review-repos. New Add org action on the Orgs section links toinstall-app.<body>on show, so itsz-indexescapes the page'sview-transition-namestacking context and renders above the sidenav instead of behind it.package-lock.jsoncleanup: drops two duplicate nestedzodentries under@web3-onboard/*.Test plan
/wave/maintainers/repos— confirm the new Orgs section renders above Repo Applications, one card per org, with the budget gauge./wave/maintainer-onboarding/review-repos./wave/maintainer-onboarding/install-app.