mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 04:26:58 +00:00
fix TS errors about user, info, and init
This commit is contained in:
parent
c21209152c
commit
c71f816be2
1 changed files with 55 additions and 38 deletions
|
@ -5,10 +5,10 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<PageWithHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs" :spacer="true" style="--MI_SPACER-w: 600px; --MI_SPACER-min: 16px; --MI_SPACER-max: 32px;">
|
<PageWithHeader v-model:tab="tab" :actions="headerActions" :tabs="headerTabs" :spacer="true" style="--MI_SPACER-w: 600px; --MI_SPACER-min: 16px; --MI_SPACER-max: 32px;">
|
||||||
<div>
|
<FormSuspense v-if="init" :p="init">
|
||||||
<FormSuspense :p="init">
|
<div v-if="user && info">
|
||||||
<div v-if="tab === 'overview'" class="_gaps">
|
<div v-if="tab === 'overview'" class="_gaps">
|
||||||
<div v-if="user" class="aeakzknw">
|
<div class="aeakzknw">
|
||||||
<MkAvatar class="avatar" :user="user" indicator link preview/>
|
<MkAvatar class="avatar" :user="user" indicator link preview/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<span class="name"><MkUserName class="name" :user="user"/></span>
|
<span class="name"><MkUserName class="name" :user="user"/></span>
|
||||||
|
@ -228,14 +228,29 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-else-if="tab === 'raw'" class="_gaps_m">
|
<div v-else-if="tab === 'raw'" class="_gaps_m">
|
||||||
<MkObjectView v-if="info && $i.isAdmin" tall :value="info">
|
<MkFolder :sticky="false" :defaultOpen="true">
|
||||||
</MkObjectView>
|
<template #icon><i class="ph-user-circle ph-bold ph-lg"></i></template>
|
||||||
|
<template #label>{{ i18n.ts.user }}</template>
|
||||||
|
|
||||||
<MkObjectView tall :value="user">
|
<MkObjectView tall :value="user"/>
|
||||||
</MkObjectView>
|
</MkFolder>
|
||||||
|
|
||||||
|
<MkFolder :sticky="false">
|
||||||
|
<template #icon><i class="ti ti-info-circle"></i></template>
|
||||||
|
<template #label>{{ i18n.ts.details }}</template>
|
||||||
|
|
||||||
|
<MkObjectView tall :value="info"/>
|
||||||
|
</MkFolder>
|
||||||
|
|
||||||
|
<MkFolder v-if="ap" :sticky="false">
|
||||||
|
<template #icon><i class="ph-globe ph-bold ph-lg"></i></template>
|
||||||
|
<template #label>{{ i18n.ts.activityPub }}</template>
|
||||||
|
|
||||||
|
<MkObjectView tall :value="ap"/>
|
||||||
|
</MkFolder>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</div>
|
|
||||||
</PageWithHeader>
|
</PageWithHeader>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -244,6 +259,7 @@ import { computed, defineAsyncComponent, watch, ref } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import { url } from '@@/js/config.js';
|
import { url } from '@@/js/config.js';
|
||||||
import type { Badge } from '@/components/SkBadgeStrip.vue';
|
import type { Badge } from '@/components/SkBadgeStrip.vue';
|
||||||
|
import type { ChartSrc } from '@/components/MkChart.vue';
|
||||||
import MkChart from '@/components/MkChart.vue';
|
import MkChart from '@/components/MkChart.vue';
|
||||||
import MkObjectView from '@/components/MkObjectView.vue';
|
import MkObjectView from '@/components/MkObjectView.vue';
|
||||||
import MkTextarea from '@/components/MkTextarea.vue';
|
import MkTextarea from '@/components/MkTextarea.vue';
|
||||||
|
@ -276,15 +292,17 @@ const props = withDefaults(defineProps<{
|
||||||
userHint?: Misskey.entities.UserDetailed;
|
userHint?: Misskey.entities.UserDetailed;
|
||||||
infoHint?: Misskey.entities.AdminShowUserResponse;
|
infoHint?: Misskey.entities.AdminShowUserResponse;
|
||||||
ipsHint?: Misskey.entities.AdminGetUserIpsResponse;
|
ipsHint?: Misskey.entities.AdminGetUserIpsResponse;
|
||||||
|
apHint?: Misskey.entities.ApGetResponse;
|
||||||
}>(), {
|
}>(), {
|
||||||
initialTab: 'overview',
|
initialTab: 'overview',
|
||||||
userHint: undefined,
|
userHint: undefined,
|
||||||
infoHint: undefined,
|
infoHint: undefined,
|
||||||
ipsHint: undefined,
|
ipsHint: undefined,
|
||||||
|
apHint: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
const tab = ref(props.initialTab);
|
const tab = ref(props.initialTab);
|
||||||
const chartSrc = ref('per-user-notes');
|
const chartSrc = ref<ChartSrc>('per-user-notes');
|
||||||
const user = ref<null | Misskey.entities.UserDetailed>();
|
const user = ref<null | Misskey.entities.UserDetailed>();
|
||||||
const init = ref<ReturnType<typeof createFetcher>>();
|
const init = ref<ReturnType<typeof createFetcher>>();
|
||||||
const info = ref<Misskey.entities.AdminShowUserResponse | null>(null);
|
const info = ref<Misskey.entities.AdminShowUserResponse | null>(null);
|
||||||
|
@ -409,7 +427,7 @@ const announcementsPagination = {
|
||||||
status: announcementsStatus.value,
|
status: announcementsStatus.value,
|
||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
const expandedRoles = ref([]);
|
const expandedRoles = ref<string[]>([]);
|
||||||
|
|
||||||
function createFetcher(withHint = true) {
|
function createFetcher(withHint = true) {
|
||||||
return () => Promise.all([
|
return () => Promise.all([
|
||||||
|
@ -419,29 +437,25 @@ function createFetcher(withHint = true) {
|
||||||
(withHint && props.infoHint) ? props.infoHint : misskeyApi('admin/show-user', {
|
(withHint && props.infoHint) ? props.infoHint : misskeyApi('admin/show-user', {
|
||||||
userId: props.userId,
|
userId: props.userId,
|
||||||
}),
|
}),
|
||||||
iAmAdmin
|
(withHint && props.ipsHint) ? props.ipsHint : misskeyApi('admin/get-user-ips', {
|
||||||
? (withHint && props.ipsHint) ? props.ipsHint : misskeyApi('admin/get-user-ips', {
|
|
||||||
userId: props.userId,
|
userId: props.userId,
|
||||||
})
|
}),
|
||||||
: null],
|
(withHint && props.apHint) ? props.apHint : misskeyApi('ap/get', {
|
||||||
).then(async ([_user, _info, _ips]) => {
|
userId: props.userId,
|
||||||
|
}).catch(() => null)],
|
||||||
|
).then(async ([_user, _info, _ips, _ap]) => {
|
||||||
user.value = _user;
|
user.value = _user;
|
||||||
info.value = _info;
|
info.value = _info;
|
||||||
ips.value = _ips;
|
ips.value = _ips;
|
||||||
moderator.value = info.value.isModerator;
|
ap.value = _ap;
|
||||||
silenced.value = info.value.isSilenced;
|
moderator.value = _info.isModerator;
|
||||||
approved.value = info.value.approved;
|
silenced.value = _info.isSilenced;
|
||||||
markedAsNSFW.value = info.value.alwaysMarkNsfw;
|
approved.value = _info.approved;
|
||||||
suspended.value = info.value.isSuspended;
|
markedAsNSFW.value = _info.alwaysMarkNsfw;
|
||||||
rejectQuotes.value = user.value.rejectQuotes ?? false;
|
suspended.value = _info.isSuspended;
|
||||||
moderationNote.value = info.value.moderationNote;
|
rejectQuotes.value = _user.rejectQuotes ?? false;
|
||||||
mandatoryCW.value = user.value.mandatoryCW;
|
moderationNote.value = _info.moderationNote;
|
||||||
|
mandatoryCW.value = _user.mandatoryCW;
|
||||||
if (iAmAdmin) {
|
|
||||||
ap.value = await misskeyApi('ap/get', {
|
|
||||||
uri: _user.uri ?? `${url}/users/${props.userId}`,
|
|
||||||
}).catch(() => null);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,9 +464,9 @@ async function refreshUser() {
|
||||||
await createFetcher(false)();
|
await createFetcher(false)();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onMandatoryCWChanged(value: string) {
|
async function onMandatoryCWChanged(value: string | number) {
|
||||||
await os.promiseDialog(async () => {
|
await os.promiseDialog(async () => {
|
||||||
await misskeyApi('admin/cw-user', { userId: props.userId, cw: value });
|
await misskeyApi('admin/cw-user', { userId: props.userId, cw: String(value) });
|
||||||
await refreshUser();
|
await refreshUser();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -480,7 +494,7 @@ async function resetPassword() {
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
const { password } = await misskeyApi('admin/reset-password', {
|
const { password } = await misskeyApi('admin/reset-password', {
|
||||||
userId: user.value.id,
|
userId: props.userId,
|
||||||
});
|
});
|
||||||
await os.alert({
|
await os.alert({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
|
@ -592,15 +606,16 @@ async function deleteAccount() {
|
||||||
text: i18n.ts.deleteThisAccountConfirm,
|
text: i18n.ts.deleteThisAccountConfirm,
|
||||||
});
|
});
|
||||||
if (confirm.canceled) return;
|
if (confirm.canceled) return;
|
||||||
|
if (!user.value) return;
|
||||||
|
|
||||||
const typed = await os.inputText({
|
const typed = await os.inputText({
|
||||||
text: i18n.tsx.typeToConfirm({ x: user.value?.username }),
|
text: i18n.tsx.typeToConfirm({ x: user.value.username }),
|
||||||
});
|
});
|
||||||
if (typed.canceled) return;
|
if (typed.canceled) return;
|
||||||
|
|
||||||
if (typed.result === user.value?.username) {
|
if (typed.result === user.value.username) {
|
||||||
await os.apiWithDialog('admin/delete-account', {
|
await os.apiWithDialog('admin/delete-account', {
|
||||||
userId: user.value.id,
|
userId: props.userId,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await os.alert({
|
await os.alert({
|
||||||
|
@ -663,7 +678,7 @@ async function unassignRole(role, ev) {
|
||||||
}], ev.currentTarget ?? ev.target);
|
}], ev.currentTarget ?? ev.target);
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleRoleItem(role) {
|
function toggleRoleItem(role: Misskey.entities.Role) {
|
||||||
if (expandedRoles.value.includes(role.id)) {
|
if (expandedRoles.value.includes(role.id)) {
|
||||||
expandedRoles.value = expandedRoles.value.filter(x => x !== role.id);
|
expandedRoles.value = expandedRoles.value.filter(x => x !== role.id);
|
||||||
} else {
|
} else {
|
||||||
|
@ -672,6 +687,7 @@ function toggleRoleItem(role) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function createAnnouncement() {
|
function createAnnouncement() {
|
||||||
|
if (!user.value) return;
|
||||||
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), {
|
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), {
|
||||||
user: user.value,
|
user: user.value,
|
||||||
}, {
|
}, {
|
||||||
|
@ -680,6 +696,7 @@ function createAnnouncement() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function editAnnouncement(announcement) {
|
function editAnnouncement(announcement) {
|
||||||
|
if (!user.value) return;
|
||||||
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), {
|
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), {
|
||||||
user: user.value,
|
user: user.value,
|
||||||
announcement,
|
announcement,
|
||||||
|
|
Loading…
Add table
Reference in a new issue