mirror of
https://github.com/bitwarden/clients.git
synced 2026-02-05 00:25:18 +08:00
Migrates BreadcrumbComponent and BreadcrumbsComponent to OnPush and changes any property to computed signals.
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import { CommonModule } from "@angular/common";
|
|
import {
|
|
ChangeDetectionStrategy,
|
|
Component,
|
|
computed,
|
|
contentChildren,
|
|
input,
|
|
} from "@angular/core";
|
|
import { RouterModule } from "@angular/router";
|
|
|
|
import { I18nPipe } from "@bitwarden/ui-common";
|
|
|
|
import { IconButtonModule } from "../icon-button";
|
|
import { LinkModule } from "../link";
|
|
import { MenuModule } from "../menu";
|
|
|
|
import { BreadcrumbComponent } from "./breadcrumb.component";
|
|
|
|
/**
|
|
* Breadcrumbs are used to help users understand where they are in a products navigation. Typically
|
|
* Bitwarden uses this component to indicate the user's current location in a set of data organized in
|
|
* containers (Collections, Folders, or Projects).
|
|
*/
|
|
@Component({
|
|
selector: "bit-breadcrumbs",
|
|
templateUrl: "./breadcrumbs.component.html",
|
|
imports: [I18nPipe, CommonModule, LinkModule, RouterModule, IconButtonModule, MenuModule],
|
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
})
|
|
export class BreadcrumbsComponent {
|
|
/**
|
|
* The maximum number of breadcrumbs to show before overflow.
|
|
*/
|
|
readonly show = input(3);
|
|
|
|
protected readonly breadcrumbs = contentChildren(BreadcrumbComponent);
|
|
|
|
/** Whether the breadcrumbs exceed the show limit and require an overflow menu */
|
|
protected readonly hasOverflow = computed(() => this.breadcrumbs().length > this.show());
|
|
|
|
/** Breadcrumbs shown before the overflow menu */
|
|
protected readonly beforeOverflow = computed(() => {
|
|
const items = this.breadcrumbs();
|
|
const showCount = this.show();
|
|
|
|
if (items.length > showCount) {
|
|
return items.slice(0, showCount - 1);
|
|
}
|
|
return items;
|
|
});
|
|
|
|
/** Breadcrumbs hidden in the overflow menu */
|
|
protected readonly overflow = computed(() => {
|
|
return this.breadcrumbs().slice(this.show() - 1, -1);
|
|
});
|
|
|
|
/** The last breadcrumb, shown after the overflow menu */
|
|
protected readonly afterOverflow = computed(() => this.breadcrumbs().slice(-1));
|
|
}
|