Skip to content

[NAE-2085] Refactor User #281

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 40 commits into
base: release/7.0.0-rev2
Choose a base branch
from
Open

[NAE-2085] Refactor User #281

wants to merge 40 commits into from

Conversation

camperko
Copy link
Member

@camperko camperko commented May 27, 2025

Description

Changes needed after backend User rework.

Implements NAE-2085

Dependencies

No new dependencies were introduced

Third party dependencies

No new dependencies were introduced

Blocking Pull requests

There are no dependencies on other PR

How Has Been This Tested?

Manually tested in application

Name Tested on
OS Linux Mint 21
Runtime Node 20.13.1
Dependency Manager npm 10.8.0
Framework version Angular 17.3.11
Run parameters
Other configuration

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes have been checked, personally or remotely, with @machacjozef
  • I have commented my code, particularly in hard-to-understand areas
  • I have resolved all conflicts with the target branch of the PR
  • I have updated and synced my code with the target branch
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing tests pass locally with my changes:
    • Lint test
    • Unit tests
    • Integration tests
  • I have checked my contribution with code analysis tools:
  • I have made corresponding changes to the documentation:
    • Developer documentation
    • User Guides
    • Migration Guides

Summary by CodeRabbit

  • New Features

    • Added support for dynamic application configuration loading from backend with global environment configuration.
    • Introduced a new navigation path management service replacing the previous URI node service.
    • Added a snackbar action for displaying messages.
    • Provided utility for asynchronous configuration loading during app initialization.
  • Refactor

    • Replaced node-based navigation service and components with path-based implementations.
    • Updated user data models to include realm ID and renamed fields (e.g., username instead of email).
    • Refactored navigation components and tests to use path-based logic.
  • Bug Fixes

    • Corrected minor formatting and naming issues in documentation and tests.
  • Chores

    • Updated package versions to 7.0.0-rc.4.
    • Enhanced and expanded test coverage for navigation and configuration services.
    • Improved test infrastructure with injectable mocks and updated dependency injection.
  • Documentation

    • Updated documentation to reflect new service names, constructor parameters, and user model changes.

- user rework changes
@camperko camperko self-assigned this May 27, 2025
Copy link

coderabbitai bot commented May 27, 2025

Walkthrough

This update introduces a major refactor of navigation logic, replacing the node-based UriService with a new string path-based PathService throughout the codebase. It also adds a frontend remote configuration feature, enabling dynamic loading of application configuration from a backend service via a new ConfigurationResourceService and related initialization utilities. User data models are updated for clarity and extensibility, and various supporting test and documentation changes are included.

Changes

File(s) / Path(s) Change Summary
Navigation Refactor: UriService → PathService
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts
projects/netgrif-components-core/src/lib/navigation/public-api.ts
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts
projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts (deleted)
projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts
projects/netgrif-components-core/src/lib/side-menu/side-menu-container/abstract-side-menu-container.component.spec.ts
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts
projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.spec.ts
projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts (commented out)
projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts
Replaces all usage of UriService (node-based) with new PathService (string path-based) across components, services, tests, and mocks. Removes UriService implementation and its tests. Updates all constructor parameters, method calls, and logic accordingly.
Remote Configuration Feature
projects/netgrif-components-core/src/lib/configuration/application-configuration.ts
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts
projects/netgrif-components-core/src/lib/utility/load-configuration.ts
projects/netgrif-components-core/src/lib/configuration/public-api.ts
projects/netgrif-components-core/src/lib/resources/public-api.ts
projects/netgrif-components-core/src/lib/utility/public-api.ts
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts
Adds support for loading frontend configuration from backend: introduces ApplicationConfiguration interface, new ConfigurationResourceService, updates ConfigurationService for async config loading, and provides an APP_INITIALIZER-compatible utility. Updates public API exports and adds related tests.
User Data Model Updates
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.spec.ts
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts
projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts
Refactors UserValue and related classes: renames properties (e.g., namefirstName, emailusername), adds realmId, and updates all construction and usage accordingly. Updates tests and all user selection/conversion logic.
Frontend Example App: Remote Config Integration
projects/nae-example-app/src/app/app.module.ts
projects/nae-example-app/src/app/nae-example-app-configuration.service.ts
projects/nae-example-app/src/environments/environment.ts
projects/nae-example-app/src/environments/environment.prod.ts
projects/nae-example-app/src/assets/env.js
projects/nae-example-app/src/assets/env.template.js
projects/nae-example-app/src/index.html
Adds runtime environment variable support and integrates remote configuration loading at app startup via APP_INITIALIZER. Updates environment files, adds asset scripts, and modifies configuration service usage.
Component and Test Updates (PathService)
projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts
projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.ts
projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts
projects/netgrif-components/src/lib/dialog/import-net-dialog/import-net-dialog.component.ts
Updates imports, constructor parameters, and superclass calls to use PathService instead of UriService in all affected components. Removes unused parameters where necessary.
Documentation and Compodoc Artifacts
docs/compodoc/components-core/classes/FileUploadModel.html
docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html
docs/compodoc/components-core/components/AbstractImportNetComponent.html
docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html
docs/compodoc/components-core/coverage.html
docs/compodoc/components-core/injectables/UriService.html
docs/compodoc/components-core/interfaces/FileList.html
docs/compodoc/components-core/interfaces/ViewNavigationItem.html
docs/compodoc/components-core/js/menu-wc.js
docs/compodoc/components/components/BreadcrumbsComponent.html
docs/compodoc/components/components/ImportNetComponent.html
docs/compodoc/components/components/ImportNetDialogComponent.html
docs/compodoc/components/components/NavigationDoubleDrawerComponent.html
Updates documentation to reflect service renaming, constructor changes, and property updates throughout navigation and import components.
New/Updated Tests
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts
projects/netgrif-components-core/src/lib/utility/tests/test-config.ts
projects/netgrif-components-core/src/lib/utility/tests/test-mock-dependencies.module.ts
Adds/updates tests for new/changed services, including breadcrumb, configuration, and mock dependency modules.
Other Minor/Meta Changes
.github/workflows/pr-build.yml
package.json
projects/netgrif-components-core/package.json
projects/netgrif-components/package.json
Updates Node.js versions, OS for CI, and bumps package versions to rc.4.

Sequence Diagram(s)

Remote Configuration Loading at App Startup

sequenceDiagram
    participant Browser
    participant AngularApp
    participant ConfigurationService
    participant ConfigurationResourceService
    participant Backend

    Browser->>AngularApp: Loads index.html (includes env.js)
    AngularApp->>ConfigurationService: APP_INITIALIZER calls loadConfiguration()
    ConfigurationService->>ConfigurationResourceService: getPublicApplicationConfiguration(appConfig)
    ConfigurationResourceService->>Backend: GET /frontend-config/public/{application}/{type}
    Backend-->>ConfigurationResourceService: Returns app configuration
    ConfigurationResourceService-->>ConfigurationService: Observable<ApplicationConfiguration>
    ConfigurationService->>AngularApp: Initialization complete (config loaded)
Loading

Navigation Path Change (PathService Usage)

sequenceDiagram
    participant Component
    participant PathService

    Component->>PathService: set activePath('/some/path')
    PathService-->>Component: emits activePath$ observable
    Component->>PathService: get activePath (string)
Loading

Possibly related PRs


📜 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 7b05e6c and 03a560d.

📒 Files selected for processing (11)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/header/header-modes/search-mode/abstract-search-mode.component.spec.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/abstract-multi-user-assign.component.spec.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/multi-user-assign-item/abstract-multi-user-assign-item.component.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-item/admin-impersonate-item.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-list.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-item/multi-user-assign-item.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-list.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/user-assign-item.component.spec.ts (1 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-list.component.spec.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/multi-user-assign-item/abstract-multi-user-assign-item.component.spec.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.spec.ts
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/abstract-multi-user-assign.component.spec.ts
  • projects/netgrif-components-core/src/lib/header/header-modes/search-mode/abstract-search-mode.component.spec.ts
🧰 Additional context used
🧬 Code Graph Analysis (6)
projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/user-assign-item.component.spec.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-list.component.spec.ts (2)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/model/user-list-injected-data.ts (1)
  • UserListInjectedData (9-13)
projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-list.component.spec.ts (2)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/model/user-list-injected-data.ts (1)
  • UserListInjectedData (9-13)
projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-item/multi-user-assign-item.component.spec.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-item/admin-impersonate-item.component.spec.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-list.component.spec.ts (2)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)
  • UserListValue (8-49)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Matrix Test (22)
  • GitHub Check: Matrix Test (20)
  • GitHub Check: Matrix Test (24)
  • GitHub Check: Test with SonarCloud
🔇 Additional comments (6)
projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-item/admin-impersonate-item.component.spec.ts (1)

42-42: LGTM: UserValue constructor updated correctly

The constructor call properly includes the new realmId parameter as the second argument, matching the refactored UserValue class signature.

projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-item/multi-user-assign-item.component.spec.ts (1)

45-45: LGTM: UserValue constructor updated correctly

The constructor call properly includes the new realmId parameter as the second argument, maintaining consistency with the refactored UserValue class.

projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/user-assign-item.component.spec.ts (1)

42-42: LGTM: UserValue constructor updated correctly

The constructor call properly includes the new realmId parameter as the second argument, consistent with the refactored UserValue class signature.

projects/netgrif-components/src/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-list.component.spec.ts (1)

64-67: LGTM: UserValue constructor updated with realistic test data

The constructor call correctly includes the new realmId parameter and uses realistic test values, properly conforming to the UserListInjectedData interface.

projects/netgrif-components/src/lib/side-menu/content-components/admin-impersonate/admin-impersonate-list/admin-impersonate-list.component.spec.ts (1)

64-67: LGTM: UserValue constructor updated with realistic test data

The constructor call correctly includes the new realmId parameter and uses realistic test values, maintaining consistency with the refactored UserValue class and UserListInjectedData interface.

projects/netgrif-components/src/lib/side-menu/content-components/multi-user-assign/multi-user-assign-list/multi-user-assign-list.component.spec.ts (1)

66-66: LGTM! Test data correctly updated to match the new UserValue constructor.

The addition of the realmId parameter ('realmID0') aligns with the updated UserValue constructor signature that now requires realm identification as the second parameter. This change maintains test compatibility with the refactored data model.

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 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.
    • Explain this complex logic.
    • 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 explain this code block.
    • @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 explain its main purpose.
    • @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.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

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.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @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.

Kovy95
Kovy95 previously approved these changes May 30, 2025
camperko and others added 23 commits June 3, 2025 14:35
- pull application configuration (nae.json) from backend (gateway which redirects to admin node)
- load new pulled configuration inside configuration.service
- add environment setup (env.js, environment.ts, index.html)
- rework based on pr comments
- fix tests
- include not found error handling
- Replaced all instances of `UriService` with `PathService` for improved consistency and clarity in naming. Updated constructors, imports, and references throughout the codebase, including components, tests, and documentation.
- Removed use of uri nodes across the frontend, and implemented use of string path instead of uri nodes
- Updated references to `_uriService` to `_pathService` in multiple components.
- Refactored `PathService` constructor to handle `pageSize` more robustly, including type validation and fallback logging.
- Fixed improper binding in `navigation-double-drawer.component.html` for `routerLink`.
- Improved breadcrumbs redirection logic by adding null checks and appropriate error logging for missing targets.
- Simplified and optimized left and right navigation item loading with reusable `processItems` and `getChildCasesFromPage` logic.
- Enhanced error handling and loading state management to ensure robustness in edge cases.
- Added unit tests for `AbstractBreadcrumbsComponent` to validate redirection logic and error handling.
- Enhanced test coverage for `AbstractNavigationDoubleDrawerComponent` by adding tests for menu state, sorting, and resize handling.
- Updated `MockUriResourceService` with consistent root path conventions.
- Extended `MockUserService` with logout and empty user functionality.
- Added unit tests for `AbstractBreadcrumbsComponent` to validate redirection logic and error handling.
- Enhanced test coverage for `AbstractNavigationDoubleDrawerComponent` by adding tests for menu state, sorting, and resize handling.
- Updated `MockUriResourceService` with consistent root path conventions.
- Extended `MockUserService` with logout and empty user functionality.
machacjozef and others added 8 commits June 23, 2025 17:55
- extended `MockUserService` logout functionality to notify user change via `_userChange$`.
- fix possible null pointer exception
[NAE-2125] Remove URI service usage from admin and menu items #318
[NAE-2116] Frontend remote configuration
# Conflicts:
#	projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts
- fixes/changes after merging with the newest version
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 10

🔭 Outside diff range comments (2)
projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts (1)

1-121: Remove deprecated UriService tests and add coverage for PathService

The commented-out uri.service.spec.ts should be deleted, and a new test suite for PathService must be created to match the original scenarios. Currently there are no PathService spec files under projects/netgrif-components-core/src/lib/navigation/service/.

Please address the following:

  • Delete or remove all commented code in
    projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts.
  • Add a new spec file
    projects/netgrif-components-core/src/lib/navigation/service/path.service.spec.ts
    that covers at least:
    • Service creation (should be created)
    • Retrieving the root node
    • Setting, getting, and resetting the active node
    • Fetching a node by path
    • Getting child nodes, siblings, and nodes by level
    • Resolving parent paths and splitting paths into parts
  • Verify that each test mirrors the behavior previously covered by the UriService tests, adapting method names if needed.
  • Update any migration or refactor documentation to note the removal of UriService tests and the addition of PathService tests.
docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (1)

1-4555: Auto-generated Compodoc artifacts should not be committed

