forked from cory/tildefriends
		
	First rough-out of a mentions tab in the SSB app.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4324 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		| @@ -8,7 +8,8 @@ import * as tf_user from './tf-user.js'; | ||||
| import * as tf_compose from './tf-compose.js'; | ||||
| import * as tf_news from './tf-news.js'; | ||||
| import * as tf_profile from './tf-profile.js'; | ||||
| import * as tf_tab_mentions from './tf-tab-mentions.js'; | ||||
| import * as tf_tab_news from './tf-tab-news.js'; | ||||
| import * as tf_tab_news_feed from './tf-tab-news-feed.js'; | ||||
| import * as tf_tab_search from './tf-tab-search.js'; | ||||
| import * as tf_tab_connections from './tf-tab-connections.js'; | ||||
| import * as tf_tab_connections from './tf-tab-connections.js'; | ||||
| @@ -64,6 +64,8 @@ class TfElement extends LitElement { | ||||
| 			this.tab = 'search'; | ||||
| 		} else if (this.hash === '#connections') { | ||||
| 			this.tab = 'connections'; | ||||
| 		} else if (this.hash === '#mentions') { | ||||
| 			this.tab = 'mentions'; | ||||
| 		} else { | ||||
| 			this.tab = 'news'; | ||||
| 		} | ||||
| @@ -273,6 +275,10 @@ class TfElement extends LitElement { | ||||
| 			return html` | ||||
| 				<tf-tab-connections .users=${this.users} .connections=${this.connections} .broadcasts=${this.broadcasts}></tf-tab-connections> | ||||
| 			`; | ||||
| 		} else if (this.tab === 'mentions') { | ||||
| 			return html` | ||||
| 				<tf-tab-mentions .following=${this.following} whoami=${this.whoami} .users=${this.users}}></tf-tab-mentions> | ||||
| 			`; | ||||
| 		} else if (this.tab === 'search') { | ||||
| 			return html` | ||||
| 				<tf-tab-search .following=${this.following} whoami=${this.whoami} .users=${this.users} query=${this.hash?.startsWith('#q=') ? decodeURIComponent(this.hash.substring(3)) : null}></tf-tab-search> | ||||
| @@ -286,6 +292,8 @@ class TfElement extends LitElement { | ||||
| 			await tfrpc.rpc.setHash('#'); | ||||
| 		} else if (tab === 'connections') { | ||||
| 			await tfrpc.rpc.setHash('#connections'); | ||||
| 		} else if (tab === 'mentions') { | ||||
| 			await tfrpc.rpc.setHash('#mentions'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -304,6 +312,7 @@ class TfElement extends LitElement { | ||||
| 			<div> | ||||
| 				<input type="button" class="tab" value="News" ?disabled=${self.tab == 'news'} @click=${() => self.set_tab('news')}></input> | ||||
| 				<input type="button" class="tab" value="Connections" ?disabled=${self.tab == 'connections'} @click=${() => self.set_tab('connections')}></input> | ||||
| 				<input type="button" class="tab" value="Mentions" ?disabled=${self.tab == 'mentions'} @click=${() => self.set_tab('mentions')}></input> | ||||
| 				<input type="button" class="tab" value="Search" ?disabled=${self.tab == 'search'} @click=${() => self.set_tab('search')}></input> | ||||
| 			</div> | ||||
| 		`; | ||||
|   | ||||
							
								
								
									
										65
									
								
								apps/ssb/tf-tab-mentions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								apps/ssb/tf-tab-mentions.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| import {LitElement, html, unsafeHTML} from './lit-all.min.js'; | ||||
| import * as tfrpc from '/static/tfrpc.js'; | ||||
| import {styles} from './tf-styles.js'; | ||||
|  | ||||
| class TfTabMentionsElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| 			whoami: {type: String}, | ||||
| 			users: {type: Object}, | ||||
| 			following: {type: Array}, | ||||
| 			expanded: {type: Object}, | ||||
| 			messages: {type: Array}, | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	static styles = styles; | ||||
|  | ||||
| 	constructor() { | ||||
| 		super(); | ||||
| 		let self = this; | ||||
| 		this.whoami = null; | ||||
| 		this.users = {}; | ||||
| 		this.following = []; | ||||
| 		this.expanded = {}; | ||||
| 		this.messages = []; | ||||
| 	} | ||||
|  | ||||
| 	async load() { | ||||
| 		console.log('Loading...', this.whoami); | ||||
| 		let results = await tfrpc.rpc.query(` | ||||
| 				SELECT messages.* | ||||
| 				FROM messages_fts(?) | ||||
| 				JOIN messages ON messages.rowid = messages_fts.rowid | ||||
| 				JOIN json_each(?) AS following ON messages.author = following.value | ||||
| 				WHERE messages.author != ? | ||||
| 				ORDER BY timestamp DESC limit 20 | ||||
| 			`, | ||||
| 			['"' + this.whoami.replace('"', '""') + '"', JSON.stringify(this.following), this.whoami]); | ||||
| 		console.log('Done.'); | ||||
| 		this.messages = results; | ||||
| 	} | ||||
|  | ||||
| 	on_expand(event) { | ||||
| 		if (event.detail.expanded) { | ||||
| 			let expand = {}; | ||||
| 			expand[event.detail.id] = true; | ||||
| 			this.expanded = Object.assign({}, this.expanded, expand); | ||||
| 		} else { | ||||
| 			delete this.expanded[event.detail.id]; | ||||
| 			this.expanded = Object.assign({}, this.expanded); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	render() { | ||||
| 		let self = this; | ||||
| 		if (!this.loading) { | ||||
| 			this.loading = true; | ||||
| 			this.load(); | ||||
| 		} | ||||
| 		return html` | ||||
| 			<tf-news id="news" whoami=${this.whoami} .messages=${this.messages} .users=${this.users} .expanded=${this.expanded} @tf-expand=${this.on_expand}></tf-news> | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
| customElements.define('tf-tab-mentions', TfTabMentionsElement); | ||||
		Reference in New Issue
	
	Block a user