Skip to content

feat(committees): add meetings tab and overview enhancements (split 3/3 of #300)#331

Open
manishdixitlfx wants to merge 3 commits intofeat/LFXV2-committees-member-dialogsfrom
feat/LFXV2-committees-meetings-tab-v2
Open

feat(committees): add meetings tab and overview enhancements (split 3/3 of #300)#331
manishdixitlfx wants to merge 3 commits intofeat/LFXV2-committees-member-dialogsfrom
feat/LFXV2-committees-meetings-tab-v2

Conversation

@manishdixitlfx
Copy link
Contributor

Summary

  • Add meetings tab with upcoming/past toggle and MeetingCardComponent integration
  • Add meetings BFF endpoint (GET /committees/:id/meetings)
  • Add overview sub-resource signals for behavioral-class-specific dashboard cards
  • Add governance, oversight, working-group, SIG, and ambassador dashboard sections
  • Add loadGroupTypeData$ for type-specific overview data fetching
  • Decouple meetings fetch from committee render path with independent loading
  • Add createMeeting navigation with committee context
  • Minor settings and dashboard template fixes

Context

Split from PR #300. Depends on PR #330 (member dialogs) and PR #329 (BFF layer).

Test plan

  • Meetings tab shows upcoming meetings from project
  • Past meetings toggle works (shows meetings before now)
  • Create Meeting button navigates with committee context params
  • Overview cards load type-specific data (votes for governance, activity for working-group)
  • Meetings loading shows skeleton independently of committee data

🤖 Generated with Claude Code

@manishdixitlfx manishdixitlfx requested a review from jordane as a code owner March 16, 2026 23:51
Copilot AI review requested due to automatic review settings March 16, 2026 23:51
@coderabbitai
Copy link

coderabbitai bot commented Mar 16, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 95b3ea95-88c3-4a8b-8c96-150cbed7d79b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/LFXV2-committees-meetings-tab-v2
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds committee-scoped meeting retrieval and expands the committee detail UI with a full Meetings tab plus behavioral-class-specific Overview dashboard sections.

Changes:

  • Add BFF endpoint GET /api/committees/:id/meetings wired through controller/service.
  • Add frontend CommitteeService.getCommitteeMeetings() and refactor upcoming-meeting widget + committee view to use it.
  • Enhance committee view with Meetings tab (upcoming/past toggle, skeleton loading, create-meeting navigation) and overview cards per behavioral class.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
apps/lfx-one/src/server/services/committee.service.ts Adds getCommitteeMeetings() that delegates to MeetingService.
apps/lfx-one/src/server/routes/committees.route.ts Registers GET /:id/meetings route.
apps/lfx-one/src/server/controllers/committee.controller.ts Adds controller handler for committee meetings endpoint.
apps/lfx-one/src/app/shared/services/committee.service.ts Adds frontend API method to fetch committee meetings.
apps/lfx-one/src/app/modules/committees/components/upcoming-committee-meeting/upcoming-committee-meeting.component.ts Switches upcoming meeting logic to committee-scoped meetings fetch.
apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html Updates join-mode copy/icon styling.
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts Adds meeting signals/loading, createMeeting navigation, and type-specific overview loading.
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.html Implements Meetings tab UI and large overview dashboard enhancements.
Comments suppressed due to low confidence (1)

apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.html:113

  • The "Edit" action button is now shown for any user who is not a board member. This is broader than the previous permission gate and will surface edit navigation to users who likely lack write access. Gate this button with the same permission signal used elsewhere (e.g., canManageConfigurations() or a specific writer/maintainer check) to avoid confusing/unauthorized UI.
        @if (!isBoardMember()) {
          <div class="flex items-center gap-2 flex-shrink-0">
            <lfx-button
              icon="fa-light fa-pen-to-square"
              label="Edit"
              size="small"
              [routerLink]="['/groups', committee()?.uid || '', 'edit']"
              data-testid="committee-view-edit-btn"></lfx-button>
          </div>

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

<label for="join-mode" class="text-sm font-semibold text-gray-900">How can people join this {{ committeeLabel.toLowerCase() }}?</label>
<p class="text-xs text-gray-600">Controls whether members can self-join, be invited by colleagues, apply for review, or be added by admins only</p>
<label for="join-mode" class="text-sm font-semibold text-gray-900">Join Mode</label>
<p class="text-xs text-gray-600">Control how new members can join this {{ committeeLabel.toLowerCase() }}</p>
Comment on lines +378 to +382
catchError(() => of([]))
)
.subscribe((meetings) => {
this.committeeMeetings.set(Array.isArray(meetings) ? meetings : []);
this.meetingsLoading.set(false);
Comment on lines +633 to +635
const params = {
...query,
committee_uid: committeeId,
Comment on lines +653 to +658
} catch {
logger.warning(req, 'get_committee_meetings', 'Failed to fetch committee meetings, returning empty', {
committee_uid: committeeId,
});
return { data: [], page_token: undefined };
}
@manishdixitlfx manishdixitlfx force-pushed the feat/LFXV2-committees-meetings-tab-v2 branch from a914bc9 to ec70d54 Compare March 17, 2026 00:13
manishdixitlfx and others added 2 commits March 16, 2026 17:13
- Add meetings tab with upcoming/past meeting toggle and MeetingCardComponent
- Add meetings BFF endpoint (GET /committees/:id/meetings)
- Add overview sub-resource signals (votes, resolutions, activity, etc.)
- Add behavioral-class-specific dashboard cards (governance, working-group, SIG, ambassador)
- Add loadGroupTypeData$ for type-specific overview data fetching
- Decouple meetings fetch from committee render path
- Add createMeeting navigation with committee context

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
- Fix grammar in settings label
- Add takeUntilDestroyed to loadMeetings for lifecycle cleanup
- Add error details to meetings catch block logging
- Add TODO for committee_uid query param verification

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
@manishdixitlfx manishdixitlfx force-pushed the feat/LFXV2-committees-member-dialogs branch from c13b85e to 7c99c45 Compare March 17, 2026 00:14
@manishdixitlfx manishdixitlfx force-pushed the feat/LFXV2-committees-meetings-tab-v2 branch from ec70d54 to 410c9bb Compare March 17, 2026 00:14
@manishdixitlfx manishdixitlfx changed the title feat(committees): add meetings tab and overview tab enhancements feat(committees): add meetings tab and overview enhancements (split 3/3 of #300) Mar 17, 2026
Move meetingsLoading.set(false) from subscribe callback into finalize()
operator so loading state is cleared regardless of completion path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
@manishdixitlfx
Copy link
Contributor Author

Review findings verified (commit b9c1082)

Checked all 4 Copilot findings using /lfx-coordinator:

# Finding Status
1 Grammar: "Control" → "Controls" Already resolved — line 61 uses "Controls how new members can join"
2 loadMeetings missing finalize() for loading cleanup Fixed — moved meetingsLoading.set(false) into finalize() operator
3 committee_uid query param vs tags Acknowledged — TODO on line 680 documents this; delegates to MeetingService which handles the param
4 Catch block swallows error Already resolved — line 704 logs error instanceof Error ? error.message : 'Unknown error'

Validation: yarn format ✓ · yarn lint ✓ · yarn build

🤖 Generated with Claude Code using /lfx-coordinator

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.

2 participants