client: refactor getNoteMenu
Instead of re-determining `appearNote` inside `getNoteMenu`, it makes sense to pass in the value since it has already been computed anyway.
This commit is contained in:
parent
0dfd5d8bc0
commit
81cf69c9bf
3 changed files with 61 additions and 52 deletions
|
@ -245,12 +245,12 @@ function onContextmenu(ev: MouseEvent): void {
|
|||
ev.preventDefault();
|
||||
react();
|
||||
} else {
|
||||
os.contextMenu(getNoteMenu({ note, translating, translation, menuButton, isDeleted }), ev).then(focus);
|
||||
os.contextMenu(getNoteMenu({ note: appearNote, translating, translation, menuButton, isDeleted }), ev).then(focus);
|
||||
}
|
||||
}
|
||||
|
||||
function menu(viaKeyboard = false): void {
|
||||
os.popupMenu(getNoteMenu({ note, translating, translation, menuButton, isDeleted }), menuButton.value, {
|
||||
os.popupMenu(getNoteMenu({ note: appearNote, translating, translation, menuButton, isDeleted }), menuButton.value, {
|
||||
viaKeyboard,
|
||||
}).then(focus);
|
||||
}
|
||||
|
|
|
@ -233,12 +233,12 @@ function onContextmenu(ev: MouseEvent): void {
|
|||
ev.preventDefault();
|
||||
react();
|
||||
} else {
|
||||
os.contextMenu(getNoteMenu({ note, translating, translation, menuButton, isDeleted, currentClipPage }), ev).then(focus);
|
||||
os.contextMenu(getNoteMenu({ note: appearNote, translating, translation, menuButton, isDeleted, currentClipPage }), ev).then(focus);
|
||||
}
|
||||
}
|
||||
|
||||
function menu(viaKeyboard = false): void {
|
||||
os.popupMenu(getNoteMenu({ note, translating, translation, menuButton, isDeleted, currentClipPage }), menuButton.value, {
|
||||
os.popupMenu(getNoteMenu({ note: appearNote, translating, translation, menuButton, isDeleted, currentClipPage }), menuButton.value, {
|
||||
viaKeyboard,
|
||||
}).then(focus);
|
||||
}
|
||||
|
|
|
@ -16,9 +16,7 @@ export function getNoteMenu(props: {
|
|||
isDeleted: Ref<boolean>;
|
||||
currentClipPage?: Ref<foundkey.entities.Clip>;
|
||||
}) {
|
||||
const appearNote = foundkey.entities.isPureRenote(props.note)
|
||||
? props.note.renote as foundkey.entities.Note
|
||||
: props.note;
|
||||
const isPureRenote = foundkey.entities.isPureRenote(props.note);
|
||||
|
||||
function del(): void {
|
||||
os.confirm({
|
||||
|
@ -28,7 +26,7 @@ export function getNoteMenu(props: {
|
|||
if (canceled) return;
|
||||
|
||||
os.api('notes/delete', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -41,16 +39,21 @@ export function getNoteMenu(props: {
|
|||
if (canceled) return;
|
||||
|
||||
os.api('notes/delete', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
});
|
||||
|
||||
os.post({ initialNote: appearNote, renote: appearNote.renote, reply: appearNote.reply, channel: appearNote.channel });
|
||||
os.post({
|
||||
initialNote: props.note,
|
||||
renote: props.note.renote,
|
||||
reply: props.note.reply,
|
||||
channel: props.note.channel,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function toggleWatch(watch: boolean): void {
|
||||
os.apiWithDialog(watch ? 'notes/watching/create' : 'notes/watching/delete', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -71,7 +74,7 @@ export function getNoteMenu(props: {
|
|||
}
|
||||
|
||||
await os.apiWithDialog('notes/thread-muting/create', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
mutingNotificationTypes,
|
||||
});
|
||||
},
|
||||
|
@ -80,23 +83,23 @@ export function getNoteMenu(props: {
|
|||
|
||||
function unmuteThread(): void {
|
||||
os.apiWithDialog('notes/thread-muting/delete', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
});
|
||||
}
|
||||
|
||||
function copyContent(): void {
|
||||
copyToClipboard(appearNote.text);
|
||||
copyToClipboard(props.note.text);
|
||||
os.success();
|
||||
}
|
||||
|
||||
function copyLink(): void {
|
||||
copyToClipboard(`${url}/notes/${appearNote.id}`);
|
||||
copyToClipboard(`${url}/notes/${props.note.id}`);
|
||||
os.success();
|
||||
}
|
||||
|
||||
function togglePin(pin: boolean): void {
|
||||
os.apiWithDialog(pin ? 'i/pin' : 'i/unpin', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
}, undefined, null, res => {
|
||||
if (res.code === 'PIN_LIMIT_EXCEEDED') {
|
||||
os.alert({
|
||||
|
@ -134,13 +137,13 @@ export function getNoteMenu(props: {
|
|||
|
||||
const clip = await os.apiWithDialog('clips/create', result);
|
||||
|
||||
os.apiWithDialog('clips/add-note', { clipId: clip.id, noteId: appearNote.id });
|
||||
os.apiWithDialog('clips/add-note', { clipId: clip.id, noteId: props.note.id });
|
||||
},
|
||||
}, null, ...clips.map(clip => ({
|
||||
text: clip.name,
|
||||
action: () => {
|
||||
os.promiseDialog(
|
||||
os.api('clips/add-note', { clipId: clip.id, noteId: appearNote.id }),
|
||||
os.api('clips/add-note', { clipId: clip.id, noteId: props.note.id }),
|
||||
null,
|
||||
async (err) => {
|
||||
if (err.id === 'ALREADY_CLIPPED') {
|
||||
|
@ -149,7 +152,7 @@ export function getNoteMenu(props: {
|
|||
text: i18n.t('confirmToUnclipAlreadyClippedNote', { name: clip.name }),
|
||||
});
|
||||
if (!confirm.canceled) {
|
||||
os.apiWithDialog('clips/remove-note', { clipId: clip.id, noteId: appearNote.id });
|
||||
os.apiWithDialog('clips/remove-note', { clipId: clip.id, noteId: props.note.id });
|
||||
if (props.currentClipPage?.value.id === clip.id) props.isDeleted.value = true;
|
||||
}
|
||||
} else {
|
||||
|
@ -166,15 +169,15 @@ export function getNoteMenu(props: {
|
|||
}
|
||||
|
||||
async function unclip(): Promise<void> {
|
||||
os.apiWithDialog('clips/remove-note', { clipId: props.currentClipPage.value.id, noteId: appearNote.id });
|
||||
os.apiWithDialog('clips/remove-note', { clipId: props.currentClipPage.value.id, noteId: props.note.id });
|
||||
props.isDeleted.value = true;
|
||||
}
|
||||
|
||||
function share(): void {
|
||||
navigator.share({
|
||||
title: i18n.t('noteOf', { user: appearNote.user.name || appearNote.user.username }),
|
||||
text: appearNote.text,
|
||||
url: `${url}/notes/${appearNote.id}`,
|
||||
title: i18n.t('noteOf', { user: props.note.user.name || props.note.user.username }),
|
||||
text: props.note.text,
|
||||
url: `${url}/notes/${props.note.id}`,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -190,7 +193,7 @@ export function getNoteMenu(props: {
|
|||
}
|
||||
|
||||
const res = await os.api('notes/translate', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
targetLang,
|
||||
});
|
||||
props.translating.value = false;
|
||||
|
@ -200,7 +203,7 @@ export function getNoteMenu(props: {
|
|||
let menu;
|
||||
if ($i) {
|
||||
const statePromise = os.api('notes/state', {
|
||||
noteId: appearNote.id,
|
||||
noteId: props.note.id,
|
||||
});
|
||||
|
||||
menu = [
|
||||
|
@ -212,19 +215,21 @@ export function getNoteMenu(props: {
|
|||
action: unclip,
|
||||
}, null] : []
|
||||
),
|
||||
{
|
||||
!isPureRenote ? {
|
||||
icon: 'fas fa-copy',
|
||||
text: i18n.ts.copyContent,
|
||||
action: copyContent,
|
||||
}, {
|
||||
} : undefined,
|
||||
{
|
||||
icon: 'fas fa-link',
|
||||
text: i18n.ts.copyLink,
|
||||
action: copyLink,
|
||||
}, (appearNote.url || appearNote.uri) ? {
|
||||
},
|
||||
(props.note.url || props.note.uri) ? {
|
||||
icon: 'fas fa-external-link-square-alt',
|
||||
text: i18n.ts.showOnRemote,
|
||||
action: () => {
|
||||
window.open(appearNote.url || appearNote.uri, '_blank');
|
||||
window.open(props.note.url || props.note.uri, '_blank');
|
||||
},
|
||||
} : undefined,
|
||||
{
|
||||
|
@ -232,7 +237,7 @@ export function getNoteMenu(props: {
|
|||
text: i18n.ts.share,
|
||||
action: share,
|
||||
},
|
||||
instance.translatorAvailable ? {
|
||||
(!isPureRenote && instance.translatorAvailable) ? {
|
||||
icon: 'fas fa-language',
|
||||
text: i18n.ts.translate,
|
||||
action: translate,
|
||||
|
@ -243,7 +248,7 @@ export function getNoteMenu(props: {
|
|||
text: i18n.ts.clip,
|
||||
action: () => clip(),
|
||||
},
|
||||
(appearNote.userId !== $i.id) ? statePromise.then(state => state.isWatching ? {
|
||||
(props.note.userId !== $i.id) ? statePromise.then(state => state.isWatching ? {
|
||||
icon: 'fas fa-eye-slash',
|
||||
text: i18n.ts.unwatch,
|
||||
action: () => toggleWatch(false),
|
||||
|
@ -261,7 +266,7 @@ export function getNoteMenu(props: {
|
|||
text: i18n.ts.muteThread,
|
||||
action: () => muteThread(),
|
||||
}),
|
||||
appearNote.userId === $i.id ? ($i.pinnedNoteIds || []).includes(appearNote.id) ? {
|
||||
props.note.userId === $i.id ? ($i.pinnedNoteIds || []).includes(props.note.id) ? {
|
||||
icon: 'fas fa-thumbtack',
|
||||
text: i18n.ts.unpin,
|
||||
action: () => togglePin(false),
|
||||
|
@ -270,24 +275,24 @@ export function getNoteMenu(props: {
|
|||
text: i18n.ts.pin,
|
||||
action: () => togglePin(true),
|
||||
} : undefined,
|
||||
...(appearNote.userId !== $i.id ? [
|
||||
...(props.note.userId !== $i.id && !isPureRenote ? [
|
||||
null,
|
||||
{
|
||||
icon: 'fas fa-exclamation-circle',
|
||||
text: i18n.ts.reportAbuse,
|
||||
action: () => {
|
||||
const u = appearNote.url || appearNote.uri || `${url}/notes/${appearNote.id}`;
|
||||
const u = props.note.url || props.note.uri || `${url}/notes/${props.note.id}`;
|
||||
os.popup(defineAsyncComponent(() => import('@/components/abuse-report-window.vue')), {
|
||||
user: appearNote.user,
|
||||
user: props.note.user,
|
||||
urls: [u],
|
||||
}, {}, 'closed');
|
||||
},
|
||||
}]
|
||||
: []
|
||||
),
|
||||
...(appearNote.userId === $i.id || $i.isModerator || $i.isAdmin ? [
|
||||
...(props.note.userId === $i.id || $i.isModerator || $i.isAdmin ? [
|
||||
null,
|
||||
appearNote.userId === $i.id ? {
|
||||
(!isPureRenote && props.note.userId === $i.id) ? {
|
||||
icon: 'fas fa-edit',
|
||||
text: i18n.ts.deleteAndEdit,
|
||||
action: delEdit,
|
||||
|
@ -302,21 +307,25 @@ export function getNoteMenu(props: {
|
|||
)]
|
||||
.filter(x => x !== undefined);
|
||||
} else {
|
||||
menu = [{
|
||||
icon: 'fas fa-copy',
|
||||
text: i18n.ts.copyContent,
|
||||
action: copyContent,
|
||||
}, {
|
||||
icon: 'fas fa-link',
|
||||
text: i18n.ts.copyLink,
|
||||
action: copyLink,
|
||||
}, (appearNote.url || appearNote.uri) ? {
|
||||
icon: 'fas fa-external-link-square-alt',
|
||||
text: i18n.ts.showOnRemote,
|
||||
action: () => {
|
||||
window.open(appearNote.url || appearNote.uri, '_blank');
|
||||
menu = [
|
||||
!isPureRenote ? {
|
||||
icon: 'fas fa-copy',
|
||||
text: i18n.ts.copyContent,
|
||||
action: copyContent,
|
||||
} : undefined,
|
||||
{
|
||||
icon: 'fas fa-link',
|
||||
text: i18n.ts.copyLink,
|
||||
action: copyLink,
|
||||
},
|
||||
} : undefined]
|
||||
(props.note.url || props.note.uri) ? {
|
||||
icon: 'fas fa-external-link-square-alt',
|
||||
text: i18n.ts.showOnRemote,
|
||||
action: () => {
|
||||
window.open(props.note.url || props.note.uri, '_blank');
|
||||
},
|
||||
} : undefined
|
||||
]
|
||||
.filter(x => x !== undefined);
|
||||
}
|
||||
|
||||
|
@ -325,7 +334,7 @@ export function getNoteMenu(props: {
|
|||
icon: 'fas fa-plug',
|
||||
text: action.title,
|
||||
action: () => {
|
||||
action.handler(appearNote);
|
||||
action.handler(props.note);
|
||||
},
|
||||
}))]);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue