Skip to content

Conversation

@jordane
Copy link
Member

@jordane jordane commented Dec 15, 2025

This pull request introduces two main enhancements: new committee settings for controlling member visibility and meeting attendee display, and the addition of LinkedIn profile support for committee members. These changes improve the flexibility of committee configuration and enrich member profiles.

Committee settings enhancements:

  • Added member_visibility and show_meeting_attendees fields to committee interfaces (Committee, CommitteeCreateData, CommitteeSettingsData) and forms, allowing admins to control member profile visibility and whether meeting attendees are shown by default. Default values are set for these fields in the UI. [1] [2] [3] [4] [5]
  • Updated the committee settings UI to include a new "Member Visibility" section with selectable options, using the new MEMBER_VISIBILITY_OPTIONS constant. [1] [2] [3] [4]

Member profile enhancements:

  • Added support for a linkedin_profile field in committee member interfaces and forms, with corresponding UI changes to allow input and display of LinkedIn profiles on member cards. [1] [2] [3] [4] [5] [6] [7]

Supporting changes:

  • Introduced the CommitteeMemberVisibility enum and exported it for use throughout the application. [1] [2]
  • Extended the COMMITTEE_SETTINGS_FEATURES constant to include the new "Show Meeting Attendees" feature.

LFXV2-907

Add optional linkedin_profile field to committee members:
- Add linkedin_profile field to CommitteeMember and CreateCommitteeMemberRequest interfaces
- Add LinkedIn Profile input field to member creation/edit form
- Display LinkedIn profile link in member card component with LinkedIn icon
- Field is optional and includes URL validation

Backend changes: linuxfoundation/lfx-v2-committee-service#49

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Jordan Evans <[email protected]>
LFXV2-906

Add two new committee settings to control visibility and meeting features:

1. Member Visibility (member_visibility):
   - Enum field with options: 'hidden' or 'basic_profile'
   - Controls visibility of member profiles within committee
   - Displayed as select dropdown in settings step
   - Defaults to 'hidden'

2. Show Meeting Attendees (show_meeting_attendees):
   - Boolean toggle to display meeting attendee information
   - Defaults to false
   - Displayed as feature toggle in settings step

Changes:
- Create CommitteeMemberVisibility enum in shared package
- Add fields to Committee, CommitteeCreateData, and CommitteeSettingsData interfaces
- Add MEMBER_VISIBILITY_OPTIONS constant for dropdown options
- Add show_meeting_attendees to COMMITTEE_SETTINGS_FEATURES
- Update committee-manage form with new controls
- Update committee-settings component with member visibility select dropdown
- Both settings integrated into create and edit workflows

Backend changes: linuxfoundation/lfx-v2-committee-service#48

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Jordan Evans <[email protected]>
Copilot AI review requested due to automatic review settings December 15, 2025 22:14
@coderabbitai
Copy link

coderabbitai bot commented Dec 15, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds member visibility and meeting-attendees settings plus LinkedIn profile support across committee forms, UI, interfaces, and shared constants; form controls and UI elements updated to include these fields and new enum/options added to the shared API surface.

Changes

Cohort / File(s) Change Summary
Member Visibility Settings
apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts, apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts, apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html, packages/shared/src/constants/committees.constants.ts, packages/shared/src/enums/committee.enum.ts, packages/shared/src/enums/index.ts, packages/shared/src/interfaces/committee.interface.ts
Adds member_visibility and show_meeting_attendees to committee form and data models; introduces UI section with a member visibility dropdown; adds CommitteeMemberVisibility enum and MEMBER_VISIBILITY_OPTIONS; extends committee interfaces to include the new fields and adds a settings feature entry
LinkedIn Profile Integration
apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts, apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html, apps/lfx-one/src/app/modules/committees/components/member-card/member-card.component.html, packages/shared/src/interfaces/member.interface.ts
Adds linkedin_profile FormControl (with URL validation), input field in member form, and displays LinkedIn link in member card when present; extends CommitteeMember and CreateCommitteeMemberRequest interfaces with linkedin_profile

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–30 minutes

  • Review form control initialization and patching in committee-manage.component.ts and member-form.component.ts
  • Verify UI bindings and options in committee-settings.component.html/.ts and committees.constants.ts
  • Confirm enum export and interface extensions in packages/shared/* match API/schema expectations
  • Validate LinkedIn URL validation pattern and rendering logic in member-card.component.html

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the two main features: LinkedIn profile support and new committee group settings (member visibility and show meeting attendees).
Description check ✅ Passed The description is well-related to the changeset, detailing both main enhancements (committee settings and LinkedIn profiles) with supporting context and code references.
Linked Issues check ✅ Passed The code changes fully address both linked issues: LFXV2-906 (member_visibility and show_meeting_attendees fields added to interfaces/forms/UI) and LFXV2-907 (linkedin_profile field added to member interfaces/forms/UI).
Out of Scope Changes check ✅ Passed All changes are directly scoped to the two linked issues. The PR adds form fields, UI sections, interfaces, enums, and constants exclusively for LinkedIn profile support and committee member visibility settings.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch jme/LFXV2-906-LFXV2-907

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 8a8f919 and 760d432.

📒 Files selected for processing (3)
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts (3 hunks)
  • packages/shared/src/interfaces/committee.interface.ts (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
  • packages/shared/src/interfaces/committee.interface.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html

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

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

Conventional Commits FTW!

@jordane jordane changed the title Jme/lfxv2 906 lfxv2 907 Support linkedin_profile, new group settings (member visibility & show meeting attendees) Dec 15, 2025
@github-actions
Copy link

🚀 Deployment Status

Your branch has been deployed to: https://ui-pr-209.dev.v2.cluster.linuxfound.info

Deployment Details:

  • Environment: Development
  • Namespace: ui-pr-209
  • ArgoCD App: ui-pr-209

The deployment will be automatically removed when this PR is closed.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1f1c6d4 and 8a8f919.

📒 Files selected for processing (11)
  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts (2 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts (2 hunks)
  • apps/lfx-one/src/app/modules/committees/components/member-card/member-card.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts (3 hunks)
  • packages/shared/src/constants/committees.constants.ts (1 hunks)
  • packages/shared/src/enums/committee.enum.ts (1 hunks)
  • packages/shared/src/enums/index.ts (1 hunks)
  • packages/shared/src/interfaces/committee.interface.ts (3 hunks)
  • packages/shared/src/interfaces/member.interface.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (6)
apps/lfx-one/src/**/*.component.html

📄 CodeRabbit inference engine (CLAUDE.md)

apps/lfx-one/src/**/*.component.html: Always add data-testid attributes when creating new components for reliable test targeting
Use data-testid naming convention - [section]-[component]-[element] for hierarchical structure

Files:

  • apps/lfx-one/src/app/modules/committees/components/member-card/member-card.component.html
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html
**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.ts: Always use async/await pattern for promises
Use TypeScript interfaces instead of union types for better maintainability

Files:

  • packages/shared/src/interfaces/member.interface.ts
  • packages/shared/src/interfaces/committee.interface.ts
  • packages/shared/src/constants/committees.constants.ts
  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts
  • packages/shared/src/enums/committee.enum.ts
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts
  • packages/shared/src/enums/index.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
packages/shared/src/**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

All shared types, interfaces, and constants must be centralized in @lfx-one/shared package

Files:

  • packages/shared/src/interfaces/member.interface.ts
  • packages/shared/src/interfaces/committee.interface.ts
  • packages/shared/src/constants/committees.constants.ts
  • packages/shared/src/enums/committee.enum.ts
  • packages/shared/src/enums/index.ts
**/*.{ts,js}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,js}: License headers are required on all source files - run ./check-headers.sh to verify
Do not nest ternary expressions
Prepend 'Generated with Claude Code (https://claude.ai/code)' when you assisted with the code

Files:

  • packages/shared/src/interfaces/member.interface.ts
  • packages/shared/src/interfaces/committee.interface.ts
  • packages/shared/src/constants/committees.constants.ts
  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts
  • packages/shared/src/enums/committee.enum.ts
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts
  • packages/shared/src/enums/index.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
apps/lfx-one/src/**/*.component.ts

📄 CodeRabbit inference engine (CLAUDE.md)

apps/lfx-one/src/**/*.component.ts: Use zoneless change detection and signals in Angular 19 components
All PrimeNG components must be wrapped in LFX components for UI library independence
Reference PrimeNG's component interface when defining types for PrimeNG wrappers

Files:

  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
apps/lfx-one/src/**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

apps/lfx-one/src/**/*.ts: Use direct imports for standalone components - no barrel exports
Shared package uses direct source imports during development for hot reloading

Files:

  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
🧠 Learnings (1)
📚 Learning: 2025-12-10T23:20:29.281Z
Learnt from: asithade
Repo: linuxfoundation/lfx-v2-ui PR: 206
File: apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/agenda-template-selector.component.ts:11-15
Timestamp: 2025-12-10T23:20:29.281Z
Learning: For Angular 19+ projects, standalone defaults to true for components, directives, and pipes when not explicitly declared. Therefore, components with an imports array in the Component decorator do not require an explicit standalone: true declaration to be standalone. In reviews, verify that a component without an explicit standalone flag and with an imports array will behave as a standalone component according to Angular 19+ defaults. If you need to enforce explicit standalone behavior for clarity or consistency, you can still add standalone: true, but it is not required by default in Angular 19+. Ensure this guidance is considered when reviewing any component.ts files across the codebase.

Applied to files:

  • apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts
  • apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts
  • apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts
🧬 Code graph analysis (2)
packages/shared/src/constants/committees.constants.ts (1)
packages/shared/src/constants/colors.constants.ts (1)
  • lfxColors (9-106)
apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts (1)
packages/shared/src/constants/committees.constants.ts (1)
  • MEMBER_VISIBILITY_OPTIONS (437-440)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Agent
🔇 Additional comments (9)
packages/shared/src/enums/committee.enum.ts (1)

1-13: LGTM!

The enum is well-documented with clear JSDoc comments, and the values align with the constants used throughout the codebase. The implementation follows TypeScript best practices.

packages/shared/src/constants/committees.constants.ts (1)

424-440: LGTM!

The new committee settings feature and member visibility options are well-integrated:

  • The show_meeting_attendees feature follows the established pattern for committee features
  • The MEMBER_VISIBILITY_OPTIONS values correctly align with the CommitteeMemberVisibility enum
  • Proper JSDoc documentation is provided
apps/lfx-one/src/app/modules/committees/components/member-card/member-card.component.html (1)

41-48: LGTM!

The LinkedIn profile section is well-implemented with proper security attributes (rel="noopener noreferrer") for the external link, and follows the same styling pattern as the email section above it.

packages/shared/src/enums/index.ts (1)

6-6: LGTM!

The export correctly exposes the new CommitteeMemberVisibility enum, maintaining consistency with the existing barrel export pattern.

apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html (1)

22-48: LGTM!

The Member Visibility section is well-structured with proper data-testid attribute for testing, consistent styling with existing sections, and appropriate form binding.

packages/shared/src/interfaces/member.interface.ts (1)

27-28: LGTM!

The linkedin_profile field is correctly added to both interfaces with appropriate types and documentation. The type difference between CommitteeMember (optional string) and CreateCommitteeMemberRequest (optional string or null) aligns with the existing pattern for other fields and correctly handles API contract requirements.

Also applies to: 83-84

apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts (2)

382-383: LGTM!

The form patching correctly handles the new fields with appropriate defaults ('hidden' and false) when the values are not present in the existing committee data.


407-408: LGTM!

The form control initialization uses sensible defaults that align with the patching logic and follow secure-by-default principles (member profiles hidden by default).

apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts (1)

7-9: LGTM! Clean integration of member visibility options.

The changes correctly import and expose the member visibility options from the shared constants package, and properly include the SelectComponent for the UI. The implementation follows Angular 19 patterns and maintains consistency with the existing codebase.

Also applies to: 13-13, 23-23

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

This PR adds two new features to committees: LinkedIn profile support for members and visibility/attendee settings for committees. The changes introduce a linkedin_profile field to member interfaces and forms, a new CommitteeMemberVisibility enum for controlling member profile visibility, and settings for member visibility and meeting attendee display.

Key Changes:

  • Added LinkedIn profile URL field to committee members
  • Introduced member visibility settings with 'hidden' and 'basic_profile' options
  • Added toggle for showing/hiding meeting attendees

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
packages/shared/src/interfaces/member.interface.ts Added linkedin_profile field to CommitteeMember and CreateCommitteeMemberRequest interfaces
packages/shared/src/interfaces/committee.interface.ts Added member_visibility and show_meeting_attendees fields to Committee, CommitteeCreateData, and CommitteeSettingsData interfaces
packages/shared/src/enums/index.ts Exported new committee enum module
packages/shared/src/enums/committee.enum.ts Created new CommitteeMemberVisibility enum with HIDDEN and BASIC_PROFILE values
packages/shared/src/constants/committees.constants.ts Added show_meeting_attendees feature and MEMBER_VISIBILITY_OPTIONS constant
apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.ts Added linkedin_profile to form controls, initialization, and submission logic
apps/lfx-one/src/app/modules/committees/components/member-form/member-form.component.html Added LinkedIn Profile input field to member form
apps/lfx-one/src/app/modules/committees/components/member-card/member-card.component.html Added LinkedIn profile link display with icon
apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.ts Added SelectComponent import and memberVisibilityOptions property
apps/lfx-one/src/app/modules/committees/components/committee-settings/committee-settings.component.html Added member visibility dropdown UI
apps/lfx-one/src/app/modules/committees/committee-manage/committee-manage.component.ts Added member_visibility and show_meeting_attendees form controls with default values

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

- Add data-testid to LinkedIn profile input for test targeting
- Add URL validation to LinkedIn profile field
- Use CommitteeMemberVisibility enum instead of string type

LFXV2-906 LFXV2-907

Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Asitha de Silva <[email protected]>
@asithade asithade changed the title Support linkedin_profile, new group settings (member visibility & show meeting attendees) feat: support linkedin_profile, new group settings Dec 16, 2025
@asithade asithade merged commit 19f0164 into main Dec 16, 2025
5 of 7 checks passed
@asithade asithade deleted the jme/LFXV2-906-LFXV2-907 branch December 16, 2025 18:23
@github-actions
Copy link

🧹 Deployment Removed

The deployment for PR #209 has been removed.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants