Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import Scrollable from '../components/scrollable'; |
|
import safeAssign from './object/safeAssign'; |
|
|
|
export default class ScrollableLoader { |
|
public loading = false; |
|
private scrollable: Scrollable; |
|
private getPromise: () => Promise<boolean>; |
|
private promise: Promise<any>; |
|
private loaded = false; |
|
|
|
constructor(options: { |
|
scrollable: ScrollableLoader['scrollable'], |
|
getPromise: ScrollableLoader['getPromise'] |
|
}) { |
|
safeAssign(this, options); |
|
|
|
options.scrollable.onScrolledBottom = () => { |
|
this.load(); |
|
}; |
|
} |
|
|
|
public load() { |
|
if(this.loaded) { |
|
return Promise.resolve(); |
|
} |
|
|
|
if(this.loading) { |
|
return this.promise; |
|
} |
|
|
|
this.loading = true; |
|
this.promise = this.getPromise().then((done) => { |
|
this.loading = false; |
|
this.promise = undefined; |
|
|
|
if(done) { |
|
this.loaded = true; |
|
this.scrollable.onScrolledBottom = null; |
|
} else { |
|
this.scrollable.checkForTriggers(); |
|
} |
|
}, () => { |
|
this.promise = undefined; |
|
this.loading = false; |
|
}); |
|
} |
|
}
|
|
|