diff --git a/locales/index.d.ts b/locales/index.d.ts
index 00fdc4649c14..6745be3a752f 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -927,6 +927,7 @@ export interface Locale {
"recentNDays": string;
"noEmailServerWarning": string;
"thereIsUnresolvedAbuseReportWarning": string;
+ "pendingUserApprovals": string;
"recommended": string;
"check": string;
"driveCapOverrideLabel": string;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 539054e012b6..26b46dd413cb 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -924,6 +924,7 @@ recentNHours: "直近{n}時間"
recentNDays: "直近{n}日"
noEmailServerWarning: "メールサーバーの設定がされていません。"
thereIsUnresolvedAbuseReportWarning: "未対応の通報があります。"
+pendingUserApprovals: "承認待ちのユーザーがいます。"
recommended: "推奨"
check: "チェック"
driveCapOverrideLabel: "このユーザーのドライブ容量上限を変更"
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue
index 5e92cbd60058..83b02006687e 100644
--- a/packages/frontend/src/pages/admin/index.vue
+++ b/packages/frontend/src/pages/admin/index.vue
@@ -16,6 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.noMaintainerInformationWarning }} {{ i18n.ts.configure }}
{{ i18n.ts.noBotProtectionWarning }} {{ i18n.ts.configure }}
{{ i18n.ts.noEmailServerWarning }} {{ i18n.ts.configure }}
+ {{ i18n.ts.pendingUserApprovals }} {{ i18n.ts.check }}
@@ -60,6 +61,7 @@ let noMaintainerInformation = isEmpty(instance.maintainerName) || isEmpty(instan
let noBotProtection = !instance.disableRegistration && !instance.enableHcaptcha && !instance.enableRecaptcha && !instance.enableTurnstile;
let noEmailServer = !instance.enableEmail;
const thereIsUnresolvedAbuseReport = ref(false);
+const pendingUserApprovals = ref(false);
const currentPage = computed(() => router.currentRef.value.child);
os.api('admin/abuse-user-reports', {
@@ -69,6 +71,13 @@ os.api('admin/abuse-user-reports', {
if (reports.length > 0) thereIsUnresolvedAbuseReport.value = true;
});
+os.api('admin/show-users', {
+ state: 'approved',
+ limit: 1,
+}).then(approvals => {
+ if (approvals.length > 0) pendingUserApprovals.value = true;
+});
+
const NARROW_THRESHOLD = 600;
const ro = new ResizeObserver((entries, observer) => {
if (entries.length === 0) return;