summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2024-09-23 21:50:30 +0900
committerGitHub <noreply@github.com>2024-09-23 21:50:30 +0900
commit0c6d1ec5245708f784fe5c74e7547f3f7317d5df (patch)
tree02c81d75e5bb70ff57a714ea6938a326735e2719 /packages/frontend/src/scripts
parentfix(backend): happy-domを使用後にcloseするように (#14615) (diff)
downloadsharkey-0c6d1ec5245708f784fe5c74e7547f3f7317d5df.tar.gz
sharkey-0c6d1ec5245708f784fe5c74e7547f3f7317d5df.tar.bz2
sharkey-0c6d1ec5245708f784fe5c74e7547f3f7317d5df.zip
refactor(frontend): popupMenuの項目作成時に三項演算子をなるべく使わないように (#14554)
* refactor(frontend): popupMenuの項目作成時に三項演算子をなるべく使わないように * type import * fix * lint
Diffstat (limited to 'packages/frontend/src/scripts')
-rw-r--r--packages/frontend/src/scripts/get-drive-file-menu.ts38
-rw-r--r--packages/frontend/src/scripts/get-note-menu.ts315
-rw-r--r--packages/frontend/src/scripts/get-user-menu.ts285
3 files changed, 345 insertions, 293 deletions
diff --git a/packages/frontend/src/scripts/get-drive-file-menu.ts b/packages/frontend/src/scripts/get-drive-file-menu.ts
index 108648d640..c8ab9238d3 100644
--- a/packages/frontend/src/scripts/get-drive-file-menu.ts
+++ b/packages/frontend/src/scripts/get-drive-file-menu.ts
@@ -9,7 +9,7 @@ import { i18n } from '@/i18n.js';
import { copyToClipboard } from '@/scripts/copy-to-clipboard.js';
import * as os from '@/os.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
-import { MenuItem } from '@/types/menu.js';
+import type { MenuItem } from '@/types/menu.js';
import { defaultStore } from '@/store.js';
function rename(file: Misskey.entities.DriveFile) {
@@ -87,8 +87,10 @@ async function deleteFile(file: Misskey.entities.DriveFile) {
export function getDriveFileMenu(file: Misskey.entities.DriveFile, folder?: Misskey.entities.DriveFolder | null): MenuItem[] {
const isImage = file.type.startsWith('image/');
- let menu;
- menu = [{
+
+ const menuItems: MenuItem[] = [];
+
+ menuItems.push({
type: 'link',
to: `/my/drive/file/${file.id}`,
text: i18n.ts._fileViewer.title,
@@ -109,14 +111,20 @@ export function getDriveFileMenu(file: Misskey.entities.DriveFile, folder?: Miss
text: i18n.ts.describeFile,
icon: 'ti ti-text-caption',
action: () => describe(file),
- }, ...isImage ? [{
- text: i18n.ts.cropImage,
- icon: 'ti ti-crop',
- action: () => os.cropImage(file, {
- aspectRatio: NaN,
- uploadFolder: folder ? folder.id : folder,
- }),
- }] : [], { type: 'divider' }, {
+ });
+
+ if (isImage) {
+ menuItems.push({
+ text: i18n.ts.cropImage,
+ icon: 'ti ti-crop',
+ action: () => os.cropImage(file, {
+ aspectRatio: NaN,
+ uploadFolder: folder ? folder.id : folder,
+ }),
+ });
+ }
+
+ menuItems.push({ type: 'divider' }, {
text: i18n.ts.createNoteFromTheFile,
icon: 'ti ti-pencil',
action: () => os.post({
@@ -138,17 +146,17 @@ export function getDriveFileMenu(file: Misskey.entities.DriveFile, folder?: Miss
icon: 'ti ti-trash',
danger: true,
action: () => deleteFile(file),
- }];
+ });
if (defaultStore.state.devMode) {
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-id',
text: i18n.ts.copyFileId,
action: () => {
copyToClipboard(file.id);
},
- }]);
+ });
}
- return menu;
+ return menuItems;
}
diff --git a/packages/frontend/src/scripts/get-note-menu.ts b/packages/frontend/src/scripts/get-note-menu.ts
index 49f3199887..4ffa0ab94d 100644
--- a/packages/frontend/src/scripts/get-note-menu.ts
+++ b/packages/frontend/src/scripts/get-note-menu.ts
@@ -17,7 +17,7 @@ import { defaultStore, noteActions } from '@/store.js';
import { miLocalStorage } from '@/local-storage.js';
import { getUserMenu } from '@/scripts/get-user-menu.js';
import { clipsCache, favoritedChannelsCache } from '@/cache.js';
-import { MenuItem } from '@/types/menu.js';
+import type { MenuItem } from '@/types/menu.js';
import MkRippleEffect from '@/components/MkRippleEffect.vue';
import { isSupportShare } from '@/scripts/navigator.js';
import { getAppearNote } from '@/scripts/get-appear-note.js';
@@ -99,11 +99,13 @@ export async function getNoteClipMenu(props: {
const { canceled, result } = await os.form(i18n.ts.createNewClip, {
name: {
type: 'string',
+ default: null,
label: i18n.ts.name,
},
description: {
type: 'string',
required: false,
+ default: null,
multiline: true,
label: i18n.ts.description,
},
@@ -264,7 +266,7 @@ export function getNoteMenu(props: {
title: i18n.ts.numberOfDays,
});
- if (canceled) return;
+ if (canceled || days == null) return;
os.apiWithDialog('admin/promo/create', {
noteId: appearNote.id,
@@ -295,161 +297,175 @@ export function getNoteMenu(props: {
props.translation.value = res;
}
- let menu: MenuItem[];
+ const menuItems: MenuItem[] = [];
+
if ($i) {
const statePromise = misskeyApi('notes/state', {
noteId: appearNote.id,
});
- menu = [
- ...(
- props.currentClip?.userId === $i.id ? [{
- icon: 'ti ti-backspace',
- text: i18n.ts.unclip,
- danger: true,
- action: unclip,
- }, { type: 'divider' }] : []
- ), {
- icon: 'ti ti-info-circle',
- text: i18n.ts.details,
- action: openDetail,
- }, {
- icon: 'ti ti-copy',
- text: i18n.ts.copyContent,
- action: copyContent,
- }, getCopyNoteLinkMenu(appearNote, i18n.ts.copyLink)
- , (appearNote.url || appearNote.uri) ? {
+ if (props.currentClip?.userId === $i.id) {
+ menuItems.push({
+ icon: 'ti ti-backspace',
+ text: i18n.ts.unclip,
+ danger: true,
+ action: unclip,
+ }, { type: 'divider' });
+ }
+
+ menuItems.push({
+ icon: 'ti ti-info-circle',
+ text: i18n.ts.details,
+ action: openDetail,
+ }, {
+ icon: 'ti ti-copy',
+ text: i18n.ts.copyContent,
+ action: copyContent,
+ }, getCopyNoteLinkMenu(appearNote, i18n.ts.copyLink));
+
+ if (appearNote.url || appearNote.uri) {
+ menuItems.push({
icon: 'ti ti-external-link',
text: i18n.ts.showOnRemote,
action: () => {
window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
},
- } : getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode),
- ...(isSupportShare() ? [{
+ });
+ } else {
+ menuItems.push(getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode));
+ }
+
+ if (isSupportShare()) {
+ menuItems.push({
icon: 'ti ti-share',
text: i18n.ts.share,
action: share,
- }] : []),
- $i && $i.policies.canUseTranslator && instance.translatorAvailable ? {
+ });
+ }
+
+ if ($i.policies.canUseTranslator && instance.translatorAvailable) {
+ menuItems.push({
icon: 'ti ti-language-hiragana',
text: i18n.ts.translate,
action: translate,
- } : undefined,
- { type: 'divider' },
- statePromise.then(state => state.isFavorited ? {
- icon: 'ti ti-star-off',
- text: i18n.ts.unfavorite,
- action: () => toggleFavorite(false),
- } : {
- icon: 'ti ti-star',
- text: i18n.ts.favorite,
- action: () => toggleFavorite(true),
- }),
- {
- type: 'parent' as const,
- icon: 'ti ti-paperclip',
- text: i18n.ts.clip,
- children: () => getNoteClipMenu(props),
+ });
+ }
+
+ menuItems.push({ type: 'divider' });
+
+ menuItems.push(statePromise.then(state => state.isFavorited ? {
+ icon: 'ti ti-star-off',
+ text: i18n.ts.unfavorite,
+ action: () => toggleFavorite(false),
+ } : {
+ icon: 'ti ti-star',
+ text: i18n.ts.favorite,
+ action: () => toggleFavorite(true),
+ }));
+
+ menuItems.push({
+ type: 'parent',
+ icon: 'ti ti-paperclip',
+ text: i18n.ts.clip,
+ children: () => getNoteClipMenu(props),
+ });
+
+ menuItems.push(statePromise.then(state => state.isMutedThread ? {
+ icon: 'ti ti-message-off',
+ text: i18n.ts.unmuteThread,
+ action: () => toggleThreadMute(false),
+ } : {
+ icon: 'ti ti-message-off',
+ text: i18n.ts.muteThread,
+ action: () => toggleThreadMute(true),
+ }));
+
+ if (appearNote.userId === $i.id) {
+ if (($i.pinnedNoteIds ?? []).includes(appearNote.id)) {
+ menuItems.push({
+ icon: 'ti ti-pinned-off',
+ text: i18n.ts.unpin,
+ action: () => togglePin(false),
+ });
+ } else {
+ menuItems.push({
+ icon: 'ti ti-pin',
+ text: i18n.ts.pin,
+ action: () => togglePin(true),
+ });
+ }
+ }
+
+ menuItems.push({
+ type: 'parent',
+ icon: 'ti ti-user',
+ text: i18n.ts.user,
+ children: async () => {
+ const user = appearNote.userId === $i?.id ? $i : await misskeyApi('users/show', { userId: appearNote.userId });
+ const { menu, cleanup } = getUserMenu(user);
+ cleanups.push(cleanup);
+ return menu;
},
- statePromise.then(state => state.isMutedThread ? {
- icon: 'ti ti-message-off',
- text: i18n.ts.unmuteThread,
- action: () => toggleThreadMute(false),
- } : {
- icon: 'ti ti-message-off',
- text: i18n.ts.muteThread,
- action: () => toggleThreadMute(true),
- }),
- appearNote.userId === $i.id ? ($i.pinnedNoteIds ?? []).includes(appearNote.id) ? {
- icon: 'ti ti-pinned-off',
- text: i18n.ts.unpin,
- action: () => togglePin(false),
- } : {
- icon: 'ti ti-pin',
- text: i18n.ts.pin,
- action: () => togglePin(true),
- } : undefined,
- {
- type: 'parent' as const,
- icon: 'ti ti-user',
- text: i18n.ts.user,
+ });
+
+ if (appearNote.userId !== $i.id) {
+ menuItems.push({ type: 'divider' });
+ menuItems.push(getAbuseNoteMenu(appearNote, i18n.ts.reportAbuse));
+ }
+
+ if (appearNote.channel && (appearNote.channel.userId === $i.id || $i.isModerator || $i.isAdmin)) {
+ menuItems.push({ type: 'divider' });
+ menuItems.push({
+ type: 'parent',
+ icon: 'ti ti-device-tv',
+ text: i18n.ts.channel,
children: async () => {
- const user = appearNote.userId === $i?.id ? $i : await misskeyApi('users/show', { userId: appearNote.userId });
- const { menu, cleanup } = getUserMenu(user);
- cleanups.push(cleanup);
- return menu;
- },
- },
- /*
- ...($i.isModerator || $i.isAdmin ? [
- { type: 'divider' },
- {
- icon: 'ti ti-speakerphone',
- text: i18n.ts.promote,
- action: promote
- }]
- : []
- ),*/
- ...(appearNote.userId !== $i.id ? [
- { type: 'divider' },
- appearNote.userId !== $i.id ? getAbuseNoteMenu(appearNote, i18n.ts.reportAbuse) : undefined,
- ]
- : []
- ),
- ...(appearNote.channel && (appearNote.channel.userId === $i.id || $i.isModerator || $i.isAdmin) ? [
- { type: 'divider' },
- {
- type: 'parent' as const,
- icon: 'ti ti-device-tv',
- text: i18n.ts.channel,
- children: async () => {
- const channelChildMenu = [] as MenuItem[];
+ const channelChildMenu = [] as MenuItem[];
- const channel = await misskeyApi('channels/show', { channelId: appearNote.channel!.id });
+ const channel = await misskeyApi('channels/show', { channelId: appearNote.channel!.id });
- if (channel.pinnedNoteIds.includes(appearNote.id)) {
- channelChildMenu.push({
- icon: 'ti ti-pinned-off',
- text: i18n.ts.unpin,
- action: () => os.apiWithDialog('channels/update', {
- channelId: appearNote.channel!.id,
- pinnedNoteIds: channel.pinnedNoteIds.filter(id => id !== appearNote.id),
- }),
- });
- } else {
- channelChildMenu.push({
- icon: 'ti ti-pin',
- text: i18n.ts.pin,
- action: () => os.apiWithDialog('channels/update', {
- channelId: appearNote.channel!.id,
- pinnedNoteIds: [...channel.pinnedNoteIds, appearNote.id],
- }),
- });
- }
- return channelChildMenu;
- },
+ if (channel.pinnedNoteIds.includes(appearNote.id)) {
+ channelChildMenu.push({
+ icon: 'ti ti-pinned-off',
+ text: i18n.ts.unpin,
+ action: () => os.apiWithDialog('channels/update', {
+ channelId: appearNote.channel!.id,
+ pinnedNoteIds: channel.pinnedNoteIds.filter(id => id !== appearNote.id),
+ }),
+ });
+ } else {
+ channelChildMenu.push({
+ icon: 'ti ti-pin',
+ text: i18n.ts.pin,
+ action: () => os.apiWithDialog('channels/update', {
+ channelId: appearNote.channel!.id,
+ pinnedNoteIds: [...channel.pinnedNoteIds, appearNote.id],
+ }),
+ });
+ }
+ return channelChildMenu;
},
- ]
- : []
- ),
- ...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [
- { type: 'divider' },
- appearNote.userId === $i.id ? {
+ });
+ }
+
+ if (appearNote.userId === $i.id || $i.isModerator || $i.isAdmin) {
+ menuItems.push({ type: 'divider' });
+ if (appearNote.userId === $i.id) {
+ menuItems.push({
icon: 'ti ti-edit',
text: i18n.ts.deleteAndEdit,
action: delEdit,
- } : undefined,
- {
- icon: 'ti ti-trash',
- text: i18n.ts.delete,
- danger: true,
- action: del,
- }]
- : []
- )]
- .filter(x => x !== undefined);
+ });
+ }
+ menuItems.push({
+ icon: 'ti ti-trash',
+ text: i18n.ts.delete,
+ danger: true,
+ action: del,
+ });
+ }
} else {
- menu = [{
+ menuItems.push({
icon: 'ti ti-info-circle',
text: i18n.ts.details,
action: openDetail,
@@ -457,35 +473,42 @@ export function getNoteMenu(props: {
icon: 'ti ti-copy',
text: i18n.ts.copyContent,
action: copyContent,
- }, getCopyNoteLinkMenu(appearNote, i18n.ts.copyLink),
- (appearNote.url || appearNote.uri) ? {
- icon: 'ti ti-external-link',
- text: i18n.ts.showOnRemote,
- action: () => {
- window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
- },
- } : getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode)]
- .filter(x => x !== undefined);
+ }, getCopyNoteLinkMenu(appearNote, i18n.ts.copyLink));
+
+ if (appearNote.url || appearNote.uri) {
+ menuItems.push({
+ icon: 'ti ti-external-link',
+ text: i18n.ts.showOnRemote,
+ action: () => {
+ window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
+ },
+ });
+ } else {
+ menuItems.push(getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode));
+ }
}
if (noteActions.length > 0) {
- menu = menu.concat([{ type: 'divider' }, ...noteActions.map(action => ({
+ menuItems.push({ type: 'divider' });
+
+ menuItems.push(...noteActions.map(action => ({
icon: 'ti ti-plug',
text: action.title,
action: () => {
action.handler(appearNote);
},
- }))]);
+ })));
}
if (defaultStore.state.devMode) {
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-id',
text: i18n.ts.copyNoteId,
action: () => {
copyToClipboard(appearNote.id);
+ os.success();
},
- }]);
+ });
}
const cleanup = () => {
@@ -496,7 +519,7 @@ export function getNoteMenu(props: {
};
return {
- menu,
+ menu: menuItems,
cleanup,
};
}
diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts
index 33316b4ab6..d15279d633 100644
--- a/packages/frontend/src/scripts/get-user-menu.ts
+++ b/packages/frontend/src/scripts/get-user-menu.ts
@@ -18,7 +18,7 @@ import { IRouter } from '@/nirax.js';
import { antennasCache, rolesCache, userListsCache } from '@/cache.js';
import { mainRouter } from '@/router/main.js';
import { genEmbedCode } from '@/scripts/get-embed-code.js';
-import { MenuItem } from '@/types/menu.js';
+import type { MenuItem } from '@/types/menu.js';
export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter = mainRouter) {
const meId = $i ? $i.id : null;
@@ -148,133 +148,154 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter
});
}
- let menu: MenuItem[] = [{
+ const menuItems: MenuItem[] = [];
+
+ menuItems.push({
icon: 'ti ti-at',
text: i18n.ts.copyUsername,
action: () => {
copyToClipboard(`@${user.username}@${user.host ?? host}`);
},
- }, ...( notesSearchAvailable && (user.host == null || canSearchNonLocalNotes) ? [{
- icon: 'ti ti-search',
- text: i18n.ts.searchThisUsersNotes,
- action: () => {
- router.push(`/search?username=${encodeURIComponent(user.username)}${user.host != null ? '&host=' + encodeURIComponent(user.host) : ''}`);
- },
- }] : [])
- , ...(iAmModerator ? [{
- icon: 'ti ti-user-exclamation',
- text: i18n.ts.moderation,
- action: () => {
- router.push(`/admin/user/${user.id}`);
- },
- }] : []), {
+ });
+
+ if (notesSearchAvailable && (user.host == null || canSearchNonLocalNotes)) {
+ menuItems.push({
+ icon: 'ti ti-search',
+ text: i18n.ts.searchThisUsersNotes,
+ action: () => {
+ router.push(`/search?username=${encodeURIComponent(user.username)}${user.host != null ? '&host=' + encodeURIComponent(user.host) : ''}`);
+ },
+ });
+ }
+
+ if (iAmModerator) {
+ menuItems.push({
+ icon: 'ti ti-user-exclamation',
+ text: i18n.ts.moderation,
+ action: () => {
+ router.push(`/admin/user/${user.id}`);
+ },
+ });
+ }
+
+ menuItems.push({
icon: 'ti ti-rss',
text: i18n.ts.copyRSS,
action: () => {
copyToClipboard(`${user.host ?? host}/@${user.username}.atom`);
},
- }, ...(user.host != null && user.url != null ? [{
- icon: 'ti ti-external-link',
- text: i18n.ts.showOnRemote,
- action: () => {
- if (user.url == null) return;
- window.open(user.url, '_blank', 'noopener');
- },
- }] : [{
- icon: 'ti ti-code',
- text: i18n.ts.genEmbedCode,
- type: 'parent' as const,
- children: [{
- text: i18n.ts.noteOfThisUser,
+ });
+
+ if (user.host != null && user.url != null) {
+ menuItems.push({
+ icon: 'ti ti-external-link',
+ text: i18n.ts.showOnRemote,
action: () => {
- genEmbedCode('user-timeline', user.id);
+ if (user.url == null) return;
+ window.open(user.url, '_blank', 'noopener');
},
- }], // TODO: ユーザーカードの埋め込みなど
- }]), {
+ });
+ } else {
+ menuItems.push({
+ icon: 'ti ti-code',
+ text: i18n.ts.genEmbedCode,
+ type: 'parent',
+ children: [{
+ text: i18n.ts.noteOfThisUser,
+ action: () => {
+ genEmbedCode('user-timeline', user.id);
+ },
+ }], // TODO: ユーザーカードの埋め込みなど
+ });
+ }
+
+ menuItems.push({
icon: 'ti ti-share',
text: i18n.ts.copyProfileUrl,
action: () => {
const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${toUnicode(user.host)}`;
copyToClipboard(`${url}/${canonical}`);
},
- }, ...($i ? [{
- icon: 'ti ti-mail',
- text: i18n.ts.sendMessage,
- action: () => {
- const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${user.host}`;
- os.post({ specified: user, initialText: `${canonical} ` });
- },
- }, { type: 'divider' }, {
- icon: 'ti ti-pencil',
- text: i18n.ts.editMemo,
- action: () => {
- editMemo();
- },
- }, {
- type: 'parent',
- icon: 'ti ti-list',
- text: i18n.ts.addToList,
- children: async () => {
- const lists = await userListsCache.fetch();
- return lists.map(list => {
- const isListed = ref(list.userIds.includes(user.id));
- cleanups.push(watch(isListed, () => {
- if (isListed.value) {
- os.apiWithDialog('users/lists/push', {
- listId: list.id,
- userId: user.id,
- }).then(() => {
- list.userIds.push(user.id);
- });
- } else {
- os.apiWithDialog('users/lists/pull', {
- listId: list.id,
- userId: user.id,
- }).then(() => {
- list.userIds.splice(list.userIds.indexOf(user.id), 1);
+ });
+
+ if ($i) {
+ menuItems.push({
+ icon: 'ti ti-mail',
+ text: i18n.ts.sendMessage,
+ action: () => {
+ const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${user.host}`;
+ os.post({ specified: user, initialText: `${canonical} ` });
+ },
+ }, { type: 'divider' }, {
+ icon: 'ti ti-pencil',
+ text: i18n.ts.editMemo,
+ action: editMemo,
+ }, {
+ type: 'parent',
+ icon: 'ti ti-list',
+ text: i18n.ts.addToList,
+ children: async () => {
+ const lists = await userListsCache.fetch();
+ return lists.map(list => {
+ const isListed = ref(list.userIds?.includes(user.id) ?? false);
+ cleanups.push(watch(isListed, () => {
+ if (isListed.value) {
+ os.apiWithDialog('users/lists/push', {
+ listId: list.id,
+ userId: user.id,
+ }).then(() => {
+ list.userIds?.push(user.id);
+ });
+ } else {
+ os.apiWithDialog('users/lists/pull', {
+ listId: list.id,
+ userId: user.id,
+ }).then(() => {
+ list.userIds?.splice(list.userIds?.indexOf(user.id), 1);
+ });
+ }
+ }));
+
+ return {
+ type: 'switch',
+ text: list.name,
+ ref: isListed,
+ };
+ });
+ },
+ }, {
+ type: 'parent',
+ icon: 'ti ti-antenna',
+ text: i18n.ts.addToAntenna,
+ children: async () => {
+ const antennas = await antennasCache.fetch();
+ const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${toUnicode(user.host)}`;
+ return antennas.filter((a) => a.src === 'users').map(antenna => ({
+ text: antenna.name,
+ action: async () => {
+ await os.apiWithDialog('antennas/update', {
+ antennaId: antenna.id,
+ name: antenna.name,
+ keywords: antenna.keywords,
+ excludeKeywords: antenna.excludeKeywords,
+ src: antenna.src,
+ userListId: antenna.userListId,
+ users: [...antenna.users, canonical],
+ caseSensitive: antenna.caseSensitive,
+ withReplies: antenna.withReplies,
+ withFile: antenna.withFile,
+ notify: antenna.notify,
});
- }
+ antennasCache.delete();
+ },
}));
-
- return {
- type: 'switch',
- text: list.name,
- ref: isListed,
- };
- });
- },
- }, {
- type: 'parent',
- icon: 'ti ti-antenna',
- text: i18n.ts.addToAntenna,
- children: async () => {
- const antennas = await antennasCache.fetch();
- const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${toUnicode(user.host)}`;
- return antennas.filter((a) => a.src === 'users').map(antenna => ({
- text: antenna.name,
- action: async () => {
- await os.apiWithDialog('antennas/update', {
- antennaId: antenna.id,
- name: antenna.name,
- keywords: antenna.keywords,
- excludeKeywords: antenna.excludeKeywords,
- src: antenna.src,
- userListId: antenna.userListId,
- users: [...antenna.users, canonical],
- caseSensitive: antenna.caseSensitive,
- withReplies: antenna.withReplies,
- withFile: antenna.withFile,
- notify: antenna.notify,
- });
- antennasCache.delete();
- },
- }));
- },
- }] : [])] as any;
+ },
+ });
+ }
if ($i && meId !== user.id) {
if (iAmModerator) {
- menu = menu.concat([{
+ menuItems.push({
type: 'parent',
icon: 'ti ti-badges',
text: i18n.ts.roles,
@@ -312,13 +333,14 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter
},
}));
},
- }]);
+ });
}
// フォローしたとしても user.isFollowing はリアルタイム更新されないので不便なため
//if (user.isFollowing) {
- const withRepliesRef = ref(user.withReplies);
- menu = menu.concat([{
+ const withRepliesRef = ref(user.withReplies ?? false);
+
+ menuItems.push({
type: 'switch',
icon: 'ti ti-messages',
text: i18n.ts.showRepliesToOthersInTimeline,
@@ -327,7 +349,8 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter
icon: user.notify === 'none' ? 'ti ti-bell' : 'ti ti-bell-off',
text: user.notify === 'none' ? i18n.ts.notifyNotes : i18n.ts.unnotifyNotes,
action: toggleNotify,
- }]);
+ });
+
watch(withRepliesRef, (withReplies) => {
misskeyApi('following/update', {
userId: user.id,
@@ -338,7 +361,7 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter
});
//}
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: user.isMuted ? 'ti ti-eye' : 'ti ti-eye-off',
text: user.isMuted ? i18n.ts.unmute : i18n.ts.mute,
action: toggleMute,
@@ -350,70 +373,68 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: IRouter
icon: 'ti ti-ban',
text: user.isBlocking ? i18n.ts.unblock : i18n.ts.block,
action: toggleBlock,
- }]);
+ });
if (user.isFollowed) {
- menu = menu.concat([{
+ menuItems.push({
icon: 'ti ti-link-off',
text: i18n.ts.breakFollow,
action: invalidateFollow,
- }]);
+ });
}
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-exclamation-circle',
text: i18n.ts.reportAbuse,
action: reportAbuse,
- }]);
+ });
}
if (user.host !== null) {
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-refresh',
text: i18n.ts.updateRemoteUser,
action: userInfoUpdate,
- }]);
+ });
}
if (defaultStore.state.devMode) {
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-id',
text: i18n.ts.copyUserId,
action: () => {
copyToClipboard(user.id);
},
- }]);
+ });
}
if ($i && meId === user.id) {
- menu = menu.concat([{ type: 'divider' }, {
+ menuItems.push({ type: 'divider' }, {
icon: 'ti ti-pencil',
text: i18n.ts.editProfile,
action: () => {
router.push('/settings/profile');
},
- }]);
+ });
}
if (userActions.length > 0) {
- menu = menu.concat([{ type: 'divider' }, ...userActions.map(action => ({
+ menuItems.push({ type: 'divider' }, ...userActions.map(action => ({
icon: 'ti ti-plug',
text: action.title,
action: () => {
action.handler(user);
},
- }))]);
+ })));
}
- const cleanup = () => {
- if (_DEV_) console.log('user menu cleanup', cleanups);
- for (const cl of cleanups) {
- cl();
- }
- };
-
return {
- menu,
- cleanup,
+ menu: menuItems,
+ cleanup: () => {
+ if (_DEV_) console.log('user menu cleanup', cleanups);
+ for (const cl of cleanups) {
+ cl();
+ }
+ },
};
}