File

src/lib/default-header/default-header.component.ts

Metadata

Index

Properties

Properties

Public Readonly collapsed
Default value : computed(() => this.layoutComponentService.collapsed())
Protected Readonly defaultHeaderService
Default value : inject(DefaultHeaderService)
Public Readonly hasPortals
Default value : computed(() => this.portals().length > 0)
Public Readonly isMobile
Default value : computed(() => this.layoutComponentService.isMobile())
Protected Readonly layoutComponentService
Default value : inject(LayoutService)
Public Readonly opened
Default value : computed(() => this.layoutComponentService.opened())
Public Readonly portals
Default value : computed(() => this.defaultHeaderService.portals())
Public Readonly profile
Default value : toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null })
import { CdkPortalOutlet } from '@angular/cdk/portal';
import {
  ChangeDetectionStrategy,
  Component,
  computed,
  inject,
} from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { MatToolbarRow } from '@angular/material/toolbar';
import { HeaderService } from '../header.service';
import { LayoutService } from '../layout.service';
import { RXAP_USER_PROFILE_DATA_SOURCE } from '../tokens';
import { AppsButtonComponent } from './apps-button/apps-button.component';
import { DefaultHeaderService } from './default-header.service';
import { SettingsButtonComponent } from './settings-button/settings-button.component';
import { SidenavToggleButtonComponent } from './sidenav-toggle-button/sidenav-toggle-button.component';
import { UserProfileIconComponent } from './user-profile-icon/user-profile-icon.component';

@Component({
    selector: 'rxap-default-header',
    imports: [
        AppsButtonComponent,
        SettingsButtonComponent,
        SidenavToggleButtonComponent,
        UserProfileIconComponent,
        MatToolbarRow,
        CdkPortalOutlet,
    ],
    host: {
        'class': 'grow',
    },
    templateUrl: './default-header.component.html',
    styleUrl: './default-header.component.scss',
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class DefaultHeaderComponent {

  protected readonly layoutComponentService = inject(LayoutService);

  public readonly collapsed = computed(() => this.layoutComponentService.collapsed());
  public readonly isMobile = computed(() => this.layoutComponentService.isMobile());
  public readonly opened = computed(() => this.layoutComponentService.opened());
  public readonly profile = toSignal(inject(RXAP_USER_PROFILE_DATA_SOURCE).connect('user-profile'), { initialValue: null });

  protected readonly defaultHeaderService = inject(DefaultHeaderService);

  public readonly portals = computed(() => this.defaultHeaderService.portals());
  public readonly hasPortals = computed(() => this.portals().length > 0);

}
<div class="w-full flex flex-row gap-x-4 justify-between items-center">
  @if (collapsed() || isMobile()) {
    <rxap-sidenav-toggle-button></rxap-sidenav-toggle-button>
  }
  <div class="grow flex flex-row gap-x-4 items-center">
    @for (portal of portals(); track portal) {
      <ng-template [cdkPortalOutlet]="portal"></ng-template>
    }
    <ng-content></ng-content>
  </div>
  <rxap-apps-button class="grow-0"></rxap-apps-button>
  <rxap-settings-button class="grow-0"></rxap-settings-button>
  @if (profile(); as profile) {
    <rxap-user-profile-icon [profile]="profile" class="grow-0"></rxap-user-profile-icon>
  }
</div>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""