Skip to content

Commit

Permalink
feat(module:breadcrumb): support dropdown (#3636)
Browse files Browse the repository at this point in the history
* feat(module:breadcrumb): support dropdown

* feat: change API

* docs: fix demo
  • Loading branch information
Wendell authored and vthinkxie committed Jun 25, 2019
1 parent 31e674d commit 9dfab45
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 8 deletions.
15 changes: 15 additions & 0 deletions components/breadcrumb/demo/dropdown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
order: 5
title:
zh-CN: 带下拉菜单的面包屑
en-US: Bread crumbs with drop down menu
---

## zh-CN

面包屑支持下拉菜单。

## en-US

Breadcrumbs support drop down menu.

30 changes: 30 additions & 0 deletions components/breadcrumb/demo/dropdown.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Component } from '@angular/core';

@Component({
selector: 'nz-demo-breadcrumb-dropdown',
template: `
<nz-breadcrumb>
<nz-breadcrumb-item>
Ant Design
</nz-breadcrumb-item>
<nz-breadcrumb-item>
<a>Component</a>
</nz-breadcrumb-item>
<nz-breadcrumb-item [nzOverlay]="menu">
<a href>An Application</a>
</nz-breadcrumb-item>
<nz-breadcrumb-item>
Button
</nz-breadcrumb-item>
</nz-breadcrumb>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu nzSelectable>
<li nz-menu-item><a target="_blank" rel="noopener noreferrer" href="http://www.alipay.com/">General</a></li>
<li nz-menu-item><a target="_blank" rel="noopener noreferrer" href="http://www.taobao.com/">Layout</a></li>
<li nz-menu-item><a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">Navigation</a></li>
</ul>
</nz-dropdown-menu>
`,
styles: []
})
export class NzDemoBreadcrumbDropdownComponent {}
16 changes: 13 additions & 3 deletions components/breadcrumb/nz-breadcrumb-item.component.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
<span class="ant-breadcrumb-link">
<ng-content></ng-content>
</span>
<ng-container *ngIf="!!nzOverlay; else noMenuTpl">
<span class="ant-breadcrumb-overlay-link" nz-dropdown [nzDropdownMenu]="nzOverlay">
<ng-template [ngTemplateOutlet]="noMenuTpl"></ng-template>
<i *ngIf="!!nzOverlay" nz-icon nzType="down"></i>
</span>
</ng-container>

<ng-template #noMenuTpl>
<span class="ant-breadcrumb-link">
<ng-content></ng-content>
</span>
</ng-template>

<span class="ant-breadcrumb-separator">
<ng-container *nzStringTemplateOutlet="nzBreadCrumbComponent.nzSeparator">
{{ nzBreadCrumbComponent.nzSeparator }}
Expand Down
11 changes: 9 additions & 2 deletions components/breadcrumb/nz-breadcrumb-item.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/

import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';

import { NzDropdownMenuComponent } from 'ng-zorro-antd/dropdown';

import { NzBreadCrumbComponent } from './nz-breadcrumb.component';

Expand All @@ -16,7 +18,7 @@ import { NzBreadCrumbComponent } from './nz-breadcrumb.component';
selector: 'nz-breadcrumb-item',
exportAs: 'nzBreadcrumbItem',
preserveWhitespaces: false,
templateUrl: 'nz-breadcrumb-item.component.html',
templateUrl: './nz-breadcrumb-item.component.html',
styles: [
`
nz-breadcrumb-item:last-child {
Expand All @@ -30,5 +32,10 @@ import { NzBreadCrumbComponent } from './nz-breadcrumb.component';
]
})
export class NzBreadCrumbItemComponent {
/**
* Dropdown content of a breadcrumb item.
*/
@Input() nzOverlay?: NzDropdownMenuComponent;

constructor(public nzBreadCrumbComponent: NzBreadCrumbComponent) {}
}
7 changes: 5 additions & 2 deletions components/breadcrumb/nz-breadcrumb.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/

import { OverlayModule } from '@angular/cdk/overlay';
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';

import { NzAddOnModule } from 'ng-zorro-antd/core';
import { NzAddOnModule, NzOverlayModule } from 'ng-zorro-antd/core';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzIconModule } from 'ng-zorro-antd/icon';

import { NzBreadCrumbItemComponent } from './nz-breadcrumb-item.component';
import { NzBreadCrumbComponent } from './nz-breadcrumb.component';

@NgModule({
imports: [CommonModule, NzAddOnModule],
imports: [CommonModule, NzAddOnModule, OverlayModule, NzOverlayModule, NzDropDownModule, NzIconModule],
declarations: [NzBreadCrumbComponent, NzBreadCrumbItemComponent],
exports: [NzBreadCrumbComponent, NzBreadCrumbItemComponent]
})
Expand Down
28 changes: 27 additions & 1 deletion components/breadcrumb/nz-breadcrumb.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import { By } from '@angular/platform-browser';
import { Router, Routes } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';

// import { dispatchMouseEvent } from 'ng-zorro-antd/core';
import { NzDemoBreadcrumbDropdownComponent } from 'ng-zorro-antd/breadcrumb/demo/dropdown';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzIconTestModule } from 'ng-zorro-antd/icon/testing';

import { NzDemoBreadcrumbBasicComponent } from './demo/basic';
Expand Down Expand Up @@ -46,6 +47,31 @@ describe('breadcrumb', () => {
});
});

describe('dropdown', () => {
let fixture: ComponentFixture<NzDemoBreadcrumbDropdownComponent>;
let items: DebugElement[];

beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NzBreadCrumbModule, NzDropDownModule],
declarations: [NzDemoBreadcrumbDropdownComponent],
providers: []
}).compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(NzDemoBreadcrumbDropdownComponent);
items = fixture.debugElement.queryAll(By.directive(NzBreadCrumbItemComponent));
});

it('should dropdown work', () => {
fixture.detectChanges();

const dropdownElement = items[2];
expect((dropdownElement.nativeElement as HTMLElement).querySelector('.ant-dropdown-trigger')).not.toBe(null);
});
});

describe('separator', () => {
let fixture: ComponentFixture<NzDemoBreadcrumbSeparatorComponent>;
let items: DebugElement[];
Expand Down

0 comments on commit 9dfab45

Please sign in to comment.