90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {LitElement, html, keyed, live} from './lit-all.min.js';
 | 
						|
import * as tfrpc from '/static/tfrpc.js';
 | 
						|
 | 
						|
class TfJournalAppElement extends LitElement {
 | 
						|
	static get properties() {
 | 
						|
		return {
 | 
						|
			ids: {type: Array},
 | 
						|
			owner_ids: {type: Array},
 | 
						|
			whoami: {type: String},
 | 
						|
			journals: {type: Object},
 | 
						|
		};
 | 
						|
	}
 | 
						|
 | 
						|
	constructor() {
 | 
						|
		super();
 | 
						|
		this.ids = [];
 | 
						|
		this.owner_ids = [];
 | 
						|
		this.journals = {};
 | 
						|
		this.load();
 | 
						|
	}
 | 
						|
 | 
						|
	async load() {
 | 
						|
		this.ids = await tfrpc.rpc.getIdentities();
 | 
						|
		this.whoami = await tfrpc.rpc.localStorageGet('journal_whoami');
 | 
						|
		await this.read_journals();
 | 
						|
	}
 | 
						|
 | 
						|
	async read_journals() {
 | 
						|
		let max_rowid;
 | 
						|
		let journals;
 | 
						|
		while (true) {
 | 
						|
			[max_rowid, journals] = await tfrpc.rpc.collection(
 | 
						|
				[this.whoami],
 | 
						|
				'journal-entry',
 | 
						|
				undefined,
 | 
						|
				max_rowid,
 | 
						|
				journals
 | 
						|
			);
 | 
						|
			this.journals = Object.assign({}, journals);
 | 
						|
			console.log('JOURNALS', this.journals);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	async on_whoami_changed(event) {
 | 
						|
		let new_id = event.srcElement.selected;
 | 
						|
		await tfrpc.rpc.localStorageSet('journal_whoami', new_id);
 | 
						|
		this.whoami = new_id;
 | 
						|
	}
 | 
						|
 | 
						|
	async on_journal_publish(event) {
 | 
						|
		let key = event.detail.key;
 | 
						|
		let text = event.detail.text;
 | 
						|
		let message = {
 | 
						|
			type: 'journal-entry',
 | 
						|
			key: key,
 | 
						|
			text: text,
 | 
						|
		};
 | 
						|
		message.recps = [this.whoami];
 | 
						|
		print(message);
 | 
						|
		message = await tfrpc.rpc.encrypt(
 | 
						|
			this.whoami,
 | 
						|
			message.recps,
 | 
						|
			JSON.stringify(message)
 | 
						|
		);
 | 
						|
		print(message);
 | 
						|
		await tfrpc.rpc.appendMessage(this.whoami, message);
 | 
						|
	}
 | 
						|
 | 
						|
	render() {
 | 
						|
		console.log('RENDER APP', this.journals);
 | 
						|
		let self = this;
 | 
						|
		return html`
 | 
						|
			<div>
 | 
						|
				<tf-id-picker
 | 
						|
					.ids=${this.ids}
 | 
						|
					selected=${this.whoami}
 | 
						|
					@change=${this.on_whoami_changed}
 | 
						|
				></tf-id-picker>
 | 
						|
			</div>
 | 
						|
			<tf-journal-entry
 | 
						|
				whoami=${this.whoami}
 | 
						|
				.journals=${this.journals}
 | 
						|
				@publish=${this.on_journal_publish}
 | 
						|
			></tf-journal-entry>
 | 
						|
		`;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
customElements.define('tf-journal-app', TfJournalAppElement);
 |