summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/pages/admin/index.vue16
-rw-r--r--packages/frontend/src/scripts/lookup-user.ts23
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;
+ }
+ }
+}