import {LitElement, html, unsafeHTML} from './lit-all.min.js'; import * as tfrpc from '/static/tfrpc.js'; import {styles} from './tf-styles.js'; class TfTabSearchElement extends LitElement { static get properties() { return { whoami: {type: String}, users: {type: Object}, following: {type: Array}, query: {type: String}, }; } static styles = styles; constructor() { super(); let self = this; this.whoami = null; this.users = {}; this.following = []; } async search(query) { console.log('Searching...', this.whoami, query); let search = this.renderRoot.getElementById('search'); if (search ) { search.value = query; search.focus(); search.select(); } await tfrpc.rpc.setHash('#q=' + encodeURIComponent(query)); 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 ORDER BY timestamp DESC limit 100 `, ['"' + query.replace('"', '""') + '"', JSON.stringify(this.following)]); console.log('Done.'); search = this.renderRoot.getElementById('search'); if (search ) { search.value = query; search.focus(); search.select(); } this.renderRoot.getElementById('news').messages = results; } search_keydown(event) { if (event.keyCode == 13) { this.query = this.renderRoot.getElementById('search').value; } } render() { if (this.query !== this.last_query) { this.search(this.query); } let self = this; return html`
self.search(self.renderRoot.getElementById('search').value)}>
`; } } customElements.define('tf-tab-search', TfTabSearchElement);