Let's get account names to the UI.

This commit is contained in:
Cory McWilliams 2024-04-13 21:51:18 -04:00
parent 26165e30de
commit dbf28c03e6
3 changed files with 52 additions and 20 deletions

View File

@ -141,18 +141,12 @@ function socket(request, response, client) {
} }
} }
response.send( response.send(
JSON.stringify({ JSON.stringify(Object.assign({
action: 'session', action: 'session',
credentials: credentials, credentials: credentials,
identities: await ssb.getIdentities(credentials?.session?.name),
identity: await core.getActiveIdentity(
credentials?.session?.name,
packageOwner,
packageName
),
parentApp: parentApp, parentApp: parentApp,
id: blobId, id: blobId,
}), }, await core.getIdentityInfo(credentials?.session?.name, packageOwner, packageName))),
0x1 0x1
); );

View File

@ -58,6 +58,7 @@ class TfNavigationElement extends LitElement {
show_version: {type: Boolean}, show_version: {type: Boolean},
identity: {type: String}, identity: {type: String},
identities: {type: Array}, identities: {type: Array},
names: {type: Object},
}; };
} }
@ -68,6 +69,7 @@ class TfNavigationElement extends LitElement {
this.status = {}; this.status = {};
this.spark_lines = {}; this.spark_lines = {};
this.identities = []; this.identities = [];
this.names = {};
} }
/** /**
@ -148,16 +150,17 @@ class TfNavigationElement extends LitElement {
} }
render_identity() { render_identity() {
let self = this;
if (this.identities?.length) { if (this.identities?.length) {
return html` return html`
<link type="text/css" rel="stylesheet" href="/static/w3.css" /> <link type="text/css" rel="stylesheet" href="/static/w3.css" />
<select <select
@change=${this.set_active_identity} @change=${this.set_active_identity}
class="w3-button w3-cyan w3-bar-item w3-right" class="w3-button w3-cyan w3-bar-item w3-right"
style="max-width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap" style="max-width: 25%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap"
> >
${this.identities.map( ${this.identities.map(
(x) => html`<option ?selected=${x === this.identity}>${x}</option>` (x) => html`<option ?selected=${x === this.identity}>${self.names[x]} - ${x}</option>`
)} )}
</select> </select>
`; `;
@ -1176,6 +1179,7 @@ function _receive_websocket_message(message) {
navigation.credentials = message.credentials; navigation.credentials = message.credentials;
navigation.identities = message.identities; navigation.identities = message.identities;
navigation.identity = message.identity; navigation.identity = message.identity;
navigation.names = message.names;
} else if (message && message.action == 'permissions') { } else if (message && message.action == 'permissions') {
let navigation = document.getElementsByTagName('tf-navigation')[0]; let navigation = document.getElementsByTagName('tf-navigation')[0];
navigation.permissions = message.permissions ?? {}; navigation.permissions = message.permissions ?? {};
@ -1183,6 +1187,7 @@ function _receive_websocket_message(message) {
let navigation = document.getElementsByTagName('tf-navigation')[0]; let navigation = document.getElementsByTagName('tf-navigation')[0];
navigation.identities = message.identities; navigation.identities = message.identities;
navigation.identity = message.identity; navigation.identity = message.identity;
navigation.names = message.names;
} else if (message && message.action == 'ready') { } else if (message && message.action == 'ready') {
setStatusMessage(null); setStatusMessage(null);
if (window.location.hash) { if (window.location.hash) {

View File

@ -540,17 +540,13 @@ async function getProcessBlob(blobId, key, options) {
}, },
}; };
process.sendIdentities = async function () { process.sendIdentities = async function () {
process.app.send({ process.app.send(Object.assign({
action: 'identities', action: 'identities',
identities: await ssb.getIdentities( }, await getIdentityInfo(
process?.credentials?.session?.name process?.credentials?.session?.name,
), options?.packageOwner,
identity: await getActiveIdentity( options?.packageName
process?.credentials?.session?.name, )));
options.packageOwner,
options.packageName
),
});
}; };
process.setActiveIdentity = async function (identity) { process.setActiveIdentity = async function (identity) {
if ( if (
@ -1558,6 +1554,42 @@ async function getActiveIdentity(user, packageOwner, packageName) {
} }
} }
async function getIdentityInfo(user, packageOwner, packageName) {
let identities = await ssb.getIdentities(
user
);
let names = new Object();
for (let identity of identities) {
names[identity] = identity;
}
await ssb.sqlAsync(`
SELECT author, name FROM (
SELECT
messages.author,
RANK() OVER (PARTITION BY messages.author ORDER BY messages.sequence DESC) AS author_rank,
messages.content ->> 'name' AS name
FROM messages
JOIN json_each(?) AS ids
ON messages.author = ids.value
WHERE json_extract(messages.content, '$.type') = 'about' AND content ->> 'about' = messages.author AND name IS NOT NULL)
WHERE author_rank = 1
`,
[JSON.stringify(identities)],
function (row) {
names[row.author] = row.name;
});
return {
identities: identities,
identity: await getActiveIdentity(
user,
packageOwner,
packageName
),
names: names,
};
}
export { export {
gGlobalSettings as globalSettings, gGlobalSettings as globalSettings,
setGlobalSettings, setGlobalSettings,
@ -1565,4 +1597,5 @@ export {
invoke, invoke,
getSessionProcessBlob, getSessionProcessBlob,
getActiveIdentity, getActiveIdentity,
getIdentityInfo,
}; };