docs/compodoc/** HTML files are produced by the Compodoc generator during CI/release. Keeping them under version control leads to massive, noisy diffs and frequent merge conflicts.
Please drop these files from the PR and add docs/compodoc/ to .gitignore. The real change must be done in the corresponding TypeScript sources – documentation will be regenerated automatically.

🧹 Nitpick comments (17)
projects/nae-example-app/src/index.html (1)

9-9: Load env script non-blocking & guard against missing file

The config script executes synchronously and can delay first paint if the file is large or unavailable. Consider:

-<script src="assets/env.js"></script>
+<script src="assets/env.js" defer></script>

Also ensure build tooling copies env.js to assets/ for both prod & dev builds; otherwise the app will 404 at runtime.

docs/compodoc/components-core/coverage.html (1)

4633-4642: Consider dropping generated docs from PRs

Including thousands-line HTML artifacts obscures code review and often causes merge noise. Unless your release process requires version-controlling generated docs, add them to .gitignore or push them only on release branches.

projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts (1)

12-16: Remove redundant provider & inject HttpTestingController for stricter tests

HttpClientTestingModule already registers an HttpClient provider – adding it manually is needless (and might shadow future overrides).
Moreover, consider injecting HttpTestingController and verifying that no unexpected HTTP calls remain after each test; this will surface regressions immediately.

-        imports: [HttpClientTestingModule, NoopAnimationsModule],
-        providers: [HttpClient]
+        imports: [HttpClientTestingModule, NoopAnimationsModule]

Add:

let httpMock: HttpTestingController;

beforeEach(() => {
  ...
  httpMock = TestBed.inject(HttpTestingController);
});

afterEach(() => httpMock.verify());
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)

34-35: Avoid repetitive empty allocations – introduce a shared constant

new UserValue('', '', '', '', '') is instantiated every time getLast() is called on an empty list. A tiny optimisation & readability win:

+const EMPTY_USER = new UserValue('', '', '', '', '');

 public getLast(): UserValue {
     if (this._userValues.size == 0) {
-        return new UserValue('', '', '', '', '');
+        return EMPTY_USER;
     }
     return Array.from(this._userValues.values()).pop()!;
 }

Creates one object instead of potentially many and clarifies intent.

projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (1)

16-21: Consider making snackBarAction more configurable.

The implementation correctly follows the FrontActionDefinition interface, but uses hardcoded values for type, position, and duration. Consider allowing these to be configured through frontAction.args for greater flexibility.

 export const snackBarAction: FrontActionDefinition = {
     call: (injector: Injector, frontAction: FrontAction) => {
         const snackBarService = injector.get(SnackBarService);
-        snackBarService.openGenericSnackBar(frontAction.args[0], 'info', SnackBarVerticalPosition.BOTTOM, SnackBarHorizontalPosition.CENTER, 2500)
+        snackBarService.openGenericSnackBar(
+            frontAction.args.message || frontAction.args[0],
+            frontAction.args.type || 'info',
+            frontAction.args.verticalPosition || SnackBarVerticalPosition.BOTTOM,
+            frontAction.args.horizontalPosition || SnackBarHorizontalPosition.CENTER,
+            frontAction.args.duration || 2500
+        )
     }
 }
projects/nae-example-app/src/environments/environment.prod.ts (1)

3-6: Add safer access pattern for window['env'] object.

The direct access to window['env'] properties could cause runtime errors if the env object is not properly initialized. Consider adding null checks for better error handling.

Apply this diff to add safer access:

export const environment = {
    production: true,
-    resolve_configuration: window['env']['resolve_configuration'] || false,
-    gateway_url: window['env']['gateway_url'] || 'http://localhost:8800/api',
-    application_identifier: window['env']['application_identifier'] || 'nae',
-    type_identifier: window['env']['type_identifier'] || 'default'
+    resolve_configuration: window['env']?.['resolve_configuration'] || false,
+    gateway_url: window['env']?.['gateway_url'] || 'http://localhost:8800/api',
+    application_identifier: window['env']?.['application_identifier'] || 'nae',
+    type_identifier: window['env']?.['type_identifier'] || 'default'
};
projects/netgrif-components-core/src/lib/utility/load-configuration.ts (2)

24-28: Add missing semicolon for consistency.

The function is missing a semicolon after the return statement.

Apply this diff to add the missing semicolon:

export function loadConfiguration(configurationService: ConfigurationService): () => Observable<any> {
    return (): Observable<any> => {
        return configurationService.loadConfiguration();
-    }
+    };
}

5-23: Consider enhancing JSDoc with error handling information.

The documentation is comprehensive, but it could benefit from more specific information about what happens when configuration loading fails, based on the relevant code snippet showing error handling in the ConfigurationService.

Apply this diff to enhance the documentation:

/**
 * Factory function that creates a configuration loader for application initialization.
 * This function serves as an APP_INITIALIZER provider factory to load configuration
 * before the application bootstrap completes.
 *
 * @param configurationService - Injectable service handling configuration loading and management
 * @returns A function that returns an Observable which resolves when configuration is loaded
- * @throws {Error} When configuration service fails to load required configuration
+ * @note If configuration loading fails (e.g., 404 errors), the service handles errors gracefully
+ * by returning null and continuing with default configuration
 * @example
projects/nae-example-app/src/environments/environment.ts (1)

6-11: Verify window['env'] initialization and add type safety.

The dynamic configuration approach looks good, but consider these potential issues:

  1. Runtime safety: Accessing window['env'] without verification could cause errors if the object doesn't exist
  2. Type safety: No TypeScript typing for the window['env'] object

Consider adding type safety and runtime verification:

+declare global {
+  interface Window {
+    env?: {
+      resolve_configuration?: boolean;
+      gateway_url?: string;
+      application_identifier?: string;
+      type_identifier?: string;
+    };
+  }
+}

export const environment = {
    production: false,
-    resolve_configuration:  window['env']['resolve_configuration'] || false,
-    gateway_url:  window['env']['gateway_url'] || 'http://localhost:8800/api',
-    application_identifier: window['env']['application_identifier'] || 'nae',
-    type_identifier: window['env']['type_identifier'] || 'default'
+    resolve_configuration: window.env?.resolve_configuration || false,
+    gateway_url: window.env?.gateway_url || 'http://localhost:8800/api',
+    application_identifier: window.env?.application_identifier || 'nae',
+    type_identifier: window.env?.type_identifier || 'default'
};
projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts (1)

16-24: Consider removing unnecessary constructor.

The constructor only passes parameters to the parent class without additional logic, making it redundant. TypeScript can handle dependency injection without an explicit constructor when no additional initialization is needed.

Consider removing the unnecessary constructor:

-    constructor(_pathService: PathService,
-                _caseResourceService: CaseResourceService,
-                _activatedRoute: ActivatedRoute,
-                _router: Router,
-                _dynamicRoutingService: DynamicNavigationRouteProviderService,
-                _translateService: TranslateService,
-                _log: LoggerService) {
-        super(_pathService, _caseResourceService, _activatedRoute, _router, _dynamicRoutingService, _translateService, _log);
-    }

The Angular DI system will automatically inject dependencies into the parent constructor.

docs/compodoc/components/components/ImportNetComponent.html (2)

197-198: Rename constructor parameter from _uriService to _pathService in the TypeScript source

The injected service was migrated to PathService, yet the parameter is still called _uriService.
Keeping the old name is misleading and will propagate confusion throughout the codebase and auto-generated docs.

- protected _uriService: PathService,
+ protected _pathService: PathService,
...
- super(_sideMenuControl, _petriNetResource, _uriService, _log, _snackbar, _translate);
+ super(_sideMenuControl, _petriNetResource, _pathService, _log, _snackbar, _translate);

Apply the change in
projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts
(and any subclasses) – the documentation will regenerate automatically.

Also applies to: 341-348


1-10: Avoid committing Compodoc artefacts

docs/compodoc/** files are auto-generated during the release pipeline.
Checking them into the repository bloats diffs and forces reviewers to scan thousands of irrelevant HTML lines.

Consider removing these files from the PR and adding them to .gitignore, or generating them only in release branches.

docs/compodoc/components/components/BreadcrumbsComponent.html (2)

190-217: Update parameter naming to reflect the new service

Same issue as in ImportNetComponent: the constructor still uses _uriService while the type is PathService.

- constructor(protected _uriService: PathService,
+ constructor(protected _pathService: PathService,
...
- super(_uriService, _caseResourceService, ...
+ super(_pathService, _caseResourceService, ...

Change it in
projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts.
Docs will regenerate with the corrected signature.

Also applies to: 330-338


1-10: Compodoc HTML should not be part of the review

As noted previously, committing generated documentation causes unnecessary noise.
Exclude docs/compodoc/ from version control or regenerate it only in release artifacts.

projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts (1)

12-30: Remove unnecessary constructor

The constructor only passes parameters to the parent class without adding any logic. TypeScript will automatically generate this behavior when omitted.

 class TestBreadcrumbsComponent extends AbstractBreadcrumbsComponent {
-    constructor(
-        pathService,
-        caseResourceService,
-        activatedRoute,
-        router,
-        dynamicRoutingService,
-        translateService,
-        logger
-    ) {
-        super(
-            pathService,
-            caseResourceService,
-            activatedRoute,
-            router,
-            dynamicRoutingService,
-            translateService,
-            logger
-        );
-    }
     public setRedirectUrls(map: Map<string, Array<string>>) {
         (this as any).redirectUrls = map;
     }
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (1)

284-284: Use console.error for error logging

Error messages should use console.error instead of console.log for better visibility in browser consoles.

-                    console.log(err.message);
+                    console.error(err.message);
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts (1)

478-478: Remove redundant double negation

The if statement already coerces values to boolean, making the !! operator unnecessary.

-        if (!!this._childCustomViews[this.currentPath]) {
+        if (this._childCustomViews[this.currentPath]) {
-        if (!!this._childCustomViews[this.extractParent(this.currentPath)]) {
+        if (this._childCustomViews[this.extractParent(this.currentPath)]) {

Also applies to: 484-484

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e4b1097 and 00bb71e.

📒 Files selected for processing (65)
  • .github/workflows/pr-build.yml (2 hunks)
  • docs/compodoc/components-core/classes/FileUploadModel.html (4 hunks)
  • docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (9 hunks)
  • docs/compodoc/components-core/components/AbstractImportNetComponent.html (17 hunks)
  • docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (43 hunks)
  • docs/compodoc/components-core/coverage.html (1 hunks)
  • docs/compodoc/components-core/injectables/UriService.html (24 hunks)
  • docs/compodoc/components-core/interfaces/FileList.html (3 hunks)
  • docs/compodoc/components-core/interfaces/ViewNavigationItem.html (5 hunks)
  • docs/compodoc/components-core/js/menu-wc.js (2 hunks)
  • docs/compodoc/components/components/BreadcrumbsComponent.html (5 hunks)
  • docs/compodoc/components/components/ImportNetComponent.html (6 hunks)
  • docs/compodoc/components/components/ImportNetDialogComponent.html (17 hunks)
  • docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (8 hunks)
  • docs/compodoc/components/interfaces/FileList.html (3 hunks)
  • package.json (1 hunks)
  • projects/nae-example-app/src/app/app.module.ts (3 hunks)
  • projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1 hunks)
  • projects/nae-example-app/src/assets/env.js (1 hunks)
  • projects/nae-example-app/src/assets/env.template.js (1 hunks)
  • projects/nae-example-app/src/environments/environment.prod.ts (1 hunks)
  • projects/nae-example-app/src/environments/environment.ts (1 hunks)
  • projects/nae-example-app/src/index.html (1 hunks)
  • projects/netgrif-components-core/package.json (1 hunks)
  • projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.spec.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/authentication/sign-up/services/sign-up.service.spec.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/configuration/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (6 hunks)
  • projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts (5 hunks)
  • projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts (15 hunks)
  • projects/netgrif-components-core/src/lib/navigation/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts (0 hunks)
  • projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/resources/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.spec.ts (3 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/side-menu-container/abstract-side-menu-container.component.spec.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/load-configuration.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/test-mock-dependencies.module.ts (2 hunks)
  • projects/netgrif-components/package.json (2 hunks)
  • projects/netgrif-components/src/lib/dialog/import-net-dialog/import-net-dialog.component.ts (1 hunks)
  • projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts (2 hunks)
  • projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.html (1 hunks)
  • projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.ts (2 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts (2 hunks)
💤 Files with no reviewable changes (1)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts
🧰 Additional context used
🧠 Learnings (12)
docs/compodoc/components-core/js/menu-wc.js (3)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components-core/interfaces/FileList.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components-core/classes/FileUploadModel.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (2)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components/interfaces/FileList.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components/components/ImportNetComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (1)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

docs/compodoc/components-core/components/AbstractImportNetComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components/components/ImportNetDialogComponent.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
docs/compodoc/components-core/interfaces/ViewNavigationItem.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
docs/compodoc/components-core/coverage.html (2)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
</retrieved_learning>

🧬 Code Graph Analysis (14)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (3)
projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1)
  • Injectable (6-19)
projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (1)
  • Injectable (8-448)
projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1)
  • ApplicationConfiguration (27-33)
projects/netgrif-components-core/src/lib/utility/load-configuration.ts (1)
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (1)
  • loadConfiguration (274-295)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.spec.ts (3)
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (1)
  • Injectable (13-45)
projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (1)
  • Injectable (8-448)
projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.ts (1)
  • Injectable (11-34)
projects/netgrif-components-core/src/lib/authentication/sign-up/services/sign-up.service.spec.ts (3)
projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1)
  • Injectable (6-19)
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (1)
  • Injectable (13-45)
projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (1)
  • Injectable (8-448)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (1)
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1)
  • splitPath (62-64)
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1)
projects/netgrif-components-core/src/lib/navigation/model/size-menu-injection-token.ts (1)
  • NAE_URI_NODE_CASES_PAGE_SIZE (6-6)
projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (2)
projects/netgrif-components-core/src/lib/actions/model/front-action-definition.ts (1)
  • FrontActionDefinition (4-6)
projects/netgrif-components-core/src/lib/data-fields/models/changed-fields.ts (1)
  • FrontAction (48-53)
projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (1)
projects/netgrif-components-core/src/lib/navigation/model/uri-resource.ts (1)
  • UriNodeResource (2-13)
projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (3)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts (1)
  • UserField (9-26)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)
  • UserListValue (8-49)
projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (1)
projects/netgrif-components-core/src/lib/user/models/user.ts (1)
  • User (7-63)
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (2)
projects/netgrif-components-core/src/commons/schema.ts (2)
  • Services (279-346)
  • NetgrifApplicationEngine (18-27)
projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1)
  • ApplicationConfiguration (27-33)
🪛 Biome (1.9.4)
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts

[error] 12-30: This constructor is unnecessary.

Unsafe fix: Remove the unnecessary constructor.

(lint/complexity/noUselessConstructor)

projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts

[error] 87-87: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts

[error] 16-24: This constructor is unnecessary.

Unsafe fix: Remove the unnecessary constructor.

(lint/complexity/noUselessConstructor)

projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts

[error] 478-478: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)


[error] 484-484: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: task-list-completed
  • GitHub Check: Matrix Test (24)
  • GitHub Check: Test with SonarCloud
  • GitHub Check: Matrix Test (20)
  • GitHub Check: Matrix Test (22)
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
🔇 Additional comments (78)
package.json (1)

3-3: Confirm ancillary artifacts get the bump as well

Version was bumped to 7.0.0-rc.4, but I don’t see an accompanying CHANGELOG entry or an updated package-lock.json / pnpm-lock.yaml. Please make sure the lock file and release notes are generated in the same commit, otherwise CI and consumers might still resolve rc.3.

projects/netgrif-components-core/package.json (1)

3-3: Synchronise peer/optional ranges with the new core version

The package version moved to rc.4, yet peer-dependency ranges still reference ~17.1.0 Angular packages while the root project already sits on 17.3.x. Verify that the published artifact really builds against 17.3 or loosen the ranges to ^17.0.0 to avoid unmet-peer warnings.

projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.ts (1)

7-8: Constructor arg order may be out-of-sync with the abstract class

super() now receives _pathService between _config and _caseResourceService. Double-check AbstractNavigationDoubleDrawerComponent’s signature after the UriServicePathService swap; a mismatch will only surface at runtime.

If the base class expects (config, caseResource, pathService) you’ll get silent DI mis-wiring.

Also applies to: 67-74

projects/netgrif-components/package.json (1)

3-3: Version bump looks good and maintains consistency.

The version increment from 7.0.0-rc.3 to 7.0.0-rc.4 is properly coordinated between the package version and its peer dependency on @netgrif/components-core.

Also applies to: 32-32

projects/netgrif-components-core/src/lib/utility/public-api.ts (1)

30-30: Good addition to the public API.

The export statement follows the established pattern and makes the load-configuration utility available for external use, supporting the dynamic configuration loading feature mentioned in the PR objectives.

projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1)

80-82: UserValue constructor updated appropriately.

The constructor call has been updated to include the additional parameter, aligning with the User refactoring. The use of empty strings for the additional parameters appears intentional for this context where only the user ID is available.

projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts (1)

19-21: Expand beyond the “should be created” smoke-test

The service’s core job is to hit the configuration endpoint and map the response. A single instantiation check won’t protect that contract. Add a test that

  1. calls the public fetch method,
  2. flushes a mocked response via HttpTestingController,
  3. asserts that the mapped object matches expectations.

That gives immediate feedback if the endpoint path or response mapping changes.

projects/netgrif-components-core/src/lib/configuration/public-api.ts (1)

3-3: Good addition – ApplicationConfiguration now exposed publicly
Makes the new dynamic-configuration flow consumable by downstream code.

projects/netgrif-components-core/src/lib/resources/public-api.ts (1)

9-9: Public export looks correct

ConfigurationResourceService is now consumable outside the core package, aligning with the new configuration loader.

projects/netgrif-components-core/src/lib/navigation/public-api.ts (1)

15-17: Confirm all UriService imports removed & tree-shaken

PathService is now the official navigation API, but uri-resource.service and model/uri-resource artefacts remain exported. Double-check that code still depending on the retired UriService was fully migrated; stale imports will now error only at compile time.

If everything compiles cleanly this comment can be ignored.

projects/netgrif-components-core/src/lib/utility/tests/test-mock-dependencies.module.ts (1)

7-7: LGTM - ResourceProvider addition supports enhanced configuration management.

The addition of ResourceProvider to the test dependencies is consistent with the broader infrastructure changes for configuration resource services.

Also applies to: 27-27

projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts (1)

13-13: LGTM - Consistent migration from UriService to PathService.

The changes properly update the import and constructor parameter as part of the systematic migration to string-based path management.

Also applies to: 46-46

projects/netgrif-components/src/lib/dialog/import-net-dialog/import-net-dialog.component.ts (1)

8-8: LGTM - UriService removal aligns with systematic migration.

The complete removal of UriService without replacement is appropriate for a dialog component that doesn't require path management functionality.

projects/netgrif-components-core/src/lib/side-menu/side-menu-container/abstract-side-menu-container.component.spec.ts (1)

17-17: LGTM - Test properly updated for PathService migration.

The test changes consistently update all references from UriService to PathService, maintaining proper test coverage during the service migration.

Also applies to: 91-91, 95-95

.github/workflows/pr-build.yml (3)

8-8: LGTM: Specifying Ubuntu version for better reproducibility.

Using ubuntu-24.04 instead of ubuntu-latest ensures consistent CI environment across builds and avoids potential breaking changes from unexpected Ubuntu version updates.


11-11: LGTM: Updated Node.js version matrix aligns with current LTS support.

Expanding from [18, 20] to [20, 22, 24] ensures compatibility with current and future Node.js LTS versions while dropping Node.js 18 support.


20-21: LGTM: Standardized dependency installation step.

The rename to "Install dependencies" and using npm install instead of npm i improves clarity and follows npm best practices.

projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts (2)

10-10: LGTM: Service replacement aligns with the refactoring.

The replacement of UriService with PathService is consistent with the broader refactoring mentioned in the PR objectives.


35-39: LGTM: Constructor parameter and super call updated consistently.

The constructor parameter and super call have been correctly updated to use _pathService instead of _uriService, maintaining consistency with the service replacement.

docs/compodoc/components/components/ImportNetDialogComponent.html (1)

297-297: Skip: Auto-generated documentation file.

This is an auto-generated Compodoc documentation file that gets regenerated during the release process. Changes should be made to the actual TypeScript source files rather than the HTML documentation files.

Also applies to: 371-371

projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.html (1)

136-136: LGTM: Updated navigation logic aligns with path-based refactoring.

The change from isItemAndNodeEqual(folder, currentNode) to isItemAndPathEqual(folder, currentPath) is consistent with the broader refactoring from node-based to path-based navigation using PathService instead of UriService.

projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (2)

62-62: LGTM! UserValue constructor correctly updated for userUnselected event.

The parameter mapping correctly follows the refactored UserValue constructor signature with the new user identity model.


65-65: LGTM! UserValue constructor correctly updated for userSelected event.

The parameter mapping correctly follows the refactored UserValue constructor signature with the new user identity model.

projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.spec.ts (4)

24-24: LGTM! Import statement correctly updated for PathService.

The import change is consistent with the broader UriService to PathService refactor.


52-52: LGTM! Provider configuration correctly updated for PathService.

The test module provider configuration is properly updated to use PathService.


112-112: LGTM! Constructor parameter type correctly updated.

The constructor parameter type is properly updated from UriService to PathService.


116-116: LGTM! Super constructor call correctly updated.

The super constructor call is properly updated to pass the _pathService parameter.

projects/nae-example-app/src/assets/env.template.js (1)

1-8: LGTM! Well-structured environment configuration template.

The implementation follows good practices:

  • Uses defensive programming with window["env"] = window["env"] || {} to extend rather than overwrite existing configuration
  • Employs proper placeholder syntax for build-time substitution
  • Includes all necessary configuration properties for dynamic environment loading
docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (1)

233-233: Documentation correctly reflects PathService refactor.

The documentation shows the constructor parameter has been updated from UriService to PathService, which correctly reflects the broader refactor. However, note that this is an auto-generated Compodoc documentation file that should not be manually modified as it will be regenerated during the release process.

Also applies to: 367-367, 563-563, 623-623

docs/compodoc/components-core/injectables/UriService.html (1)

94-94: Auto-generated documentation should not be manually edited.

This HTML file is auto-generated by Compodoc during the release process from TypeScript source files. Any changes to service names, references, or documentation should be made in the actual TypeScript source files, as this HTML documentation will be overwritten on the next build.

The service refactoring from UriService to PathService should be reflected in the source TypeScript files, not in this generated documentation.

Also applies to: 99-107, 1384-1384, 1593-1593, 1660-1660

projects/nae-example-app/src/assets/env.js (1)

1-8: LGTM! Well-structured runtime environment configuration.

The implementation follows good practices:

  • Uses IIFE to avoid global scope pollution beyond the intended window.env object
  • Properly initializes the environment object with fallback handling
  • Provides centralized configuration for dynamic loading features
  • Clean separation between static and runtime configuration

This setup effectively supports the dynamic configuration loading mechanism introduced in the PR.

docs/compodoc/components/interfaces/FileList.html (1)

106-114: Auto-generated documentation should not be manually edited.

This HTML file is auto-generated by Compodoc during the release process. The service refactoring from UriService to PathService and any formatting improvements should be applied to the source TypeScript files (ImportNetDialogComponent and related components) rather than this generated documentation file, as it will be overwritten during the next documentation build.

Also applies to: 163-163, 199-199

projects/nae-example-app/src/app/app.module.ts (2)

2-2: LGTM! Proper imports for dynamic configuration loading.

The imports are correctly added for implementing the APP_INITIALIZER pattern with dynamic configuration loading functionality.

Also applies to: 22-24


248-259: LGTM! Well-structured APP_INITIALIZER configuration.

The provider configuration follows Angular best practices:

  • ResourceProvider is positioned first to ensure base services are available
  • ConfigurationService is properly configured with the custom implementation
  • APP_INITIALIZER is correctly set up with the loadConfiguration factory function
  • Dependencies are properly specified and multi: true is set appropriately

This implementation effectively integrates dynamic configuration loading into the Angular app lifecycle.

projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (2)

2-2: LGTM! Proper RxJS import for logout functionality.

The of import is correctly added to support the logout method's return value.


53-61: LGTM! Well-implemented logout functionality.

The logout implementation follows good practices:

  • Properly resets user state using the emptyUser() helper method
  • Emits the change via ReplaySubject to notify subscribers
  • Returns an observable as expected for logout operations
  • The emptyUser() method creates a User instance with appropriate empty values that match the User constructor signature

This enhancement provides consistent logout behavior for mock testing scenarios.

projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (3)

82-82: LGTM! UserValue constructor updated correctly.

The UserValue constructor call has been properly updated to include the new realmId parameter and use username instead of email, aligning with the User refactor requirements.


89-89: LGTM! UserListValue construction updated correctly.

The UserValue instances within the UserListValue are correctly constructed with the new parameter signature including realmId and username.


291-291: LGTM! Backend value formatting updated correctly.

The UserValue construction in formatValueFromBackend has been properly updated to match the new constructor signature.

docs/compodoc/components-core/classes/FileUploadModel.html (1)

103-113: Skip reviewing auto-generated documentation.

Based on previous learnings, HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. These files should not be manually edited as they will be overwritten on the next documentation build.

Any refactoring or updates should be made to the actual TypeScript source files, and the documentation will be regenerated during the build process.

projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (4)

12-14: LGTM! Static path constants updated consistently.

The static test paths have been correctly updated from "root/test1" and "root/test2" to "/test1" and "/test2", aligning with the new path-based navigation approach.


17-18: LGTM! Root node standardized to "/" path.

The root node has been properly updated to use "/" as both the ID and path, which is a logical choice for path-based navigation systems.


31-31: LGTM! Parent ID references updated consistently.

The parentId references in both test nodes have been correctly updated from "root" to "/" to maintain consistency with the new root node representation.

Also applies to: 42-42


64-64: LGTM! Method logic updated to match new root ID.

The getNodesByParent method has been properly updated to check for parentId equal to "/" instead of "root", maintaining the method's functionality with the new root node representation.

docs/compodoc/components-core/interfaces/FileList.html (2)

106-115: Auto-generated documentation should not be manually edited.

Based on previous learnings, HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. These formatting changes and service renames should be made to the actual TypeScript source files instead, as the HTML documentation files will be overwritten on the next documentation build.


168-201: Changes should be applied to source TypeScript files.

The service rename from UriService to PathService in the embedded TypeScript code should be applied to the actual source file rather than this auto-generated documentation. The HTML documentation will be regenerated from the source files during the build process.

docs/compodoc/components-core/interfaces/ViewNavigationItem.html (2)

92-103: Auto-generated documentation should not be manually edited.

This is auto-generated Compodoc documentation that gets regenerated during the release process. Manual edits to HTML files will be overwritten, so changes should be made to the source TypeScript files instead.


214-320: Service rename should be applied to source files.

The UriService to PathService rename in the embedded TypeScript code should be applied to the actual source file. The HTML documentation will be regenerated from the source files during the build process.

projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1)

77-77: LGTM! UserValue constructor correctly updated.

The constructor parameters have been properly updated to match the new UserValue model structure. The property mapping is correct:

  • idid
  • realmIdrealmId (new property)
  • firstNamefirstName (renamed from name)
  • lastNamelastName (renamed from surname)
  • usernameusername (renamed from email)

This change aligns with the backend User rework mentioned in the PR objectives.

projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts (1)

3-3: LGTM! Service import correctly updated.

The import change from UriService to PathService is part of the systematic migration to string path-based navigation mentioned in the PR objectives.

projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1)

1-33: Well-defined interface with comprehensive documentation.

The ApplicationConfiguration interface is properly structured with clear separation of required and optional properties. The JSDoc documentation provides excellent context for each field's purpose, making the interface self-documenting and developer-friendly.

projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1)

10-17: Properly implemented dynamic configuration loading.

The constructor correctly creates an ApplicationConfiguration object from environment variables and passes it to the parent ConfigurationService along with the injected ConfigurationResourceService. This implementation follows the new configuration loading pattern introduced in the core services.

projects/netgrif-components-core/src/lib/authentication/sign-up/services/sign-up.service.spec.ts (3)

9-12: Properly updated imports for new dependencies.

The additional imports correctly include the new services required for the updated configuration loading mechanism.


92-94: Correct test setup for new service dependencies.

The test module configuration properly includes the required providers (HttpClient, ResourceProvider, ConfigurationResourceService) for the updated configuration service architecture.


128-154: Test configuration service properly updated.

The MissingEndpointsConfigurationService correctly:

  • Uses @Injectable() decorator
  • Accepts ConfigurationResourceService in constructor
  • Passes the required parameters to the parent constructor matching the new ApplicationConfiguration interface structure
docs/compodoc/components-core/components/AbstractImportNetComponent.html (2)

281-281: Documentation correctly reflects the service migration from UriService to PathService.

The constructor documentation shows the updated parameter type from UriService to PathService, which aligns with the broader refactoring effort. As these Compodoc files are auto-generated from TypeScript source files, this update indicates that the underlying source code has been properly updated.


331-331: Parameter type documentation updated consistently.

The parameter table correctly shows PathService as the type for the _uriService parameter, maintaining consistency with the constructor signature update.

projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (3)

6-11: Well-structured service with proper Angular patterns.

The service follows Angular best practices with proper dependency injection configuration using providedIn: 'root' and clear JSDoc documentation.


18-43: Robust pageSize parameter validation with comprehensive error handling.

The constructor properly validates the injected pageSize parameter with appropriate fallbacks and logging. The validation handles both string and number types correctly, with clear error messages for invalid inputs.


45-64: Clean reactive API design for path management.

The service provides a well-designed reactive API using BehaviorSubject for path state management. The getter/setter pattern for activePath along with the observable stream activePath$ follows Angular reactive patterns effectively.

docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (1)

3838-3841: Suspicious import path for PathService

The generated source snippet shows

import {PathService} from '../service/uri.service';

If the new service file is path.service.ts, the correct import should be '../service/path.service'.
Double-check the actual TypeScript implementation; a wrong path will break compilation even if the docs render fine.

projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.spec.ts (3)

10-13: LGTM - Import additions support the configuration refactor.

The new imports align with the broader changes to support dynamic configuration loading via ConfigurationResourceService.


63-65: LGTM - Provider setup supports the new dependency injection chain.

The providers are correctly configured to support the ConfigurationResourceService dependency injection requirements.


84-108: LGTM - Service updated to match new ConfigurationService constructor.

The MissingEndpointsConfigurationService is correctly updated with the @Injectable() decorator and updated constructor signature that matches the new ConfigurationService requirements.

projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (3)

13-26: LGTM - Well-structured service with appropriate constants.

The service follows Angular best practices with proper singleton configuration and well-named constants for URL construction.


28-28: LGTM - Constructor properly injects required dependencies.

The constructor correctly injects ResourceProvider with appropriate access modifier.


39-44: LGTM - Method correctly implements configuration fetching.

The getPublicApplicationConfiguration method properly constructs the URL from configuration parameters and returns the appropriate Observable type.

projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (3)

2-8: LGTM - Import additions and Injectable decorator support test configuration.

The imports and @Injectable() decorator are correctly added to support the updated test configuration service.


11-13: LGTM - Constructor properly sets up test dependency injection chain.

The constructor correctly instantiates the required services for testing the configuration service.


439-454: LGTM - Configuration parameters correctly passed to superclass.

The superclass constructor call now includes the required configurationResource and ApplicationConfiguration parameters.

Note: The TestHttp.handle() method returns undefined. Verify this is intentional for testing purposes.

docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (1)

269-295: Skip review - Auto-generated documentation.

This is auto-generated Compodoc documentation that reflects the UriService to PathService migration in the source code. Per previous learnings, these files are regenerated during the release process.

projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (6)

2-2: LGTM - Import updated for PathService migration.

The import statement correctly reflects the migration from UriService to PathService.


41-41: LGTM - Constructor parameter updated for PathService.

The constructor parameter correctly reflects the service migration from UriService to PathService.


69-69: LGTM - Method call updated for PathService API.

The method call correctly uses the new PathService.splitPath() method with activePath instead of the previous node-based approach.


100-100: LGTM - Property access updated for PathService.

The property access correctly uses _pathService.activePath.length instead of the previous node-based approach.


117-122: LGTM - Redirect method enhanced with better error handling.

The redirect method correctly uses _pathService.activePath and adds appropriate error handling with logging for missing redirect targets.


138-149: LGTM - changePath method simplified for PathService migration.

The method correctly uses PathService methods and simplifies the logic by removing asynchronous node retrieval in favor of direct path setting.

projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)

1-42: Well-structured refactoring of the UserValue model

The updates improve clarity with more precise field names and add multi-tenant support through the realmId field. The implementation is clean and consistent.

Comment on lines 7 to 12
user = new UserValue('0', 'name', 'surname', 'mail');
expect(user.id).toEqual('0');
expect(user.name).toEqual('name');
expect(user.surname).toEqual('surname');
expect(user.firstName).toEqual('name');
expect(user.lastName).toEqual('surname');
expect(user.fullName).toEqual('name surname');
expect(user.email).toEqual('mail');
expect(user.username).toEqual('mail');
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify UserValue constructor signature consistency.

The test expectations have been updated to use the new property names (firstName, lastName, username), but the constructor call still uses 4 parameters. However, in the delegate service file, the UserValue constructor is called with 5 parameters. This suggests the test might not be fully updated to match the new constructor signature.


🏁 Script executed:

#!/bin/bash
# Description: Verify UserValue constructor signature and usage across the codebase
# Expected: Find the actual constructor signature and all its usages

# Find the UserValue class definition
ast-grep --pattern 'class UserValue {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

# Find all UserValue constructor calls
rg -A 2 'new UserValue\(' 

Length of output: 299288


Fix UserValue constructor usage in tests

The UserValue constructor now requires five parameters—(id, realmId, firstName, lastName, username)—but tests still call it with four. Update all test instantiations to include the new realmId argument (e.g. an empty string if not relevant).

• projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts

-   user = new UserValue('0', 'name', 'surname', 'mail');
+   user = new UserValue('0', '', 'name', 'surname', 'mail');
+   expect(user.realmId).toEqual('');

• Apply the same pattern to other specs invoking new UserValue(...) with four args (e.g. user-assign, multi-user-assign, delegate-task.service, etc.), inserting '' as the second parameter and, where useful, adding expect(...realmId).toEqual('').

📝 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
user = new UserValue('0', 'name', 'surname', 'mail');
expect(user.id).toEqual('0');
expect(user.name).toEqual('name');
expect(user.surname).toEqual('surname');
expect(user.firstName).toEqual('name');
expect(user.lastName).toEqual('surname');
expect(user.fullName).toEqual('name surname');
expect(user.email).toEqual('mail');
expect(user.username).toEqual('mail');
user = new UserValue('0', '', 'name', 'surname', 'mail');
expect(user.realmId).toEqual('');
expect(user.id).toEqual('0');
expect(user.firstName).toEqual('name');
expect(user.lastName).toEqual('surname');
expect(user.fullName).toEqual('name surname');
expect(user.username).toEqual('mail');
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts
lines 7 to 12, the UserValue constructor is called with four arguments but now
requires five (id, realmId, firstName, lastName, username). Fix this by adding
an empty string '' as the second argument for realmId in all UserValue
instantiations in this file and other related specs like user-assign,
multi-user-assign, and delegate-task.service. Also, add assertions to check that
realmId equals '' where applicable.

Comment on lines +4636 to +4639
<a href="./injectables/PathService.html">projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts</a>
</td>
<td>injectable</td>
<td>UriService</td>
<td>PathService</td>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Broken link & manual edit of auto-generated Compodoc – please regenerate, don’t patch HTML

The anchor still targets uri.service.ts while the displayed entity is PathService, so the link will 404 in the generated site.
More importantly, Compodoc files are regenerated from the TypeScript sources during the build; committing hand-edited HTML will be lost on the next run and pollutes the diff.

Fix in source:

  1. Make sure the actual file was renamed to path.service.ts and all references updated.
  2. Run the Compodoc generation task (npm run docs or equivalent) and commit the refreshed output.
🤖 Prompt for AI Agents
In docs/compodoc/components-core/coverage.html around lines 4636 to 4639, the
link incorrectly points to uri.service.ts instead of path.service.ts, causing a
broken link. To fix this, ensure the original TypeScript file is renamed to
path.service.ts and all references updated accordingly. Then regenerate the
Compodoc documentation by running the appropriate docs generation command (e.g.,
npm run docs) and commit the updated generated files instead of manually editing
the HTML.

Comment on lines 1473 to 1477
<a href="injectables/UriResourceService.html" data-type="entity-link" >UriResourceService</a>
</li>
<li class="link">
<a href="injectables/UriService.html" data-type="entity-link" >UriService</a>
<a href="injectables/PathService.html" data-type="entity-link" >PathService</a>
</li>
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Stop committing Compodoc-generated HTML/JS – these files are overwritten on every build

docs/compodoc/** is produced by Compodoc at release time. Hand-edited diffs (like adding the PathService link here) will disappear the next time docs are regenerated and will only create noisy merge conflicts and bigger PRs.

Strip this directory from the PR (or add it to .gitignore), let CI regenerate docs, and make the real change in the TypeScript sources that feed Compodoc instead.

🤖 Prompt for AI Agents
In docs/compodoc/components-core/js/menu-wc.js around lines 1473 to 1477, the
changes are made to Compodoc-generated files which get overwritten on every
build. Remove these manual edits from the PR and do not commit changes to this
directory. Instead, add docs/compodoc/** to .gitignore or exclude it from
commits, then make the necessary changes in the original TypeScript source files
that generate these docs so that CI can regenerate the documentation correctly.

} from '@netgrif/components-core';
import {TranslateService} from '@ngx-translate/core';
import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Remove unused or incorrect import.

The import of Path from @schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript appears to be unused and from an unusual internal TypeScript path. This should be removed unless it's specifically needed.

-import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
📝 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
import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
🤖 Prompt for AI Agents
In
projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts
at line 13, remove the import statement for `Path` from
`@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript`
because it is unused and references an unusual internal TypeScript path.

@@ -21,6 +21,6 @@ export class UserField extends DataField<UserValue> {
}

protected valueEquality(a: UserValue, b: UserValue): boolean {
return (!a && !b) || (!!a && !!b && a.email === b.email);
return (!a && !b) || (!!a && !!b && a.username === b.username);
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

LGTM: Updated equality check aligns with UserValue model refactoring.

The change from a.email === b.email to a.username === b.username is consistent with the broader refactoring of user models mentioned in the PR objectives.

Verify that all other references to UserValue properties have been consistently updated throughout the codebase:


🏁 Script executed:

#!/bin/bash
# Description: Check for any remaining references to the old email property in UserValue contexts
# Expected: No remaining references to UserValue.email in comparison or assignment contexts

# Search for potential remaining email references in user-related files
rg -A 3 -B 3 "\.email" --type ts | grep -E "(UserValue|user.*email|email.*user)"

Length of output: 2647


Fix required: Update residual email references to username in user-related code

We still have a number of occurrences where the old email property is used instead of username. Please update these to align with the refactored UserValue model and adjust any affected tests:

  • projects/nae-example-app/src/app/doc/dashboard-case-example/dashboard-case-example.component.ts
    Replace author: { email: userService.user.email } with author: { username: userService.user.username }
  • projects/netgrif-components-core/src/lib/user/services/user-comparator.service.ts
    Change this._userService.user.email.includes('anonymous') to this._userService.user.username.includes('anonymous')
  • projects/netgrif-components-core/src/lib/resources/engine-endpoint/user-resource.service.spec.ts
    Update expect(res.email).toEqual('string')expect(res.username).toEqual('string')
  • projects/netgrif-components-core/src/lib/public/factories/public-factory-resolver.ts
    Replace userService.user.email !== 'anonymous@netgrif.com' with userService.user.username !== 'anonymous' (or appropriate default)
  • projects/netgrif-components-core/src/lib/impersonation/services/impersonation.service.spec.ts
    Adjust fixture construction: (id, username, email, …)(id, username, username, …) or remove unused email
  • projects/netgrif-components-core/src/lib/groups/services/next-group.service.ts
    Change g.author.email === this._userService.user.email to g.author.username === this._userService.user.username
  • projects/netgrif-components-core/src/lib/forms/change-password/abstract-change-password.component.ts
    Update login: this.user.user.emaillogin: this.user.user.username
  • projects/netgrif-components-core/src/lib/authentication/store/effects/authentication.effects.ts
    Review commented code referencing action.user.email and replace if still relevant
  • projects/netgrif-components-core/src/lib/authentication/models/user.transformer.ts
    Replace user.email mapping with user.username

Once these are updated, rerun your grep to confirm no stray .email accesses remain in user contexts.

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts
at line 24 and across the specified files, replace all remaining references to
the old 'email' property with 'username' to align with the updated UserValue
model. This includes updating property accesses, test expectations, fixture
constructions, and any conditional checks involving user email to use username
instead. After making these changes, rerun a search for '.email' in user-related
contexts to ensure no outdated references remain.

Comment on lines 86 to 92
case FieldTypeResource.USER_LIST:
let userListValue = new UserListValue(new Map<string, UserValue>());
if (item.value) {
item.value.userValues.forEach(u => userListValue.addUserValue(new UserValue(u.id, u.firstName, u.lastName, u.email)));
item.value.userValues.forEach(u => userListValue.addUserValue(new UserValue(u.id, u.realmId, u.firstName, u.lastName, u.username)));
}
return new UserListField(item.stringId, item.name, item.behavior, userListValue,
item.roles, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix switch declaration scope issue.

The static analysis tool correctly identifies that the userListValue declaration can be erroneously accessed from other switch cases.

Apply this diff to wrap the declaration in a block:

            case FieldTypeResource.USER_LIST:
+                {
                let userListValue = new UserListValue(new Map<string, UserValue>());
                if (item.value) {
                    item.value.userValues.forEach(u => userListValue.addUserValue(new UserValue(u.id, u.realmId, u.firstName, u.lastName, u.username)));
                }
                return new UserListField(item.stringId, item.name, item.behavior, userListValue,
                    item.roles, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
+                }
🧰 Tools
🪛 Biome (1.9.4)

[error] 87-87: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts
around lines 86 to 92, the variable userListValue is declared directly inside a
switch case without a block, which can cause scope leakage to other cases. To
fix this, wrap the entire case block in curly braces {} so that userListValue is
scoped only within this case and cannot be accessed from other cases.


public static SEPARATOR: string = '/';
private readonly _activePath$: BehaviorSubject<string>;
protected pageSize: number;
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Verify pageSize property usage in extending services.

The pageSize property is set during construction but not used within this service. Please ensure this property is intended for use by extending services or components that inject this service.

Also applies to: 39-39


🏁 Script executed:

#!/bin/bash
# Check if pageSize property is used in extending services or components
rg -A 3 -B 3 "pageSize" --type ts

Length of output: 20419


Action Required: Clean up unused pageSize in PathService

The pageSize field in projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (declared at line 16 and set in the constructor) is only ever used in a debug log and is not referenced by PathService itself or by any subclasses. Please choose one of the following:

  • Remove the pageSize property, its constructor injection token (NAE_URI_NODE_CASES_PAGE_SIZE), and related debug logging, since it’s unused.
  • OR document its intended purpose and add the necessary methods/accessors so that consumers of PathService can actually use the configured page size.

Files/locations to review:

  • projects/netgrif-components-core/src/lib/navigation/service/path.service.ts
    • Line 16: protected pageSize: number;
    • Constructor assignment and _logger.debug call
🤖 Prompt for AI Agents
In projects/netgrif-components-core/src/lib/navigation/service/path.service.ts
at line 16, the pageSize property is declared and assigned but only used in a
debug log and nowhere else. To fix this, either remove the pageSize property,
its constructor injection token NAE_URI_NODE_CASES_PAGE_SIZE, and all related
debug logging since it is unused, or alternatively, document the intended
purpose of pageSize and add appropriate methods or accessors so that consumers
of PathService can utilize the configured page size.

];
component.itemsOrder = MenuOrder.Ascending;
component.switchOrder();
console.log(MenuOrder);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove debugging console.log statement

-        console.log(MenuOrder);
📝 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
console.log(MenuOrder);
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts
at line 151, remove the console.log(MenuOrder) statement as it is a debugging
leftover and should not be present in the final code.

Comment on lines +287 to +293
tap((data: ApplicationConfiguration) => {
if (!data || !data.properties) {
return of(null);
}
this.configuration = data.properties as NetgrifApplicationEngine;
this.initialize();
})
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix incorrect tap operator usage

The tap operator is for side effects only - its return value is ignored. The null check should guard the configuration update instead.

                 tap((data: ApplicationConfiguration) => {
-                    if (!data || !data.properties) {
-                        return of(null);
-                    }
-                    this.configuration = data.properties as NetgrifApplicationEngine;
-                    this.initialize();
+                    if (data && data.properties) {
+                        this.configuration = data.properties as NetgrifApplicationEngine;
+                        this.initialize();
+                    }
                 })
📝 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
tap((data: ApplicationConfiguration) => {
if (!data || !data.properties) {
return of(null);
}
this.configuration = data.properties as NetgrifApplicationEngine;
this.initialize();
})
tap((data: ApplicationConfiguration) => {
if (data && data.properties) {
this.configuration = data.properties as NetgrifApplicationEngine;
this.initialize();
}
})
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts
around lines 287 to 293, the tap operator is incorrectly used to return an
observable, which is ignored. Instead, move the null check outside the tap
operator to guard the configuration update and initialization. Use tap only for
side effects without returning any value.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 17

🔭 Outside diff range comments (4)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.spec.ts (2)

19-19: Fix the UserValue constructor call to match the expected 5-argument signature.

This UserValue constructor call also needs to be updated to provide the expected 5 arguments.


25-25: Fix the UserValue constructor call to match the expected 5-argument signature.

This UserValue constructor call also needs to be updated to provide the expected 5 arguments.

docs/compodoc/components-core/injectables/UriService.html (1)

1-1706: Remove auto-generated documentation files from the PR.

Based on previous learnings, compodoc documentation files are auto-generated during the release process and should not be manually edited. These HTML files will be overwritten on the next documentation build.

The changes here reflect the UriServicePathService rename, but this documentation will be automatically regenerated from the source TypeScript files.

Consider removing this file from the PR since it will be regenerated automatically during the build process.

docs/compodoc/components-core/interfaces/ViewNavigationItem.html (1)

1-739: Remove auto-generated documentation files from the PR.

This is another auto-generated compodoc documentation file that should not be manually edited. The changes (trailing space removal and UriServicePathService rename) will be automatically applied when the documentation is regenerated from the source TypeScript files.

Please remove this file from the PR as it will be overwritten during the next documentation build process.

🧹 Nitpick comments (11)
.github/workflows/pr-build.yml (2)

11-11: Re-evaluate dropping Node 18 and adding Node 24.

Node 24 is the current stable but not yet LTS, while Node 18 is still under active LTS until April 2025. Removing 18 may break consumers still pinned to that version.
Recommendation: keep 18 in the matrix (or add a scheduled job to cover it) until you officially deprecate it in a major release.

-                node-version: [ 20, 22, 24 ]
+                node-version: [ 18, 20, 22, 24 ]

Alternatively, update the README / package engines field to state the new minimum supported version.


20-21: Good call on explicit npm install, but add cache for speed.

Switching from the alias npm i to npm install improves clarity – LGTM.
While touching this step, consider adding the official actions/setup-node cache to cut CI time (~40-60 %). Example:

-   name: Install dependencies
    run: npm install --legacy-peer-deps
+   name: Cache & install dependencies
+   uses: actions/setup-node@v4
+   with:
+       node-version: ${{ matrix.node-version }}
+       cache: 'npm'
+   run: npm ci --legacy-peer-deps

(Use npm ci in CI for reproducible installs.)

projects/netgrif-components-core/package.json (1)

30-58: Duplicate angular2-hotkeys entry in both dependencies and peerDependencies.

Having the same package in both sections is confusing and can lead to version-resolution conflicts when consumers install the library.

-        "angular2-hotkeys": "^16.0.0",

Either remove it from dependencies or peerDependencies (preferred: keep it only in peerDependencies, since this library is expected to be provided by the host app).

package.json (1)

90-96: angular2-hotkeys should not be pinned twice across workspace packages.

The root project also declares angular2-hotkeys. Keeping three potentially divergent version constraints (root + core dep + core peerDep) invites drift.

Align on a single constraint (e.g. "~16.0.0") and declare it only where necessary.

projects/nae-example-app/src/index.html (1)

8-11: Add defer to the injected env.js to avoid blocking first paint.

The script is not required for the initial HTML parsing. Loading it synchronously delays rendering.

-    <script src="assets/env.js"></script>
+    <script src="assets/env.js" defer></script>

Also verify that assets/env.js is included in the Angular build assets array, otherwise the file will be missing in production bundles.

projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1)

80-82: Prefer a descriptive factory/helper instead of five positional empty-string params.

Long positional constructors are fragile and unreadable.

-                    this._safeTask.userId,  '', '', '', ''
+                    this._safeTask.userId,  '', /* realmId */
+                    '', /* firstName */
+                    '', /* lastName  */
+                    ''  /* username  */

