Skip to content

refactor(dashboard): replace SiDashboardService with contentChildren query#2067

Open
chintankavathia wants to merge 18 commits into
mainfrom
refactor/dashboard/remove-dashboard-service
Open

refactor(dashboard): replace SiDashboardService with contentChildren query#2067
chintankavathia wants to merge 18 commits into
mainfrom
refactor/dashboard/remove-dashboard-service

Conversation

@chintankavathia
Copy link
Copy Markdown
Member

@chintankavathia chintankavathia commented May 14, 2026

Remove SiDashboardService and its register/unregister lifecycle pattern. Use contentChildren signal query in SiDashboardComponent to discover SiDashboardCardComponent instances declaratively, simplifying card tracking and eliminating the need for OnDestroy in the card component.


Documentation.
Examples.
Dashboards Demo.
Playwright report.

Coverage Reports:

Code Coverage

chintankavathia and others added 17 commits May 12, 2026 13:36
…kerConfig

BREAKING CHANGE: `CriterionDefinition.datepickerConfig` type narrowed

The type of `datepickerConfig` in `CriterionDefinition` (filtered-search) changed from `DatepickerInputConfig` to `Omit<DatepickerInputConfig, 'enableDateRange' | 'enableTwoMonthDateRange'>`.

The properties `enableDateRange` and `enableTwoMonthDateRange ` are no longer accepted in `datepickerConfig` when used with filtered-search criteria, as they had no effect in that context.

Migration: Remove any `enableDateRange` and `enableTwoMonthDateRange` properties from your `datepickerConfig` objects passed to `CriterionDefinition`.
Adding a set of utilities that allows customers
to create selects with custom backed value selection,
for instance using `si-tree-view`.

A very simple version of it can look like this:

```ts
@component({
  selector: 'app-tree-select',
  imports: [SiSelectComboboxComponent, SiSelectDropdownDirective, SiTreeViewComponent],
  template: `
    <si-select-combobox>
      @if (select.value(); as val) {
        {{ val }}
      } @else {
        <span class="text-secondary">Select a location...</span>
      }
    </si-select-combobox>

    <ng-template si-select-dropdown>
      <si-tree-view
        class="d-block"
        ariaLabel="Locations"
        [items]="items()"
        [enableSelection]="true"
        [singleSelectMode]="true"
        [isVirtualized]="false"
        (treeItemClicked)="selectItem($event)"
      />
    </ng-template>
  `,
  changeDetection: ChangeDetectionStrategy.OnPush,
  hostDirectives: [
    {
      directive: SiCustomSelectDirective,
      inputs: ['disabled', 'readonly', 'value'],
      outputs: ['valueChange']
    }
  ]
})
export class TreeSelectComponent {
  protected readonly select = inject(SiCustomSelectDirective);

  /** The tree items to display. */
  readonly items = input<TreeItem[]>([]);

  selectItem(item: TreeItem): void {
    if (item.label) {
      this.select.updateValue(item.label as string);
      this.select.close();
    }
  }
}
```

The goal is to empower applications
to build selects with whatever content they need
while we take care of accesibility and proper appereance.

Closes #1840
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the dashboard implementation by replacing the SiDashboardService with Angular signal queries. Specifically, SiDashboardComponent now utilizes contentChildren to automatically track SiDashboardCardComponent instances, and the manual registration logic within the card components has been removed. The SiDashboardService and its associated tests have been deleted. I have no feedback to provide.

@chintankavathia chintankavathia force-pushed the refactor/dashboard/remove-dashboard-service branch from d445d3c to 1abba64 Compare May 15, 2026 05:10
@chintankavathia chintankavathia marked this pull request as ready for review May 15, 2026 05:46
@chintankavathia chintankavathia requested review from a team as code owners May 15, 2026 05:46
…query

Remove SiDashboardService and its register/unregister lifecycle pattern.
Use contentChildren signal query in SiDashboardComponent to discover
SiDashboardCardComponent instances declaratively, simplifying card
tracking and eliminating the need for OnDestroy in the card component.
@chintankavathia chintankavathia force-pushed the refactor/dashboard/remove-dashboard-service branch from 1abba64 to 9b1be50 Compare May 15, 2026 05:48
@kfenner kfenner requested a review from spliffone as a code owner May 20, 2026 17:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants