Skip to content
Snippets Groups Projects
Commit d2a85d2e authored by Florent Poittevin's avatar Florent Poittevin
Browse files

feat: allow breadcrumb to have non navigable item

parent 8e811e92
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,7 @@ const routes: DlcmRoutes = [
component: DepositMetadataRoutable,
data: {
breadcrumb: TRANSLATE("breadcrumb.deposit.metadata"),
noBreadcrumbLink: true,
},
children: [
{
......@@ -58,6 +59,7 @@ const routes: DlcmRoutes = [
component: DepositFileRoutable,
data: {
breadcrumb: TRANSLATE("breadcrumb.deposit.file"),
noBreadcrumbLink: true,
},
children: [
{
......@@ -72,37 +74,6 @@ const routes: DlcmRoutes = [
},
],
},
// {
// path: DepositRoutesEnum.edit + AppRoutesEnum.separator + AppRoutesEnum.paramId,
// redirectTo: DepositRoutesEnum.edit + AppRoutesEnum.separator + AppRoutesEnum.paramId + AppRoutesEnum.separator + "file",
// pathMatch: "full",
// },
// {
// path: DepositRoutesEnum.edit + AppRoutesEnum.separator + AppRoutesEnum.paramId,
// component: DepositEditRoutable,
// data: {
// breadcrumb: TRANSLATE("breadcrumb.deposit.edit"),
// },
// canActivate: [DepositRoleGuardEditService],
// children: [
// {
// path: DepositRoutesEnum.metadata,
// component: DepositMetadataRoutable,
// data: {
// breadcrumb: TRANSLATE("breadcrumb.deposit.metadata"),
// },
// canDeactivate: [CanDeactivateGuard],
// },
// {
// path: DepositRoutesEnum.files,
// component: DepositFileRoutable,
// data: {
// breadcrumb: TRANSLATE("breadcrumb.deposit.file"),
// },
// canDeactivate: [CanDeactivateGuard],
// },
// ],
// },
{
path: DepositRoutesEnum.create,
component: DepositCreateRoutable,
......
......@@ -2,8 +2,8 @@
<li *ngFor="let breadcrumb of breadcrumbsObs | async"
class="breadcrumb-item"
>
<a [class.current]="isCurrent(breadcrumb.url)"
(click)="navigate(breadcrumb.url)"
<a [class.no-link]="haveNoLink(breadcrumb)"
(click)="navigate(breadcrumb)"
>
<ng-template [ngIf]="!(breadcrumb.labelObs | isNullOrUndefined) && !(breadcrumb.labelObs | async | isNullOrUndefined)"
[ngIfElse]="normalLabel"
......
......@@ -29,7 +29,7 @@
}
a {
&.current {
&.no-link {
text-decoration: none;
cursor: initial;
......
......@@ -25,6 +25,7 @@ import {
} from "rxjs/operators";
import {
isNullOrUndefined,
isTrue,
isUndefined,
ObservableUtil,
StringUtil,
......@@ -72,13 +73,13 @@ export class SharedBreadcrumbPresentational extends SharedAbstractPresentational
const labelObs = this.getBreadcrumbMemoizedSelector(route);
if (!isUndefined(label) || !isUndefined(labelObs)) {
const path = this.getPath(route);
url = `${url}${path}/`;
const breadcrumbElement: Breadcrumb = {
label,
labelObs: labelObs,
url: url,
noLink: this.getNoLink(route),
} as Breadcrumb;
breadcrumbs = [...breadcrumbs, breadcrumbElement];
......@@ -113,6 +114,17 @@ export class SharedBreadcrumbPresentational extends SharedAbstractPresentational
return undefined;
}
private getNoLink(route: ActivatedRoute): boolean {
if (isNullOrUndefined(route.routeConfig) || isNullOrUndefined(route.routeConfig.data)) {
return false;
}
const noBreadcrumbLink = (route.routeConfig.data as DlcmData).noBreadcrumbLink;
if (isTrue(noBreadcrumbLink)) {
return true;
}
return false;
}
private getPath(route: ActivatedRoute): string {
if (route.routeConfig) {
let path = route.routeConfig.path;
......@@ -131,14 +143,14 @@ export class SharedBreadcrumbPresentational extends SharedAbstractPresentational
return path;
}
navigate(url: string): void {
if (this.isCurrent(url)) {
navigate(breadcrumb: Breadcrumb): void {
if (this.haveNoLink(breadcrumb)) {
return;
}
this._navigateBS.next(url);
this._navigateBS.next(breadcrumb.url);
}
isCurrent(url: string): boolean {
return this.router.url + "/" === url;
haveNoLink(breadcrumb: Breadcrumb): boolean {
return this.router.url + "/" === breadcrumb.url || breadcrumb.noLink;
}
}
......@@ -4,4 +4,5 @@ export interface Breadcrumb {
label: string;
labelObs: Observable<string> | undefined;
url: string;
noLink: boolean;
}
......@@ -35,4 +35,5 @@ export class DlcmData implements Data {
breadcrumb?: string;
breadcrumbMemoizedSelector?: (state: BaseResourceState) => string;
permission?: ApplicationRolePermissionEnum;
noBreadcrumbLink?: boolean;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment