Skip to content

Conversation

@asithade
Copy link
Contributor

@asithade asithade commented Nov 20, 2025

Summary

Comprehensive refactoring effort that improves code organization, removes unused code, and enhances overall architecture.

Related JIRA Tickets

  • LFXV2-769 - Reorganize meeting components from shared to meetings module
  • LFXV2-770 - Remove unused project module and routes
  • LFXV2-771 - Remove deprecated E2E test files
  • LFXV2-772 - Optimize service layer by removing unused services
  • LFXV2-773 - Enhance styling system with new Tailwind utilities

Changes

Component Architecture Refactoring (LFXV2-769)

  • Moved meeting-related components from shared/components to meetings/components
  • Components moved:
    • meeting-card
    • meeting-registrants (split into display and manager components)
    • meeting-rsvp-details
    • rsvp-button-group
    • rsvp-scope-modal
    • cancel-occurrence-confirmation
    • meeting-delete-confirmation
    • meeting-delete-type-selection
    • dashboard-meeting-card (moved to dashboards module)
  • Updated all import statements across affected modules
  • Improved module boundaries and component organization

Module Cleanup (LFXV2-770)

  • Removed unused project module including:
    • project-dashboard component (323 lines)
    • mailing-list-dashboard component (17 lines)
    • project.routes.ts
    • mailing-lists.routes.ts
  • Updated app.routes.ts to remove project route references

E2E Test Reorganization (LFXV2-771)

  • Removed deprecated E2E test files (1,488 lines total):
    • homepage.spec.ts (242 lines)
    • homepage-robust.spec.ts (412 lines)
    • project-dashboard.spec.ts (491 lines)
    • project-dashboard-robust.spec.ts (343 lines)
  • Tests were superseded by newer, more comprehensive test suites

Service Layer Optimization (LFXV2-772)

  • Removed unused activity.service.ts (32 lines)
  • Removed activity.interface.ts from shared package
  • Refactored supabase.service.ts (498 deletions) for better maintainability
  • Updated projects.route.ts to align with new service structure

Styling System Updates (LFXV2-773)

  • Enhanced tailwind.config.js with new utility classes
  • Added 54 lines of new global styles in styles.scss
  • Added new shared constants for typography and tags
  • Improved design token organization
  • Added new tag component to shared components

Impact

  • Files changed: 122 files
  • Deletions: 3,531 lines (primarily removing unused code)
  • Additions: 725 lines (refactored components and new utilities)
  • Net reduction: ~2,800 lines of code removed
  • Improved module boundaries and component organization
  • Reduced bundle size through code removal
  • Enhanced design system consistency
  • Better maintainability through cleaner architecture

Validation

  • ✅ Build passes successfully
  • ✅ All pre-commit hooks pass (license headers, linting, formatting, type checking)
  • ✅ No breaking changes to existing functionality
  • ✅ All components maintain their functionality in new locations

This is a comprehensive refactoring effort that improves code organization,
removes unused code, and enhances the overall architecture:

- LFXV2-769: Reorganized meeting components from shared to meetings module
- LFXV2-770: Removed unused project module and routes
- LFXV2-771: Removed deprecated E2E test files
- LFXV2-772: Optimized service layer by removing unused services
- LFXV2-773: Enhanced styling system with new Tailwind utilities

Changes summary:
- 118 files changed, 378 insertions(+), 6662 deletions(-)
- Improved module boundaries and component organization
- Reduced bundle size by removing 6600+ lines of unused code
- Enhanced design system with better utility classes

Signed-off-by: Asitha de Silva <[email protected]>
@asithade asithade requested a review from jordane as a code owner November 20, 2025 05:54
Copilot AI review requested due to automatic review settings November 20, 2025 05:54
@coderabbitai
Copy link

coderabbitai bot commented Nov 20, 2025

Walkthrough

This pull request performs a comprehensive refactor of the LFX V2 UI codebase, consolidating badge rendering into a reusable tag component, removing legacy project/mailing-list dashboard features, removing E2E tests, renaming meeting registrant components, and migrating import paths to new alias conventions throughout the application.

Changes

