diff options
Diffstat (limited to 'packages/frontend')
| -rw-r--r-- | packages/frontend/src/pages/admin/index.vue | 16 | ||||
| -rw-r--r-- | packages/frontend/src/scripts/lookup-user.ts | 23 |
2 files changed, 34 insertions, 5 deletions
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue index b304edbf57..cc0cdf7466 100644 --- a/packages/frontend/src/pages/admin/index.vue +++ b/packages/frontend/src/pages/admin/index.vue @@ -34,7 +34,7 @@ import MkSuperMenu from '@/components/MkSuperMenu.vue'; import MkInfo from '@/components/MkInfo.vue'; import { instance } from '@/instance.js'; import * as os from '@/os.js'; -import { lookupUser } from '@/scripts/lookup-user.js'; +import { lookupUser, lookupUserByEmail } from '@/scripts/lookup-user.js'; import { useRouter } from '@/router.js'; import { definePageMetadata, provideMetadataReceiver } from '@/scripts/page-metadata.js'; @@ -264,7 +264,7 @@ provideMetadataReceiver((info) => { } }); -const invite = () => { +function invite() { os.api('admin/invite/create').then(x => { os.alert({ type: 'info', @@ -276,9 +276,9 @@ const invite = () => { text: err, }); }); -}; +} -const lookup = (ev) => { +function lookup(ev: MouseEvent) { os.popupMenu([{ text: i18n.ts.user, icon: 'ti ti-user', @@ -286,6 +286,12 @@ const lookup = (ev) => { lookupUser(); }, }, { + text: `${i18n.ts.user} (${i18n.ts.email})`, + icon: 'ti ti-user', + action: () => { + lookupUserByEmail(); + }, + }, { text: i18n.ts.note, icon: 'ti ti-pencil', action: () => { @@ -304,7 +310,7 @@ const lookup = (ev) => { alert('TODO'); }, }], ev.currentTarget ?? ev.target); -}; +} const headerActions = $computed(() => []); diff --git a/packages/frontend/src/scripts/lookup-user.ts b/packages/frontend/src/scripts/lookup-user.ts index 3dbc03f777..a35fe898e4 100644 --- a/packages/frontend/src/scripts/lookup-user.ts +++ b/packages/frontend/src/scripts/lookup-user.ts @@ -39,3 +39,26 @@ export async function lookupUser() { notFound(); }); } + +export async function lookupUserByEmail() { + const { canceled, result } = await os.inputText({ + title: i18n.ts.emailAddress, + type: 'email', + }); + if (canceled) return; + + try { + const user = await os.apiWithDialog('admin/accounts/find-by-email', { email: result }); + + os.pageWindow(`/admin/user/${user.id}`); + } catch (err) { + if (err.code === 'USER_NOT_FOUND') { + os.alert({ + type: 'error', + text: i18n.ts.noSuchUser, + }); + } else { + throw err; + } + } +} |