I think this lets me load more pages.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4280 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		@@ -26,6 +26,7 @@ class TfTabNewsFeedElement extends LitElement {
 | 
			
		||||
		this.following = [];
 | 
			
		||||
		this.drafts = {};
 | 
			
		||||
		this.expanded = {};
 | 
			
		||||
		this.start_time = new Date().valueOf() - 24 * 60 * 60 * 1000;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async fetch_messages() {
 | 
			
		||||
@@ -85,11 +86,42 @@ class TfTabNewsFeedElement extends LitElement {
 | 
			
		||||
				`,
 | 
			
		||||
				[
 | 
			
		||||
					JSON.stringify(this.following),
 | 
			
		||||
					new Date().valueOf() - 24 * 60 * 60 * 1000,
 | 
			
		||||
					this.start_time,
 | 
			
		||||
				]);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async load_more() {
 | 
			
		||||
		let last_start_time = this.start_time;
 | 
			
		||||
		this.start_time = last_start_time - 24 * 60 * 60 * 1000;
 | 
			
		||||
		let more = await tfrpc.rpc.query(
 | 
			
		||||
			`
 | 
			
		||||
				WITH news AS (SELECT messages.*
 | 
			
		||||
				FROM messages
 | 
			
		||||
				JOIN json_each(?) AS following ON messages.author = following.value
 | 
			
		||||
				WHERE messages.timestamp > ?
 | 
			
		||||
				AND messages.timestamp <= ?
 | 
			
		||||
				ORDER BY messages.timestamp DESC)
 | 
			
		||||
				SELECT messages.*
 | 
			
		||||
					FROM news
 | 
			
		||||
					JOIN messages_refs ON news.id = messages_refs.ref
 | 
			
		||||
					JOIN messages ON messages_refs.message = messages.id
 | 
			
		||||
				UNION
 | 
			
		||||
				SELECT messages.*
 | 
			
		||||
					FROM news
 | 
			
		||||
					JOIN messages_refs ON news.id = messages_refs.message
 | 
			
		||||
					JOIN messages ON messages_refs.ref = messages.id
 | 
			
		||||
				UNION
 | 
			
		||||
				SELECT news.* FROM news
 | 
			
		||||
			`,
 | 
			
		||||
			[
 | 
			
		||||
				JSON.stringify(this.following),
 | 
			
		||||
				this.start_time,
 | 
			
		||||
				last_start_time,
 | 
			
		||||
			]);
 | 
			
		||||
		this.messages = [...more, ...this.messages];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	render() {
 | 
			
		||||
		if (!this.messages ||
 | 
			
		||||
			this._messages_hash !== this.hash ||
 | 
			
		||||
@@ -106,7 +138,16 @@ class TfTabNewsFeedElement extends LitElement {
 | 
			
		||||
				alert(JSON.stringify(error, null, 2));
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
		return html`<tf-news id="news" whoami=${this.whoami} .users=${this.users} .messages=${this.messages} .following=${this.following} .drafts=${this.drafts} .expanded=${this.expanded}></tf-news>`;
 | 
			
		||||
		let more;
 | 
			
		||||
		if (!this.hash.startsWith('#@') && !this.hash.startsWith('#%')) {
 | 
			
		||||
			more = html`
 | 
			
		||||
				<input type="button" value="Load More" @click=${this.load_more}></input>
 | 
			
		||||
			`;
 | 
			
		||||
		}
 | 
			
		||||
		return html`
 | 
			
		||||
			<tf-news id="news" whoami=${this.whoami} .users=${this.users} .messages=${this.messages} .following=${this.following} .drafts=${this.drafts} .expanded=${this.expanded}></tf-news>
 | 
			
		||||
			${more}
 | 
			
		||||
		`;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ class TfTabNewsElement extends LitElement {
 | 
			
		||||
 | 
			
		||||
	show_more() {
 | 
			
		||||
		let unread = this.unread;
 | 
			
		||||
		let news = this.renderRoot?.getElementById('news');
 | 
			
		||||
		let news = this.shadowRoot?.getElementById('news');
 | 
			
		||||
		if (news) {
 | 
			
		||||
			console.log('injecting messages', news.messages);
 | 
			
		||||
			news.messages = Object.values(Object.fromEntries([...this.unread, ...news.messages].map(x => [x.id, x])));
 | 
			
		||||
@@ -98,7 +98,6 @@ class TfTabNewsElement extends LitElement {
 | 
			
		||||
	on_keypress(event) {
 | 
			
		||||
		if (event.target === document.body &&
 | 
			
		||||
			event.key == '.') {
 | 
			
		||||
			console.log(this);
 | 
			
		||||
			this.show_more();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user