Better: introduce a static UserValue.blank(id) factory or a dedicated interface.

This improves self-documentation and reduces maintenance overhead when the signature changes again.

projects/netgrif-components-core/src/lib/configuration/public-api.ts (1)

3-3: Export addition is correct; consider alphabetical ordering
Re-exporting application-configuration makes the interface publicly available, which aligns with the rest of the refactor. To reduce future merge conflicts and keep the barrel tidy, you may want to sort the exports alphabetically:

-export * from './configuration.service';
-export * from './application-configuration';
+export * from './application-configuration';
+export * from './configuration.service';
projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (1)

16-21: New snackBarAction definition with hardcoded parameters.

The implementation follows the same pattern as the existing redirectAction and correctly uses dependency injection. However, consider making the snackbar configuration more flexible by accepting additional parameters from frontAction.args.

 export const snackBarAction: FrontActionDefinition = {
     call: (injector: Injector, frontAction: FrontAction) => {
         const snackBarService = injector.get(SnackBarService);
-        snackBarService.openGenericSnackBar(frontAction.args[0], 'info', SnackBarVerticalPosition.BOTTOM, SnackBarHorizontalPosition.CENTER, 2500)
+        snackBarService.openGenericSnackBar(
+            frontAction.args[0], 
+            frontAction.args[1] || 'info', 
+            frontAction.args[2] || SnackBarVerticalPosition.BOTTOM, 
+            frontAction.args[3] || SnackBarHorizontalPosition.CENTER, 
+            frontAction.args[4] || 2500
+        )
     }
 }

