Skip to content

feat: Angular 18 version update#1147

Merged
DhaaraniCIT merged 6 commits intomasterfrom
angular-18-version-update
Jan 21, 2025
Merged

feat: Angular 18 version update#1147
DhaaraniCIT merged 6 commits intomasterfrom
angular-18-version-update

Conversation

@DhaaraniCIT
Copy link
Contributor

@DhaaraniCIT DhaaraniCIT commented Jan 10, 2025

Description

feat: Angular 18 version update

Clickup

https://app.clickup.com/

Summary by CodeRabbit

Release Notes

  • Dependencies

    • Upgraded Angular packages from version 17.x.x to version 18.x.x
    • Updated Angular CLI, core, common, compiler, and related packages
  • New Features

    • Migrated HTTP client configuration to a new provider-based approach using provideHttpClient and provideHttpClientTesting
    • Enhanced dynamic branding content integration throughout the application
  • Testing

    • Refactored HTTP client testing setup across multiple components and services
    • Replaced HttpClientModule and HttpClientTestingModule with new provider functions
    • Improved dependency injection configuration in test environments
  • Code Structure

    • Modernized Angular testing utilities and configuration
    • Enhanced modularity in HTTP service provisioning
    • Streamlined import and provider declarations
    • Corrected typos and improved labeling consistency in branding configurations

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This pull request updates the Angular project's dependencies and testing configuration across multiple files. The primary changes involve upgrading Angular-related packages from version 17.x.x to 18.x.x in the package.json file and modifying the HTTP client testing setup in numerous spec files. The modifications shift from using HttpClientModule and HttpClientTestingModule to a more modular approach using provideHttpClient, provideHttpClientTesting, and withInterceptorsFromDi(). These changes align with the latest Angular testing practices, improving dependency injection and HTTP client configuration in the test environments.

Changes

File Change Summary
package.json Updated Angular dependencies from version 17.x.x to 18.x.x
src/app/app.module.ts Replaced HttpClientModule with provideHttpClient(withInterceptorsFromDi())
Multiple spec files Replaced HttpClientModule and HttpClientTestingModule with provideHttpClient() and provideHttpClientTesting()

Possibly related PRs

Suggested reviewers

  • ashwin1111
  • Hrishabh17

Poem

🐰 Hop, skip, and a provider's jump,
Angular's testing gets a new pump!
Modules fade, providers rise,
Dependency injection, our new prize!
CodeRabbit's magic makes testing shine bright! 🌟


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1fa4d62 and c4107ca.

📒 Files selected for processing (1)
  • src/app/shared/components/configuration/configuration-select-field/configuration-select-field.component.html (1 hunks)

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added the size/XL Extra Large PR label Jan 10, 2025
Copy link
Contributor

@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: 1

🔭 Outside diff range comments (1)
src/app/core/services/qbd/qbd-iif-log/qbd-iif-logs.service.spec.ts (1)

Line range hint 32-32: Fix duplicate test case names.

There are two test cases with the identical name 'getQbdAccountingExports service check attributes check'. This can lead to confusion when tests fail. Consider renaming them to be more specific:

-  it('getQbdAccountingExports service check attributes check', () => {
+  it('should get QBD accounting exports without date filter', () => {

-  it('getQbdAccountingExports service check attributes check', () => {
+  it('should get QBD accounting exports with date filter', () => {

Also applies to: 83-83

🧹 Nitpick comments (19)
src/app/shared/components/si/helper/skip-export/skip-export.component.spec.ts (1)

1-1: Consider bulk enabling tests after migration verification.

The migration to Angular 18's new HTTP testing pattern has been consistently implemented across all files. However, all test suites are currently disabled with 'xdescribe'. Consider creating a follow-up task to systematically verify and enable all migrated tests to ensure continued test coverage.

Would you like me to help create a GitHub issue to track the systematic verification and enabling of migrated tests?

src/app/integrations/qbd/qbd-main/qbd-main.component.spec.ts (1)

4-4: Consider organizing imports by category.

Group related imports together for better readability:

  1. Angular core/common imports
  2. Testing utilities
  3. RxJS
  4. Application imports
import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
+import { provideHttpClientTesting } from '@angular/common/http/testing';
+import { Router } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { of } from 'rxjs';
+
import { QbdMainComponent } from './qbd-main.component';
-import { provideHttpClientTesting } from '@angular/common/http/testing';
-import { of } from 'rxjs';
import { QBDExportSettingResponse, QBDExportSettingResponse2 } from '../qbd-shared/qbd-export-setting/qbd-export-setting.fixture';
import { QbdExportSettingService } from '../../../core/services/qbd/qbd-configuration/qbd-export-setting.service';
import { QbdMappingService } from '../../../core/services/qbd/qbd-mapping/qbd-mapping.service';
-import { Router } from '@angular/router';
-import { RouterTestingModule } from '@angular/router/testing';
-import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';

Also applies to: 11-11

src/app/shared/components/helper/app-landing-page-header/app-landing-page-header.component.spec.ts (1)

18-19: Remove unnecessary inline comment.

The comment about RouterTestingModule is redundant as it's a standard practice in Angular testing.

-    imports: [RouterTestingModule // Added RouterTestingModule for navigation testing
+    imports: [RouterTestingModule
     ],
src/app/core/services/qbd/qbd-configuration/qbd-field-mapping.service.spec.ts (2)

Line range hint 19-25: Simplify service initialization in beforeEach.

The service is being initialized twice unnecessarily:

  1. Using TestBed.inject
  2. Using injector.inject
 TestBed.configureTestingModule({
   imports: [],
   providers: [QbdFieldMappingService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
 });
-service = TestBed.inject(QbdFieldMappingService);
 injector = getTestBed();
 service = injector.inject(QbdFieldMappingService);
 httpMock = injector.inject(HttpTestingController);

1-1: Overall implementation of Angular 18 HTTP testing changes looks good!

The migration from HttpClientModule/HttpClientTestingModule to the new provider-based approach is consistently implemented across all files. The changes align with Angular 18's best practices for HTTP testing configuration.

Consider creating a shared testing module or utility function to centralize these common HTTP testing providers, reducing duplication across spec files.

src/app/integrations/landing/landing.component.spec.ts (1)

6-7: LGTM! The HTTP client configuration has been correctly updated for Angular 18.

The changes follow the new provider-based approach, replacing the deprecated module imports with the recommended configuration.

Consider grouping related providers together for better readability:

 providers: [
     { provide: EventsService, useValue: service1 },
     { provide: OrgService, useValue: service2 },
     { provide: Router, useValue: routerSpy },
+    // HTTP configuration
     provideHttpClient(withInterceptorsFromDi()),
     provideHttpClientTesting()
 ]

Also applies to: 30-38

src/app/app.module.ts (1)

25-66: Improve provider organization for better maintainability.

The providers array would benefit from logical grouping and comments for better maintainability.

Consider organizing providers into logical groups:

 providers: [
+    // Core services
     MessageService,
+
+    // JWT configuration
     {
         provide: JWT_OPTIONS,
         useValue: JWT_OPTIONS
     },
     JwtHelperService,
+
+    // HTTP configuration
     {
         provide: HTTP_INTERCEPTORS,
         useClass: JwtInterceptor,
         multi: true
     },
     provideHttpClient(withInterceptorsFromDi()),
+
+    // Error handling
     {
         provide: ErrorHandler,
         useClass: GlobalErrorHandler
     },
+
+    // Monitoring
     {
         provide: Sentry.TraceService,
         deps: [Router]
     },
+
+    // Initialization
     {
         provide: APP_INITIALIZER,
         useFactory: (brandingService: BrandingService) => () => brandingService.init(),
         deps: [BrandingService, Sentry.TraceService],
         multi: true
     }
 ]
src/app/core/services/si/si-core/si-workspace.service.spec.ts (1)

1-1: LGTM! HTTP testing setup follows Angular 18 best practices.

The migration from HttpClientTestingModule to provideHttpClient and provideHttpClientTesting is correctly implemented.

Consider adding error handling tests to verify how the service behaves when the HTTP requests fail.

Also applies to: 7-7, 17-19

src/app/core/services/common/workspace.service.spec.ts (1)

4-4: LGTM! HTTP testing configuration is properly updated.

Good use of type annotations in the test callbacks.

Consider adding tests for:

  • Error responses from the API
  • Edge cases with different workspace states

Also applies to: 7-7, 18-20

src/app/integrations/bamboo-hr/configuration/configuration.component.spec.ts (2)

1-1: LGTM! Component testing setup is properly updated for Angular 18.

The HTTP client configuration is correctly implemented alongside other providers.

Consider organizing the providers array more cleanly:

 providers: [
     FormBuilder,
     { provide: OrgService, useValue: service1 },
-    provideHttpClient(withInterceptorsFromDi())
+    // HTTP configuration
+    provideHttpClient(
+      withInterceptorsFromDi()
+    )
 ]

Also applies to: 22-29


1-1: Overall: HTTP testing configuration successfully migrated to Angular 18.

The changes consistently implement Angular 18's new dependency injection system across all test files, replacing HttpClientModule/HttpClientTestingModule with provideHttpClient and provideHttpClientTesting. This migration improves the testing setup by:

  • Aligning with Angular's new standalone architecture
  • Providing better control over HTTP interceptors
  • Making the dependency injection more explicit

Consider creating a shared testing utility to centralize the HTTP testing configuration, reducing duplication across test files.

src/app/core/services/qbd/qbd-configuration/qbd-advanced-setting.service.spec.ts (1)

20-20: Improve provider configuration readability

Consider formatting providers on separate lines for better readability:

-    providers: [QbdAdvancedSettingService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting()]
+    providers: [
+      QbdAdvancedSettingService,
+      provideHttpClient(withInterceptorsFromDi()),
+      provideHttpClientTesting()
+    ]
src/app/shared/components/si/core/intacct-connector/intacct-connector.component.spec.ts (1)

31-39: Consider grouping providers by type

For better maintainability, consider organizing providers into logical groups:

     providers: [
+      // Core providers
       FormBuilder,
+      provideHttpClient(withInterceptorsFromDi()),
+
+      // Mock providers
       { provide: IntacctConnectorService, useValue: mockConnectorService },
       { provide: SiMappingsService, useValue: mockMappingsService },
       { provide: MessageService, useValue: mockMessageService },
+
+      // Components
       IntacctComponent,
-      IntacctOnboardingConnectorComponent,
-      provideHttpClient(withInterceptorsFromDi())
+      IntacctOnboardingConnectorComponent
     ]
src/app/core/services/travelperk/travelperk.service.spec.ts (1)

1-1: Consider implementing a phased test migration strategy

All test suites are currently disabled with xdescribe. While this is a valid temporary approach during the Angular 18 migration, consider:

  1. Creating a tracking issue for re-enabling tests
  2. Implementing a phased approach to enable tests incrementally
  3. Adding migration status comments in each disabled test suite
  4. Setting up CI checks to prevent merging PRs with disabled tests in the future

This will help maintain test coverage during and after the migration.

src/app/integrations/travelperk/travelperk.component.spec.ts (1)

1-1: Consider creating a migration plan for disabled tests.

I notice a pattern of disabled test suites across multiple files. While this might be a temporary measure during the Angular 18 migration, it's important to:

  1. Document the reason for disabling these tests
  2. Create a tracking issue for re-enabling them
  3. Ensure they pass with the new Angular 18 changes

This will help maintain the test coverage and prevent technical debt.

src/app/integrations/qbd/qbd-main/qbd-mapping/qbd-generic-mapping/qbd-generic-mapping.component.spec.ts (1)

39-44: Consider adding HTTP interceptor tests.

Since the component uses HTTP client with interceptors, consider adding test cases to verify that interceptors are correctly applied to HTTP requests.

src/app/integrations/bamboo-hr/bamboo-hr.component.spec.ts (1)

43-52: Consider simplifying test setup using TestBed.inject.

The current setup injects services both in providers and manually. Consider using TestBed.inject consistently:

-    formBuilder = TestBed.inject(FormBuilder);
-    component = fixture.componentInstance;
-    orgService = TestBed.inject(OrgService);
-    bambooHrService = TestBed.inject(BambooHrService);
+    const injected = TestBed.inject(Object.freeze({
+      formBuilder: FormBuilder,
+      orgService: OrgService,
+      bambooHrService: BambooHrService
+    }));
+    ({ formBuilder, orgService, bambooHrService } = injected);
+    component = fixture.componentInstance;
src/app/integrations/qbd/qbd-main/qbd-dashboard/qbd-dashboard.component.spec.ts (1)

1-1: Consider improving provider formatting for better readability.

While the HTTP client configuration is functionally correct, consider separating the providers onto different lines:

-        { provide: IntegrationsToastService, useValue: service3 }, provideHttpClient(withInterceptorsFromDi())]
+        { provide: IntegrationsToastService, useValue: service3 },
+        provideHttpClient(withInterceptorsFromDi())
+      ]

Also applies to: 39-45

src/app/core/services/qbd/qbd-mapping/qbd-mapping.service.spec.ts (1)

Line range hint 14-15: Overall HTTP client testing migration looks good!

The changes consistently implement the new Angular 18 approach for HTTP client testing across all files. The migration from HttpClientTestingModule to provideHttpClient/provideHttpClientTesting is properly done, following the latest Angular best practices.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 95d7c06 and 47f5a8c.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (52)
  • package.json (2 hunks)
  • src/app/app.module.ts (2 hunks)
  • src/app/auth/login/login.component.spec.ts (2 hunks)
  • src/app/core/guard/auth.guard.spec.ts (2 hunks)
  • src/app/core/interceptor/jwt.interceptor.spec.ts (2 hunks)
  • src/app/core/interceptor/jwt.interceptor.ts (1 hunks)
  • src/app/core/services/bamboo-hr/bamboo-hr.service.spec.ts (2 hunks)
  • src/app/core/services/common/api.service.spec.ts (2 hunks)
  • src/app/core/services/common/auth.service.spec.ts (2 hunks)
  • src/app/core/services/common/clone-setting.service.spec.ts (2 hunks)
  • src/app/core/services/common/helper.service.spec.ts (1 hunks)
  • src/app/core/services/common/workspace.service.spec.ts (2 hunks)
  • src/app/core/services/integration/refiner.service.spec.ts (2 hunks)
  • src/app/core/services/misc/user.service.spec.ts (2 hunks)
  • src/app/core/services/org/org.service.spec.ts (3 hunks)
  • src/app/core/services/qbd/qbd-configuration/qbd-advanced-setting.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-configuration/qbd-export-setting.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-configuration/qbd-field-mapping.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-core/qbd-auth.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-core/qbd-workspace.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-iif-log/qbd-iif-logs.service.spec.ts (2 hunks)
  • src/app/core/services/qbd/qbd-mapping/qbd-mapping.service.spec.ts (2 hunks)
  • src/app/core/services/si/si-configuration/si-advanced-setting.service.spec.ts (1 hunks)
  • src/app/core/services/si/si-configuration/si-export-setting.service.spec.ts (2 hunks)
  • src/app/core/services/si/si-configuration/si-import-setting.service.spec.ts (1 hunks)
  • src/app/core/services/si/si-core/si-auth.service.spec.ts (2 hunks)
  • src/app/core/services/si/si-core/si-workspace.service.spec.ts (2 hunks)
  • src/app/core/services/travelperk/travelperk.service.spec.ts (2 hunks)
  • src/app/integrations/bamboo-hr/bamboo-hr.component.spec.ts (2 hunks)
  • src/app/integrations/bamboo-hr/configuration/configuration.component.spec.ts (2 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.spec.ts (3 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-export-log.component.spec.ts (2 hunks)
  • src/app/integrations/intacct/intacct-shared/intacct-c1-import-settings/intacct-c1-import-settings.component.spec.ts (3 hunks)
  • src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.spec.ts (3 hunks)
  • src/app/integrations/intacct/intacct.component.spec.ts (2 hunks)
  • src/app/integrations/integrations.component.spec.ts (2 hunks)
  • src/app/integrations/landing/landing.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd-main/qbd-dashboard/qbd-dashboard.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd-main/qbd-main.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd-main/qbd-mapping/qbd-generic-mapping/qbd-generic-mapping.component.spec.ts (3 hunks)
  • src/app/integrations/qbd/qbd-shared/qbd-advanced-setting/qbd-advanced-setting.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd-shared/qbd-export-setting/qbd-export-setting.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd-shared/qbd-field-mapping/qbd-field-mapping.component.spec.ts (2 hunks)
  • src/app/integrations/qbd/qbd.component.spec.ts (2 hunks)
  • src/app/integrations/qbo/qbo-shared/qbo-export-settings/qbo-export-settings.component.spec.ts (4 hunks)
  • src/app/integrations/qbo/qbo.component.spec.ts (2 hunks)
  • src/app/integrations/travelperk/travelperk.component.spec.ts (2 hunks)
  • src/app/shared/components/configuration/configuration-step-header/configuration-step-header.component.spec.ts (1 hunks)
  • src/app/shared/components/helper/app-landing-page-header/app-landing-page-header.component.spec.ts (2 hunks)
  • src/app/shared/components/qbd/helper/qbd-onboarding-stepper/qbd-onboarding-stepper.component.spec.ts (2 hunks)
  • src/app/shared/components/si/core/intacct-connector/intacct-connector.component.spec.ts (2 hunks)
  • src/app/shared/components/si/helper/skip-export/skip-export.component.spec.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/app/core/interceptor/jwt.interceptor.ts
🔇 Additional comments (65)
src/app/integrations/qbo/qbo-shared/qbo-export-settings/qbo-export-settings.component.spec.ts (2)

8-8: LGTM! Import changes align with Angular 18's new testing practices.

The imports have been correctly updated to use the new provider-based HTTP client testing setup.

Also applies to: 45-45


Line range hint 82-105: TestBed configuration updated correctly for Angular 18.

The configuration has been properly updated to use the new provider-based approach. However, let's verify that all HTTP-related test cases still pass with this new setup.

Run the following script to check for any HTTP-related test cases that might need attention:

✅ Verification successful

HTTP client configuration verified - no test impact.

The spec file only uses HTTP providers for dependency injection setup and doesn't contain any direct HTTP-related test cases. The migration to the new provider-based approach is safe and correct.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find all HTTP-related test cases in the spec file
# Look for patterns that might need updates with the new HTTP client setup

rg -A 3 'HttpClient|http\.' 'src/app/integrations/qbo/qbo-shared/qbo-export-settings/qbo-export-settings.component.spec.ts'

Length of output: 730

src/app/core/services/si/si-configuration/si-import-setting.service.spec.ts (2)

7-7: Enable the test suite after migration verification.

The test suite is currently disabled (xdescribe). Please verify the migration and enable the test suite by removing the 'x' prefix.


12-14: LGTM! Correctly implements Angular 18's HTTP testing pattern.

The changes properly implement the new Angular 18 approach for HTTP client testing by replacing HttpClientTestingModule with standalone providers.

src/app/core/services/si/si-configuration/si-advanced-setting.service.spec.ts (2)

7-7: Enable the test suite after migration verification.

The test suite is currently disabled (xdescribe). Please verify the migration and enable the test suite by removing the 'x' prefix.


12-14: LGTM! Correctly implements Angular 18's HTTP testing pattern.

The changes properly implement the new Angular 18 approach for HTTP client testing by replacing HttpClientTestingModule with standalone providers.

src/app/core/services/misc/user.service.spec.ts (2)

7-7: Enable the test suite after migration verification.

The test suite is currently disabled (xdescribe) but contains valid test implementation for user profile storage. Please verify the migration and enable the test suite.


13-15: LGTM! Correctly implements Angular 18's HTTP testing pattern.

The changes properly implement the new Angular 18 approach for HTTP client testing by replacing HttpClientTestingModule with standalone providers.

src/app/shared/components/si/helper/skip-export/skip-export.component.spec.ts (2)

8-8: Enable test suite and test case after migration verification.

Both the test suite (xdescribe) and test case (xit) are disabled. Please verify the migration and enable them by removing the 'x' prefix.

Also applies to: 24-24


14-17: LGTM! Correctly implements Angular 18's HTTP testing pattern.

The changes properly implement the new Angular 18 approach for HTTP client testing by replacing HttpClientTestingModule with standalone providers while maintaining the FormBuilder integration.

src/app/core/services/common/helper.service.spec.ts (2)

8-8: Remove the 'x' prefix to enable the test suite.

The test suite is currently disabled with the 'x' prefix. This might have been unintentionally left during development.


14-20: LGTM! HTTP client setup follows Angular 18 best practices.

The migration from HttpClientTestingModule to provideHttpClient and provideHttpClientTesting is correctly implemented.

src/app/shared/components/configuration/configuration-step-header/configuration-step-header.component.spec.ts (2)

7-7: Remove the 'x' prefix to enable the test suite.

The test suite is currently disabled with the 'x' prefix. This might have been unintentionally left during development.


13-16: LGTM! Component test setup follows Angular 18 best practices.

The migration to the new HTTP client testing approach is correctly implemented while maintaining the component declaration.

src/app/core/services/common/clone-setting.service.spec.ts (2)

8-8: Remove the 'x' prefix to enable the test suite.

The test suite is currently disabled with the 'x' prefix. This might have been unintentionally left during development.


17-19: LGTM! Service test setup follows Angular 18 best practices.

The migration to provideHttpClient and provideHttpClientTesting is correctly implemented while maintaining the HttpTestingController setup.

src/app/core/services/integration/refiner.service.spec.ts (2)

17-19: LGTM! Service test setup follows Angular 18 best practices.

The migration to provideHttpClient and provideHttpClientTesting is correctly implemented.


1-1: Verify complete migration of HTTP client testing setup.

Let's ensure all test files have been migrated from HttpClientTestingModule to the new provider-based approach.

✅ Verification successful

HTTP client testing setup migration is complete

All test files have been successfully migrated to use provideHttpClientTesting() and there are no remaining instances of HttpClientTestingModule.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining usage of HttpClientTestingModule in spec files

echo "Checking for remaining HttpClientTestingModule usage in spec files..."
rg -l "HttpClientTestingModule" "src/**/*.spec.ts"

echo "Checking for potentially missed test files that might need migration..."
rg -l "HttpTestingController" "src/**/*.spec.ts" | \
  xargs rg -L "provideHttpClientTesting"

Length of output: 12297


Script:

#!/bin/bash
# Search with correct path pattern for HttpClientTestingModule
echo "Checking for HttpClientTestingModule imports..."
rg "HttpClientTestingModule" "src"

Length of output: 137

src/app/core/services/si/si-configuration/si-export-setting.service.spec.ts (1)

4-4: HTTP client testing setup correctly migrated to Angular 18 pattern

The changes follow the new Angular 18 testing best practices by:

  • Replacing HttpClientTestingModule with provideHttpClientTesting
  • Using provideHttpClient with withInterceptorsFromDi()
  • Properly configuring the TestBed providers

Also applies to: 6-6, 18-20

src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-export-log.component.spec.ts (1)

5-5: Component test configuration properly updated for Angular 18

The test setup correctly implements the new HTTP client testing pattern while maintaining other necessary providers (FormBuilder, Router).

Also applies to: 7-7, 16-19

src/app/core/guard/auth.guard.spec.ts (1)

3-3: Guard test configuration successfully migrated to Angular 18

The test setup properly implements the new HTTP client configuration while maintaining the existing RouterTestingModule and service mocks.

Also applies to: 22-28

src/app/auth/login/login.component.spec.ts (2)

1-1: Login component test configuration correctly updated for Angular 18

The test setup properly implements the new HTTP client configuration while maintaining the complex provider setup for ActivatedRoute and AuthService.

Also applies to: 26-41


Line range hint 11-11: Verify if tests should remain skipped

The test suite is currently skipped using xdescribe. Please verify if this was intentional or if the tests should be enabled now that the Angular 18 migration is complete.

src/app/core/services/si/si-core/si-auth.service.spec.ts (1)

1-1: LGTM! Changes align with Angular 18's HTTP client testing approach.

The migration from HttpClientTestingModule to provideHttpClient with interceptors is correctly implemented. This change follows Angular 18's recommended practices for more modular dependency injection.

Please verify that all HTTP-related tests still pass after this change:

Also applies to: 7-7, 17-19

✅ Verification successful

HTTP client testing setup is correctly implemented

The changes follow Angular 18's recommended practices:

  • Proper provider configuration with provideHttpClient and withInterceptorsFromDi
  • Correct usage of HttpTestingController for request expectations
  • Consistent with similar changes across the codebase (found in 37 other spec files)

Note: The test suite is currently disabled (using xdescribe), but this is unrelated to the HTTP client changes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that HTTP-related tests pass
ng test --include=src/app/core/services/si/si-core/si-auth.service.spec.ts

Length of output: 169


Script:

#!/bin/bash
# Get the complete content of the test file
cat src/app/core/services/si/si-core/si-auth.service.spec.ts

# Find other spec files using HttpTestingController
rg "HttpTestingController" -l --type ts

# Check for existing usage of provideHttpClientTesting
rg "provideHttpClientTesting" -l --type ts

Length of output: 5984

src/app/core/services/qbd/qbd-core/qbd-auth.service.spec.ts (1)

1-1: LGTM! Consistent implementation of Angular 18's HTTP client testing.

The changes follow the same pattern as other files, correctly implementing the new HTTP client testing approach.

Also applies to: 8-8, 18-20

src/app/integrations/qbd/qbd.component.spec.ts (1)

1-2: LGTM! Component test setup properly updated for Angular 18.

The HTTP client testing configuration is correctly updated while maintaining component-specific test setup and mocks.

Please verify component tests still work as expected:

Also applies to: 28-35

✅ Verification successful

HTTP client setup correctly follows Angular 18 patterns

The HTTP client configuration in the QBD component test matches the standard Angular 18 testing setup, consistently used across the codebase:

  • Uses provideHttpClient() with withInterceptorsFromDi()
  • Properly includes provideHttpClientTesting()
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify component tests pass with new setup
ng test --include=src/app/integrations/qbd/qbd.component.spec.ts

Length of output: 159


Script:

#!/bin/bash
# Search for similar HTTP client test configurations
rg -B2 -A2 "provideHttpClient.*withInterceptorsFromDi" --type ts
rg -B2 -A2 "provideHttpClientTesting" --type ts

# Check for any potential conflicting HTTP configurations
ast-grep --pattern 'TestBed.configureTestingModule({
  $$$
  providers: [$$$]
  $$$
})'

Length of output: 67441

src/app/shared/components/qbd/helper/qbd-onboarding-stepper/qbd-onboarding-stepper.component.spec.ts (1)

1-1: LGTM! Component test setup properly updated while maintaining all dependencies.

The HTTP client testing configuration is correctly updated while preserving other essential dependencies (animations, router, shared module).

Please verify the component's functionality with all dependencies:

Also applies to: 25-32

✅ Verification successful

HTTP client configuration change follows established pattern across test files

The updated HTTP client configuration in this test file follows the same pattern used consistently across 45+ test files in the codebase, including component, service, and guard tests. This confirms the change is part of a proper migration pattern.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify component tests with all dependencies
ng test --include=src/app/shared/components/qbd/helper/qbd-onboarding-stepper/qbd-onboarding-stepper.component.spec.ts

Length of output: 213


Script:

#!/bin/bash
# Search for files importing HTTP client testing utilities
rg -l "provideHttpClient|withInterceptorsFromDi" --type ts

# Search for spec files with HTTP client configuration
rg -l "HttpClient.*spec" --type ts

# Look for specific HTTP client setup patterns in spec files
ast-grep --pattern 'providers: [$$$, provideHttpClient$$$]'

Length of output: 3657

src/app/integrations/qbd/qbd-main/qbd-main.component.spec.ts (1)

30-38: LGTM! TestBed configuration updated correctly.

The changes align with Angular 18's new provider-based approach for HTTP testing:

  • Removed HttpClientTestingModule from imports
  • Added provideHttpClient and provideHttpClientTesting to providers
src/app/integrations/integrations.component.spec.ts (1)

24-32: Consider adding RouterTestingModule to imports.

The component uses Router.navigate in its tests, but RouterTestingModule is not imported. While the Router spy works, including RouterTestingModule would better align with Angular testing practices.

 declarations: [IntegrationsComponent],
-imports: [],
+imports: [RouterTestingModule],
 providers: [
     { provide: OrgService, useValue: service1 },
     { provide: Router, useValue: routerSpy },
     provideHttpClient(withInterceptorsFromDi()),
     provideHttpClientTesting()
 ]
src/app/core/services/common/auth.service.spec.ts (1)

3-3: LGTM! HTTP client configuration properly updated for tests.

The changes correctly implement the new provider-based approach for HTTP client testing in Angular 18.

Also applies to: 8-8, 25-32

src/app/core/services/common/api.service.spec.ts (2)

3-3: LGTM! HTTP client configuration properly updated for tests.

The changes correctly implement the new provider-based approach for HTTP client testing in Angular 18.

Also applies to: 6-6, 22-28


1-1: Verify complete migration to Angular 18 HTTP client configuration.

Let's check if any files still use the old HTTP client configuration.

✅ Verification successful

HTTP client configuration is properly migrated to Angular 18 standards

All files are using the modern HTTP client setup:

  • No deprecated HttpClientModule/HttpClientTestingModule imports found
  • Services correctly use HttpClient injection
  • Tests properly utilize HttpTestingController
  • JWT interceptor follows current best practices
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for files that might still use HttpClientModule or HttpClientTestingModule
echo "Checking for files still using deprecated HTTP client modules..."

# Check for HttpClientModule usage
echo "Files still using HttpClientModule:"
rg "HttpClientModule" -l

# Check for HttpClientTestingModule usage
echo "Files still using HttpClientTestingModule:"
rg "HttpClientTestingModule" -l

# Check for test files that might need updating
echo "Spec files that might need provider updates:"
rg "TestBed.configureTestingModule" "src/**/*.spec.ts" -l

Length of output: 585


Script:

#!/bin/bash
# First, let's understand the project structure
echo "Project structure:"
fd -t f -e ts

# Then search for HTTP-related imports and configurations
echo -e "\nChecking HTTP-related imports:"
rg "import.*Http" -l

# Look for TestBed configurations
echo -e "\nChecking TestBed configurations:"
rg "TestBed\.configureTestingModule" -l

Length of output: 73609


Script:

#!/bin/bash
# Search for HTTP-related imports and configurations
echo "Checking HTTP-related code..."

# Check for HttpClient imports
echo "Files with HttpClient imports:"
rg "import.*HttpClient.*from '@angular/common/http'" -l

# Check for HTTP testing imports
echo -e "\nFiles with HTTP testing imports:"
rg "import.*HttpTestingController.*from '@angular/common/http/testing'" -l

# Check for HTTP providers in TestBed
echo -e "\nFiles with HTTP providers in TestBed:"
rg "providers:.*Http" -l

# Check for HTTP interceptors
echo -e "\nFiles with HTTP interceptors:"
rg "implements.*HttpInterceptor" -l

Length of output: 6705

src/app/core/services/qbd/qbd-core/qbd-workspace.service.spec.ts (1)

1-1: LGTM! HTTP testing setup is consistent with other services.

The migration to Angular 18's new HTTP testing utilities is correctly implemented.

Also applies to: 7-7, 17-19

src/app/core/services/bamboo-hr/bamboo-hr.service.spec.ts (2)

22-28: LGTM! HTTP client testing setup follows Angular 18 best practices

The migration from HttpClientTestingModule to provideHttpClient with provideHttpClientTesting is correctly implemented.


10-10: Tests are currently disabled with xdescribe

Consider enabling these tests by changing xdescribe to describe once the Angular 18 migration is complete. Disabled tests might hide potential issues.

src/app/core/services/qbd/qbd-configuration/qbd-advanced-setting.service.spec.ts (1)

10-10: Tests are currently disabled with xdescribe

src/app/shared/components/si/core/intacct-connector/intacct-connector.component.spec.ts (1)

14-14: Tests are currently disabled with xdescribe

src/app/core/services/travelperk/travelperk.service.spec.ts (2)

22-28: LGTM! Clean and well-organized testing configuration

The HTTP client testing setup is correctly implemented and the providers are well-organized.


10-10: Tests are currently disabled with xdescribe

src/app/integrations/qbd/qbd-shared/qbd-field-mapping/qbd-field-mapping.component.spec.ts (1)

44-50: LGTM! Test configuration updated for Angular 18.

The changes correctly implement the new provider-based approach for HTTP client testing, replacing the older module-based imports.

src/app/core/services/org/org.service.spec.ts (2)

25-31: LGTM! Test configuration updated for Angular 18.

The changes correctly implement the new provider-based approach for HTTP client testing.


12-12: Verify why the test suite is disabled.

The test suite is currently disabled with xdescribe. Please verify if this was intentional or if there are underlying issues that need to be addressed.

✅ Verification successful

Test suites are intentionally disabled as part of development practice

The disabled test suite is part of a consistent pattern across the entire codebase where test suites are disabled using xdescribe. This appears to be an intentional development practice rather than an oversight or issue that needs to be addressed.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for other disabled test suites that might indicate a pattern
rg "xdescribe|fdescribe|xit|fit" -g "*.spec.ts"

Length of output: 44232

src/app/core/services/qbd/qbd-configuration/qbd-export-setting.service.spec.ts (2)

20-22: LGTM! Test configuration updated for Angular 18.

The changes correctly implement the new provider-based approach for HTTP client testing.


10-10: Verify why the test suite is disabled.

The test suite is currently disabled with xdescribe. This appears to be part of a pattern across multiple test files.

src/app/integrations/travelperk/travelperk.component.spec.ts (2)

47-57: LGTM! Test configuration updated for Angular 18.

The changes correctly implement the new provider-based approach for HTTP client testing, including proper setup of MessageService.


Line range hint 13-13: Verify why the test suite is disabled.

The test suite is currently disabled with xdescribe. This is part of a consistent pattern across multiple test files.

src/app/integrations/qbd/qbd-main/qbd-mapping/qbd-generic-mapping/qbd-generic-mapping.component.spec.ts (1)

4-4: LGTM! Angular 18 HTTP testing configuration updated correctly.

The changes correctly implement Angular 18's new approach to HTTP testing configuration by:

  1. Removing HttpClientTestingModule
  2. Adding provideHttpClient with withInterceptorsFromDi
  3. Adding provideHttpClientTesting

Also applies to: 15-15, 39-44

src/app/core/interceptor/jwt.interceptor.spec.ts (1)

3-3: LGTM! Comprehensive JWT interceptor test setup.

The changes correctly implement Angular 18's HTTP testing configuration while maintaining thorough test coverage for JWT interceptor functionality.

Also applies to: 5-5, 32-52

src/app/integrations/bamboo-hr/bamboo-hr.component.spec.ts (1)

1-2: LGTM! Angular 18 HTTP testing configuration updated correctly.

The changes successfully implement Angular 18's new HTTP testing approach.

Also applies to: 43-52

src/app/core/services/qbd/qbd-iif-log/qbd-iif-logs.service.spec.ts (1)

1-2: LGTM! Angular 18 HTTP testing configuration updated correctly.

The changes successfully implement Angular 18's new HTTP testing approach.

Also applies to: 20-22

src/app/integrations/intacct/intacct.component.spec.ts (1)

14-15: HTTP client testing setup looks good!

The changes correctly implement the new Angular 18 approach for HTTP client testing by:

  • Using provideHttpClient with withInterceptorsFromDi
  • Using provideHttpClientTesting
  • Removing HttpClientTestingModule from imports

Also applies to: 44-56

src/app/integrations/qbo/qbo.component.spec.ts (1)

14-15: HTTP client testing configuration is properly updated!

The changes correctly implement the new Angular 18 testing setup with:

  • Proper provider configuration using provideHttpClient
  • Correct implementation of HTTP testing utilities

Also applies to: 51-64

src/app/core/services/qbd/qbd-mapping/qbd-mapping.service.spec.ts (1)

4-4: Verify and enable the disabled test suite.

While the HTTP client testing setup is correctly implemented for Angular 18, this test suite is currently disabled (using xdescribe). Please verify if there are any pending issues and enable the test suite by changing xdescribe to describe.

Also applies to: 9-9, 21-23

src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.spec.ts (2)

3-3: LGTM! Updated HTTP client testing imports

The imports have been correctly updated to use Angular's new modular HTTP testing approach.

Also applies to: 17-17


39-51: LGTM! TestBed configuration updated for Angular 18

The TestBed configuration has been properly updated to use the new provider-based approach for HTTP client testing:

  • Removed HttpClientTestingModule from imports
  • Added provideHttpClient and provideHttpClientTesting to providers
src/app/integrations/qbd/qbd-shared/qbd-advanced-setting/qbd-advanced-setting.component.spec.ts (2)

1-1: LGTM! Updated HTTP client import

The import has been correctly updated to use Angular's new HTTP client providers.


51-64: LGTM! TestBed configuration updated correctly

The TestBed configuration has been properly updated to use the new provider-based approach:

  • Organized imports and providers clearly
  • Added provideHttpClient with withInterceptorsFromDi
src/app/integrations/qbd/qbd-shared/qbd-export-setting/qbd-export-setting.component.spec.ts (2)

1-1: LGTM! Updated HTTP client import

The import has been correctly updated to use Angular's new HTTP client providers.


53-64: LGTM! TestBed configuration updated correctly

The TestBed configuration has been properly updated to use the new provider-based approach:

  • Organized imports and providers clearly
  • Added provideHttpClient with withInterceptorsFromDi
src/app/integrations/intacct/intacct-shared/intacct-c1-import-settings/intacct-c1-import-settings.component.spec.ts (2)

31-31: LGTM! Updated HTTP client testing imports

The imports have been correctly updated to use Angular's new modular HTTP testing approach.

Also applies to: 36-36


Line range hint 73-89: LGTM! TestBed configuration updated correctly

The TestBed configuration has been properly updated to use the new provider-based approach:

  • Organized imports and providers clearly
  • Added provideHttpClient and provideHttpClientTesting
  • Added provideRouter for proper routing setup
package.json (2)

24-34: LGTM! Angular core packages consistently updated to v18.2.x

All Angular packages have been updated to the same minor version (18.2.x), maintaining version consistency across the framework components.


58-58: LGTM! Angular ESLint schematics updated

The @angular-eslint/schematics package has been updated to v18.4.3 to maintain compatibility with Angular 18.

src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.spec.ts (2)

20-24: LGTM! Updated HTTP testing setup for Angular 18

The changes correctly implement Angular 18's new approach to HTTP testing by importing the required provider functions.


Line range hint 51-67: LGTM! TestBed configuration updated to use new HTTP providers

The TestBed configuration has been properly updated to use the new provider-based approach with:

  • provideHttpClient(withInterceptorsFromDi())
  • provideHttpClientTesting()

This change aligns with Angular 18's best practices for HTTP testing.

Comment on lines +47 to +54
{
provide: ErrorHandler,
useClass: GlobalErrorHandler
},
{
provide: ErrorHandler,
useValue: Sentry.createErrorHandler()
},
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix duplicate ErrorHandler providers.

There are two ErrorHandler providers configured, which could lead to unexpected behavior. Only one should be active.

Combine the error handlers or choose one:

-    {
-        provide: ErrorHandler,
-        useClass: GlobalErrorHandler
-    },
-    {
-        provide: ErrorHandler,
-        useValue: Sentry.createErrorHandler()
-    },
+    {
+        provide: ErrorHandler,
+        useClass: GlobalErrorHandler,
+        // If Sentry is needed, consider extending GlobalErrorHandler to include Sentry functionality
+    },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
provide: ErrorHandler,
useClass: GlobalErrorHandler
},
{
provide: ErrorHandler,
useValue: Sentry.createErrorHandler()
},
{
provide: ErrorHandler,
useClass: GlobalErrorHandler,
// If Sentry is needed, consider extending GlobalErrorHandler to include Sentry functionality
},

@DhaaraniCIT DhaaraniCIT added the staging_deploy Triggers deployment of active branch to Staging label Jan 10, 2025
…1154)

* white lableing - converting all fyle reference to generic form

* content fix
Copy link
Contributor

@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: 0

🔭 Outside diff range comments (4)
src/app/integrations/xero/xero-main/xero-export-log/xero-skipped-export-log/xero-skipped-export-log.component.ts (1)

Line range hint 58-68: Implement proper cleanup for RxJS subscription.

The subscription in the constructor should be cleaned up when the component is destroyed to prevent memory leaks.

+  private destroy$ = new Subject<void>();

   constructor(
     private formBuilder: FormBuilder,
     private userService: UserService,
     private exportLogService: ExportLogService,
     private accountingExportService: AccountingExportService,
     private windowService: WindowService,
     private paginatorService: PaginatorService
   ) {
     this.searchQuerySubject.pipe(
+      takeUntil(this.destroy$),
       debounceTime(1000)
     ).subscribe((query: string) => {
       this.searchQuery = query;
       this.offset = 0;
       this.currentPage = Math.ceil(this.offset / this.limit) + 1;
       this.getSkippedExpenses(this.limit, this.offset);
     });
   }

+  ngOnDestroy(): void {
+    this.destroy$.next();
+    this.destroy$.complete();
+  }
src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.ts (1)

Line range hint 156-177: Add error handling for forkJoin operations.

The setupPage method should handle potential errors from the forkJoin operation to prevent the component from being stuck in a loading state.

   setupPage() {
     this.isLoading = true;
     const paginator: Paginator = this.paginatorService.getPageSize(PaginatorPage.MAPPING);
     this.limit = paginator.limit;
     this.offset = paginator.offset;
     this.sourceType = decodeURIComponent(decodeURIComponent(this.route.snapshot.params.source_field)).toUpperCase();
     forkJoin([
       this.mappingService.getGenericMappingsV2(this.limit, 0, this.destinationField, this.selectedMappingFilter, this.alphabetFilter, this.sourceField, this.isCategoryMappingGeneric, null),
       this.mappingService.getMappingStats(this.sourceField, this.destinationField, this.appName)
     ]).subscribe(
       ([mappingResponse, mappingStat]) => {
         this.totalCount = mappingResponse.count;
         if (!this.isInitialSetupComplete) {
           this.filteredMappingCount = mappingResponse.count;
         }
         this.mappings = mappingResponse.results;
         this.mappingStats = mappingStat;
         this.filteredMappings = this.mappings.concat();
         this.isInitialSetupComplete = true;
         this.isLoading = false;
+      },
+      (error) => {
+        console.error('Error loading mappings:', error);
+        this.isLoading = false;
+        // Handle error appropriately (e.g., show error message)
       }
     );
   }
src/app/branding/fyle-contents-config.ts (1)

Line range hint 1-493: Consider consolidating duplicate content configuration.

There is significant content duplication between c1-contents-config.ts and fyle-contents-config.ts. Consider:

  1. Extracting common content into a shared configuration
  2. Using inheritance or composition to extend the base configuration

Example refactor:

// base-contents-config.ts
export const baseContents = {
  common: {
    zeroState: {
      noResults: 'Sorry, no results found!',
      // ... other common zero state messages
    },
    branding: (brandName: string) => ({
      importTo: `Import data from {source} to ${brandName}`,
      // ... other common branding messages
    })
  }
};

// c1-contents-config.ts
export const c1Contents = {
  ...baseContents,
  // C1-specific overrides
};

// fyle-contents-config.ts
export const fyleContents = {
  ...baseContents,
  // Fyle-specific overrides
};
src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.html (1)

Separate branding-related changes from Angular 18 upgrade PR

The branding configuration changes are present in 80+ template files across the codebase, indicating a significant UI standardization effort. While these improvements are valuable, they're unrelated to Angular 18 upgrade requirements and should be handled in a dedicated PR to:

  • Maintain clear version control history
  • Simplify review process
  • Enable independent rollback if needed
🔗 Analysis chain

Line range hint 1-40: Verify if these changes should be in a separate PR.

These template changes, while improving the code, appear unrelated to the Angular 18 upgrade. Consider:

  1. Moving these branding-related improvements to a separate PR for clearer version control history
  2. Focusing this PR solely on Angular 18 upgrade requirements
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if there are any Angular 18 specific changes in the templates
rg -l "angular" package.json

Length of output: 41


Script:

#!/bin/bash
# Check Angular version and dependencies
cat package.json | jq '.dependencies | with_entries(select(.key | contains("@angular")))'

# Look for similar branding-related changes pattern
rg -l "brandingConfig\.brandId === ('fyle'|'co')" --type html

# Check for upgrade-related documentation
fd -e md -e txt | xargs rg -l -i "angular.*(\b18\b|upgrade)"

Length of output: 10695

🧹 Nitpick comments (20)
src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.html (1)

23-24: Simplify template expressions and improve maintainability.

The current implementation has several issues that could be improved:

  1. The mainText ternary operator is unnecessary since both branches use the same base text.
  2. The 'this' keyword is not needed in template expressions.
  3. Complex string concatenation in templates reduces maintainability.

Consider these improvements:

-                    [mainText]="brandingConfig.brandId === 'fyle' ? brandingContent.mappingSearchZeroStateHeaderText : brandingContent.mappingSearchZeroStateHeaderText + (this.sourceField | snakeCaseToSpaceCase | titlecase) + ' mappings.'"
-                    [subText]="brandingConfig.brandId === 'fyle' ? brandingContent.mappingSearchZeroStateSubHeaderText + (this.sourceField | snakeCaseToSpaceCase | titlecase) + ' mappings': brandingContent.mappingSearchZeroStateSubHeaderText">
+                    [mainText]="brandingContent.mappingSearchZeroStateHeaderText + (sourceField | snakeCaseToSpaceCase | titlecase) + ' mappings.'"
+                    [subText]="getZeroStateSubText()">

And handle the complex logic in the component:

getZeroStateSubText(): string {
  const formattedSource = this.sourceField | snakeCaseToSpaceCase | titlecase;
  return this.brandingConfig.brandId === 'fyle' 
    ? `${this.brandingContent.mappingSearchZeroStateSubHeaderText}${formattedSource} mappings`
    : this.brandingContent.mappingSearchZeroStateSubHeaderText;
}
src/app/shared/components/helper/mapping/mapping-filter/mapping-filter.component.ts (1)

30-30: Improve type safety with strict typing.

While the branding changes look good, consider enhancing type safety:

-  readonly brandingContent = brandingContent.mapping;
+  readonly brandingContent: typeof brandingContent.mapping = brandingContent.mapping;

   mappingsFilter: SelectFormOption[] = [{
-    label: this.brandingContent.mappedHeader,
+    label: this.brandingContent.mappedHeader as string,
     value: MappingState.MAPPED
   }, {
-    label: this.brandingContent.unMappedHeader,
+    label: this.brandingContent.unMappedHeader as string,
     value: MappingState.UNMAPPED
   }];

Also applies to: 33-37

src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-pre-requisite/qbd-direct-onboarding-pre-requisite.component.ts (1)

56-56: Use template literals for better readability.

Replace string concatenation with template literals:

-      caption: 'Make sure the QuickBooks Company you want to connect to ' + brandingConfig.brandName + ' is open during the integration setup.',
+      caption: `Make sure the QuickBooks Company you want to connect to ${brandingConfig.brandName} is open during the integration setup.`,
src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.ts (1)

4-4: Consider cleanup and type safety improvements.

  1. Add type safety to brandingContent:
-  readonly brandingContent = brandingContent.exportLog;
+  readonly brandingContent: typeof brandingContent.exportLog = brandingContent.exportLog;
  1. Consider implementing OnDestroy to clean up the subscription:
export class NetsuiteSkippedExportLogComponent implements OnInit, OnDestroy {
  private destroy$ = new Subject<void>();

  ngOnInit(): void {
    this.searchQuerySubject.pipe(
      debounceTime(1000),
      takeUntil(this.destroy$)
    ).subscribe(...);
  }

  ngOnDestroy(): void {
    this.destroy$.next();
    this.destroy$.complete();
  }
}

Also applies to: 51-51

src/app/integrations/xero/xero-main/xero-export-log/xero-skipped-export-log/xero-skipped-export-log.component.ts (1)

4-4: Consider migrating to standalone component pattern.

As part of the Angular 18 update, consider migrating this component to use the standalone component pattern, which is now the recommended approach for better tree-shaking and modularity.

 @Component({
   selector: 'app-xero-skipped-export-log',
+  standalone: true,
+  imports: [CommonModule, ReactiveFormsModule],
   templateUrl: './xero-skipped-export-log.component.html',
   styleUrls: ['./xero-skipped-export-log.component.scss']
 })

Also applies to: 47-47

src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.ts (1)

1-1: Remove unused OnChanges import.

The component imports OnChanges but doesn't implement it. Either implement the interface or remove the unused import.

-import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-skipped-export-log/qbd-direct-skipped-export-log.component.ts (1)

Line range hint 28-52: Consider using signals for state management.

As part of the Angular 18 update, consider using signals for managing component state. This would provide better performance and more predictable state updates.

+import { signal } from '@angular/core';

 export class QbdDirectSkippedExportLogComponent implements OnInit {
-  isLoading: boolean = true;
-  totalCount: number = 0;
-  expenses: SkipExportList[];
-  filteredExpenses: SkipExportList[];
+  isLoading = signal(true);
+  totalCount = signal(0);
+  expenses = signal<SkipExportList[]>([]);
+  filteredExpenses = signal<SkipExportList[]>([]);
src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-complete-export-logs/netsuite-complete-export-logs.component.ts (1)

4-4: Consider migrating to standalone component pattern.

While the branding content changes look good, consider migrating this component to use Angular 18's standalone component pattern for better tree-shaking and modularity.

Example migration:

@Component({
  selector: 'app-netsuite-complete-export-logs',
+ standalone: true,
+ imports: [CommonModule, ReactiveFormsModule],
  templateUrl: './netsuite-complete-export-logs.component.html',
  styleUrls: ['./netsuite-complete-export-logs.component.scss']
})

Also applies to: 59-59

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-complete-export-log/qbd-direct-complete-export-log.component.ts (2)

5-5: LGTM! Component already follows Angular 18 patterns.

The component is already using the standalone pattern and the branding content changes are well-implemented. Consider these additional Angular 18 optimizations:

  1. Use inject() function instead of constructor DI
  2. Leverage signal-based state management

Example of using inject():

- constructor(
-   @Inject(FormBuilder) private formBuilder: FormBuilder,
-   private exportLogService: ExportLogService,
-   // ... other services
- ) {
+ const formBuilder = inject(FormBuilder);
+ const exportLogService = inject(ExportLogService);

Also applies to: 61-61


Line range hint 1-1: Review Angular 18 migration strategy.

While the branding content changes are well-implemented, this PR's primary objective is to upgrade to Angular 18. Consider:

  1. Consistently applying standalone components pattern across all components
  2. Updating to new dependency injection patterns using inject()
  3. Leveraging signals for state management
  4. Reviewing and updating HTTP client usage patterns

Would you like me to generate a comprehensive migration guide for these components?

src/app/branding/c1-contents-config.ts (1)

Line range hint 1-493: Consider extracting common text patterns into constants.

There are several repeated text patterns that could be extracted into constants for better maintainability, such as:

  • Zero state messages
  • Import/Export related messages
  • Common suffixes/prefixes around brandingConfig.brandName

Example refactor:

const COMMON_TEXT = {
  ZERO_STATE: {
    NO_RESULTS: 'Sorry, no results found!',
    CHECK_KEYWORDS: 'We could not find what you were looking for. Kindly check the keywords again.',
    NO_RECORDS: 'No records to show yet!'
  },
  BRANDING: (brandName: string) => ({
    IMPORT_TO: `Import data from {source} to ${brandName}`,
    EXPORT_FROM: `Export expenses from ${brandName} to {destination}`
  })
};
src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-landing/qbd-direct-onboarding-landing.component.html (1)

6-6: Consider moving string concatenation to component.

While the dynamic branding change looks good, the string concatenation in the template could be moved to the component for better maintainability and testability.

Example refactor:

// In component
headerText = `A quick guide to help you set up your ${this.brandingConfig.brandName}-QuickBooks Desktop integration.`;

// In template
[headerText]="headerText"
src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.html (1)

Line range hint 4-4: Consider centralizing styling configuration.

The template still uses conditional styling based on brandingConfig.brandId. Consider moving these style variations to the branding configuration as well for consistency.

-<div class="tw-rounded-8-px tw-bg-white tw-border-1-px tw-border-separator" [ngClass]="{'tw-shadow-app-card': brandingConfig.brandId === 'fyle', 'tw-shadow-shadow-level-1': brandingConfig.brandId === 'co'}">
+<div class="tw-rounded-8-px tw-bg-white tw-border-1-px tw-border-separator" [ngClass]="brandingContent.cardShadowClass">
src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-complete-export-logs/netsuite-complete-export-logs.component.html (1)

Line range hint 4-4: Consider moving shadow styling to brandingContent for consistency.

The template still uses conditional logic for shadow styling based on brandId. Consider moving this to brandingContent as well for consistency.

-<div class="tw-rounded-8-px tw-bg-white tw-border-1-px tw-border-border-tertiary" [ngClass]="{'tw-shadow-app-card': brandingConfig.brandId === 'fyle', 'tw-shadow-shadow-level-1': brandingConfig.brandId === 'co'}">
+<div class="tw-rounded-8-px tw-bg-white tw-border-1-px tw-border-border-tertiary" [ngClass]="brandingContent.shadowClass">
src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-data-sync/qbd-direct-data-sync.component.html (1)

29-29: Consider improving template readability.

While the change to use dynamic branding is good, consider breaking down the long template string into smaller parts for better readability. You could move the text to a component property or use template literals.

Example approach:

-            <app-configuration-info-label [infoText]="'The values displayed here are synced from QuickBooks Desktop to ' + brandingConfig.brandName + '. If you notice discrepancies in the synced values, you can continue onboarding; the sync will refresh automatically in 5 minutes to capture any missed values.'" [showIcon]="false"></app-configuration-info-label>
+            <app-configuration-info-label 
+                [infoText]="syncInfoText" 
+                [showIcon]="false">
+            </app-configuration-info-label>

In the component:

get syncInfoText(): string {
  return `The values displayed here are synced from QuickBooks Desktop to ${this.brandingConfig.brandName}. If you notice discrepancies in the synced values, you can continue onboarding; the sync will refresh automatically in 5 minutes to capture any missed values.`;
}
src/app/integrations/sage300/sage300-shared/sage300-advanced-settings/sage300-advanced-settings.component.html (1)

28-28: Consider using template literals for better readability.

The string concatenations can be simplified using template literals. This would improve code readability while maintaining the same functionality.

Example change for line 28:

-                        [subLabel]="'Set up a schedule to frequently automate the export of expenses from ' + brandingConfig.brandName + ' to Sage 300 CRE.'"
+                        [subLabel]="`Set up a schedule to frequently automate the export of expenses from ${brandingConfig.brandName} to Sage 300 CRE.`"

Also applies to: 39-39, 50-50, 75-75, 76-76

src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-import-settings/qbd-direct-import-settings.component.html (1)

68-68: Consider using template literals for better readability.

The string concatenation can be simplified using template literals.

-                        [subLabel]="'Vendors in QuickBooks will be imported as Merchants in ' + brandingConfig.brandName + ', available in a dropdown for employees to select when coding expenses.'"
+                        [subLabel]="`Vendors in QuickBooks will be imported as Merchants in ${brandingConfig.brandName}, available in a dropdown for employees to select when coding expenses.`"
src/app/shared/components/configuration/configuration-import-field/configuration-import-field.component.html (1)

187-187: Consider using template literals for better readability.

The string concatenation can be simplified using template literals.

-                        [infoText]="'This is a one-time setup and cannot be modified once the values are imported to ' + brandingConfig.brandName + '.'"
+                        [infoText]="`This is a one-time setup and cannot be modified once the values are imported to ${brandingConfig.brandName}.`"
src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.html (1)

212-212: LGTM! Consider using string interpolation for consistency.

The dynamic branding implementation looks good. For better consistency with Angular practices, consider using string interpolation:

-            [infoText]="'This is a one-time setup and cannot be modified once the values are imported to ' + brandingConfig.brandName + '.'"
+            [infoText]="$any(`This is a one-time setup and cannot be modified once the values are imported to ${brandingConfig.brandName}.`)"
src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-complete-export-log/qbd-direct-complete-export-log.component.html (1)

33-34: Consider component composition optimization.

While the changes are good and consistent with other integration components, there's an opportunity to reduce code duplication.

Consider creating a shared complete-export-log component that can be extended or configured for different integrations, as the template structure and logic are identical across QBO, Xero, and QBD Direct.

Example approach:

@Component({
  selector: 'app-shared-complete-export-log',
  templateUrl: './shared-complete-export-log.component.html'
})
export class SharedCompleteExportLogComponent {
  @Input() brandingConfig: any;
  @Input() brandingContent: any;
  // ... other shared properties and methods
}

Then each integration-specific component could extend this base component:

@Component({
  selector: 'app-qbo-complete-export-log',
  templateUrl: '../shared-complete-export-log.component.html'
})
export class QBOCompleteExportLogComponent extends SharedCompleteExportLogComponent {
  // Integration-specific overrides if needed
}

Also applies to: 39-40

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47f5a8c and 5232916.

📒 Files selected for processing (48)
  • src/app/branding/c1-contents-config.ts (17 hunks)
  • src/app/branding/fyle-contents-config.ts (9 hunks)
  • src/app/core/models/branding/content-configuration.model.ts (3 hunks)
  • src/app/core/models/xero/xero-configuration/xero-advanced-settings.model.ts (2 hunks)
  • src/app/core/models/xero/xero-configuration/xero-export-settings.model.ts (2 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.html (1 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.ts (2 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-completed-export-log/intacct-completed-export-log.component.html (1 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-completed-export-log/intacct-completed-export-log.component.ts (2 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-skip-export-log/intacct-skip-export-log.component.html (1 hunks)
  • src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-skip-export-log/intacct-skip-export-log.component.ts (2 hunks)
  • src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.html (1 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-dashboard/netsuite-dashboard.component.html (1 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-dashboard/netsuite-dashboard.component.ts (2 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-complete-export-logs/netsuite-complete-export-logs.component.html (1 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-complete-export-logs/netsuite-complete-export-logs.component.ts (2 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.html (1 hunks)
  • src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.ts (2 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-dashboard/qbd-direct-dashboard.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-dashboard/qbd-direct-dashboard.component.ts (2 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-complete-export-log/qbd-direct-complete-export-log.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-complete-export-log/qbd-direct-complete-export-log.component.ts (2 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-skipped-export-log/qbd-direct-skipped-export-log.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-skipped-export-log/qbd-direct-skipped-export-log.component.ts (2 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-landing/qbd-direct-onboarding-landing.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-onboarding/qbd-direct-onboarding-pre-requisite/qbd-direct-onboarding-pre-requisite.component.ts (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-data-sync/qbd-direct-data-sync.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-data-sync/qbd-direct-data-sync.component.ts (2 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-import-settings/qbd-direct-import-settings.component.html (1 hunks)
  • src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-setup-connection/qbd-direct-setup-connection.component.html (1 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-dashboard/qbo-dashboard.component.html (1 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-dashboard/qbo-dashboard.component.ts (2 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.html (1 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.ts (2 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.html (1 hunks)
  • src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.ts (2 hunks)
  • src/app/integrations/qbo/qbo-shared/qbo-advanced-settings/qbo-advanced-settings.component.html (1 hunks)
  • src/app/integrations/sage300/sage300-shared/sage300-advanced-settings/sage300-advanced-settings.component.html (4 hunks)
  • src/app/integrations/xero/xero-main/xero-dashboard/xero-dashboard.component.html (1 hunks)
  • src/app/integrations/xero/xero-main/xero-dashboard/xero-dashboard.component.ts (2 hunks)
  • src/app/integrations/xero/xero-main/xero-export-log/xero-complete-export-log/xero-complete-export-log.component.html (1 hunks)
  • src/app/integrations/xero/xero-main/xero-export-log/xero-complete-export-log/xero-complete-export-log.component.ts (2 hunks)
  • src/app/integrations/xero/xero-main/xero-export-log/xero-skipped-export-log/xero-skipped-export-log.component.html (1 hunks)
  • src/app/integrations/xero/xero-main/xero-export-log/xero-skipped-export-log/xero-skipped-export-log.component.ts (2 hunks)
  • src/app/shared/components/configuration/configuration-import-field/configuration-import-field.component.html (1 hunks)
  • src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.html (1 hunks)
  • src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.ts (2 hunks)
  • src/app/shared/components/helper/mapping/mapping-filter/mapping-filter.component.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/app/integrations/qbo/qbo-shared/qbo-advanced-settings/qbo-advanced-settings.component.html
🔇 Additional comments (44)
src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.html (3)

28-29: LGTM! Good improvement in text content management.

The change from conditional logic to centralized branding content improves maintainability and follows Angular best practices for internationalization/localization.


35-36: Verify branding content properties exist.

The change follows the same good pattern of using centralized branding content. However, let's verify that these specific properties exist in the branding configuration.

✅ Verification successful

✓ Branding content properties verified

Both properties are properly defined in the content configuration model and implemented in both Fyle and C1 configurations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for the branding content property definitions
rg -l "skipExportLogCountZeroStateHeaderText|skipExportLogCountZeroStateSubHeaderText" --type ts

Length of output: 238


Script:

#!/bin/bash
# Check content model and implementations
echo "=== Content Configuration Model ==="
rg "skipExportLogCountZeroStateHeaderText|skipExportLogCountZeroStateSubHeaderText" src/app/core/models/branding/content-configuration.model.ts -A 1

echo -e "\n=== Fyle Contents Config ==="
rg "skipExportLogCountZeroStateHeaderText|skipExportLogCountZeroStateSubHeaderText" src/app/branding/fyle-contents-config.ts -A 1

echo -e "\n=== C1 Contents Config ==="
rg "skipExportLogCountZeroStateHeaderText|skipExportLogCountZeroStateSubHeaderText" src/app/branding/c1-contents-config.ts -A 1

Length of output: 1169


Line range hint 1-39: Verify template compatibility with Angular 18.

While the changes look good, since this is part of an Angular 18 upgrade, let's verify that all template syntax is compatible with the new version.

✅ Verification successful

Template syntax is compatible with Angular 18

The template follows current Angular best practices and doesn't use any deprecated syntax patterns. All bindings, structural directives, and component interactions are using modern Angular syntax.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any deprecated Angular template syntax
rg -l "template=\"[^\"]*\"|\[\(ngModel\)\]|/deep/|>>|=>>|<<=|<=>|\|\|=|\?\?" --type html

Length of output: 593


Script:

#!/bin/bash
# Check for specific template syntax in the file
rg -p "template=|/deep/|\[\(|\)\]|<<=|=>>|<=>|\?\?|#[a-zA-Z]+=\"|let [a-zA-Z]+ of|as [a-zA-Z]+;|@[a-zA-Z]+\." src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.html

# Also check for any other Angular-specific syntax
ast-grep --pattern 'template="$_"'

Length of output: 282

src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-data-sync/qbd-direct-data-sync.component.ts (1)

3-3: Verify if these changes are related to the Angular 18 upgrade.

The changes appear to be branding-related modifications rather than Angular 18 upgrade changes. While the changes themselves look correct, they seem unrelated to the PR's stated objective of upgrading to Angular 18.

Also applies to: 33-33

src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-skipped-export-log/netsuite-skipped-export-log.component.ts (1)

1-1: Verify Angular 18 upgrade changes.

The PR's objective is to upgrade to Angular 18, but the changes reviewed are primarily branding-related modifications. Please verify:

  1. Where are the Angular 18 upgrade changes?
  2. Has package.json been updated with new Angular 18 dependencies?
  3. Have all necessary migration steps been completed?
✅ Verification successful

Angular 18 upgrade has been properly implemented

The codebase shows all Angular dependencies are correctly upgraded to version 18.2.x with proper peer dependency alignment.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check Angular version and related changes
echo "Current Angular dependencies:"
rg '"@angular/[^"]+": "[^"]+' package.json

echo "\nChecking for migration files:"
fd -t f ng-update

echo "\nChecking for any Angular-specific changes:"
rg -g '!{*.json,*.md}' -l '@angular' .

Length of output: 66568

src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.ts (2)

12-12: Consider migrating to standalone component pattern.

Similar to XeroSkippedExportLogComponent, consider migrating this component to the standalone pattern.

Also applies to: 49-49


Line range hint 58-68: Implement proper cleanup for RxJS subscription.

Similar to XeroSkippedExportLogComponent, implement proper cleanup for the RxJS subscription.

src/app/shared/components/helper/mapping/generic-mapping-v2/generic-mapping-v2.component.ts (1)

Line range hint 85-95: Implement proper cleanup for RxJS subscription.

Similar to other components, implement proper cleanup for the RxJS subscription.

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-skipped-export-log/qbd-direct-skipped-export-log.component.ts (1)

Line range hint 61-71: Implement proper cleanup for RxJS subscription.

Similar to other components, implement proper cleanup for the RxJS subscription.

src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.ts (1)

13-13: LGTM! But verify Angular 18 compatibility.

The branding content changes look good, but since this PR is about upgrading to Angular 18, we should verify the component's compatibility with Angular 18's new features and breaking changes.

Run this script to check for potential Angular 18 compatibility issues:

Also applies to: 57-57

✅ Verification successful

Component is compatible with Angular 18

The component uses supported APIs and patterns that are fully compatible with Angular 18. While it could optionally be modernized to use standalone components and the new control flow syntax, no breaking changes or deprecated features are present that would require immediate updates.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for common Angular 18 compatibility issues
# Look for deprecated APIs and patterns that need updates

# Search for HttpClient usage patterns that changed in Angular 18
rg -l "HttpClient|HttpClientModule|HttpClientTestingModule" 

# Search for standalone component syntax which is preferred in Angular 18
ast-grep --pattern 'class $_ implements OnInit {
  $$$
}'

Length of output: 65714


Script:

#!/bin/bash
# Get the full component implementation and related files
rg -g "qbo-complete-export-log.component.*" --type ts -l ""

# Look for component implementation details
ast-grep --pattern 'class QboCompleteExportLogComponent {
  $$$
}'

# Check for standalone component setup
ast-grep --pattern '@Component({
  standalone: $_,
  $$$
})'

# Look for control flow syntax
ast-grep --pattern '@if($$$)'

Length of output: 562


Script:

#!/bin/bash
# Get the full content of the component file
cat src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.ts

# Get the template content to check for control flow syntax
cat src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.html

Length of output: 7781

src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-skip-export-log/intacct-skip-export-log.component.ts (1)

10-10: Review service injection patterns for Angular 18 compatibility.

While the branding content changes look good, review the service injection patterns (especially TrackingService) to ensure they follow Angular 18's best practices for dependency injection.

Run this script to analyze service injection patterns:

Also applies to: 69-69

src/app/integrations/xero/xero-main/xero-export-log/xero-complete-export-log/xero-complete-export-log.component.ts (1)

4-4: LGTM! Clean addition of branding content.

The changes properly integrate the branding content while maintaining immutability through the readonly modifier.

Also applies to: 59-60

src/app/core/models/xero/xero-configuration/xero-advanced-settings.model.ts (1)

8-8: LGTM! Good use of dynamic branding.

The payment sync options now properly use the dynamic brand name from configuration, improving maintainability.

Also applies to: 68-72

src/app/integrations/netsuite/netsuite-main/netsuite-dashboard/netsuite-dashboard.component.ts (1)

4-4: LGTM! Consistent implementation of branding content.

The changes align with the application's branding strategy and maintain consistency with other dashboard components.

Also applies to: 69-70

src/app/integrations/qbo/qbo-main/qbo-dashboard/qbo-dashboard.component.ts (2)

3-3: LGTM! Consistent implementation of branding content.

The changes maintain consistency with other dashboard components and follow the established pattern for branding integration.

Also applies to: 71-72


1-1: Verify Angular version update in package.json.

Since this PR aims to update to Angular 18, let's verify the version update in package.json.

✅ Verification successful

Angular 18 update confirmed ✓

All Angular packages have been successfully updated to version 18.2.x.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check Angular version in package.json
# Expect: Angular 18.x.x versions

echo "Checking Angular package versions:"
cat package.json | jq '.dependencies | with_entries(select(.key | startswith("@angular")))'

Length of output: 586

src/app/integrations/xero/xero-main/xero-dashboard/xero-dashboard.component.ts (1)

3-3: LGTM! Consistent branding implementation.

The changes follow the established pattern of using brandingContent for managing dashboard-specific text content.

Also applies to: 84-84

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-dashboard/qbd-direct-dashboard.component.ts (1)

5-5: LGTM! Consistent branding implementation.

The changes align with the application-wide pattern of using brandingContent for dashboard text management.

Also applies to: 78-78

src/app/core/models/xero/xero-configuration/xero-export-settings.model.ts (1)

7-7: LGTM! Enhanced branding flexibility in employee mapping options.

The changes improve maintainability by using dynamic branding references instead of hardcoded text.

Also applies to: 97-97, 101-101

src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.ts (2)

3-3: LGTM! Consistent branding implementation.

The changes align with the application-wide pattern of using brandingContent for dashboard text management.

Also applies to: 112-112


1-1: Verify Angular 18 upgrade implementation.

While the PR objective mentions updating to Angular 18, the provided files only show branding-related changes. Let's verify the upgrade implementation.

Run the following script to check the Angular version and related changes:

✅ Verification successful

Angular 18 upgrade properly implemented

The codebase shows proper Angular 18 upgrade implementation with all packages at version 18.2.13 and adoption of standalone APIs like provideHttpClient.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify Angular 18 upgrade implementation

# Check package.json for Angular version
echo "Checking Angular version in package.json:"
rg -A 5 '"@angular/[^"]+": "(?:~|\^)?18\.' package.json

# Look for potential breaking changes that need to be addressed
echo -e "\nChecking for common Angular 18 migration patterns:"
rg -l 'HttpClient.*Module' src/
rg -l 'provideHttpClient' src/

Length of output: 4394

src/app/core/models/branding/content-configuration.model.ts (4)

432-433: LGTM: Dashboard zero state text properties added.

The new properties for dashboard export zero state messages look good.


446-453: LGTM: Complete export log zero state text properties added.

The new properties for complete export log zero state messages look good.


450-453: LGTM: Skip export log zero state text properties added.

The new properties for skip export log zero state messages look good.


460-463: LGTM: Mapping zero state text properties added.

The new properties for mapping zero state messages and headers look good.

src/app/branding/c1-contents-config.ts (1)

22-22: LGTM: Text content updated with dynamic branding.

The changes consistently replace static text with dynamic branding using brandingConfig.brandName. This improves maintainability and ensures consistent branding across the application.

Also applies to: 27-27, 432-439, 446-459

src/app/branding/fyle-contents-config.ts (1)

70-73: LGTM: Text content updated with dynamic branding.

The changes consistently replace static text with dynamic branding using brandingConfig.brandName. This improves maintainability and ensures consistent branding across the application.

Also applies to: 83-91, 96-100, 407-414

src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-skipped-export-log/qbo-skipped-export-log.component.html (1)

28-29: LGTM! Good improvement in text management.

The change to use brandingContent properties improves maintainability by centralizing text content.

Also applies to: 35-36

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-export-log/qbd-direct-skipped-export-log/qbd-direct-skipped-export-log.component.html (1)

Line range hint 1-40: Same findings as QBO component.

The changes follow the same pattern as the QBO component. The previous review comments apply here as well.

src/app/integrations/xero/xero-main/xero-export-log/xero-skipped-export-log/xero-skipped-export-log.component.html (1)

Line range hint 1-40: Same findings as QBO component.

The changes follow the same pattern as the QBO component. The previous review comments apply here as well.

src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-skip-export-log/intacct-skip-export-log.component.html (1)

Line range hint 1-40: Same findings as QBO component.

The changes follow the same pattern as the QBO component. The previous review comments apply here as well.

src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-completed-export-log/intacct-completed-export-log.component.html (1)

Line range hint 1-40: Same findings as QBO component.

The changes follow the same pattern as the QBO component. The previous review comments apply here as well.

src/app/integrations/netsuite/netsuite-main/netsuite-export-log/netsuite-complete-export-logs/netsuite-complete-export-logs.component.html (2)

33-34: LGTM! Moving text to brandingContent improves maintainability.

The change from conditional template logic to brandingContent properties aligns with Angular best practices and makes the code more maintainable.

Also applies to: 39-40


33-34: Verify brandingContent initialization.

Ensure that brandingContent is properly initialized before the template renders to avoid potential null reference errors.

Also applies to: 39-40

✅ Verification successful

brandingContent is properly initialized and safe to use.

The component correctly imports and initializes brandingContent as a readonly property with the proper namespace (exportLog), ensuring it's available before template rendering and preventing accidental mutations.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for brandingContent initialization in component files
ast-grep --pattern 'class $_ {
  $$$
  brandingContent: $_ = {
    $$$
  }
  $$$
}'

Length of output: 85


Script:

#!/bin/bash
# Find the component class definition and surrounding context
ast-grep --pattern 'class NetsuiteCompleteExportLogsComponent {
  $$$
}'

# Search for brandingContent property declarations
ast-grep --pattern 'brandingContent: $_'

# Search for any service that might provide branding content
rg -g "*.ts" "brandingContent" -A 5 -B 5

Length of output: 94120


Script:

#!/bin/bash
# Find the complete component file
rg -g "netsuite-complete-export-logs.component.ts" "class|import.*branding" -A 5 -B 5

Length of output: 3842


Script:

#!/bin/bash
# Find brandingContent property declaration in the component
rg -g "netsuite-complete-export-logs.component.ts" "readonly brandingContent|brandingContent\s*=" -A 2 -B 2

Length of output: 919

src/app/integrations/netsuite/netsuite-main/netsuite-dashboard/netsuite-dashboard.component.html (2)

25-26: LGTM! Consistent with the export log components.

The change follows the same pattern of moving text to brandingContent, improving maintainability.


Line range hint 1-45: Consider reviewing other text content in the template.

The dashboard template contains multiple sections. Consider reviewing if there's other text content that could benefit from being moved to brandingContent for consistency.

src/app/integrations/xero/xero-main/xero-dashboard/xero-dashboard.component.html (1)

25-26: Verify brandingContent initialization.

The changes look good, moving to a more maintainable approach using centralized branding content. However, ensure that brandingContent is properly initialized before the template renders to avoid potential null reference errors.

✅ Verification successful

brandingContent initialization verified as safe.

The usage is correct and safe. The brandingContent is properly initialized as a constant export from a centralized configuration file, ensuring it's available before component rendering. The implementation follows best practices for configuration management.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for brandingContent initialization in the component
ast-grep --pattern 'class $_ {
  $$$
  brandingContent: $_ = $_
  $$$
}'

Length of output: 74


Script:

#!/bin/bash
# Search for the component file first
fd "xero-dashboard.component.ts$"

# Search for brandingContent in different contexts
ast-grep --pattern 'class XeroDashboardComponent {
  $$$
  brandingContent$_
  $$$
}'

# Backup search with ripgrep
rg "brandingContent" -A 5 -B 5

Length of output: 72817


Script:

#!/bin/bash
# Check the branding config file
fd "branding-config.ts$" --type f

# Look at its content if found
rg "export const brandingContent" -A 5 -B 5

Length of output: 575

src/app/integrations/qbo/qbo-main/qbo-dashboard/qbo-dashboard.component.html (1)

25-26: LGTM! Consistent with other dashboard components.

The changes align with the standardized approach used across other dashboard components.

src/app/integrations/intacct/intacct-main/intacct-dashboard/intacct-dashboard.component.html (1)

25-26: LGTM! Maintains consistency with other integrations.

The changes follow the same pattern as other dashboard components, maintaining a consistent approach to branding content.

src/app/integrations/qbd-direct/qbd-direct-main/qbd-direct-dashboard/qbd-direct-dashboard.component.html (1)

25-26: LGTM! Consistent implementation.

The changes align with the standardized approach used in other dashboard components.

src/app/integrations/intacct/intacct-main/intacct-export-log/intacct-completed-export-log/intacct-completed-export-log.component.ts (1)

12-12: LGTM! Clean implementation of branding content.

The changes follow Angular best practices with proper use of readonly modifier and clean import statement.

Also applies to: 71-71

src/app/integrations/qbd-direct/qbd-direct-shared/qbd-direct-setup-connection/qbd-direct-setup-connection.component.html (1)

63-63: LGTM! Proper use of Angular template interpolation.

The change correctly uses Angular's template interpolation syntax for dynamic branding.

src/app/integrations/qbo/qbo-main/qbo-export-log/qbo-complete-export-log/qbo-complete-export-log.component.html (1)

33-34: LGTM! Good refactoring of text content.

The changes improve maintainability by centralizing branding-specific text in the brandingContent object.

Let's verify that brandingContent is properly initialized:

Also applies to: 39-40

✅ Verification successful

Verified: brandingContent is properly initialized and used correctly

The component correctly imports and initializes brandingContent from the centralized branding configuration, specifically using the exportLog subset as a readonly property. This ensures consistent and maintainable text content management.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for brandingContent initialization in the component
ast-grep --pattern 'class $_ {
  $$$
  brandingContent = {
    $$$
  }
  $$$
}'

Length of output: 81


Script:

#!/bin/bash
# Find the component file and search for brandingContent
fd -e ts qbo-complete-export-log.component.ts -x rg -l "brandingContent" {}

# Show the content of the component file
fd -e ts qbo-complete-export-log.component.ts -x cat {}

Length of output: 5800

src/app/integrations/xero/xero-main/xero-export-log/xero-complete-export-log/xero-complete-export-log.component.html (1)

33-34: LGTM! Consistent with QBO implementation.

The changes maintain consistency across different integration components, which is excellent for maintainability.

Also applies to: 39-40

@DhaaraniCIT DhaaraniCIT added staging_deploy Triggers deployment of active branch to Staging and removed staging_deploy Triggers deployment of active branch to Staging labels Jan 21, 2025
@github-actions
Copy link

Unit Test Coverage % values
Statements 33.01% ( 4133 / 12517 )
Branches 26.44% ( 1179 / 4458 )
Functions 25.59% ( 893 / 3489 )
Lines 33.2% ( 4067 / 12248 )

@DhaaraniCIT DhaaraniCIT merged commit 1d05001 into master Jan 21, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL Extra Large PR staging_deploy Triggers deployment of active branch to Staging

Development

Successfully merging this pull request may close these issues.

2 participants