Commit 693baf6
feat(committees): add committee detail shell with core overview tab (#294)
* feat(committees): add committee detail shell with core overview tab
Rewrite committee-view component with PrimeNG tab shell and overview tab
using only getCommitteeById data. No sub-resource API calls.
- Add 6-tab layout: Overview, Members, Votes, Meetings, Surveys, Documents
- Overview tab: stats row, channels card, configurations card, leadership card
- Tab visibility: Members hidden when member_visibility=hidden, Votes hidden when voting disabled
- Loading skeleton, error state with back navigation
- Placeholder content for tabs coming in future PRs
- Computed signals for categorySeverity, breadcrumbs, joinModeLabel, leadership dates
LFXV2-1255
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): align JoinMode enum values with upstream Go service
Update JoinMode type values from 'invite-only'/'apply' to
'invite_only'/'application' to match lfx-v2-committee-service.
Remove deprecated joinable boolean from CommitteeCreateData.
LFXV2-1255
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): remove unused joinModeOptions property from settings component
Addresses asithade's review — joinModeOptions was declared but unreferenced in template.
LFXV2-1283
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): align interface with upstream API data shapes
- Change mailing_list from GroupMailingList object to plain string (upstream returns *string)
- Change chat_channel from GroupChatChannel object to plain string (upstream returns *string)
- Rename total_voting_reps to total_voting_repos to match upstream field name
- Update template to display mailing_list and chat_channel as strings
Addresses P0 data-shape mismatches flagged by asithade in PR #294.
LFXV2-1283
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): guard Edit button with canManageConfigurations instead of !isBoardMember
The Edit button was visible to all non-board-member personas, including
Executive Directors who are not committee writers. Replace the broad
!isBoardMember() guard with canManageConfigurations() which correctly
restricts Edit access to maintainers and users with the writer flag set
on the committee.
Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* Revert "fix(committees): guard Edit button with canManageConfigurations instead of !isBoardMember"
This reverts commit dccaa85.
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address asithade review findings on committee detail view
- P0: Remove Leadership card (chair/co_chair not returned by upstream API)
- P0: Remove chair/co_chair from Committee interface (not in upstream response)
- P1: Fix Edit button auth — use canManageConfigurations() instead of !isBoardMember()
- P1: Replace raw animate-pulse skeleton with lfx-route-loading component
- P1: Replace raw "Voting Enabled" badge span with lfx-tag wrapper
- P2: Replace PrimeNG Tabs (5 imports) with signal-driven tabs using Tailwind
- Remove unused hasChair/hasCoChair signals and elected date initializers
LFXV2-1283
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* feat(committees): add CSV export button to groups list page
Files modified:
- apps/lfx-one/src/app/modules/committees/utils/export-groups.util.ts (new)
- apps/lfx-one/src/app/modules/committees/committee-dashboard/committee-dashboard.component.ts
- apps/lfx-one/src/app/modules/committees/committee-dashboard/committee-dashboard.component.html
LFXV2-1283
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* Revert "feat(committees): add CSV export button to groups list page"
This reverts commit f426310aecd3c92bfb0548eb5881f06bd4af062f.
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* feat(committees): add GET /committees/:id/meetings endpoint
Add BFF endpoint that fetches meetings for a specific committee by
querying with tags=committee_uid:{id}. Includes server-side controller,
service method with lazy MeetingService import, and frontend service
method. This replaces the need to fetch all project meetings and
filter client-side by committee UID.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): use committee_uid param for meetings query
The upstream meeting service uses committee_uid as a direct query
parameter, not as a tag. Also reorders getCommitteeMeetings before
private methods to satisfy member-ordering lint rule.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address PR review findings for detail shell
- Replace manual date formatting signals with DatePipe
- Add @else placeholder for website section when no URL configured
- Remove unused formattedCreatedDate/formattedUpdatedDate initializers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address review feedback on committee detail shell LFXV2-committees-detail-shell
Remove redundant /committees/:id/meetings endpoint (existing /api/meetings
supports committee_uid query param). Replace joinModeLabel computed signal
with JoinModeLabelPipe + JOIN_MODE_LABELS constant. Use [ngClass] instead
of multiple [class.*] bindings on tab buttons. Use @switch for mutually
exclusive tab panels. Remove unused COMMITTEE_LABEL import.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address PR #294 review comments
- Replace isBoardMember/canManageConfigurations with canEdit based on
committee.writer (API-driven authorization)
- Remove PersonaService injection from committee-view and committee-members
components (writer field handles auth)
- Replace raw avatar div with lfx-avatar in committee-members-manager
- Replace manual first_name/last_name concatenation with fullName pipe
in committee-members-manager and committee-members templates
- Add getMemberDisplayName helper for TS-side name formatting
- Remove unused GroupMailingList, GroupChatChannel, ChatPlatform dead code
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): use CommitteeMemberVisibility enum instead of string literal
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address final review findings on detail shell PR
- Extract overview tab (~180 lines) into CommitteeOverviewComponent —
shell is now a thin data-fetching + tab-routing wrapper
- Type-narrow activeTab from string to CommitteeTab union type
- Differentiate error states: 404/403 shows "Group Not Found",
500/network shows "Something Went Wrong" with retry button
- Remove chair/co_chair from CommitteeUpdateData — upstream PUT
does not accept these fields
- Remove stale LeadershipRole type and CommitteeLeadership interface
(unused after leadership card removal)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): add console.error to silent catchError in loadCommittee
The catchError in loadCommittee() silently discarded HTTP failures with
no logging, making production debugging impossible when the committee
fetch fails.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): address round 4 review findings on detail shell PR
- Replace BehaviorSubject with WritableSignal for refresh trigger
- Add standalone: true to JoinModeLabelPipe
- Type-narrow JOIN_MODE_LABELS from Record<string> to Record<JoinMode>
- Replace mb-4 spacing with flex + gap-4 in overview template cards
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
* fix(committees): replace mb-2 label spacing with flex gap-2 in overview channels
Replace margin-based label-to-content spacing (mb-2) with flex + gap-2
parent containers in channel item wrappers per project styling guidelines.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
---------
Signed-off-by: Manish Dixit <mdixit@linuxfoundation.org>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent f1eb355 commit 693baf6
13 files changed
Lines changed: 519 additions & 301 deletions
File tree
- apps/lfx-one/src/app
- modules/committees
- committee-view
- components
- committee-members-manager
- committee-members
- committee-overview
Lines changed: 155 additions & 66 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
7 | 10 | | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
23 | 30 | | |
24 | 31 | | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
| 32 | + | |
| 33 | + | |
29 | 34 | | |
30 | 35 | | |
31 | 36 | | |
32 | | - | |
| 37 | + | |
33 | 38 | | |
34 | | - | |
| 39 | + | |
35 | 40 | | |
36 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
37 | 44 | | |
38 | | - | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
39 | 49 | | |
40 | 50 | | |
41 | 51 | | |
42 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
43 | 56 | | |
44 | | - | |
| 57 | + | |
45 | 58 | | |
46 | 59 | | |
47 | 60 | | |
48 | 61 | | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
53 | 66 | | |
54 | 67 | | |
55 | 68 | | |
56 | 69 | | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
74 | 166 | | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
80 | 175 | | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
86 | 184 | | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
| 185 | + | |
97 | 186 | | |
98 | 187 | | |
99 | 188 | | |
| |||
Lines changed: 0 additions & 51 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | 4 | | |
8 | 5 | | |
9 | 6 | | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
0 commit comments