Additionally, consider adding error handling for missing args[0]:

 export const snackBarAction: FrontActionDefinition = {
     call: (injector: Injector, frontAction: FrontAction) => {
+        if (!frontAction.args[0]) {
+            console.warn('snackBarAction: Missing message argument');
+            return;
+        }
         const snackBarService = injector.get(SnackBarService);
         snackBarService.openGenericSnackBar(frontAction.args[0], 'info', SnackBarVerticalPosition.BOTTOM, SnackBarHorizontalPosition.CENTER, 2500)
     }
 }
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (2)

45-47: Consider adding path validation in the setter.

The path setter directly updates the BehaviorSubject without validation. Consider adding basic validation to ensure the path is a valid string and follows expected patterns.

 public set activePath(path: string) {
+    if (typeof path !== 'string') {
+        this._logger.warn('Invalid path type provided, defaulting to separator', { provided: path });
+        path = PathService.SEPARATOR;
+    }
     this._activePath$.next(path);
 }

62-64: Consider making the separator configurable.

The splitPath method uses a hardcoded separator. Consider making the separator configurable if different path formats might be needed in the future.

projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (1)

274-295: Improve error logging specificity.

The configuration loading implementation is well-structured with proper error handling. Consider making the error message more descriptive to aid debugging.

                 catchError((err: HttpErrorResponse) => {
                     if (err.status === 404) {
                         return of(null);
                     }
-                    console.log(err.message);
+                    console.error(`Failed to load application configuration: ${err.status} - ${err.message}`);
                     return of(null);
                 }),
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e4b1097 and 00bb71e.

