Merge branch 'develop' into schedule-note
This commit is contained in:
commit
cb00b236d2
21 changed files with 1471 additions and 1062 deletions
|
|
@ -11,8 +11,8 @@ const siteName = document.querySelector<HTMLMetaElement>('meta[property="og:site
|
|||
export const host = address.host;
|
||||
export const hostname = address.hostname;
|
||||
export const url = address.origin;
|
||||
export const apiUrl = url + '/api';
|
||||
export const wsUrl = url.replace('http://', 'ws://').replace('https://', 'wss://') + '/streaming';
|
||||
export const apiUrl = location.origin + '/api';
|
||||
export const wsOrigin = location.origin;
|
||||
export const lang = miLocalStorage.getItem('lang') ?? 'en-US';
|
||||
export const langs = _LANGS_;
|
||||
const preParseLocale = miLocalStorage.getItem('locale');
|
||||
|
|
|
|||
|
|
@ -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,15 +276,21 @@ const invite = () => {
|
|||
text: err,
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
const lookup = (ev) => {
|
||||
function lookup(ev: MouseEvent) {
|
||||
os.popupMenu([{
|
||||
text: i18n.ts.user,
|
||||
icon: 'ti ti-user',
|
||||
action: () => {
|
||||
lookupUser();
|
||||
},
|
||||
}, {
|
||||
text: `${i18n.ts.user} (${i18n.ts.email})`,
|
||||
icon: 'ti ti-user',
|
||||
action: () => {
|
||||
lookupUserByEmail();
|
||||
},
|
||||
}, {
|
||||
text: i18n.ts.note,
|
||||
icon: 'ti ti-pencil',
|
||||
|
|
@ -304,7 +310,7 @@ const lookup = (ev) => {
|
|||
alert('TODO');
|
||||
},
|
||||
}], ev.currentTarget ?? ev.target);
|
||||
};
|
||||
}
|
||||
|
||||
const headerActions = $computed(() => []);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,11 +18,19 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<MkSpacer v-else-if="tab === 'users'" :contentMax="1200">
|
||||
<div class="_gaps_s">
|
||||
<div v-if="role">{{ role.description }}</div>
|
||||
<MkUserList :pagination="users" :extractor="(item) => item.user"/>
|
||||
<MkUserList v-if="visiable" :pagination="users" :extractor="(item) => item.user"/>
|
||||
<div v-else-if="!visiable" class="_fullinfo">
|
||||
<img :src="infoImageUrl" class="_ghost"/>
|
||||
<div>{{ i18n.ts.nothing }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</MkSpacer>
|
||||
<MkSpacer v-else-if="tab === 'timeline'" :contentMax="700">
|
||||
<MkTimeline ref="timeline" src="role" :role="props.role"/>
|
||||
<MkTimeline v-if="visiable" ref="timeline" src="role" :role="props.role"/>
|
||||
<div v-else-if="!visiable" class="_fullinfo">
|
||||
<img :src="infoImageUrl" class="_ghost"/>
|
||||
<div>{{ i18n.ts.nothing }}</div>
|
||||
</div>
|
||||
</MkSpacer>
|
||||
</MkStickyContainer>
|
||||
</template>
|
||||
|
|
@ -35,7 +43,7 @@ import { definePageMetadata } from '@/scripts/page-metadata.js';
|
|||
import { i18n } from '@/i18n.js';
|
||||
import MkTimeline from '@/components/MkTimeline.vue';
|
||||
import { instanceName } from '@/config.js';
|
||||
import { serverErrorImageUrl } from '@/instance.js';
|
||||
import { serverErrorImageUrl, infoImageUrl } from '@/instance.js';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
role: string;
|
||||
|
|
@ -47,6 +55,7 @@ const props = withDefaults(defineProps<{
|
|||
let tab = $ref(props.initialTab);
|
||||
let role = $ref();
|
||||
let error = $ref();
|
||||
let visiable = $ref(false);
|
||||
|
||||
watch(() => props.role, () => {
|
||||
os.api('roles/show', {
|
||||
|
|
@ -54,6 +63,7 @@ watch(() => props.role, () => {
|
|||
}).then(res => {
|
||||
role = res;
|
||||
document.title = `${role?.name} | ${instanceName}`;
|
||||
visiable = res.isExplorable && res.isPublic;
|
||||
}).catch((err) => {
|
||||
if (err.code === 'NO_SUCH_ROLE') {
|
||||
error = i18n.ts.noRole;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
import * as Misskey from 'misskey-js';
|
||||
import { markRaw } from 'vue';
|
||||
import { $i } from '@/account.js';
|
||||
import { url } from '@/config.js';
|
||||
import { wsOrigin } from '@/config.js';
|
||||
|
||||
let stream: Misskey.Stream | null = null;
|
||||
|
||||
export function useStream(): Misskey.Stream {
|
||||
if (stream) return stream;
|
||||
|
||||
stream = markRaw(new Misskey.Stream(url, $i ? {
|
||||
stream = markRaw(new Misskey.Stream(wsOrigin, $i ? {
|
||||
token: $i.token,
|
||||
} : null));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue