Skip to content

Commit

Permalink
feat(ld-sidenav): emit event after navigation (after transition ends)
Browse files Browse the repository at this point in the history
  • Loading branch information
borisdiakur committed Jul 31, 2023
1 parent 8a05b54 commit 268ef24
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,16 @@ export class LdSidenavSlider {
@State() activeSubnavs: HTMLLdSidenavSubnavElement[] = []
@State() isFirstLevelHidden = false

/**
* Emitted on navigation (before transition ends).
*/
/** Emitted on navigation (before transition ends). */
@Event() ldSidenavSliderChange: EventEmitter<
{ id: string; label: string } | undefined
>

/** Emitted after navigation (after transition ends). */
@Event() ldSidenavSliderChanged: EventEmitter<
{ id: string; label: string } | undefined
>

private navigateToSubnav() {
// Make current subnav and all ancestor subnavs active.
let parentSubnav: HTMLLdSidenavSubnavElement
Expand Down Expand Up @@ -141,17 +144,20 @@ export class LdSidenavSlider {
}
}

private emitChange() {
private emitChange(afterTransition = false) {
const activeSubnav = this.activeSubnavs[this.activeSubnavs.length - 1]
const toEmit = afterTransition
? this.ldSidenavSliderChanged
: this.ldSidenavSliderChange
if (activeSubnav) {
const parentSubnav =
this.activeSubnavs[this.activeSubnavs.length - 2] || this.el
this.ldSidenavSliderChange.emit({
toEmit.emit({
id: activeSubnav.id,
label: parentSubnav.label,
})
} else if (!this.currentSubnav) {
this.ldSidenavSliderChange.emit()
toEmit.emit()
}
}

Expand Down Expand Up @@ -213,6 +219,7 @@ export class LdSidenavSlider {
this.updateAncestor()
this.updateFirstLevelHidden()
this.scrollInactiveToTop()
this.emitChange(true)
}

private toggleVisibilityOnHidableContent = (visible: boolean) => {
Expand Down
7 changes: 4 additions & 3 deletions src/liquid/components/ld-sidenav/ld-sidenav-slider/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ Please refer to the [`ld-sidenav` documentation](components/ld-sidenav/#ld-siden

## Events

| Event | Description | Type |
| ----------------------- | ----------------------------------------------- | --------------------------------------------- |
| `ldSidenavSliderChange` | Emitted on navigation (before transition ends). | `CustomEvent<{ id: string; label: string; }>` |
| Event | Description | Type |
| ------------------------ | ------------------------------------------------- | --------------------------------------------- |
| `ldSidenavSliderChange` | Emitted on navigation (before transition ends). | `CustomEvent<{ id: string; label: string; }>` |
| `ldSidenavSliderChanged` | Emitted after navigation (after transition ends). | `CustomEvent<{ id: string; label: string; }>` |


## Methods
Expand Down
15 changes: 15 additions & 0 deletions src/liquid/components/ld-sidenav/test/ld-sidenav.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,11 @@ describe('ld-sidenav', () => {
html: getSidenavWithSubnavigation(),
})
const ldSidenav = page.body.querySelector('ld-sidenav')
const changeHandler = jest.fn()
const changedHandler = jest.fn()
ldSidenav.addEventListener('ldSidenavSliderChange', changeHandler)
ldSidenav.addEventListener('ldSidenavSliderChanged', changedHandler)

mockFocus(ldSidenav)
await page.waitForChanges()
expect(ldSidenav.classList.contains('ld-sidenav--has-active-subnav')).toBe(
Expand All @@ -742,6 +747,9 @@ describe('ld-sidenav', () => {
ldSidenavBackButton.classList.contains('ld-sidenav-back--is-back')
).toBe(false)

expect(changeHandler).not.toHaveBeenCalled()
expect(changedHandler).not.toHaveBeenCalled()

const ldSidenavNavitemArtInt =
ldSidenav.querySelector<HTMLLdSidenavNavitemElement>(
'ld-sidenav-slider > ld-sidenav-navitem:nth-child(4)'
Expand All @@ -757,10 +765,17 @@ describe('ld-sidenav', () => {
.classList.contains('ld-sidenav-subnav--active')
).toBe(true)

expect(changeHandler).toHaveBeenCalledTimes(1)
expect(changedHandler).not.toHaveBeenCalled()

expect(ldSidenavBack.textContent.trim()).toBe('Outline of Computer Science')
expect(
ldSidenavBackButton.classList.contains('ld-sidenav-back--is-back')
).toBe(true)

await transitionEnd(page, ldSidenav.querySelector('ld-sidenav-slider'))
expect(changeHandler).toHaveBeenCalledTimes(1)
expect(changedHandler).toHaveBeenCalledTimes(1)
})

it('expands on slide', async () => {
Expand Down

1 comment on commit 268ef24

@vercel
Copy link

@vercel vercel bot commented on 268ef24 Jul 31, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

liquid – ./

liquid-oxygen.vercel.app
liquid-uxsd.vercel.app
liquid-git-main-uxsd.vercel.app

Please sign in to comment.