📒 Files selected for processing (65)
  • .github/workflows/pr-build.yml (2 hunks)
  • docs/compodoc/components-core/classes/FileUploadModel.html (4 hunks)
  • docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (9 hunks)
  • docs/compodoc/components-core/components/AbstractImportNetComponent.html (17 hunks)
  • docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (43 hunks)
  • docs/compodoc/components-core/coverage.html (1 hunks)
  • docs/compodoc/components-core/injectables/UriService.html (24 hunks)
  • docs/compodoc/components-core/interfaces/FileList.html (3 hunks)
  • docs/compodoc/components-core/interfaces/ViewNavigationItem.html (5 hunks)
  • docs/compodoc/components-core/js/menu-wc.js (2 hunks)
  • docs/compodoc/components/components/BreadcrumbsComponent.html (5 hunks)
  • docs/compodoc/components/components/ImportNetComponent.html (6 hunks)
  • docs/compodoc/components/components/ImportNetDialogComponent.html (17 hunks)
  • docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (8 hunks)
  • docs/compodoc/components/interfaces/FileList.html (3 hunks)
  • package.json (1 hunks)
  • projects/nae-example-app/src/app/app.module.ts (3 hunks)
  • projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1 hunks)
  • projects/nae-example-app/src/assets/env.js (1 hunks)
  • projects/nae-example-app/src/assets/env.template.js (1 hunks)
  • projects/nae-example-app/src/environments/environment.prod.ts (1 hunks)
  • projects/nae-example-app/src/environments/environment.ts (1 hunks)
  • projects/nae-example-app/src/index.html (1 hunks)
  • projects/netgrif-components-core/package.json (1 hunks)
  • projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.spec.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/authentication/sign-up/services/sign-up.service.spec.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/configuration/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (6 hunks)
  • projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts (5 hunks)
  • projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts (15 hunks)
  • projects/netgrif-components-core/src/lib/navigation/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts (0 hunks)
  • projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.spec.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/resources/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.spec.ts (3 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/side-menu/side-menu-container/abstract-side-menu-container.component.spec.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/load-configuration.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/public-api.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (4 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (2 hunks)
  • projects/netgrif-components-core/src/lib/utility/tests/test-mock-dependencies.module.ts (2 hunks)
  • projects/netgrif-components/package.json (2 hunks)
  • projects/netgrif-components/src/lib/dialog/import-net-dialog/import-net-dialog.component.ts (1 hunks)
  • projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts (2 hunks)
  • projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.html (1 hunks)
  • projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.ts (2 hunks)
  • projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts (2 hunks)
💤 Files with no reviewable changes (1)
  • projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts
🧰 Additional context used
🧠 Learnings (13)
docs/compodoc/components/components/BreadcrumbsComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (2)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components/components/ImportNetDialogComponent.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
docs/compodoc/components/components/ImportNetComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components/interfaces/FileList.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components-core/classes/FileUploadModel.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components-core/interfaces/ViewNavigationItem.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
docs/compodoc/components-core/interfaces/FileList.html (4)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
docs/compodoc/components-core/components/AbstractNavigationDoubleDrawerComponent.html (2)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
</retrieved_learning>

docs/compodoc/components-core/coverage.html (3)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
</retrieved_learning>

docs/compodoc/components-core/components/AbstractImportNetComponent.html (1)
Learnt from: machacjozef
PR: netgrif/components#287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
docs/compodoc/components-core/js/menu-wc.js (4)

undefined

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:343-343
Timestamp: 2025-06-23T11:42:59.041Z
Learning: Auto-generated documentation files (like Compodoc HTML files) should not be manually edited. Changes should be made to the actual TypeScript source files, and the documentation will be regenerated during the build/release process.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components-core/injectables/UriService.html:99-102
Timestamp: 2025-06-23T11:43:15.755Z
Learning: HTML files in the docs/compodoc/ directory are auto-generated documentation that gets regenerated during the release process. Changes should be made to source TypeScript files rather than the generated HTML documentation files, as they will be overwritten.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/components/ImportNetComponent.html:197-197
Timestamp: 2025-06-23T11:42:59.266Z
Learning: Compodoc documentation files (like those in docs/compodoc/) are auto-generated during the release process from TypeScript source files. Any refactoring or parameter renaming should be done in the actual TypeScript source files, not in the HTML documentation files, as the HTML docs will be overwritten on the next documentation build.
</retrieved_learning>

<retrieved_learning>
Learnt from: machacjozef
PR: #287
File: docs/compodoc/components/interfaces/FileList.html:106-109
Timestamp: 2025-06-23T11:43:15.166Z
Learning: Documentation HTML files in the docs/compodoc/ directory are auto-generated during the release process from TypeScript source files. Any HTML issues or refactoring suggestions should be applied to the source TypeScript files instead of the HTML documentation files, as the HTML files will be overwritten on the next documentation build.
</retrieved_learning>

🧬 Code Graph Analysis (12)
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (1)
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1)
  • splitPath (62-64)
projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (1)
projects/netgrif-components-core/src/lib/user/models/user.ts (1)
  • User (7-63)
projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1)
projects/netgrif-components-core/src/lib/navigation/model/size-menu-injection-token.ts (1)
  • NAE_URI_NODE_CASES_PAGE_SIZE (6-6)
projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (3)
projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1)
  • Injectable (6-19)
projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (1)
  • Injectable (8-448)
projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1)
  • ApplicationConfiguration (27-33)
projects/netgrif-components-core/src/lib/utility/load-configuration.ts (1)
projects/netgrif-components-core/src/lib/configuration/configuration.service.ts (1)
  • loadConfiguration (274-295)
projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (2)
projects/netgrif-components-core/src/lib/actions/model/front-action-definition.ts (1)
  • FrontActionDefinition (4-6)
projects/netgrif-components-core/src/lib/data-fields/models/changed-fields.ts (1)
  • FrontAction (48-53)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (3)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts (1)
  • UserField (9-26)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)
  • UserListValue (8-49)
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts (3)
projects/netgrif-components-core/src/lib/resources/interface/case.ts (1)
  • Case (11-135)
projects/netgrif-components-core/src/lib/filter/models/case-search-request-body.ts (1)
  • CaseSearchRequestBody (9-72)
projects/netgrif-components-core/src/lib/navigation/model/navigation-configs.ts (2)
  • NavigationItem (12-15)
  • RIGHT_SIDE_INIT_PAGE_SIZE (27-27)
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (1)
projects/netgrif-components-core/src/lib/navigation/model/uri-resource.ts (1)
  • UriNodeResource (2-13)
projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
🪛 Biome (1.9.4)
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts

[error] 12-30: This constructor is unnecessary.

Unsafe fix: Remove the unnecessary constructor.

(lint/complexity/noUselessConstructor)

projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts

[error] 16-24: This constructor is unnecessary.

Unsafe fix: Remove the unnecessary constructor.

(lint/complexity/noUselessConstructor)

projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts

[error] 87-87: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts

[error] 478-478: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)


[error] 484-484: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)

🪛 GitHub Actions: Build
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts

[error] 7-7: TypeScript error TS2554: Expected 5 arguments, but got 4.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
🔇 Additional comments (73)
.github/workflows/pr-build.yml (1)

8-8: Confirm runner availability – ubuntu-24.04 is still in preview.

ubuntu-24.04 has only recently been introduced and, in some organizations, is still behind a preview flag. A job will fail immediately if the runner image is unavailable in the current GitHub plan / region.

If you need broader CI reliability, consider keeping ubuntu-latest or adding a fallback strategy, e.g.:

-        runs-on: ubuntu-24.04
+        runs-on: ${{ matrix.os }}

with

matrix:
  os: [ubuntu-24.04, ubuntu-latest]

At minimum, please verify that the runner is enabled in your organisation before merging.

projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.spec.ts (1)

9-12: LGTM: Property name updates are correct.

The test assertions have been properly updated to use the new property names (firstName, lastName, username) which align with the user data model refactoring.

projects/netgrif-components/package.json (2)

3-3: LGTM: Version bump is appropriate.

The version update from 7.0.0-rc.3 to 7.0.0-rc.4 correctly reflects the major refactoring changes in this PR.


32-32: LGTM: Peer dependency version updated consistently.

The peer dependency version for @netgrif/components-core has been correctly updated to match the main package version, ensuring compatibility.

projects/netgrif-components-core/src/lib/utility/tests/test-mock-dependencies.module.ts (2)

7-7: LGTM: ResourceProvider import added.

The import is correctly added to support the new configuration services in the test environment.


27-27: LGTM: ResourceProvider added to providers.

The addition of ResourceProvider to the providers array ensures tests can properly inject and mock this service, which is consistent with the expanded use of ResourceProvider in the application.

projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.spec.ts (1)

11-14: LGTM: Property name updates are correct.

The test assertions have been properly updated to use the new property names (firstName, lastName, username) which align with the user data model refactoring.

projects/netgrif-components-core/src/lib/resources/public-api.ts (1)

9-9: LGTM: ConfigurationResourceService properly exported

The addition of the ConfigurationResourceService export is correctly placed among other engine endpoint services and aligns with the PR's goal of adding frontend remote configuration capabilities.

projects/netgrif-components-core/src/lib/navigation/public-api.ts (1)

15-15: LGTM: Service export updated for UriService → PathService refactor

The export change from uri.service to path.service correctly reflects the refactor from node-based URI management to string-based path management as mentioned in the PR objectives.

projects/netgrif-components-core/src/lib/utility/public-api.ts (1)

30-30: LGTM: Load configuration utility properly exported

The addition of the load-configuration export is correctly placed and supports the new frontend remote configuration feature by making the utility function publicly accessible.

projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts (1)

3-3: LGTM! Service replacement is consistent with the architectural change.

The import change from UriService to PathService aligns with the broader refactor mentioned in the PR objectives.

projects/netgrif-components-core/src/lib/side-menu/side-menu-container/abstract-side-menu-container.component.spec.ts (2)

17-17: LGTM! Test import updated correctly.

The import change from UriService to PathService is consistent with the service replacement.


91-95: LGTM! Test component updated correctly.

The constructor parameter and super constructor call have been updated to use PathService instead of UriService, maintaining consistency with the service replacement.

projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-field.ts (1)

24-24: Fix leftover email-based user comparisons

There’s a remaining comparison using email that needs to be updated to username to align with the user model refactor:

  • projects/netgrif-components-core/src/lib/groups/services/next-group.service.ts (owner group filter)

Apply:

- const ownerGroups = groups.filter(g => g.author.email === this._userService.user.email);
+ const ownerGroups = groups.filter(g => g.author.username === this._userService.user.username);

Likely an incorrect or invalid review comment.

projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts (3)

13-13: LGTM! Service import updated correctly.

The import change from UriService to PathService is consistent with the architectural refactor.


46-46: LGTM! Constructor parameter updated correctly.

The constructor parameter change from _uriService to _pathService aligns with the service replacement.


126-165: Confirmed removal of uriNodeId logic from uploadFile method

A global search for uriNodeId, activeNode and UriService returned no matches in abstract-import-net.component.ts (or its uploadFile method). All remaining uriNodeId references live in tests, mocks, interfaces and other domain classes—none in the refactored upload logic. This change has been applied correctly.

projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.ts (2)

7-7: LGTM! Service import updated correctly.

The import change from UriService to PathService is consistent with the architectural refactor.


67-73: LGTM! Constructor updated correctly.

The constructor parameter change from _uriService to _pathService and the corresponding super constructor call update are consistent with the service replacement.

projects/netgrif-components/src/lib/dialog/import-net-dialog/import-net-dialog.component.ts (2)

8-8: UriService import removed as part of service refactor.

This change aligns with the broader migration from UriService to PathService across the codebase. The removal is consistent with the dialog component no longer needing path-based navigation state management.


40-44: Remove _uriService Parameter

Verified that uriNodeId is no longer referenced in PetriNetResourceService (projects/netgrif-components-core/src/lib/resources/engine-endpoint/petri-net-resource.service.ts) or anywhere else in the codebase. The import API no longer requires the uriNodeId FormData field—no further changes needed.

projects/netgrif-components/src/lib/navigation/navigation-double-drawer/navigation-double-drawer.component.html (1)

136-136: Navigation comparison updated to use path-based logic.

The change from isItemAndNodeEqual(folder, currentNode) to isItemAndPathEqual(folder, currentPath) is consistent with the broader refactor from node-based to path-based navigation. This maintains the same UI behavior while using the new PathService architecture.

docs/compodoc/components/components/ImportNetDialogComponent.html (1)

1-1516: Skip auto-generated documentation file.

This is a Compodoc-generated HTML documentation file that will be automatically regenerated during the release process. Changes should be made to the source TypeScript files rather than this generated documentation.

projects/netgrif-components-core/src/lib/actions/model/router-action-definitions.ts (1)

5-6: New imports for SnackBarService functionality.

The imports are correctly added to support the new snackBarAction definition.

docs/compodoc/components/components/NavigationDoubleDrawerComponent.html (1)

233-233: Auto-generated documentation reflects source code changes correctly.

This compodoc documentation file is auto-generated during the release process and correctly reflects the refactor from UriService to PathService. The changes in constructor parameters and template method calls are consistent with the broader navigation refactor.

Also applies to: 367-367, 563-563, 623-623, 776-776

projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/multi-user-assign-list/abstract-multi-user-assign-list.component.ts (1)

62-62: LGTM! UserValue constructor updated correctly.

The constructor calls have been properly updated to use the new UserValue properties:

  • realmId instead of previous property
  • firstName instead of name
  • lastName instead of surname
  • username instead of email

These changes align with the updated UserValue model and maintain consistency across the codebase.

Also applies to: 65-65

projects/nae-example-app/src/assets/env.template.js (1)

1-8: LGTM! Safe IIFE pattern for global environment configuration.

The implementation uses a safe IIFE pattern to attach the environment object to the global window object:

  • window["env"] = window["env"] || {}; safely creates the object if it doesn't exist
  • Placeholder syntax ${VARIABLE} indicates this is a template for runtime substitution
  • IIFE prevents global namespace pollution

This template file provides a robust foundation for dynamic environment configuration.

docs/compodoc/components-core/classes/FileUploadModel.html (1)

103-116: Skip reviewing auto-generated documentation files.

Based on previous learnings, Compodoc documentation files are auto-generated during the release process and will be overwritten. Any changes should be made to the actual TypeScript source files instead.

projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.spec.ts (3)

24-24: LGTM: Consistent service refactoring.

The import statement correctly updates from UriService to PathService, aligning with the broader refactoring effort.


52-52: LGTM: Provider registration updated correctly.

The provider registration correctly changes from UriService to PathService, maintaining consistency with the service refactoring.


112-116: LGTM: Constructor parameter and super call updated correctly.

The constructor parameter correctly changes from UriService to PathService, and the super call properly passes the updated service instance.

docs/compodoc/components/interfaces/FileList.html (1)

106-116: Skip reviewing auto-generated documentation files.

Based on previous learnings, Compodoc documentation files are auto-generated during the release process and will be overwritten. Any changes should be made to the actual TypeScript source files instead.

projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-uri-resource.service.ts (4)

12-14: LGTM: Path constants updated to use root separator.

The static path constants correctly change from 'root/test1' and 'root/test2' to '/test1' and '/test2', aligning with the new root path separator convention.


17-18: LGTM: Root node updated to use '/' identifier.

The root node correctly changes from 'root' to '/' for both id and path, consistent with the new path-based navigation model.


31-31: LGTM: Parent IDs updated consistently.

The parent IDs for test nodes correctly change from 'root' to '/', maintaining consistency with the new root identifier.

Also applies to: 42-42


64-64: LGTM: Method updated to use new root identifier.

The getNodesByParent method correctly updates the condition to check for '/' instead of 'root', ensuring proper hierarchical navigation with the new path structure.

projects/netgrif-components-core/src/lib/utility/tests/mocks/mock-user.service.ts (3)

2-2: LGTM: Import statement updated for new functionality.

The import correctly adds the of operator from rxjs to support the new logout() method's return value.


53-57: LGTM: Logout method implementation is correct.

The logout() method properly resets the user state using the emptyUser() helper, emits the change via the ReplaySubject, and returns an observable. This enhances the mock service to support logout functionality in tests.


59-61: LGTM: Empty user helper method is well-implemented.

The emptyUser() method correctly creates a new User instance with empty strings and arrays, matching the User constructor signature. This provides a clean way to reset user state.

projects/netgrif-components-core/src/lib/utility/load-configuration.ts (1)

1-28: Well-implemented configuration loader factory.

The implementation is clean and follows Angular best practices for APP_INITIALIZER providers. The JSDoc documentation is comprehensive with a practical usage example, making it easy for developers to understand how to integrate this into their modules.

docs/compodoc/components-core/components/AbstractBreadcrumbsComponent.html (1)

269-269: Documentation correctly reflects UriService to PathService refactor.

The documentation updates accurately reflect the service refactor from UriService to PathService in the constructor parameters, type references, and import statements. However, since this is auto-generated Compodoc documentation, any corrections should be made to the source TypeScript files rather than this HTML file.

Also applies to: 295-295, 901-901, 940-940

docs/compodoc/components-core/interfaces/FileList.html (1)

106-114: Auto-generated documentation reflects service refactor correctly.

The documentation updates show the proper migration from UriService to PathService and include minor HTML formatting improvements. Since this is auto-generated Compodoc documentation, these changes will be regenerated during the release process from the source TypeScript files.

Also applies to: 168-168, 201-201

projects/netgrif-components-core/src/lib/task-content/services/field-converter.service.ts (1)

82-82: UserValue constructor calls updated correctly for new data model.

The UserValue constructor calls have been properly updated to include the new realmId parameter and use username instead of email, aligning with the updated user data model. All three instances consistently follow the new constructor signature: (id, realmId, firstName, lastName, username).

Also applies to: 89-89, 291-291

projects/nae-example-app/src/app/app.module.ts (2)

2-2: LGTM! Proper imports for application initialization.

The imports for APP_INITIALIZER and loadConfiguration are correctly added to support the new configuration loading mechanism.

Also applies to: 22-23


248-259: LGTM! Proper APP_INITIALIZER configuration.

The APP_INITIALIZER provider is correctly configured with:

  • loadConfiguration factory function
  • ConfigurationService dependency
  • multi: true flag (essential for APP_INITIALIZER)

The positioning of ResourceProvider at the beginning may be intentional for dependency ordering during application initialization.

projects/netgrif-components-core/src/lib/configuration/application-configuration.ts (1)

27-33: Well-designed interface with comprehensive documentation.

The ApplicationConfiguration interface is properly structured with clear property names, appropriate optional fields, and excellent JSDoc documentation. The interface effectively supports the dynamic configuration loading feature.

projects/netgrif-components-core/src/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.ts (1)

77-77: Correct property mapping to updated UserValue constructor.

The UserValue constructor call has been properly updated to use the new property names (realmId, firstName, lastName, username) that align with the refactored user model structure.

projects/nae-example-app/src/app/nae-example-app-configuration.service.ts (1)

10-17: Environment variables verified

The grep output confirms that application_identifier, type_identifier, gateway_url, and resolve_configuration are defined with appropriate defaults in both

  • projects/nae-example-app/src/environments/environment.ts
  • projects/nae-example-app/src/environments/environment.prod.ts

No further action is needed—environment variables are in place and the configuration service implementation is correct.

projects/netgrif-components-core/src/lib/navigation/service/path.service.ts (1)

18-43: Well-implemented constructor with robust parameter validation.

The constructor properly handles optional page size injection with comprehensive validation, type conversion, and fallback defaults. The logging provides good visibility into the initialization process.

docs/compodoc/components/components/ImportNetComponent.html (1)

1-580: Auto-generated documentation file - no review needed.

This file is auto-generated by compodoc during the release process. The changes from UriService to PathService reflect the updates made in the actual TypeScript source files.

docs/compodoc/components-core/components/AbstractImportNetComponent.html (1)

281-281: Auto-generated Documentation: Update Only TypeScript Source

Compodoc HTML files are regenerated from the TypeScript sources and must not be edited by hand. The replacement of UriService with PathService has already been applied in:

  • projects/netgrif-components-core/src/lib/side-menu/content-components/import-net/abstract-import-net.component.ts
    • Line 13: import {PathService} from …/service/path.service
    • Line 46: constructor parameter _pathService: PathService

No manual updates to docs/compodoc/components-core/components/AbstractImportNetComponent.html (or its related lines 281, 331, 1114) are required—these will be regenerated on the next documentation build.

projects/netgrif-components-core/src/lib/authentication/profile/services/profile.service.spec.ts (3)

10-13: LGTM - Proper dependency injection setup.

The addition of required imports (ConfigurationResourceService, ResourceProvider, HttpClient, Injectable) aligns with the new configuration loading architecture.


63-66: LGTM - Test setup updated for new dependencies.

The test providers now include the necessary services (HttpClient, ResourceProvider, ConfigurationResourceService) required by the updated MissingEndpointsConfigurationService.


84-109: LGTM - Configuration service properly updated.

The MissingEndpointsConfigurationService is now properly decorated with @Injectable() and the constructor correctly injects ConfigurationResourceService. The superclass constructor call includes the proper ApplicationConfiguration object with all required fields.

docs/compodoc/components/components/BreadcrumbsComponent.html (1)

190-190: Ignore auto-generated documentation – source files updated correctly

The Compodoc HTML is regenerated from your TypeScript sources. The constructor in
projects/netgrif-components/src/lib/navigation/breadcrumbs/breadcrumbs.component.ts
already uses PathService and no longer references UriService:

• Line 3: import of PathService
• Line 16: constructor parameter _pathService: PathService

No changes to the generated HTML are necessary—focus future edits on the .ts source.

projects/netgrif-components-core/src/lib/authentication/sign-up/services/sign-up.service.spec.ts (3)

9-12: LGTM - Consistent dependency injection setup.

The addition of required imports aligns with the new configuration loading architecture and is consistent with similar changes in other test files.


92-94: LGTM - Test providers updated consistently.

The test setup now includes the necessary services (HttpClient, ResourceProvider, ConfigurationResourceService) required by the updated configuration service, maintaining consistency with other test files.


128-155: LGTM - Configuration service implementation is consistent.

The MissingEndpointsConfigurationService updates are consistent with the pattern used in other test files:

  • Proper @Injectable() decorator
  • Correct constructor parameter injection
  • Proper ApplicationConfiguration object structure

This maintains consistency across the test infrastructure.

projects/netgrif-components-core/src/lib/utility/tests/test-config.ts (1)

8-13: LGTM: Proper Angular service setup with dependency injection.

The addition of the @Injectable() decorator and the enhanced constructor with HTTP client and resource service setup properly aligns the test service with the new configuration architecture.

projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts (1)

35-39: LGTM: Proper migration from UriService to PathService.

The constructor parameter change from _uriService to _pathService and the corresponding super constructor call correctly implement the migration to the new path-based navigation system.

projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)

15-40: LGTM: Well-structured refactoring with improved clarity.

The refactoring improves the model by:

  • Using more descriptive property names (firstName/lastName instead of name/surname)
  • Replacing email with username for better semantic accuracy
  • Adding realmId to support multi-tenant scenarios
  • Updating the fullName getter to use the new property names

The implementation is consistent and maintains backward compatibility through the getter methods.

projects/netgrif-components-core/src/lib/resources/engine-endpoint/configuration-resource.service.ts (1)

13-45: LGTM: Well-designed service following Angular best practices.

The service implementation is excellent with:

  • Proper singleton pattern using providedIn: 'root'
  • Clear private constants for URL construction
  • Good TypeScript typing with Observable return type
  • Comprehensive JSDoc documentation
  • Clean separation of concerns using ResourceProvider for HTTP operations

The URL construction logic correctly builds the endpoint path using the configuration parameters.

projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.ts (4)

41-41: LGTM: Proper migration from UriService to PathService.

The constructor parameter change correctly implements the migration to the new path-based navigation system, maintaining the same dependency injection pattern.


69-69: LGTM: Method calls updated to use PathService API.

The method calls are correctly updated from UriService.splitNodePath() to PathService.splitPath() and property access from activeNode to activePath, maintaining the same functionality with the new service.

Also applies to: 138-138


117-123: LGTM: Improved error handling in redirect method.

The enhanced error handling properly validates the existence of the target URL before navigation and logs meaningful error messages when redirect data is missing, improving debugging capabilities.


145-148: LGTM: Simplified changePath method with direct path setting.

The simplified approach directly sets the activePath on PathService and updates the breadcrumbs, removing unnecessary asynchronous complexity while maintaining the same functionality.

projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts (3)

36-36: LGTM! Clean migration to PathService.

The imports correctly reflect the migration from UriService to PathService and include necessary navigation models.

Also applies to: 41-43


77-78: Good improvement to spy configuration.

Using callThrough() provides better test coverage by executing the actual implementation while still tracking calls.


91-131: Correct migration to path-based navigation.

The changes properly update all assertions from node-based to path-based navigation, and fix the method invocation bug on lines 129-131.

projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts (1)

37-106: Excellent test coverage for redirect functionality.

The test suite comprehensively covers all redirect scenarios including success, error, and disabled states.

projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts (3)

358-371: Excellent refactor to reactive programming patterns.

The migration to RxJS operators with proper error handling and loading state management improves code maintainability and readability.

Also applies to: 387-401


603-611: Well-implemented path extraction utility.

The extractParent method properly handles all edge cases for path extraction, providing a clean abstraction for path manipulation.


185-195: Successful migration to path-based navigation.

The refactor consistently replaces all node-based navigation with path strings, using PathService.SEPARATOR for the root path throughout.

Also applies to: 307-339

Comment on lines 32 to 36
public getLast(): UserValue {
if (this._userValues.size == 0) {
return new UserValue('', '', '', '');
return new UserValue('', '', '', '', '');
}
return Array.from(this._userValues.values()).pop();
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Returning a dummy UserValue object can mask “no user” states.

getLast() now returns new UserValue('', '', '', '', '') when the list is empty.
Down-stream code can’t distinguish between “no value” and “empty value” and may treat the blank object as a real user.

Consider returning undefined (or null) and updating call-sites accordingly, or expose a typed EMPTY constant so equality checks stay explicit.

-            return new UserValue('', '', '', '', '');
+            return undefined as any; // or handle with Optional chaining at call-sites

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/data-fields/user-list-field/models/user-list-value.ts
around lines 32 to 36, the getLast() method returns a dummy UserValue with empty
strings when the list is empty, which can confuse downstream code by masking "no
user" states. Modify getLast() to return undefined (or null) instead of a dummy
UserValue when the list is empty, and update all call-sites to handle this new
return type properly. Alternatively, define and expose a typed EMPTY constant
UserValue and return that to allow explicit equality checks.

Comment on lines 4633 to +4639
<tr class="medium">
<td>
<!-- miscellaneous -->
<a href="./injectables/UriService.html">projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts</a>
<a href="./injectables/PathService.html">projects/netgrif-components-core/src/lib/navigation/service/uri.service.ts</a>
</td>
<td>injectable</td>
<td>UriService</td>
<td>PathService</td>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid manual edits of auto-generated Compodoc HTML – please drop this change

Files under docs/compodoc/ are generated by Compodoc during the build/release process. Manually committing edits (like the updated row here) will be overwritten next time the docs are regenerated and causes noisy diffs.
Additionally, the visible text still references uri.service.ts while the link points to PathService.html, so even the manual fix is internally inconsistent.

Action:

  1. Revert this HTML file from the PR.
  2. Ensure the underlying TypeScript (path.service.ts) is correctly documented; the doc generator will then produce an accurate coverage table automatically.
🤖 Prompt for AI Agents
In docs/compodoc/components-core/coverage.html lines 4633 to 4639, the changes
are manual edits to an auto-generated Compodoc HTML file, which should be
avoided as they will be overwritten. Revert this HTML file to its original state
in the PR and instead verify and update the documentation comments in the
underlying TypeScript file path.service.ts so that the documentation generator
produces the correct coverage table automatically.

Comment on lines +1 to +120
// HttpClientTestingModule,
// NoopAnimationsModule,
// AuthenticationModule,
// RouterTestingModule.withRoutes([]),
// ],
// providers: [
// {provide: ConfigurationService, useClass: TestLoggingConfigurationService},
// {provide: UriResourceService, useClass: MockUriResourceService},
// {provide: CaseResourceService, useClass: MockCaseResourceService},
// ],
// });
// service = TestBed.inject(UriService);
// });
//
// afterEach(() => {
// TestBed.resetTestingModule();
// });
//
// it('should be created', () => {
// expect(service).toBeTruthy();
// });
//
// it('should get root node', () => {
// const root = service.root;
// expect(root.id).toEqual('root');
// expect(service.isRoot(root)).toBeTruthy();
// expect(service.activeNode).toEqual(root);
// });
//
// it('should set and reset activeNode', done => {
// service.getNodeByPath(MockUriResourceService.TEST1_PATH).subscribe(node => {
// service.activeNode = node;
// expect(service.activeNode).not.toEqual(service.root);
// service.reset();
// expect(service.activeNode).toEqual(service.root);
// done();
// });
// });
//
// it('should get node by path', done => {
// service.getNodeByPath(MockUriResourceService.TEST1_PATH).subscribe(res => {
// expect(res.path).toEqual(MockUriResourceService.TEST1_PATH);
// expect(res.id).toEqual(MockUriResourceService.TEST1_ID);
// done();
// });
// });
//
// it('should get child nodes', done => {
// service.getChildNodes(service.root).subscribe(res => {
// expect(res.length).toEqual(2);
// res.forEach(r => {
// expect(r.id).toContain('test');
// expect(r.parentId).toEqual('root');
// });
// done();
// });
// });
//
// it('should get cases of node', done => {
// service.getCasesOfNode().subscribe(page => {
// expect(page.content.length).toEqual(1);
// });
// done();
// });
//
// it('should get siblings of a node', done => {
// service.getNodeByPath(MockUriResourceService.TEST1_PATH).subscribe(node => {
// expect(node.id).toEqual(MockUriResourceService.TEST1_ID);
// service.getSiblingsOfNode(node).subscribe(siblings => {
// expect(siblings.find(n => n.id === MockUriResourceService.TEST2_ID)).not.toBeUndefined();
// done();
// });
// });
// });
//
// it('should get nodes by level', done => {
// service.getNodesOnLevel(1).subscribe(res => {
// expect(res.length).toEqual(2);
// done();
// });
// });
//
// it('it should return path of a node\'s parent', done => {
// service.getNodeByPath(MockUriResourceService.TEST1_PATH).subscribe(node => {
// const parentPath = service.resolveParentPath(node);
// expect(parentPath).toEqual('root');
// done();
// });
// });
//
// it('should get parts of path', done => {
// service.getNodeByPath(MockUriResourceService.TEST1_PATH).subscribe(node => {
// const path = service.splitNodePath(node);
// expect(path.length).toEqual(1);
// expect(path[0]).toEqual(MockUriResourceService.TEST1_ID);
// done();
// });
// });
//
// });
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Remove the file entirely instead of commenting out tests

Since UriService has been completely replaced with PathService as part of this refactor, this test file should be deleted rather than having all tests commented out. Commented-out test code creates maintenance overhead and potential confusion.

Consider removing this file completely:

-// import {HttpClientTestingModule} from '@angular/common/http/testing';
-// import {TestBed} from '@angular/core/testing';
-// ... (all commented lines)

And ensure that appropriate tests for PathService exist elsewhere in the codebase.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/navigation/service/uri.service.spec.ts
from lines 1 to 120, all tests for UriService are commented out because
UriService has been replaced by PathService. Instead of leaving these tests
commented out, delete this entire test file to avoid maintenance overhead and
confusion. Also, verify that tests for PathService are implemented in the
codebase to maintain coverage.

Comment on lines +450 to 454
class TestHttp extends HttpHandler {
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
return undefined;
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix the TestHttp.handle() method to return a proper Observable.

The handle method currently returns undefined, which will cause runtime errors since callers expect an Observable<HttpEvent<any>>. For a proper test mock, it should return an empty or error Observable.

class TestHttp extends HttpHandler {
    handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
-        return undefined;
+        return new Observable(subscriber => {
+            subscriber.error(new Error('TestHttp: No mock response configured'));
+        });
    }
}

Alternatively, you could use Angular's HttpClientTestingModule for more robust HTTP testing.

📝 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
class TestHttp extends HttpHandler {
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
return undefined;
}
}
class TestHttp extends HttpHandler {
handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {
return new Observable(subscriber => {
subscriber.error(new Error('TestHttp: No mock response configured'));
});
}
}
🤖 Prompt for AI Agents
In projects/netgrif-components-core/src/lib/utility/tests/test-config.ts around
lines 450 to 454, the TestHttp.handle() method incorrectly returns undefined
instead of an Observable<HttpEvent<any>>. To fix this, modify the handle method
to return a valid Observable, such as an empty Observable or one that emits an
error, ensuring it matches the expected return type and prevents runtime errors
during testing.

} from '@netgrif/components-core';
import {TranslateService} from '@ngx-translate/core';
import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Fix the incorrect Path import.

The import from @schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript is incorrect and references internal Angular schematics paths. This import should likely be removed or replaced with the correct Path type.

-import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";

🏁 Script executed:

#!/bin/bash
# Search for other Path imports in the codebase to understand the correct import
rg -A 2 -B 2 "import.*Path.*from" --type ts

Length of output: 27591


🏁 Script executed:

#!/bin/bash
sed -n '1,200p' projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts

Length of output: 1541


Remove the incorrect and unused Path import

The import from
"@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript"
is neither correct nor used in this component. Please remove it. If you actually require a Path type, import it from the proper package (e.g. @angular-devkit/core).

• File: projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts
Remove this line:

- import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
📝 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
import {Path} from "@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript";
🤖 Prompt for AI Agents
In
projects/netgrif-components/src/lib/side-menu/content-components/import-net/import-net.component.ts
at line 13, remove the import statement for Path from
"@schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript"
because it is incorrect and unused. If a Path type is needed, import it from the
correct package such as "@angular-devkit/core".

Comment on lines +133 to 168
it('should load more items', () => {
component.moreItems = [{id: 'a'}, {id: 'b'}, {id: 'c'}] as any;
component.rightItems = [];
component.loadMoreItems();
expect(component.rightItems.length).toBeGreaterThan(0);
});

it('should switch order and change sorting', () => {
component.rightItems = [
{navigation: {title: 'Z'}, id: '1'} as any,
{navigation: {title: 'A'}, id: '2'} as any
];
component.leftItems = [
{navigation: {title: 'B'}, id: '3'} as any,
{navigation: {title: 'C'}, id: '4'} as any
];
component.itemsOrder = MenuOrder.Ascending;
component.switchOrder();
console.log(MenuOrder);
expect(component.itemsOrder).toBe(MenuOrder.Descending as any);
});


it('should return id in itemsTrackBy', () => {
expect(component.itemsTrackBy(1, {id: 'test'} as any)).toBe('test');
});

it('should return node path in uriNodeTrackBy', () => {
expect(component.uriNodeTrackBy(2, {path: '/test'} as any)).toBe('/test');
});

it('should handle resize event', () => {
const event = {rectangle: {width: 420}} as any;
component.onResizeEvent(event);
expect(component.configRightMenu.width).toBe(420);
});
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove debug console.log statement.

The new test cases provide excellent coverage for the new functionality. However, the console.log statement on line 151 should be removed.

-        console.log(MenuOrder);
         expect(component.itemsOrder).toBe(MenuOrder.Descending as any);
📝 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
it('should load more items', () => {
component.moreItems = [{id: 'a'}, {id: 'b'}, {id: 'c'}] as any;
component.rightItems = [];
component.loadMoreItems();
expect(component.rightItems.length).toBeGreaterThan(0);
});
it('should switch order and change sorting', () => {
component.rightItems = [
{navigation: {title: 'Z'}, id: '1'} as any,
{navigation: {title: 'A'}, id: '2'} as any
];
component.leftItems = [
{navigation: {title: 'B'}, id: '3'} as any,
{navigation: {title: 'C'}, id: '4'} as any
];
component.itemsOrder = MenuOrder.Ascending;
component.switchOrder();
console.log(MenuOrder);
expect(component.itemsOrder).toBe(MenuOrder.Descending as any);
});
it('should return id in itemsTrackBy', () => {
expect(component.itemsTrackBy(1, {id: 'test'} as any)).toBe('test');
});
it('should return node path in uriNodeTrackBy', () => {
expect(component.uriNodeTrackBy(2, {path: '/test'} as any)).toBe('/test');
});
it('should handle resize event', () => {
const event = {rectangle: {width: 420}} as any;
component.onResizeEvent(event);
expect(component.configRightMenu.width).toBe(420);
});
it('should switch order and change sorting', () => {
component.rightItems = [
{navigation: {title: 'Z'}, id: '1'} as any,
{navigation: {title: 'A'}, id: '2'} as any
];
component.leftItems = [
{navigation: {title: 'B'}, id: '3'} as any,
{navigation: {title: 'C'}, id: '4'} as any
];
component.itemsOrder = MenuOrder.Ascending;
component.switchOrder();
expect(component.itemsOrder).toBe(MenuOrder.Descending as any);
});
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.spec.ts
between lines 133 and 168, remove the console.log(MenuOrder) statement on line
151 to clean up debug output from the test case 'should switch order and change
sorting'.

Comment on lines +11 to +34
class TestBreadcrumbsComponent extends AbstractBreadcrumbsComponent {
constructor(
pathService,
caseResourceService,
activatedRoute,
router,
dynamicRoutingService,
translateService,
logger
) {
super(
pathService,
caseResourceService,
activatedRoute,
router,
dynamicRoutingService,
translateService,
logger
);
}
public setRedirectUrls(map: Map<string, Array<string>>) {
(this as any).redirectUrls = map;
}
}
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Remove unnecessary constructor.

The constructor doesn't add any logic beyond calling super, making it redundant.

 class TestBreadcrumbsComponent extends AbstractBreadcrumbsComponent {
-    constructor(
-        pathService,
-        caseResourceService,
-        activatedRoute,
-        router,
-        dynamicRoutingService,
-        translateService,
-        logger
-    ) {
-        super(
-            pathService,
-            caseResourceService,
-            activatedRoute,
-            router,
-            dynamicRoutingService,
-            translateService,
-            logger
-        );
-    }
     public setRedirectUrls(map: Map<string, Array<string>>) {
         (this as any).redirectUrls = map;
     }
 }
📝 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
class TestBreadcrumbsComponent extends AbstractBreadcrumbsComponent {
constructor(
pathService,
caseResourceService,
activatedRoute,
router,
dynamicRoutingService,
translateService,
logger
) {
super(
pathService,
caseResourceService,
activatedRoute,
router,
dynamicRoutingService,
translateService,
logger
);
}
public setRedirectUrls(map: Map<string, Array<string>>) {
(this as any).redirectUrls = map;
}
}
class TestBreadcrumbsComponent extends AbstractBreadcrumbsComponent {
public setRedirectUrls(map: Map<string, Array<string>>) {
(this as any).redirectUrls = map;
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 12-30: This constructor is unnecessary.

Unsafe fix: Remove the unnecessary constructor.

(lint/complexity/noUselessConstructor)

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/navigation/breadcrumbs/abstract-breadcrumbs.component.spec.ts
between lines 11 and 34, the constructor in TestBreadcrumbsComponent only calls
the superclass constructor without adding any extra logic, making it redundant.
Remove the entire constructor method from the class to simplify the code while
preserving functionality.

@@ -485,14 +475,14 @@ export abstract class AbstractNavigationDoubleDrawerComponent implements OnInit,
}

protected resolveCustomViewsInRightSide() {
if (!!this._childCustomViews[this._currentNode.path]) {
this.rightItems.push(...Object.values(this._childCustomViews[this._currentNode.path]));
if (!!this._childCustomViews[this.currentPath]) {
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Remove redundant double-negation.

The double-negation is unnecessary in conditional statements as values are already coerced to boolean.

-        if (!!this._childCustomViews[this.currentPath]) {
+        if (this._childCustomViews[this.currentPath]) {
             this.rightItems.push(...Object.values(this._childCustomViews[this.currentPath]));
         }
-        if (!!this._childCustomViews[this.extractParent(this.currentPath)]) {
+        if (this._childCustomViews[this.extractParent(this.currentPath)]) {
             this.leftItems.push(...Object.values(this._childCustomViews[this.extractParent(this.currentPath)]));
         }

Also applies to: 484-484

🧰 Tools
🪛 Biome (1.9.4)

[error] 478-478: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)

🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.ts
at lines 478 and 484, remove the redundant double-negation (!!) from the
conditional statements. Simply use the variable or expression directly in the if
condition since JavaScript automatically coerces values to boolean in
conditionals.

# Conflicts:
#	projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts
# Conflicts:
#	projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1)

132-132: Remove redundant double-negation.

The double-negation !!changedFieldsMap is unnecessary since the if statement already coerces the value to boolean.

Apply this diff:

-                    if (!!changedFieldsMap) {
+                    if (changedFieldsMap) {
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 00bb71e and 86dc2cc.

📒 Files selected for processing (2)
  • projects/netgrif-components-core/src/lib/authentication/models/user.transformer.ts (1 hunks)
  • projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (2 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (2)
projects/netgrif-components-core/src/lib/data-fields/user-field/models/user-value.ts (1)
  • UserValue (6-41)
projects/netgrif-components-core/src/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.ts (1)
  • DelegateTaskEventOutcome (3-6)
🪛 Biome (1.9.4)
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts

[error] 132-132: Avoid redundant double-negation.

It is not necessary to use double-negation when a value will already be coerced to a boolean.
Unsafe fix: Remove redundant double-negation

(lint/complexity/noExtraBooleanCast)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: task-list-completed
  • GitHub Check: task-list-completed
  • GitHub Check: Matrix Test (20)
  • GitHub Check: Test with SonarCloud
  • GitHub Check: Matrix Test (24)
  • GitHub Check: Matrix Test (22)
🔇 Additional comments (1)
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts (1)

121-153: Excellent improvements to formatting and error handling.

The code formatting enhancements improve readability, and the explicit error handling for outcomeResource.error provides better user feedback through the error snackbar.

Comment on lines +80 to 85
// value: !this._safeTask.user ? undefined : new UserValue(
// this._safeTask.user.id, this._safeTask.user.realmId, this._safeTask.user.firstName, this._safeTask.user.lastName, this._safeTask.user.username
// ),
value: !this._safeTask.userId ? undefined : new UserValue(
this._safeTask.userId, '', '', ''
this._safeTask.userId, '', '', '', ''
),
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Use proper UserValue instantiation instead of empty strings.

The commented-out code shows the correct way to instantiate UserValue with actual user data, but the active implementation uses empty strings for all parameters. This will result in no user information being displayed in the delegate UI.

Apply this diff to use the proper user data:

-                // value: !this._safeTask.user ? undefined : new UserValue(
-                //     this._safeTask.user.id, this._safeTask.user.realmId, this._safeTask.user.firstName, this._safeTask.user.lastName, this._safeTask.user.username
-                // ),
-                value: !this._safeTask.userId ? undefined : new UserValue(
-                    this._safeTask.userId, '', '', '', ''
-                ),
+                value: !this._safeTask.user ? undefined : new UserValue(
+                    this._safeTask.user.id, this._safeTask.user.realmId, this._safeTask.user.firstName, this._safeTask.user.lastName, this._safeTask.user.username
+                ),

If the _safeTask.user property is no longer available and only _safeTask.userId exists, please verify that the missing user details are not needed for the delegate 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
// value: !this._safeTask.user ? undefined : new UserValue(
// this._safeTask.user.id, this._safeTask.user.realmId, this._safeTask.user.firstName, this._safeTask.user.lastName, this._safeTask.user.username
// ),
value: !this._safeTask.userId ? undefined : new UserValue(
this._safeTask.userId, '', '', ''
this._safeTask.userId, '', '', '', ''
),
value: !this._safeTask.user ? undefined : new UserValue(
this._safeTask.user.id, this._safeTask.user.realmId, this._safeTask.user.firstName, this._safeTask.user.lastName, this._safeTask.user.username
),
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/task/services/delegate-task.service.ts
between lines 80 and 85, the UserValue is instantiated with empty strings
instead of actual user data, causing missing user information in the delegate
UI. Fix this by replacing the empty strings with the correct user properties
from _safeTask.user if available, or verify if the additional user details are
necessary; if they are, ensure those details are retrieved and passed properly
when creating the UserValue instance.

Comment on lines +24 to +25
user.firstName,
user.lastName,
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

LGTM! Property names updated correctly for user model refactoring.

The change from user.name/user.surname to user.firstName/user.lastName aligns with the broader user model refactoring described in the PR objectives. The transformation logic remains sound.

Let me verify that the User constructor and UserResource interface have been updated consistently:


🏁 Script executed:

#!/bin/bash
# Description: Verify User constructor signature and UserResource interface consistency

# Check User constructor to ensure it expects firstName/lastName in the correct positions
ast-grep --pattern $'class User {
  $$$
  constructor($$$) {
    $$$
  }
  $$$
}'

# Check UserResource interface for firstName/lastName properties
ast-grep --pattern $'interface UserResource {
  $$$
  firstName: $_;
  lastName: $_;
  $$$
}'

# Verify no remaining references to old property names in user-related files
echo "Checking for any remaining references to old property names..."
rg -A 3 "user\.name|user\.surname" --type ts

Length of output: 854


Update remaining test to use firstName/lastName

The transformation logic and model updates look correct, but there’s a leftover reference to the old properties in the user-autocomplete spec:

• File: projects/netgrif-components-core/src/lib/search/models/category/user-autocomplete.spec.ts
Update the fullName assignment:

- fullName: `${user.name} ${user.surname}`,
+ fullName: `${user.firstName} ${user.lastName}`,

Please adjust this test (and any similar occurrences) to complete the refactoring.

📝 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
user.firstName,
user.lastName,
// File: projects/netgrif-components-core/src/lib/search/models/category/user-autocomplete.spec.ts
describe('UserAutocompleteModel', () => {
it('should construct fullName correctly', () => {
const user = {
firstName: 'John',
lastName: 'Doe',
// …other properties
};
const expected = {
id: '1',
- fullName: `${user.name} ${user.surname}`,
+ fullName: `${user.firstName} ${user.lastName}`,
// …other expected fields
};
expect(transformToAutocomplete(user)).toEqual(expected);
});
});
🤖 Prompt for AI Agents
In
projects/netgrif-components-core/src/lib/search/models/category/user-autocomplete.spec.ts
around the lines where fullName is assigned, update the test code to use
user.firstName and user.lastName instead of the old property names. Search for
any other occurrences of the old property names in this test file and replace
them with firstName and lastName to complete the refactoring consistently.

Copy link

sonarqubecloud bot commented Jul 9, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants