Skip to content

Commit

Permalink
fix(lib): handle event propagation
Browse files Browse the repository at this point in the history
  • Loading branch information
geromegrignon committed Aug 21, 2020
1 parent b923aa4 commit 16cf7ca
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions projects/ngneat/edit-in-place/src/lib/editable.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
Output,
} from '@angular/core';
import { BehaviorSubject, fromEvent, Observable, Subject, Subscription } from 'rxjs';
import { filter, switchMapTo, take, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
import { filter, skip, switchMapTo, take, takeUntil, withLatestFrom } from 'rxjs/operators';
import { ViewModeDirective } from './directives/view-mode.directive';
import { EditModeDirective } from './directives/edit-mode.directive';
import { EDITABLE_CONFIG, EditableConfig } from './editable.config';
Expand Down Expand Up @@ -58,23 +58,27 @@ export class EditableComponent implements OnInit, OnDestroy {
private handleViewMode(): void {
this.viewHandler = fromEvent(this.element, this.openBindingEvent)
.pipe(
tap((e: Event) => e.stopPropagation()),
takeUntil(this.destroy$),
withLatestFrom(this.editMode$),
filter(([_, editMode]) => !editMode),
takeUntil(this.destroy$)
filter(([_, editMode]) => !editMode)
)
.subscribe(() => this.displayEditMode());
}

private handleEditMode(): void {
const clickOutside$ = fromEvent(document, this.closeBindingEvent).pipe(
/*
skip the first propagated event if there is a nested node in the viewMode templateRef
so it doesn't trigger this eventListener when switching to editMode
*/
skip(this.openBindingEvent === this.closeBindingEvent ? 1 : 0),
filter(({ target }) => this.element.contains(target) === false),
take(1)
);

this.editHandler = this.editMode$
.pipe(
filter((editMode) => editMode),
filter(editMode => editMode),
switchMapTo(clickOutside$),
takeUntil(this.destroy$)
)
Expand Down

0 comments on commit 16cf7ca

Please sign in to comment.