From 49824ea3c6eab773b0ee122df59847db60ba75f8 Mon Sep 17 00:00:00 2001 From: aewing Date: Sun, 29 Mar 2026 03:00:32 +0000 Subject: [PATCH] Use exact Users.name for current task lookup and auto-load tasks --- server.ts | 32 +++++++++++++++++++++++++++----- tasks.html | 33 ++++++++++++++++++++++++++++----- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/server.ts b/server.ts index 0bd4e2f..dd14003 100644 --- a/server.ts +++ b/server.ts @@ -447,8 +447,18 @@ app.get('/api/tasks/users', async (c) => { try { const me = pb.authStore.model; + let meRecord: any = me; let users: any[] = []; let warning = ''; + if (me?.id) { + try { + meRecord = await pb.collection(PB_AUTH_COLLECTION).getOne(String(me.id), { + fields: 'id,email,name,username', + }); + } catch { + meRecord = me; + } + } try { users = await pb.collection(PB_AUTH_COLLECTION).getFullList({ sort: 'email', @@ -456,20 +466,22 @@ app.get('/api/tasks/users', async (c) => { }); } catch (listErr) { warning = 'Users list is restricted by PocketBase rules; showing current user only.'; - users = me ? [me] : []; + users = meRecord ? [meRecord] : []; } return c.json({ success: true, me: { - id: me?.id || '', - email: me?.email || '', - name: (me?.name || me?.username || me?.email || 'Me') as string, + id: meRecord?.id || '', + email: meRecord?.email || '', + name: (meRecord?.name || meRecord?.username || meRecord?.email || 'Me') as string, + lookupName: String(meRecord?.name || '').trim(), }, users: users.map((user: any) => ({ id: user.id, email: user.email || '', name: user.name || user.username || user.email || user.id, + lookupName: String(user.name || '').trim(), })), warning: warning || undefined, }); @@ -495,7 +507,17 @@ app.get('/api/tasks/list', async (c) => { try { const me = pb.authStore.model; const meId = String(me?.id || '').trim(); - const meName = String(me?.name || me?.username || me?.email || '').trim(); + let meRecord: any = me; + if (meId) { + try { + meRecord = await pb.collection(PB_AUTH_COLLECTION).getOne(meId, { + fields: 'id,email,name,username', + }); + } catch { + meRecord = me; + } + } + const meName = String(meRecord?.name || '').trim(); const requestedUserName = String(c.req.query('userName') || '').trim(); const requestedUserId = String(c.req.query('userId') || '').trim(); const targetUserName = requestedUserName || meName; diff --git a/tasks.html b/tasks.html index 7abbc36..1011da7 100644 --- a/tasks.html +++ b/tasks.html @@ -317,12 +317,15 @@ usersCache = Array.isArray(data.users) ? data.users : []; const meId = String(data?.me?.id || '').trim(); const meName = data?.me?.name || data?.me?.email || 'Me'; - const meLookupName = String(data?.me?.name || data?.me?.email || '').trim(); + const meLookupName = String(data?.me?.lookupName || data?.me?.name || '').trim(); taskUserSelect.innerHTML = ''; for (const user of usersCache) { const opt = document.createElement('option'); - const lookupName = String(user.name || user.email || user.id || '').trim(); + const lookupName = String(user.lookupName || user.name || '').trim(); + if (!lookupName) { + continue; + } opt.value = lookupName; opt.dataset.userId = user.id; opt.textContent = `${user.name || user.email || user.id}${user.id === meId ? ' (Me)' : ''}`; @@ -394,6 +397,28 @@ }); } + async function bootstrapTasksPage() { + try { + const client = await ensurePocketBaseClient(); + const config = await getPocketBaseConfig(); + + if (client.authStore?.token) { + try { + await client.collection(config.collection).authRefresh(); + } catch { + } + } + + await updatePbStatus(); + if (client.authStore?.isValid) { + await loadUsers(); + await loadTasks(); + } + } catch (error) { + writeOutput({ error: error?.message || String(error) }); + } + } + function bind(id, handler) { document.getElementById(id).addEventListener('click', async () => { try { @@ -417,9 +442,7 @@ } }); - ensurePocketBaseClient() - .then(() => updatePbStatus()) - .catch((error) => writeOutput({ error: error?.message || String(error) })); + bootstrapTasksPage(); loadHealth();