diff --git a/addon/mixins/in-viewport.js b/addon/mixins/in-viewport.js index 9a1321e0..55d8610d 100644 --- a/addon/mixins/in-viewport.js +++ b/addon/mixins/in-viewport.js @@ -98,7 +98,7 @@ export default Mixin.create({ } if (get(this, 'viewportUseIntersectionObserver')) { - const { top, left, bottom, right } = this.viewportTolerance; + const { top = 0, left = 0, bottom = 0, right = 0 } = this.viewportTolerance; const options = { root: scrollableArea, rootMargin: `${top}px ${right}px ${bottom}px ${left}px`, diff --git a/tests/dummy/app/components/my-component.js b/tests/dummy/app/components/my-component.js index 22982513..a661d047 100644 --- a/tests/dummy/app/components/my-component.js +++ b/tests/dummy/app/components/my-component.js @@ -14,12 +14,14 @@ export default Component.extend(InViewportMixin, { viewportSpyOverride, viewportEnabledOverride, viewportIntersectionObserverOverride, + viewportToleranceOverride, viewportRAFOverride, scrollableAreaOverride } = getProperties(this, 'viewportSpyOverride', 'viewportEnabledOverride', 'viewportIntersectionObserverOverride', + 'viewportToleranceOverride', 'viewportRAFOverride', 'scrollableAreaOverride' ); @@ -33,6 +35,9 @@ export default Component.extend(InViewportMixin, { if (viewportIntersectionObserverOverride !== undefined) { options.viewportUseIntersectionObserver = viewportIntersectionObserverOverride; } + if (viewportToleranceOverride !== undefined) { + options.viewportTolerance = viewportToleranceOverride; + } if (viewportRAFOverride !== undefined) { options.viewportUseRAF = viewportRAFOverride; } diff --git a/tests/dummy/app/controllers/infinity-scrollable.js b/tests/dummy/app/controllers/infinity-scrollable.js index 6a7dc561..c94d0108 100644 --- a/tests/dummy/app/controllers/infinity-scrollable.js +++ b/tests/dummy/app/controllers/infinity-scrollable.js @@ -8,6 +8,10 @@ let line = ' `${images[(Math.random() * images.length) | 0]}`)]; diff --git a/tests/dummy/app/templates/infinity-scrollable.hbs b/tests/dummy/app/templates/infinity-scrollable.hbs index 8b162d93..44c58c29 100644 --- a/tests/dummy/app/templates/infinity-scrollable.hbs +++ b/tests/dummy/app/templates/infinity-scrollable.hbs @@ -11,5 +11,6 @@ {{my-component class="infinity-scrollable" scrollableAreaOverride=".list" + viewportToleranceOverride=viewportToleranceOverride infinityLoad=(action "infinityLoad")}} diff --git a/tests/integration/components/my-component-test.js b/tests/integration/components/my-component-test.js new file mode 100644 index 00000000..77a68d56 --- /dev/null +++ b/tests/integration/components/my-component-test.js @@ -0,0 +1,37 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('my-component', 'Integration | Component | my component', { + integration: true +}); + +test('it renders with viewportTolerance partially set', function(assert) { + // viewportTolerance && viewportEnabled is usually setup in the initializer. Needs defaults + this.viewportToleranceOverride = { + top: 1 + }; + this.render(hbs` + {{#my-component viewportEnabled=true viewportToleranceOverride=viewportToleranceOverride}} + template block text + {{/my-component}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); + +test('it renders with intersectionThreshold set', function(assert) { + this.viewportTolerance = { + top: 0, + left: 0, + right: 0, + bottom: 0, + }; + this.intersectionThreshold = 1.0; + this.render(hbs` + {{#my-component viewportEnabled=true viewportTolerance=viewportTolerance intersectionThreshold=intersectionThreshold}} + template block text + {{/my-component}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +});