|
|
|
@ -4,48 +4,6 @@ import * as tfutils from './tf-utils.js';
|
|
|
|
|
|
|
|
|
|
const k_project = '%Hr+4xEVtjplidSKBlRWi4Aw/0Tfw7B+1OR9BzlDKmOI=.sha256';
|
|
|
|
|
|
|
|
|
|
class TfIdPickerElement extends LitElement {
|
|
|
|
|
static get properties() {
|
|
|
|
|
return {
|
|
|
|
|
ids: {type: Array},
|
|
|
|
|
selected: {type: String},
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
|
super();
|
|
|
|
|
this.load();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async load() {
|
|
|
|
|
this.selected = await tfrpc.rpc.localStorageGet('whoami');
|
|
|
|
|
this.ids = (await tfrpc.rpc.getIdentities()) || [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
changed(event) {
|
|
|
|
|
this.selected = event.srcElement.value;
|
|
|
|
|
tfrpc.rpc.localStorageSet('whoami', this.selected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
render() {
|
|
|
|
|
if (this.ids) {
|
|
|
|
|
return html`
|
|
|
|
|
<select @change=${this.changed} style="max-width: 100%">
|
|
|
|
|
${this.ids.map(
|
|
|
|
|
(id) =>
|
|
|
|
|
html`<option ?selected=${id == this.selected} value=${id}>
|
|
|
|
|
${id}
|
|
|
|
|
</option>`
|
|
|
|
|
)}
|
|
|
|
|
</select>
|
|
|
|
|
`;
|
|
|
|
|
} else {
|
|
|
|
|
return html`<div>Loading...</div>`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
customElements.define('tf-id-picker', TfIdPickerElement);
|
|
|
|
|
|
|
|
|
|
class TfComposeElement extends LitElement {
|
|
|
|
|
static get properties() {
|
|
|
|
|
return {
|
|
|
|
@ -105,10 +63,10 @@ class TfIssuesAppElement extends LitElement {
|
|
|
|
|
let issues = {};
|
|
|
|
|
let messages = await tfrpc.rpc.query(
|
|
|
|
|
`
|
|
|
|
|
WITH issues AS (SELECT messages.* FROM messages_refs JOIN messages ON
|
|
|
|
|
WITH issues AS (SELECT messages.id, json(messages.content) AS content, messages.author, messages.timestamp FROM messages_refs JOIN messages ON
|
|
|
|
|
messages.id = messages_refs.message
|
|
|
|
|
WHERE messages_refs.ref = ? AND json_extract(messages.content, '$.type') = 'issue'),
|
|
|
|
|
edits AS (SELECT messages.* FROM issues JOIN messages_refs ON
|
|
|
|
|
edits AS (SELECT messages.id, json(messages.content) AS content, messages.author, messages.timestamp FROM issues JOIN messages_refs ON
|
|
|
|
|
issues.id = messages_refs.ref JOIN messages ON
|
|
|
|
|
messages.id = messages_refs.message
|
|
|
|
|
WHERE json_extract(messages.content, '$.type') IN ('issue-edit', 'post'))
|
|
|
|
@ -206,7 +164,7 @@ class TfIssuesAppElement extends LitElement {
|
|
|
|
|
if (
|
|
|
|
|
confirm(`Are you sure you want to ${open ? 'open' : 'close'} this issue?`)
|
|
|
|
|
) {
|
|
|
|
|
let whoami = this.shadowRoot.getElementById('picker').selected;
|
|
|
|
|
let whoami = await tfrpc.rpc.getActiveIdentity();
|
|
|
|
|
await tfrpc.rpc.appendMessage(whoami, {
|
|
|
|
|
type: 'issue-edit',
|
|
|
|
|
issues: [
|
|
|
|
@ -221,7 +179,7 @@ class TfIssuesAppElement extends LitElement {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async create_issue(event) {
|
|
|
|
|
let whoami = this.shadowRoot.getElementById('picker').selected;
|
|
|
|
|
let whoami = await tfrpc.rpc.getActiveIdentity();
|
|
|
|
|
await tfrpc.rpc.appendMessage(whoami, {
|
|
|
|
|
type: 'issue',
|
|
|
|
|
project: k_project,
|
|
|
|
@ -231,7 +189,7 @@ class TfIssuesAppElement extends LitElement {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async reply_to_issue(event) {
|
|
|
|
|
let whoami = this.shadowRoot.getElementById('picker').selected;
|
|
|
|
|
let whoami = await tfrpc.rpc.getActiveIdentity();
|
|
|
|
|
await tfrpc.rpc.appendMessage(whoami, {
|
|
|
|
|
type: 'post',
|
|
|
|
|
text: event.detail.value,
|
|
|
|
@ -251,7 +209,6 @@ class TfIssuesAppElement extends LitElement {
|
|
|
|
|
render() {
|
|
|
|
|
let header = html`
|
|
|
|
|
<h1>Tilde Friends Issues</h1>
|
|
|
|
|
<tf-id-picker id="picker"></tf-id-picker>
|
|
|
|
|
`;
|
|
|
|
|
if (this.selected) {
|
|
|
|
|
return html`
|
|
|
|
|