enhance(frontend): 共有と埋込みコード生成を親子メニューにまとめる

This commit is contained in:
kakkokari-gtyih 2024-10-05 00:56:51 +09:00
parent fa06c59eae
commit 0ede362af1
2 changed files with 45 additions and 30 deletions

View File

@ -6,5 +6,5 @@
import * as Misskey from 'misskey-js';
export function getAppearNote(note: Misskey.entities.Note) {
return Misskey.note.isPureRenote(note) ? note.renote : note;
return Misskey.note.isPureRenote(note) ? note.renote! : note;
}

View File

@ -159,17 +159,48 @@ export function getCopyNoteLinkMenu(note: Misskey.entities.Note, text: string):
};
}
function getNoteEmbedCodeMenu(note: Misskey.entities.Note, text: string): MenuItem | undefined {
if (note.url != null || note.uri != null) return undefined;
if (['specified', 'followers'].includes(note.visibility)) return undefined;
function getNoteShareMenu(note: Misskey.entities.Note, inChild: boolean): MenuItem[] {
const children: MenuItem[] = [];
const appearNote = getAppearNote(note);
if (
note.url == null && note.uri == null &&
!['specified', 'followers'].includes(note.visibility)
) {
children.push({
icon: 'ti ti-code',
text: i18n.ts.genEmbedCode,
action: (): void => {
genEmbedCode('notes', note.id);
},
});
}
if (isSupportShare()) {
children.push({
icon: 'ti ti-share',
text: i18n.ts.share,
action: () => {
navigator.share({
title: i18n.tsx.noteOf({ user: appearNote.user.name ?? appearNote.user.username }),
text: appearNote.text ?? '',
url: `${url}/notes/${appearNote.id}`,
});
},
});
}
if (inChild) {
return [{
type: 'parent',
icon: 'ti ti-share',
text: i18n.ts.share,
children,
}];
} else {
return children;
}
return {
icon: 'ti ti-code',
text,
action: (): void => {
genEmbedCode('notes', note.id);
},
};
}
export function getNoteMenu(props: {
@ -274,14 +305,6 @@ export function getNoteMenu(props: {
});
}
function share(): void {
navigator.share({
title: i18n.tsx.noteOf({ user: appearNote.user.name ?? appearNote.user.username }),
text: appearNote.text ?? '',
url: `${url}/notes/${appearNote.id}`,
});
}
function openDetail(): void {
os.pageWindow(`/notes/${appearNote.id}`);
}
@ -331,17 +354,9 @@ export function getNoteMenu(props: {
window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
},
});
} else {
menuItems.push(getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode));
}
if (isSupportShare()) {
menuItems.push({
icon: 'ti ti-share',
text: i18n.ts.share,
action: share,
});
}
menuItems.push(...getNoteShareMenu(appearNote, true));
if ($i.policies.canUseTranslator && instance.translatorAvailable) {
menuItems.push({
@ -483,9 +498,9 @@ export function getNoteMenu(props: {
window.open(appearNote.url ?? appearNote.uri, '_blank', 'noopener');
},
});
} else {
menuItems.push(getNoteEmbedCodeMenu(appearNote, i18n.ts.genEmbedCode));
}
menuItems.push(...getNoteShareMenu(appearNote, false));
}
if (noteActions.length > 0) {