From 1252d384e39013f9c702f9fb037fed299163c06e Mon Sep 17 00:00:00 2001 From: Greg Larrenaga Date: Mon, 13 Aug 2018 18:52:29 -0700 Subject: [PATCH] This works in my minimap use case. Tests fail --- addon/components/infinity-loader.js | 48 +++++++++++++---------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/addon/components/infinity-loader.js b/addon/components/infinity-loader.js index fa116757..98b866ea 100644 --- a/addon/components/infinity-loader.js +++ b/addon/components/infinity-loader.js @@ -1,11 +1,11 @@ -import { alias } from '@ember/object/computed'; -import InfinityPromiseArray from 'ember-infinity/lib/infinity-promise-array'; -import InViewportMixin from 'ember-in-viewport'; -import { run } from '@ember/runloop'; -import { get, set, computed, defineProperty } from '@ember/object'; -import Component from '@ember/component'; +import { get, set } from '@ember/object'; import { inject as service } from '@ember/service'; import { resolve } from 'rsvp'; +import { run } from '@ember/runloop'; +import Component from '@ember/component'; +import InViewportMixin from 'ember-in-viewport'; +import ObjectProxy from '@ember/object/proxy'; +import PromiseProxyMixin from '@ember/object/promise-proxy-mixin'; const InfinityLoaderComponent = Component.extend(InViewportMixin, { infinity: service(), @@ -86,14 +86,6 @@ const InfinityLoaderComponent = Component.extend(InViewportMixin, { }); }, - willInsertElement() { - if (get(this, '_isInfinityPromiseArray')) { - defineProperty(this, 'infinityModelContent', alias('infinityModel.promise')); - } else { - defineProperty(this, 'infinityModelContent', alias('infinityModel')); - } - }, - /** * setup ember-in-viewport properties * @@ -102,15 +94,23 @@ const InfinityLoaderComponent = Component.extend(InViewportMixin, { didInsertElement() { this._super(...arguments); - this._loadStatusDidChange(); - this.addObserver('infinityModelContent.reachedInfinity', this, this._loadStatusDidChange); - this.addObserver('hideOnInfinity', this, this._loadStatusDidChange); + let ObjectPromiseProxy = ObjectProxy.extend(PromiseProxyMixin); - let scrollableArea = get(this, 'scrollable'); - let infinityModel = get(this, 'infinityModelContent'); - if (infinityModel) { - set(infinityModel, '_scrollable', scrollableArea); - } + set(this, 'infinityModelContent', ObjectPromiseProxy.create({ + promise: get(this, 'infinityModel'), + })); + + get(this, 'infinityModelContent').then(() => { + this._loadStatusDidChange(); + this.addObserver('infinityModelContent.reachedInfinity', this, this._loadStatusDidChange); + this.addObserver('hideOnInfinity', this, this._loadStatusDidChange); + + let scrollableArea = get(this, 'scrollable'); + let infinityModel = get(this, 'infinityModelContent'); + if (infinityModel) { + set(infinityModel, '_scrollable', scrollableArea); + } + }); }, willDestroyElement() { @@ -120,10 +120,6 @@ const InfinityLoaderComponent = Component.extend(InViewportMixin, { this.removeObserver('hideOnInfinity', this, this._loadStatusDidChange); }, - _isInfinityPromiseArray: computed('infinityModel', function() { - return (get(this, 'infinityModel') instanceof InfinityPromiseArray); - }), - /** * https://github.com/DockYard/ember-in-viewport#didenterviewport-didexitviewport *