Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug: stop watching unless viewportSpy=true is passed to modifier
Browse files Browse the repository at this point in the history
snewcomer committed Apr 12, 2021
1 parent 183e5d0 commit e1f67da
Showing 4 changed files with 65 additions and 40 deletions.
4 changes: 4 additions & 0 deletions addon/modifiers/in-viewport.js
Original file line number Diff line number Diff line change
@@ -48,6 +48,10 @@ export default class InViewportModifier extends Modifier {
if (this.args.named.onExit) {
this.args.named.onExit.call(null, this.element);
}

if (!this.options.viewportSpy) {
this.inViewport.stopWatching(this.element);
}
}

setupWatcher() {
4 changes: 3 additions & 1 deletion tests/dummy/app/components/my-class.js
Original file line number Diff line number Diff line change
@@ -16,7 +16,9 @@ export default class MyClass extends Component {
this.infinityLoad();
}

willDestroyElement() {
willDestroy() {
super.willDestroy(...arguments);

const loader = document.getElementById('loader');
this.inViewport.stopWatching(loader);
}
14 changes: 14 additions & 0 deletions tests/dummy/app/controllers/infinity-built-in-modifiers.js
Original file line number Diff line number Diff line change
@@ -29,6 +29,20 @@ export default class InfinityBuiltInModifiers extends Controller {
element.textContent = '{{in-viewport}} modifier';
}

@action
setTitleGreen() {
setTimeout(() => {
document.querySelector('h1#green-target').style = 'color: green';
}, 500);
}

@action
removeTitleGreen() {
setTimeout(() => {
document.querySelector('h1#green-target').style = '';
}, 500);
}

@action
didEnterViewport(/*artwork, i, element*/) {
const arr = Array.apply(null, Array(10));
83 changes: 44 additions & 39 deletions tests/dummy/app/templates/infinity-built-in-modifiers.hbs
Original file line number Diff line number Diff line change
@@ -4,42 +4,47 @@
<LinkTo @route="infinity-built-in-modifiers" @query={{hash direction="enter"}}>enter</LinkTo>
<LinkTo @route="infinity-built-in-modifiers" @query={{hash direction="exit"}}>exit</LinkTo>
</nav>
<h1 {{in-viewport onEnter=this.setTitle viewportTolerance=this.other}}></h1>
{{#if (eq this.direction "both")}}
<ul class="infinity-container">
{{#each this.models as |artwork i|}}
<li
class="infinity-item infinity-item-{{i}}"
>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div
class="sentinel"
{{in-viewport
onEnter=this.didEnterViewport
onExit=this.didExitViewport
viewportTolerance=this.viewportTolerance
scrollableArea=".infinity-container"
}}
></div>
</ul>
{{else if (eq this.direction "enter")}}
<ul>
{{#each this.models as |artwork|}}
<li>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div class="sentinel" {{in-viewport onEnter=this.didEnterViewport}}></div>
</ul>
{{else if (eq this.direction "exit")}}
<ul>
{{#each this.models as |artwork|}}
<li>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div class="sentinel" {{in-viewport onExit=this.didExitViewport}}></div>
</ul>
{{/if}}
<div style="height: 2500px;">
<h1 id="green-target" {{in-viewport onEnter=this.setTitle viewportTolerance=this.other}}></h1>

{{#if (eq this.direction "both")}}
<ul class="infinity-container">
{{#each this.models as |artwork i|}}
<li
class="infinity-item infinity-item-{{i}}"
>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div
class="sentinel"
{{in-viewport
onEnter=this.didEnterViewport
onExit=this.didExitViewport
viewportTolerance=this.viewportTolerance
scrollableArea=".infinity-container"
}}
></div>
</ul>
{{else if (eq this.direction "enter")}}
<ul>
{{#each this.models as |artwork|}}
<li>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div class="sentinel" {{in-viewport onEnter=this.didEnterViewport}}></div>
</ul>
{{else if (eq this.direction "exit")}}
<ul>
{{#each this.models as |artwork|}}
<li>
<DummyArtwork @artwork={{artwork}} @artworkProfile="dummy" />
</li>
{{/each}}
<div class="sentinel" {{in-viewport onExit=this.didExitViewport}}></div>
</ul>
{{/if}}

<div {{in-viewport onEnter=this.setTitleGreen onExit=this.removeTitleGreen viewportSpy=true}}></div>
</div>

0 comments on commit e1f67da

Please sign in to comment.