File
|
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 with directive