Cohort / File(s) Summary
Environment & Configuration
README.md, apps/lfx-one/.env.example, charts/lfx-v2-ui/README.md
Updated Supabase documentation from generic database/storage references to user profile email management. Removed SUPABASE_STORAGE_BUCKET configuration variable.
E2E Test Removal
apps/lfx-one/e2e/homepage.spec.ts, apps/lfx-one/e2e/homepage-robust.spec.ts, apps/lfx-one/e2e/project-dashboard.spec.ts, apps/lfx-one/e2e/project-dashboard-robust.spec.ts
Deleted comprehensive end-to-end test suites covering homepage structure, content, interactions, responsiveness, and project dashboard UI verification across desktop/mobile viewports.
API Mock Configuration
apps/lfx-one/e2e/helpers/api-mock.helper.ts
Narrowed skip condition to only ignore /search endpoint; /recent-activity requests now processed by mock.
Route Architecture
apps/lfx-one/src/app/app.routes.ts, apps/lfx-one/src/app/modules/project/project.routes.ts, apps/lfx-one/src/app/modules/project/mailing-lists/mailing-lists.routes.ts
Removed top-level project/:slug route and its nested PROJECT_ROUTES, eliminated project module routing, and deleted mailing list route configuration.
Project & Mailing List Component Removal
apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.ts, apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.html, apps/lfx-one/src/app/modules/project/mailing-lists/mailing-list-dashboard/*
Removed entire ProjectComponent dashboard with all data signals, computed values, chart builders, and complex state management; deleted mailing list dashboard component and template.
Meeting Registrant Component Refactoring
apps/lfx-one/src/app/modules/meetings/components/meeting-registrants-display/meeting-registrants-display.component.ts, apps/lfx-one/src/app/modules/meetings/components/meeting-registrants-manager/meeting-registrants-manager.component.ts
Renamed MeetingRegistrantsComponent into two specialized components: MeetingRegistrantsDisplayComponent and MeetingRegistrantsManagerComponent with updated selectors and template references.
Meeting Component Badge/Tag Consolidation
apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.ts, apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.html, apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.ts, apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.html
Added severity field to meetingTypeBadge signal; replaced inline badge divs with lfx-tag components in templates; updated badge rendering to use consistent tag-based approach.
Meeting Component Updates
apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/*, apps/lfx-one/src/app/modules/meetings/components/meeting-platform-features/*, apps/lfx-one/src/app/modules/meetings/components/meeting-resources-summary/*, apps/lfx-one/src/app/modules/meetings/components/meeting-type-selection/*, apps/lfx-one/src/app/modules/meetings/meeting-not-found/*
Replaced inline badge elements with lfx-tag components; removed typography styling classes from heading elements for simplified presentation.
Meetings Dashboard View Mode Removal
apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.ts, apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.html, apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.ts, apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.html
Removed currentView signal and list/calendar toggle logic; simplified search input to reactive form-driven lfx-input-text; removed view-mode conditional rendering.
Committee Component Tag Integration
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts, apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.html, apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.ts, apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.html, apps/lfx-one/src/app/modules/committees/components/committee-form/committee-form.component.html
Added categorySeverity computed signal to map committee categories to tag severity values; replaced inline category badges with lfx-tag components; removed typography classes from form section headings.
Dashboard Components Styling & Tag Updates
apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.html, apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.html, apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.html, apps/lfx-one/src/app/modules/dashboards/components/foundation-health/foundation-health.component.html, apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.html, apps/lfx-one/src/app/modules/dashboards/components/recent-progress/recent-progress.component.html
Removed typography classes (text-2xl, font-serif, font-semibold, text-gray-900, etc.) from section headers; simplified h1/h2 elements to plain styling.
Dashboard Meeting Card & Features
apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.ts, apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.html, apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.ts, apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.html
Added severity/icon fields to meeting type badge configuration; replaced inline status badges with lfx-tag components; removed typography classes from section headers.
Dashboard Organization & Health Components
apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts, apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.html
Replaced inline membership tier badge with lfx-tag component; removed Roboto Slab font class from section header; updated service imports to new paths.
Profile Components Import Migration
apps/lfx-one/src/app/modules/profile/developer/profile-developer.component.ts, apps/lfx-one/src/app/modules/profile/edit/profile-edit.component.ts, apps/lfx-one/src/app/modules/profile/email/profile-email.component.ts, apps/lfx-one/src/app/modules/profile/password/profile-password.component.ts
Updated component and service import paths from @shared to @components/@services alias conventions.
Layout Components
apps/lfx-one/src/app/layouts/main-layout/main-layout.component.ts, apps/lfx-one/src/app/layouts/main-layout/main-layout.component.html, apps/lfx-one/src/app/layouts/profile-layout/profile-layout.component.ts, apps/lfx-one/src/app/layouts/project-layout/project-layout.component.ts, apps/lfx-one/src/app/layouts/profile-layout/components/profile-stats/profile-stats.component.ts
Updated service and component import paths to new alias conventions; simplified mobile sidebar menu header styling.
Home Module
apps/lfx-one/src/app/modules/pages/home/home.component.ts, apps/lfx-one/src/app/modules/pages/home/home.component.html
Updated ProjectService import path; removed typography classes (text-3xl, font-display, font-light) from hero title element.
Settings Components
apps/lfx-one/src/app/modules/settings/components/permissions-matrix/permissions-matrix.component.ts, apps/lfx-one/src/app/modules/settings/components/permissions-matrix/permissions-matrix.component.html, apps/lfx-one/src/app/modules/settings/components/user-form/user-form.component.ts, apps/lfx-one/src/app/modules/settings/components/user-permissions-table/user-permissions-table.component.ts, apps/lfx-one/src/app/modules/settings/settings-dashboard/settings-dashboard.component.ts, apps/lfx-one/src/app/modules/settings/settings.routes.ts
Replaced inline badge spans with lfx-tag components with severity mapping; updated ProjectContextService imports to new paths; updated authGuard import path.
Shared Components Badge/Tag Consolidation
apps/lfx-one/src/app/shared/components/project-card/project-card.component.ts, apps/lfx-one/src/app/shared/components/project-card/project-card.component.html, apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.ts, apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.html
Added mapSeverity() helper method to ProjectCardComponent; replaced lfx-badge with lfx-tag component for foundation type display.
Shared Components Import Migration
apps/lfx-one/src/app/shared/components/header/header.component.ts, apps/lfx-one/src/app/shared/components/organization-search/organization-search.component.ts, apps/lfx-one/src/app/shared/components/persona-selector/persona-selector.component.ts, apps/lfx-one/src/app/shared/components/sidebar/sidebar.component.ts, apps/lfx-one/src/app/shared/components/user-search/user-search.component.ts, apps/lfx-one/src/app/shared/interceptors/authentication.interceptor.ts
Updated service and component import paths to new @services/@components alias conventions.
New TagComponent
apps/lfx-one/src/app/shared/components/tag/tag.component.ts, apps/lfx-one/src/app/shared/components/tag/tag.component.html
Created new reusable TagComponent wrapper for PrimeNG tag with public properties for value (required), severity, icon, rounded, and styleClass.
Shared Components Styling
apps/lfx-one/src/app/shared/components/sidebar/sidebar.component.html
Increased top padding from py-4 to py-6.
Feature Flag Provider
apps/lfx-one/src/app/shared/providers/feature-flag.provider.ts
Updated environment import path from relative to @environments alias.
Committee Route & Service Updates
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, apps/lfx-one/src/app/modules/committees/committees.routes.ts, apps/lfx-one/src/app/modules/committees/components/committee-form/committee-form.component.ts
Updated ProjectContextService import path; restructured committee dashboard HTML layout with updated container padding and styling; updated authGuard import path.
Backend Service Removal
apps/lfx-one/src/server/services/supabase.service.ts, apps/lfx-one/src/server/routes/projects.route.ts
Removed numerous SupabaseService public methods (committee, project, permission, activity, profile operations); removed recent-activity route handler; consolidated to email/user-focused functionality.
ActivityService Removal
apps/lfx-one/src/app/shared/services/activity.service.ts
Deleted entire ActivityService including getRecentActivitiesByProject() method and HTTP GET endpoint.
Dashboard Service Imports
apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.ts, apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.ts, apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts, apps/lfx-one/src/app/modules/dashboards/components/recent-progress/recent-progress.component.ts, apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.ts, apps/lfx-one/src/app/modules/dashboards/dashboard.component.ts, apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.ts
Updated various service import paths (SelectComponent, MeetingService, ProjectContextService, AnalyticsService, PersonaService, etc.) to new @services/@components aliases.
Meeting Service & Component Imports
apps/lfx-one/src/app/modules/meetings/components/meeting-delete-type-selection/meeting-delete-type-selection.component.ts, apps/lfx-one/src/app/modules/meetings/components/meeting-modal/meeting-modal.component.ts, apps/lfx-one/src/app/modules/meetings/components/meeting-rsvp-details/meeting-rsvp-details.component.ts, apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.ts, apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.html, apps/lfx-one/src/app/modules/meetings/meetings.routes.ts
Updated component import paths; replaced MeetingRegistrantsComponent with MeetingRegistrantsManagerComponent; updated authGuard import path.
RSVP Button Group
apps/lfx-one/src/app/modules/meetings/components/rsvp-button-group/rsvp-button-group.component.ts
Updated RsvpScopeModalComponent import path from @components to @app/modules/meetings/components.
Global Styles & Configuration
apps/lfx-one/src/styles.scss, apps/lfx-one/tailwind.config.js
Added global typography defaults (Inter font-family for headings/text), tag component CSS variables, Tailwind fontWeight/lineHeight scales.
Shared Constants & Interfaces
packages/shared/src/constants/index.ts, packages/shared/src/constants/tag.constants.ts, packages/shared/src/constants/typography.constants.ts, packages/shared/src/constants/meeting.constants.ts, packages/shared/src/interfaces/index.ts, packages/shared/src/interfaces/activity.interface.ts, packages/shared/src/interfaces/components.interface.ts, packages/shared/src/interfaces/permissions.interface.ts
Added new tag and typography constants modules; added TagProps and TagSeverityOptions interfaces; removed activity interfaces and exports; added severity field to MeetingTypeBadge and PermissionMatrixItem badge.
Architecture Documentation
docs/architecture.md
Removed sample h2 heading with typography classes from Pure Tailwind example section.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant MeetingsDashboard
    participant MeetingsTopBar
    participant MeetingCard
    participant TagComponent

    Note over User,TagComponent: Old Flow (with List/Calendar View)
    User->>MeetingsDashboard: View meetings
    MeetingsDashboard->>MeetingsTopBar: render with view toggle
    MeetingsTopBar->>MeetingsDashboard: currentView = 'list'|'calendar'
    MeetingsDashboard->>MeetingCard: render conditional on view
    MeetingCard->>MeetingCard: render inline badges
    
    Note over User,TagComponent: New Flow (List Only)
    User->>MeetingsDashboard: View meetings
    MeetingsDashboard->>MeetingsTopBar: render with search only
    MeetingsTopBar->>MeetingsDashboard: search via reactive form
    MeetingsDashboard->>MeetingCard: render filtered meetings
    MeetingCard->>TagComponent: render meeting badges
    TagComponent->>User: unified tag rendering
Loading
sequenceDiagram
    participant MeetingCardComponent
    participant BadgeMapping
    participant TagComponent

    Note over MeetingCardComponent,TagComponent: Meeting Type Badge Transformation
    MeetingCardComponent->>BadgeMapping: meetingTypeBadge signal
    Note over BadgeMapping: OLD: {badgeClass, icon?, text}<br/>NEW: {badgeClass, severity, icon?, text}
    BadgeMapping->>BadgeMapping: Add severity field<br/>(info|success|warn|danger|secondary|contrast)
    BadgeMapping->>TagComponent: Pass {value, severity, icon}
    TagComponent->>TagComponent: Render PrimeNG tag
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Areas requiring extra attention:

  • Service layer consolidation (apps/lfx-one/src/server/services/supabase.service.ts, apps/lfx-one/src/app/shared/services/activity.service.ts, apps/lfx-one/src/server/routes/projects.route.ts) — Large public API surface removal (12+ methods) with potential upstream dependencies not visible in diff; verify no orphaned service calls remain
  • Meeting component refactoring — Multiple interdependent changes including component renames (MeetingRegistrantsComponent → MeetingRegistrantsDisplayComponent/ManagerComponent), badge signature updates, and template replacements across meeting-join, meeting-card, meeting-manage; verify all template bindings align with new component exports
  • Project dashboard removal (apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.*) — Complete component deletion with complex state management (15+ signals, computed values, chart builders); confirm all navigation routes pointing to this component are removed or redirected
  • Routing architecture changes (apps/lfx-one/src/app/app.routes.ts, apps/lfx-one/src/app/modules/project/project.routes.ts) — Top-level project route removal; verify no lingering references in guards, lazy-load configs, or navigation logic
  • Tag component consolidation — Widespread replacement of inline badges with lfx-tag across 20+ template files; verify consistency of severity mappings and that all badge use cases are covered by new TAG_TYPE_CONFIGS and severity enums
  • E2E test removal — Large test suite deletion without apparent replacement; confirm test coverage gaps and whether critical user journeys remain tested elsewhere
  • Committee dashboard layout restructuring — HTML/CSS changes to padding and container structure; test responsive layout across viewports to ensure no visual regression

Possibly related PRs

Suggested labels

refactor, component-consolidation, breaking-change, e2e-tests-removed

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly summarizes the main change: a major codebase cleanup and reorganization through refactoring, which is directly reflected in the changeset.
Description check ✅ Passed The PR description is comprehensive and directly related to the changeset, covering all major refactoring areas and their impacts with specific metrics.
Linked Issues check ✅ Passed All code changes comply with linked issues: component reorganization (LFXV2-769), module removal (LFXV2-770), E2E test deletion (LFXV2-771), service optimization (LFXV2-772), and styling enhancements (LFXV2-773) are fully implemented.
Out of Scope Changes check ✅ Passed All changes are within scope of the five linked issues; the codebase includes refactored imports, removed unused code, and styling system improvements aligned with the objectives.
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 refactor/LFXV2-769

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

This PR implements a comprehensive codebase refactoring focused on improving code organization, removing unused code, and enhancing the architecture. The changes include moving meeting components from shared to the meetings module, removing unused project dashboard and activity functionality, deleting deprecated E2E tests, optimizing the service layer, and adding new tag and typography systems.

Key Changes:

  • Relocated meeting-related components to appropriate modules with clearer boundaries
  • Removed ~3,500 lines of unused code including project dashboard, activity service, and deprecated E2E tests
  • Added comprehensive typography system and tag component with centralized styling configuration

Reviewed Changes

Copilot reviewed 110 out of 122 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/shared/src/interfaces/permissions.interface.ts Added optional severity property to PermissionMatrixItem badge
packages/shared/src/interfaces/components.interface.ts Added TagProps and TagSeverityOptions interfaces for new tag component
packages/shared/src/interfaces/activity.interface.ts Removed unused activity interface definitions
packages/shared/src/constants/typography.constants.ts Added comprehensive typography system with font families, sizes, and patterns
packages/shared/src/constants/tag.constants.ts Added tag type configurations and committee category severity mappings
packages/shared/src/constants/meeting.constants.ts Extended MeetingTypeBadge with severity and icon properties
apps/lfx-one/src/server/services/supabase.service.ts Removed unused methods, streamlined to focus on email management
apps/lfx-one/src/server/routes/projects.route.ts Removed recent-activity endpoint
apps/lfx-one/src/app/shared/services/activity.service.ts Removed unused activity service
apps/lfx-one/src/app/shared/components/tag/tag.component.ts Added new reusable tag component wrapper
apps/lfx-one/src/app/modules/meetings/* Reorganized meeting components with clearer module boundaries
apps/lfx-one/e2e/*.spec.ts Removed deprecated E2E test files
apps/lfx-one/.env.example Updated database configuration comments

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

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: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/lfx-one/src/app/modules/meetings/meeting-not-found/meeting-not-found.component.html (1)

49-49: Fix malformed Tailwind class concatenation on action buttons row.

The class attribute has a spacing/concatenation error: sm:items-centerflex-col concatenates two distinct Tailwind classes without a space separator. This breaks Tailwind parsing and produces incorrect responsive layout behavior.

Apply this diff to fix the class attribute:

-          <div class="flex sm:items-centerflex-col sm:flex-row gap-6 justify-center">
+          <div class="flex sm:items-center flex-col sm:flex-row gap-6 justify-center">

This ensures the button row properly centers items on small screens and switches to a row layout on tablet/desktop breakpoints.

apps/lfx-one/src/server/services/supabase.service.ts (1)

228-269: updateEmailPreferences has a small race and assumes non-empty responses

There’s a check‑then‑create pattern: two concurrent calls could both see no existing preferences and attempt to create, depending on DB constraints leading to either duplicates or a failed insert. Also, both the create and update branches assume result[0] exists; an empty array (e.g., if no rows matched the PATCH) would return undefined despite the EmailPreferences return type. Consider using an atomic upsert pattern or handling insert conflicts, and add a simple guard that throws if the response array is empty before returning.

🧹 Nitpick comments (13)
apps/lfx-one/src/app/modules/settings/components/user-permissions-table/user-permissions-table.component.ts (1)

81-82: Consider reformatting the multiline string for better readability.

The confirmation message spans multiple lines with inconsistent indentation. Consider using a template literal with proper formatting for improved code readability.

Apply this diff to improve formatting:

-      message: `Are you sure you want to remove ${userName} from this project? This will revoke all their permissions for this project
-      and cannot be undone.`,
+      message: `Are you sure you want to remove ${userName} from this project? ` +
+        `This will revoke all their permissions for this project and cannot be undone.`,
apps/lfx-one/src/app/modules/meetings/components/meeting-delete-type-selection/meeting-delete-type-selection.component.ts (1)

24-24: Optional: Consider defensive null check.

While the dialog data is typically provided when opening this dialog, adding a null check would make the component more defensive against unexpected usage.

-  public readonly meeting: Meeting = this.dialogConfig.data.meeting;
+  public readonly meeting: Meeting = this.dialogConfig.data?.meeting;

Alternatively, you could provide a fallback or throw a more descriptive error if data is missing. However, this is a low-priority improvement given that the component likely functions correctly in its current usage contexts.

apps/lfx-one/src/server/services/supabase.service.ts (2)

4-20: Consider failing fast when required Supabase env vars are missing

SUPABASE_URL and POSTGRES_API_KEY are used without validation, so misconfiguration yields a base URL like undefined/rest/v1 and an empty API key, causing opaque downstream failures. Consider throwing a clear error in the constructor if either is missing so misconfigurations surface early in logs.


136-198: Primary email update is non-transactional; consider reducing race window

setPrimaryEmail performs two separate updates (unset current primary, then set new primary). Under concurrent updates for the same user, there is a brief window where no primary exists or another request could change the state in between. If you expect concurrent changes, consider consolidating this into a single backend operation (e.g., stored function/RPC or DB-side transaction) that atomically moves the primary flag.

apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.ts (1)

47-59: Consider more robust color-to-severity mapping.

The current implementation uses includes() to detect color keywords in config.textColor, which may be fragile if the color string format changes or contains unexpected values.

Consider:

  1. If MEETING_TYPE_CONFIGS provides structured color values, use those directly instead of string parsing.
  2. Add a default mapping or severity field to MEETING_TYPE_CONFIGS to avoid runtime color string parsing.
  3. Alternatively, add validation or logging for unmatched colors to detect configuration issues.

Example improvement if config structure can be enhanced:

// In the shared constants file, add severity directly to config
export const MEETING_TYPE_CONFIGS = {
  webinar: { 
    label: 'Webinar', 
    severity: 'info' as const,
    // ... other fields
  },
  // ...
};

Then use:

const severity = config.severity ?? 'secondary';
packages/shared/src/interfaces/components.interface.ts (1)

10-13: Consider consolidating duplicate severity types.

TagSeverityOptions and BadgeSeverityOptions define identical severity type unions. Consider extracting a shared base type to follow DRY principles:

type SeverityLevel = 'info' | 'success' | 'warn' | 'danger' | 'secondary' | 'contrast';

export interface BadgeSeverityOptions {
  severity: SeverityLevel;
}

export interface TagSeverityOptions {
  severity: SeverityLevel;
}

This would make future severity updates easier to maintain across both badge and tag components.

Also applies to: 41-48

apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.ts (1)

6-7: Reactive search form wiring looks good; consider optional model→form sync

The switch to a reactive searchForm that pushes valueChanges into the searchQuery signal is consistent with how MeetingsDashboardComponent consumes searchQuery and should behave as expected. The unconditional timeFilter.set(value) also aligns with how the dashboard drives upcoming vs. past meeting loading.

One optional improvement: if you ever need to initialize or update searchQuery from the parent (e.g., via route params or a “preset search”), this component currently doesn’t reflect that back into the form control. You could, in the future, add a small effect/valueChanges bridge from this.searchQuery() into this.searchForm (or set the initial control value from this.searchQuery() in the constructor) to keep them fully in sync.

Also applies to: 13-13, 24-38, 41-42

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

78-95: Consider differentiating h4, h5, and h6 styles.

Currently, h4, h5, and h6 have identical typography definitions (0.875rem / 400 / 1.5). While this might be intentional for this design system, typical typographic hierarchies differentiate these heading levels through weight or size variations.

If differentiation is needed, consider:

    /** H4 heading - 14px / text-sm / normal */
    h4: {
      size: '0.875rem',
      weight: 400,
      lineHeight: 1.5,
    },
    /** H5 heading - 14px / text-sm / normal */
    h5: {
      size: '0.875rem',
-     weight: 400,
+     weight: 500,
      lineHeight: 1.5,
    },
    /** H6 heading - 14px / text-sm / normal */
    h6: {
      size: '0.875rem',
-     weight: 400,
+     weight: 600,
      lineHeight: 1.5,
    },
