forked from cory/tildefriends
		
	
		
			
				
	
	
		
			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);
 |