feature(digi-migrering): Flytta in digi-ng-navigation-breadcrumbs till vårt ui. (TV-867)
Merge in TEA/mina-sidor-fa-web from feature/TV-867-digi-ng-navigation-breadcrumbs to develop Squashed commit of the following: commit bbb1c239a796479d783d664fad3567eb7a7f45c5 Merge: 7418748bdc1523d7Author: WP\holno <nikola.holst-nikolic@arbetsformedlingen.se> Date: Fri Nov 26 09:33:06 2021 +0100 Merge branch 'develop' into feature/TV-867-digi-ng-navigation-breadcrumbs commit 7418748b553a7749c734cf36fa849103acd7e61a Merge: 729f5ec4d307bd13Author: WP\holno <nikola.holst-nikolic@arbetsformedlingen.se> Date: Wed Nov 24 11:08:20 2021 +0100 Merge branch 'develop' into feature/TV-867-digi-ng-navigation-breadcrumbs commit 729f5ec4dde250ddfbf709f554c981f94bc1048e Author: WP\holno <nikola.holst-nikolic@arbetsformedlingen.se> Date: Wed Nov 24 11:08:10 2021 +0100 Amends from PR commit d32a5a0554d5d0d274c3a9c97fb6e13d638b48e5 Author: WP\holno <nikola.holst-nikolic@arbetsformedlingen.se> Date: Tue Nov 23 16:00:27 2021 +0100 Amends after PR commit af988214e2cccbea445b5f2b68454243afc8c645 Author: WP\holno <nikola.holst-nikolic@arbetsformedlingen.se> Date: Tue Nov 23 10:48:12 2021 +0100 Created ui-breadcrumbs and replaced digi-ng´s breadcrumbs with it.
This commit is contained in:
5
libs/ui/src/breadcrumbs/breadcrumbs-item.model.ts
Normal file
5
libs/ui/src/breadcrumbs/breadcrumbs-item.model.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export interface BreadcrumbsItem {
|
||||
text: string;
|
||||
href?: string;
|
||||
routerLink?: string;
|
||||
}
|
||||
4
libs/ui/src/breadcrumbs/breadcrumbs-link-target.enum.ts
Normal file
4
libs/ui/src/breadcrumbs/breadcrumbs-link-target.enum.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export enum BreadcrumbsLinkTarget {
|
||||
SELF = '_self',
|
||||
BLANK = '_blank',
|
||||
}
|
||||
27
libs/ui/src/breadcrumbs/breadcrumbs.component.html
Normal file
27
libs/ui/src/breadcrumbs/breadcrumbs.component.html
Normal file
@@ -0,0 +1,27 @@
|
||||
<nav class="ui-breadcrumbs" [attr.aria-label]="uiAriaLabel" data-digi-ng-component>
|
||||
<ol class="ui-breadcrumbs__items">
|
||||
<li class="ui-breadcrumbs__item" *ngFor="let item of parents">
|
||||
<a
|
||||
*ngIf="item.routerLink"
|
||||
class="ui-breadcrumbs__link"
|
||||
[routerLink]="item.routerLink"
|
||||
[queryParams]="uiQueryParams"
|
||||
[queryParamsHandling]="uiQueryParamsHandling"
|
||||
>
|
||||
{{ item.text }}
|
||||
</a>
|
||||
<a
|
||||
*ngIf="!item.routerLink"
|
||||
class="ui-breadcrumbs__link"
|
||||
[attr.rel]="rel"
|
||||
[attr.type]="uiType"
|
||||
[attr.download]="uiDownload"
|
||||
[attr.target]="uiTarget"
|
||||
[href]="uiHref"
|
||||
>
|
||||
{{ item.text }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="ui-breadcrumbs__item" aria-current="page">{{ currentItem.text }}</li>
|
||||
</ol>
|
||||
</nav>
|
||||
28
libs/ui/src/breadcrumbs/breadcrumbs.component.scss
Normal file
28
libs/ui/src/breadcrumbs/breadcrumbs.component.scss
Normal file
@@ -0,0 +1,28 @@
|
||||
.ui-breadcrumbs {
|
||||
&__items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&__item {
|
||||
font-family: var(--digi--typography--font-family);
|
||||
font-size: var(--digi--typography--font-size--xs);
|
||||
color: var(--digi--typography--color--text);
|
||||
|
||||
&:not(:last-child) {
|
||||
padding-right: var(--digi--layout--padding--10);
|
||||
|
||||
&::after {
|
||||
content: '/';
|
||||
padding-left: var(--digi--layout--padding--10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__link {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
10
libs/ui/src/breadcrumbs/breadcrumbs.component.spec.ts
Normal file
10
libs/ui/src/breadcrumbs/breadcrumbs.component.spec.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
/* tslint:disable:no-unused-variable */
|
||||
import { BreadcrumbsComponent } from './breadcrumbs.component';
|
||||
|
||||
describe('BreadcrumbsComponent', () => {
|
||||
let component: BreadcrumbsComponent;
|
||||
it('should create', () => {
|
||||
component = new BreadcrumbsComponent();
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
||||
41
libs/ui/src/breadcrumbs/breadcrumbs.component.stories.ts
Normal file
41
libs/ui/src/breadcrumbs/breadcrumbs.component.stories.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { BreadcrumbsComponent } from './breadcrumbs.component';
|
||||
import { UiBreadcrumbsModule } from './breadcrumbs.module';
|
||||
import { BreadcrumbsItem } from './breadcrumbs-item.model';
|
||||
|
||||
export default { title: 'Breadcrumbs', component: BreadcrumbsComponent };
|
||||
|
||||
const componentModule = {
|
||||
moduleMetadata: {
|
||||
declarations: [],
|
||||
imports: [UiBreadcrumbsModule],
|
||||
},
|
||||
};
|
||||
|
||||
const items: BreadcrumbsItem[] = [
|
||||
{
|
||||
text: 'Start',
|
||||
href: '/',
|
||||
},
|
||||
{
|
||||
text: 'Sub-page 1',
|
||||
href: '#',
|
||||
},
|
||||
{
|
||||
text: 'Sub-page 2',
|
||||
href: '#',
|
||||
},
|
||||
{
|
||||
text: 'Current page',
|
||||
href: 'i-will-not-be-used-because-i-am-the-last-item',
|
||||
},
|
||||
];
|
||||
|
||||
export const standard = () => ({
|
||||
...componentModule,
|
||||
template: `
|
||||
<ui-breadcrumbs [uiItems]="items"></ui-breadcrumbs>
|
||||
`,
|
||||
props: {
|
||||
items,
|
||||
},
|
||||
});
|
||||
80
libs/ui/src/breadcrumbs/breadcrumbs.component.ts
Normal file
80
libs/ui/src/breadcrumbs/breadcrumbs.component.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
import { BreadcrumbsItem } from './breadcrumbs-item.model';
|
||||
import { BreadcrumbsLinkTarget } from './breadcrumbs-link-target.enum';
|
||||
/**
|
||||
* This is a breadcrumbs component. Provide an array of BreadcrumbsItem and it will create a list of links.
|
||||
* If the BreadcrumbsItem contains both href and routerLink, the routerLink takes presedence.
|
||||
*/
|
||||
@Component({
|
||||
selector: 'ui-breadcrumbs',
|
||||
templateUrl: './breadcrumbs.component.html',
|
||||
styleUrls: ['./breadcrumbs.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
})
|
||||
export class BreadcrumbsComponent {
|
||||
/**
|
||||
* A list of navigation items.
|
||||
*/
|
||||
@Input() uiItems: BreadcrumbsItem[] = [];
|
||||
|
||||
/**
|
||||
* An optional aria-label for the nav element. Defaults to 'breadcrumbs'.
|
||||
*/
|
||||
@Input() uiAriaLabel: string = 'breadcrumbs';
|
||||
|
||||
/**
|
||||
* The element's target attribute. If target is BreadcrumbsLinkTarget.BLANK, the component will add necessary rel attribute
|
||||
* for security reasons.
|
||||
*/
|
||||
@Input() uiTarget?: BreadcrumbsLinkTarget;
|
||||
|
||||
/**
|
||||
* Optional download attribute
|
||||
*/
|
||||
@Input() uiDownload?: boolean | string;
|
||||
|
||||
/**
|
||||
* Optional type attribute
|
||||
*/
|
||||
@Input() uiType?: string;
|
||||
|
||||
/**
|
||||
* A href string.
|
||||
*/
|
||||
@Input() uiHref: string = ' ';
|
||||
|
||||
/**
|
||||
* Optional rel attribute
|
||||
*/
|
||||
@Input() uiRel?: string;
|
||||
|
||||
/**
|
||||
* Angular router queryParams. F.e. `{ lorem: "ipsum" }`
|
||||
*/
|
||||
@Input() uiQueryParams?: { [key: string]: string };
|
||||
|
||||
/**
|
||||
* How to handle query parameters in a router link. One of:
|
||||
* - merge : Merge new with current parameters.
|
||||
* - preserve : Preserve current parameters.
|
||||
*/
|
||||
@Input() uiQueryParamsHandling: 'merge' | 'preserve' = 'merge';
|
||||
|
||||
get parents(): BreadcrumbsItem[] {
|
||||
return this.uiItems.slice(0, this.uiItems.length - 1);
|
||||
}
|
||||
|
||||
get currentItem(): BreadcrumbsItem {
|
||||
return this.uiItems[this.uiItems.length - 1];
|
||||
}
|
||||
|
||||
get rel() {
|
||||
if (this.uiTarget === BreadcrumbsLinkTarget.BLANK) {
|
||||
return 'noopener noreferrer';
|
||||
} else if (this.uiRel) {
|
||||
return this.uiRel;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
libs/ui/src/breadcrumbs/breadcrumbs.module.ts
Normal file
11
libs/ui/src/breadcrumbs/breadcrumbs.module.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { BreadcrumbsComponent } from './breadcrumbs.component';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule],
|
||||
declarations: [BreadcrumbsComponent],
|
||||
exports: [BreadcrumbsComponent],
|
||||
})
|
||||
export class UiBreadcrumbsModule {}
|
||||
Reference in New Issue
Block a user