apps/lfx-one/src/app/modules/committees/committee-dashboard/committee-dashboard.component.html (1)

75-101: Check empty‑state branching for cases without a project context

The logic:

@if (committees().length === 0 && project()?.uid) { ... }
} @else if (filteredCommittees().length === 0) { ... }

means that if there are zero committees but project()?.uid is falsy, the second branch will show “No {{ committeeLabelPlural.toLowerCase() }} match your filters” even though the real situation is “no committees exist”.

If this dashboard is ever rendered without a valid project()?.uid, consider either:

  • treating “no project” as an error/loading state, or
  • changing the conditions so the “no committees exist” message also covers the !project()?.uid case when committees().length === 0.
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts (1)

11-13: Category severity computation is sound; optional type alignment

The new categorySeverity signal correctly derives a severity from COMMITTEE_CATEGORY_SEVERITY and safely falls back to 'secondary' when the committee or its category is missing or unmapped. This should keep the UI robust as categories evolve.

Optionally, you could type categorySeverity in terms of the shared tag severity type (e.g., via the same alias used by TagProps['severity']) so it stays automatically in sync with the Tag system, rather than repeating the string union here. Not required, but it can reduce drift over time.

Also applies to: 30-35, 62-79

apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.ts (1)

8-22: Meeting badge + delete/cancel wiring look correct; consider deduping badge logic

  • The new imports (delete/cancel modals, RSVP group, registrants display, TagComponent, pipes) and their registration in imports are consistent with how they’re used later in the component/template.
  • meetingTypeBadge now exposes severity alongside badgeClass, icon, and text, and initMeetingTypeBadge() maps meeting types to severities in a way that matches the new tag system.
  • The recurring vs single-meeting delete flow (deleteMeeting, showCancelOccurrenceModal, showDeleteMeetingModal) correctly distinguishes canceling a single occurrence from deleting the entire series and emits meetingDeleted in both success paths.

Given the identical meetingTypeBadge switch here and in MeetingJoinComponent, you might later want to extract a shared helper/type (e.g., in shared meeting constants) to avoid future divergence, but it’s fine as-is.

Also applies to: 41-46, 56-58, 120-125, 360-422, 569-595

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

4-58: Centralized tag configs are well‑structured and type‑safe enough

TagTypeConfig and TAG_TYPE_CONFIGS give a clear, centralized place to manage tag severity/icon/rounding, which should simplify consistent styling across the app. Using TagProps['severity'] ties the config to the TagComponent API, so severity values will stay compatible.

If you ever need stronger guarantees around keys (e.g., to drive autocomplete), you could replace Record<string, TagTypeConfig> with a keyed union type, but what you have now is perfectly serviceable.

apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.ts (1)

11-19: Meeting-join badge + registrants/tag wiring look consistent with meeting-card

  • Swapping in MeetingRegistrantsDisplayComponent, RsvpButtonGroupComponent, and TagComponent in the imports and template wiring keeps this view aligned with the new meetings UI architecture.
  • The meetingTypeBadge signal now includes severity and uses the same mapping as MeetingCardComponent, so both screens will render meeting-type tags consistently.
  • showRegistrants and onRegistrantsToggle provide a simple, clear toggle for the new registrants display component.

As with MeetingCardComponent, you might eventually want to share the meetingTypeBadge mapping between the two components to avoid duplication, but it’s fine for now.

Also applies to: 22-25, 32-48, 76-82, 246-271

📜 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 1602644 and 6aa81c3.

📒 Files selected for processing (110)
  • README.md (2 hunks)
  • apps/lfx-one/.env.example (1 hunks)
  • apps/lfx-one/e2e/helpers/api-mock.helper.ts (1 hunks)
  • apps/lfx-one/e2e/homepage-robust.spec.ts (0 hunks)
  • apps/lfx-one/e2e/homepage.spec.ts (0 hunks)
  • apps/lfx-one/e2e/project-dashboard-robust.spec.ts (0 hunks)
  • apps/lfx-one/e2e/project-dashboard.spec.ts (0 hunks)
  • apps/lfx-one/src/app/app.routes.ts (0 hunks)
  • apps/lfx-one/src/app/layouts/main-layout/main-layout.component.html (1 hunks)
  • apps/lfx-one/src/app/layouts/main-layout/main-layout.component.ts (1 hunks)
  • apps/lfx-one/src/app/layouts/profile-layout/components/profile-stats/profile-stats.component.ts (1 hunks)
  • apps/lfx-one/src/app/layouts/profile-layout/profile-layout.component.ts (1 hunks)
  • apps/lfx-one/src/app/layouts/project-layout/project-layout.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/committees/committee-dashboard/committee-dashboard.component.html (4 hunks)
  • apps/lfx-one/src/app/modules/committees/committee-dashboard/committee-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.html (2 hunks)
  • apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts (4 hunks)
  • apps/lfx-one/src/app/modules/committees/committees.routes.ts (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-form/committee-form.component.html (2 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-form/committee-form.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.ts (3 hunks)
  • apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.ts (3 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/foundation-health/foundation-health.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.html (2 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.html (2 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/recent-progress/recent-progress.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/components/recent-progress/recent-progress.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/agenda-template-selector.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/agenda-template-selector.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.html (3 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.ts (7 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-delete-type-selection/meeting-delete-type-selection.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-modal/meeting-modal.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-platform-features/meeting-platform-features.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-registrants-display/meeting-registrants-display.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-registrants-manager/meeting-registrants-manager.component.ts (2 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-resources-summary/meeting-resources-summary.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-rsvp-details/meeting-rsvp-details.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/meeting-type-selection/meeting-type-selection.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/components/rsvp-button-group/rsvp-button-group.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.html (3 hunks)
  • apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.ts (5 hunks)
  • apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.html (4 hunks)
  • apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.ts (2 hunks)
  • apps/lfx-one/src/app/modules/meetings/meeting-not-found/meeting-not-found.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.html (3 hunks)
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/meetings/meetings.routes.ts (1 hunks)
  • apps/lfx-one/src/app/modules/pages/home/home.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/pages/home/home.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/profile/developer/profile-developer.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/profile/edit/profile-edit.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/profile/email/profile-email.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/profile/password/profile-password.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.html (0 hunks)
  • apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.ts (0 hunks)
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-list-dashboard/mailing-list-dashboard.component.html (0 hunks)
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-list-dashboard/mailing-list-dashboard.component.ts (0 hunks)
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-lists.routes.ts (0 hunks)
  • apps/lfx-one/src/app/modules/project/project.routes.ts (0 hunks)
  • apps/lfx-one/src/app/modules/settings/components/permissions-matrix/permissions-matrix.component.html (1 hunks)
  • apps/lfx-one/src/app/modules/settings/components/permissions-matrix/permissions-matrix.component.ts (3 hunks)
  • apps/lfx-one/src/app/modules/settings/components/user-form/user-form.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/settings/components/user-permissions-table/user-permissions-table.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/settings/settings-dashboard/settings-dashboard.component.ts (1 hunks)
  • apps/lfx-one/src/app/modules/settings/settings.routes.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/header/header.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/organization-search/organization-search.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/persona-selector/persona-selector.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/project-card/project-card.component.html (1 hunks)
  • apps/lfx-one/src/app/shared/components/project-card/project-card.component.ts (2 hunks)
  • apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.html (1 hunks)
  • apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/sidebar/sidebar.component.html (1 hunks)
  • apps/lfx-one/src/app/shared/components/sidebar/sidebar.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/tag/tag.component.html (1 hunks)
  • apps/lfx-one/src/app/shared/components/tag/tag.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/components/user-search/user-search.component.ts (1 hunks)
  • apps/lfx-one/src/app/shared/interceptors/authentication.interceptor.ts (1 hunks)
  • apps/lfx-one/src/app/shared/providers/feature-flag.provider.ts (1 hunks)
  • apps/lfx-one/src/app/shared/services/activity.service.ts (0 hunks)
  • apps/lfx-one/src/server/routes/projects.route.ts (1 hunks)
  • apps/lfx-one/src/server/services/supabase.service.ts (1 hunks)
  • apps/lfx-one/src/styles.scss (2 hunks)
  • apps/lfx-one/tailwind.config.js (1 hunks)
  • charts/lfx-v2-ui/README.md (1 hunks)
  • docs/architecture.md (0 hunks)
  • packages/shared/src/constants/index.ts (2 hunks)
  • packages/shared/src/constants/meeting.constants.ts (1 hunks)
  • packages/shared/src/constants/tag.constants.ts (1 hunks)
  • packages/shared/src/constants/typography.constants.ts (1 hunks)
  • packages/shared/src/interfaces/activity.interface.ts (0 hunks)
  • packages/shared/src/interfaces/components.interface.ts (2 hunks)
  • packages/shared/src/interfaces/index.ts (0 hunks)
  • packages/shared/src/interfaces/permissions.interface.ts (1 hunks)
💤 Files with no reviewable changes (15)
  • apps/lfx-one/src/app/app.routes.ts
  • packages/shared/src/interfaces/activity.interface.ts
  • packages/shared/src/interfaces/index.ts
  • apps/lfx-one/src/app/modules/project/project.routes.ts
  • apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.html
  • apps/lfx-one/src/app/shared/services/activity.service.ts
  • apps/lfx-one/e2e/project-dashboard.spec.ts
  • apps/lfx-one/e2e/homepage-robust.spec.ts
  • apps/lfx-one/e2e/homepage.spec.ts
  • apps/lfx-one/src/app/modules/project/dashboard/project-dashboard/project.component.ts
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-list-dashboard/mailing-list-dashboard.component.html
  • docs/architecture.md
  • apps/lfx-one/e2e/project-dashboard-robust.spec.ts
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-list-dashboard/mailing-list-dashboard.component.ts
  • apps/lfx-one/src/app/modules/project/mailing-lists/mailing-lists.routes.ts
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-10-21T21:19:13.599Z
Learnt from: andrest50
Repo: linuxfoundation/lfx-v2-ui PR: 125
File: apps/lfx-one/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts:345-350
Timestamp: 2025-10-21T21:19:13.599Z
Learning: In the Angular meeting card component (apps/lfx-one/src/app/modules/project/meetings/components/meeting-card/meeting-card.component.ts), when selecting between `summary.summary_data.edited_content` and `summary.summary_data.content`, the logical OR operator (`||`) is intentionally used instead of nullish coalescing (`??`) because empty string edited_content should fall back to the original content rather than being displayed as empty.

Applied to files:

  • apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.ts
  • apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-type-selection/meeting-type-selection.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-platform-features/meeting-platform-features.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-resources-summary/meeting-resources-summary.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-delete-type-selection/meeting-delete-type-selection.component.ts
  • apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/agenda-template-selector.component.ts
  • apps/lfx-one/src/app/modules/meetings/components/meeting-rsvp-details/meeting-rsvp-details.component.ts
  • apps/lfx-one/src/app/modules/meetings/components/agenda-template-selector/agenda-template-selector.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-registrants-display/meeting-registrants-display.component.ts
  • apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.html
  • apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.ts
  • apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.ts
  • apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.ts
  • apps/lfx-one/src/app/modules/dashboards/components/dashboard-meeting-card/dashboard-meeting-card.component.ts
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.ts
  • apps/lfx-one/src/app/modules/dashboards/components/my-meetings/my-meetings.component.ts
  • apps/lfx-one/src/app/modules/meetings/meeting-manage/meeting-manage.component.html
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.html
  • apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.html
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.html
  • apps/lfx-one/src/app/modules/meetings/components/meeting-modal/meeting-modal.component.ts
  • apps/lfx-one/src/app/modules/meetings/meeting-not-found/meeting-not-found.component.html
  • apps/lfx-one/src/app/modules/profile/edit/profile-edit.component.ts
  • apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.ts
  • apps/lfx-one/src/app/modules/meetings/components/meeting-card/meeting-card.component.ts
  • apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.ts
📚 Learning: 2025-10-31T14:39:34.343Z
Learnt from: mauriciozanettisalomao
Repo: linuxfoundation/lfx-v2-ui PR: 130
File: apps/lfx-one/src/server/controllers/profile.controller.ts:303-370
Timestamp: 2025-10-31T14:39:34.343Z
Learning: The synthetic timestamps (created_at, updated_at, verified_at) in the getUserEmails transformation for apps/lfx-one/src/server/controllers/profile.controller.ts are temporary placeholders. Real timestamps will be included in the NATS response once the Auth0 backend implementation is complete.

Applied to files:

  • apps/lfx-one/src/app/modules/profile/email/profile-email.component.ts
  • apps/lfx-one/src/server/services/supabase.service.ts
🧬 Code graph analysis (8)
apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.ts (4)
apps/lfx-one/src/app/modules/dashboards/board-member/board-member-dashboard.component.ts (1)
  • Component (20-85)
apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts (1)
  • Component (19-434)
apps/lfx-one/src/app/modules/dashboards/core-developer/core-developer-dashboard.component.ts (1)
  • Component (13-25)
apps/lfx-one/src/app/modules/dashboards/maintainer/maintainer-dashboard.component.ts (1)
  • Component (13-25)
apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.ts (2)
apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts (1)
  • Component (19-434)
apps/lfx-one/src/app/shared/components/sidebar/sidebar.component.ts (1)
  • Component (18-142)
packages/shared/src/constants/tag.constants.ts (1)
packages/shared/src/interfaces/components.interface.ts (1)
  • TagProps (54-65)
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts (1)
packages/shared/src/constants/tag.constants.ts (1)
  • COMMITTEE_CATEGORY_SEVERITY (64-99)
apps/lfx-one/src/app/modules/dashboards/components/organization-involvement/organization-involvement.component.ts (5)
apps/lfx-one/src/app/modules/committees/committee-view/committee-view.component.ts (1)
  • Component (23-235)
apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.ts (1)
  • Component (20-113)
apps/lfx-one/src/app/modules/dashboards/components/pending-actions/pending-actions.component.ts (1)
  • Component (10-28)
apps/lfx-one/src/app/modules/meetings/meeting-join/meeting-join.component.ts (1)
  • Component (34-439)
apps/lfx-one/src/app/shared/components/project-selector/project-selector.component.ts (1)
  • Component (15-150)
apps/lfx-one/src/app/shared/components/tag/tag.component.ts (1)
packages/shared/src/interfaces/components.interface.ts (1)
  • TagProps (54-65)
apps/lfx-one/src/app/modules/committees/components/committee-table/committee-table.component.ts (1)
packages/shared/src/constants/tag.constants.ts (1)
  • COMMITTEE_CATEGORY_SEVERITY (64-99)
apps/lfx-one/src/app/modules/meetings/meetings-dashboard/components/meetings-top-bar/meetings-top-bar.component.ts (1)
apps/lfx-one/src/app/modules/meetings/meetings-dashboard/meetings-dashboard.component.ts (1)
  • Component (18-167)

@asithade asithade merged commit 6f3728f into main Nov 20, 2025
7 checks passed
@asithade asithade deleted the refactor/LFXV2-769 branch November 20, 2025 17:08
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.

3 participants