3030 </slot >
3131 </div >
3232
33- <div v-if =" !loadingRooms" class =" vac-room-list" >
33+ <div v-if =" !loadingRooms" id = " rooms-list " class =" vac-room-list" >
3434 <div
3535 v-for =" fRoom in filteredRooms"
3636 :id =" fRoom.roomId"
5454 </room-content >
5555 </div >
5656 <transition name =" vac-fade-message" >
57- <infinite-loading
58- v-if =" rooms.length && !loadingRooms"
59- force-use-infinite-wrapper =" .vac-room-list"
60- web-component-name =" vue-advanced-chat"
61- spinner =" spiral"
62- @infinite =" loadMoreRooms"
63- >
64- <template #spinner >
65- <loader :show =" true" :infinite =" true" />
66- </template >
67- <template #no-results >
68- <div />
69- </template >
70- <template #no-more >
71- <div />
72- </template >
73- </infinite-loading >
57+ <div v-if =" rooms.length && !loadingRooms" id =" infinite-loader" >
58+ <loader :show =" showLoader" :infinite =" true" />
59+ </div >
7460 </transition >
7561 </div >
7662 </div >
7763</template >
7864
7965<script >
80- import InfiniteLoading from ' vue-infinite-loading'
81-
8266import Loader from ' ../../components/Loader/Loader'
8367
8468import RoomsSearch from ' ./RoomsSearch/RoomsSearch'
@@ -89,7 +73,6 @@ import filteredUsers from '../../utils/filter-items'
8973export default {
9074 name: ' RoomsList' ,
9175 components: {
92- InfiniteLoading,
9376 Loader,
9477 RoomsSearch,
9578 RoomContent
@@ -122,7 +105,8 @@ export default {
122105 data () {
123106 return {
124107 filteredRooms: this .rooms || [],
125- infiniteState: null ,
108+ infiniteLoader: null ,
109+ showLoader: true ,
126110 loadingMoreRooms: false ,
127111 selectedRoomId: ' '
128112 }
@@ -133,25 +117,22 @@ export default {
133117 deep: true ,
134118 handler (newVal , oldVal ) {
135119 this .filteredRooms = newVal
136- if (
137- this .infiniteState &&
138- (newVal .length !== oldVal .length || this .roomsLoaded )
139- ) {
140- this .infiniteState .loaded ()
120+ if (newVal .length !== oldVal .length || this .roomsLoaded ) {
141121 this .loadingMoreRooms = false
142122 }
143123 }
144124 },
145125 loadingRooms (val ) {
146- if (val) this .infiniteState = null
126+ if (! val) {
127+ setTimeout (() => this .initIntersectionObserver ())
128+ }
147129 },
148130 loadingMoreRooms (val ) {
149131 this .$emit (' loading-more-rooms' , val)
150132 },
151133 roomsLoaded (val ) {
152- if (val && this . infiniteState ) {
134+ if (val) {
153135 this .loadingMoreRooms = false
154- this .infiniteState .complete ()
155136 }
156137 },
157138 room: {
@@ -163,6 +144,27 @@ export default {
163144 },
164145
165146 methods: {
147+ initIntersectionObserver () {
148+ const loader = document .getElementById (' infinite-loader' )
149+
150+ if (loader && ! this .infiniteLoader ) {
151+ this .infiniteLoader = loader
152+
153+ const options = {
154+ root: document .getElementById (' rooms-list' ),
155+ rootMargin: ' 100px' ,
156+ threshold: 0
157+ }
158+
159+ const observer = new IntersectionObserver (entries => {
160+ if (entries[0 ].isIntersecting ) {
161+ this .loadMoreRooms ()
162+ }
163+ }, options)
164+
165+ observer .observe (loader)
166+ }
167+ },
166168 searchRoom (ev ) {
167169 this .filteredRooms = filteredUsers (
168170 this .rooms ,
@@ -175,15 +177,14 @@ export default {
175177 if (! this .isMobile ) this .selectedRoomId = room .roomId
176178 this .$emit (' fetch-room' , { room })
177179 },
178- loadMoreRooms (infiniteState ) {
180+ loadMoreRooms () {
179181 if (this .loadingMoreRooms ) return
180182
181183 if (this .roomsLoaded ) {
182184 this .loadingMoreRooms = false
183- return infiniteState . complete ( )
185+ return ( this . showLoader = false )
184186 }
185187
186- this .infiniteState = infiniteState
187188 this .$emit (' fetch-more-rooms' )
188189 this .loadingMoreRooms = true
189190 }
0 commit comments