From 9ce57d2efb84130895a37e22e0fd7e5d713a9fa5 Mon Sep 17 00:00:00 2001 From: Liam DeBeasi Date: Tue, 13 Jul 2021 11:21:36 -0400 Subject: [PATCH] feat(breadcrumbs): ionCollapsedClick event payload now contains references to collapsed breadcrumb elements (#23611) resolves #23552 --- .../breadcrumb/breadcrumb-interface.ts | 1 + .../components/breadcrumbs/breadcrumbs.tsx | 5 +- core/src/components/breadcrumbs/readme.md | 102 +++++++++--------- .../breadcrumbs/test/basic/index.html | 59 +++++----- .../breadcrumbs/test/breadcrumbs.spec.ts | 35 ++++++ .../components/breadcrumbs/usage/angular.md | 15 ++- .../breadcrumbs/usage/javascript.md | 24 ++--- .../src/components/breadcrumbs/usage/react.md | 20 ++-- .../components/breadcrumbs/usage/stencil.md | 24 ++--- core/src/components/breadcrumbs/usage/vue.md | 19 ++-- 10 files changed, 170 insertions(+), 134 deletions(-) create mode 100644 core/src/components/breadcrumbs/test/breadcrumbs.spec.ts diff --git a/core/src/components/breadcrumb/breadcrumb-interface.ts b/core/src/components/breadcrumb/breadcrumb-interface.ts index f8b3c0f29b..a0b45c1a84 100644 --- a/core/src/components/breadcrumb/breadcrumb-interface.ts +++ b/core/src/components/breadcrumb/breadcrumb-interface.ts @@ -1,3 +1,4 @@ export interface BreadcrumbCollapsedClickEventDetail { ionShadowTarget?: HTMLElement; + collapsedBreadcrumbs?: HTMLIonBreadcrumbElement[]; } diff --git a/core/src/components/breadcrumbs/breadcrumbs.tsx b/core/src/components/breadcrumbs/breadcrumbs.tsx index 94908cbb4e..a9d5a74890 100644 --- a/core/src/components/breadcrumbs/breadcrumbs.tsx +++ b/core/src/components/breadcrumbs/breadcrumbs.tsx @@ -55,7 +55,10 @@ export class Breadcrumbs implements ComponentInterface { @Listen('collapsedClick') onCollapsedClick(ev: CustomEvent) { - this.ionCollapsedClick.emit(ev.detail) + const breadcrumbs = this.getBreadcrumbs(); + const collapsedBreadcrumbs = breadcrumbs.filter(breadcrumb => breadcrumb.collapsed); + + this.ionCollapsedClick.emit({ ...ev.detail, collapsedBreadcrumbs }); } @Watch('maxItems') diff --git a/core/src/components/breadcrumbs/readme.md b/core/src/components/breadcrumbs/readme.md index 705b71c3cc..55ca0c9d7d 100644 --- a/core/src/components/breadcrumbs/readme.md +++ b/core/src/components/breadcrumbs/readme.md @@ -349,6 +349,9 @@ export class BreadcrumbsExample { async presentPopover(ev: any) { const popover = await this.popoverController.create({ component: PopoverComponent, + componentProps: { + collapsedBreadcrumbs: ev.detail.collapsedBreadcrumbs + }, event: ev }); await popover.present(); @@ -356,13 +359,23 @@ export class BreadcrumbsExample { } ``` +```html + + + + {{ breadcrumb.textContent }} + + + +``` ```typescript -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; @Component({ selector: 'popover-component', }) export class PopoverComponent { + @Input() collapsedBreadcrumbs: HTMLElement[] = []; constructor() {} @@ -699,21 +712,18 @@ class ListPopover extends HTMLElement { } connectedCallback() { + let breadcrumbTemplate = ``; + this.collapsedBreadcrumbs.forEach(breadcrumb => { + breadcrumbTemplate += ` + + ${breadcrumb.textContent} + + `; + }) this.innerHTML = ` - - Home - - - Electronics - - - Photography - - - Cameras - + ${breadcrumbTemplate} `; @@ -725,6 +735,9 @@ customElements.define('list-popover', ListPopover); async function presentPopover(ev) { const popover = Object.assign(document.createElement('ion-popover'), { component: 'list-popover', + componentProps: { + collapsedBreadcrumbs: ev.detail.collapsedBreadcrumbs + }, event: ev }); document.body.appendChild(popover); @@ -1071,21 +1084,15 @@ import { IonBreadcrumb, IonBreadcrumbs, IonContent, IonItem, IonLabel, IonList, const PopoverList: React.FC<{ onHide: () => void; -}> = ({ onHide }) => ( + collapsedBreadcrumbs: HTMLElement[] +}> = ({ onHide, collapsedBreadcrumbs }) => ( - - Home - - - Electronics - - - Photography - - - Cameras - + {collapsedBreadcrumbs.map(breadcrumb => ( + + {breadcrumb.textContent} + + ))} ); @@ -1510,6 +1517,9 @@ export class BreadcrumbsExample { async presentPopover(ev: any) { const popover = await popoverController.create({ component: 'list-popover', + componentProps: { + collapsedBreadcrumbs: ev.detail.collapsedBreadcrumbs + }, event: ev }); await popover.present(); @@ -1543,29 +1553,24 @@ export class BreadcrumbsExample { ``` ```tsx -import { Component, h } from '@stencil/core'; +import { Component, h, Prop } from '@stencil/core'; @Component({ tag: 'list-popover', styleUrl: 'list-popover.css', }) export class ListPopover { + @Prop() collapsedBreadcrumbs: HTMLElement[] = []; + render() { return [ - - Home - - - Electronics - - - Photography - - - Cameras - + {this.collapsedBreadcrumbs.map(breadcrumb => ( + + {breadcrumb.textContent} + + ))} ]; @@ -1990,6 +1995,9 @@ export default defineComponent({ async presentPopover(ev: Event) { const popover = await popoverController.create({ component: ListPopover, + componentProps: { + collapsedBreadcrumbs: ev.detail.collapsedBreadcrumbs + }, event: ev }); await popover.present(); @@ -2003,17 +2011,8 @@ export default defineComponent({