summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2026-01-02 21:38:53 +0900
committerGitHub <noreply@github.com>2026-01-02 21:38:53 +0900
commita1ba403f9ae4b08107a10203997f7a790370e2a0 (patch)
treefcc99d8db0400ed7cd9b2cbaf72e7510c3a3d10d
parentrefactor(frontend): prefer.model, store.modelではcustomRefを使用する... (diff)
downloadmisskey-a1ba403f9ae4b08107a10203997f7a790370e2a0.tar.gz
misskey-a1ba403f9ae4b08107a10203997f7a790370e2a0.tar.bz2
misskey-a1ba403f9ae4b08107a10203997f7a790370e2a0.zip
fix(frontend): ログインダイアログが表示されたあとの処理がおかしくなる問題を修正 (#17038)
* fix(frontend): ログインダイアログが表示されたあとの処理がおかしくなる問題を修正 * Update Changelog
-rw-r--r--CHANGELOG.md1
-rw-r--r--packages/frontend/src/components/MkFollowButton.vue8
-rw-r--r--packages/frontend/src/components/MkNote.vue30
-rw-r--r--packages/frontend/src/components/MkNoteDetailed.vue25
-rw-r--r--packages/frontend/src/components/MkPoll.vue3
-rw-r--r--packages/frontend/src/os.ts5
-rw-r--r--packages/frontend/src/pages/flash/flash.vue10
-rw-r--r--packages/frontend/src/pages/reversi/index.vue8
-rw-r--r--packages/frontend/src/utility/please-login.ts6
9 files changed, 64 insertions, 32 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88f3981473..e22dfba72a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@
- Enhance: ウィジェットの表示設定をプレビューを見ながら行えるように
- Enhance: ウィジェットの設定項目のラベルの多言語対応
- Fix: ドライブクリーナーでファイルを削除しても画面に反映されない問題を修正 #16061
+- Fix: 非ログイン時にログインを求めるダイアログが表示された後にダイアログのぼかしが解除されず操作不能になることがある問題を修正
- Fix: ドライブのソートが「登録日(昇順)」の場合に正しく動作しない問題を修正
### Server
diff --git a/packages/frontend/src/components/MkFollowButton.vue b/packages/frontend/src/components/MkFollowButton.vue
index ba21fe82e4..72a24411c1 100644
--- a/packages/frontend/src/components/MkFollowButton.vue
+++ b/packages/frontend/src/components/MkFollowButton.vue
@@ -81,7 +81,13 @@ function onFollowChange(user: Misskey.entities.UserDetailed) {
}
async function onClick() {
- pleaseLogin({ openOnRemote: { type: 'web', path: `/@${props.user.username}@${props.user.host ?? host}` } });
+ const isLoggedIn = await pleaseLogin({
+ openOnRemote: {
+ type: 'web',
+ path: `/@${props.user.username}@${props.user.host ?? host}`,
+ },
+ });
+ if (!isLoggedIn) return;
wait.value = true;
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index a7299d2961..56def64d3d 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -468,8 +468,12 @@ if (!props.mock) {
}
}
-function renote() {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+async function renote() {
+ if (props.mock) return;
+
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
showMovedDialog();
const { menu } = getRenoteMenu({ note: note, renoteButton, mock: props.mock });
@@ -478,11 +482,12 @@ function renote() {
subscribeManuallyToNoteCapture();
}
-function reply(): void {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
- if (props.mock) {
- return;
- }
+async function reply() {
+ if (props.mock) return;
+
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
os.post({
reply: appearNote,
channel: appearNote.channel,
@@ -491,8 +496,10 @@ function reply(): void {
});
}
-function react(): void {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+async function react() {
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
showMovedDialog();
if (appearNote.reactionAcceptance === 'likeOnly') {
sound.playMisskeySfx('reaction');
@@ -621,10 +628,12 @@ async function clip(): Promise<void> {
os.popupMenu(await getNoteClipMenu({ note: note, currentClip: currentClip?.value }), clipButton.value).then(focus);
}
-function showRenoteMenu(): void {
+async function showRenoteMenu() {
if (props.mock) {
return;
}
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
function getUnrenote(): MenuItem {
return {
@@ -649,7 +658,6 @@ function showRenoteMenu(): void {
};
if (isMyRenote) {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
os.popupMenu([
renoteDetailsMenu,
getCopyNoteLinkMenu(note, i18n.ts.copyLinkRenote),
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index 47bf365877..febf909f42 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -448,8 +448,10 @@ if (appearNote.reactionAcceptance === 'likeOnly') {
});
}
-function renote() {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+async function renote() {
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
showMovedDialog();
const { menu } = getRenoteMenu({ note: note, renoteButton });
@@ -459,8 +461,10 @@ function renote() {
subscribeManuallyToNoteCapture();
}
-function reply(): void {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+async function reply() {
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
showMovedDialog();
os.post({
reply: appearNote,
@@ -470,8 +474,10 @@ function reply(): void {
});
}
-function react(): void {
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+async function react() {
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
showMovedDialog();
if (appearNote.reactionAcceptance === 'likeOnly') {
sound.playMisskeySfx('reaction');
@@ -569,9 +575,12 @@ async function clip(): Promise<void> {
os.popupMenu(await getNoteClipMenu({ note: note }), clipButton.value).then(focus);
}
-function showRenoteMenu(): void {
+async function showRenoteMenu() {
if (!isMyRenote) return;
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
+
os.popupMenu([{
text: i18n.ts.unrenote,
icon: 'ti ti-trash',
diff --git a/packages/frontend/src/components/MkPoll.vue b/packages/frontend/src/components/MkPoll.vue
index 305e9b5c4f..31567d2b84 100644
--- a/packages/frontend/src/components/MkPoll.vue
+++ b/packages/frontend/src/components/MkPoll.vue
@@ -90,7 +90,8 @@ const pleaseLoginContext = computed<OpenOnRemoteOptions>(() => ({
const vote = async (id: number) => {
if (props.readOnly || closed.value || isVoted.value) return;
- pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ const isLoggedIn = await pleaseLogin({ openOnRemote: pleaseLoginContext.value });
+ if (!isLoggedIn) return;
const { canceled } = await os.confirm({
type: 'question',
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index aafa1c4b21..59ed3dc948 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -709,8 +709,8 @@ export function contextMenu(items: MenuItem[], ev: MouseEvent): Promise<void> {
}));
}
-export function post(props: PostFormProps = {}): Promise<void> {
- pleaseLogin({
+export async function post(props: PostFormProps = {}): Promise<void> {
+ const isLoggedIn = await pleaseLogin({
openOnRemote: (props.initialText || props.initialNote ? {
type: 'share',
params: {
@@ -720,6 +720,7 @@ export function post(props: PostFormProps = {}): Promise<void> {
},
} : undefined),
});
+ if (!isLoggedIn) return;
showMovedDialog();
return new Promise(resolve => {
diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue
index efc9ee014f..f5e51dc72f 100644
--- a/packages/frontend/src/pages/flash/flash.vue
+++ b/packages/frontend/src/pages/flash/flash.vue
@@ -151,9 +151,11 @@ function shareWithNote() {
});
}
-function like() {
+async function like() {
if (!flash.value) return;
- pleaseLogin();
+
+ const isLoggedIn = await pleaseLogin();
+ if (!isLoggedIn) return;
os.apiWithDialog('flash/like', {
flashId: flash.value.id,
@@ -165,7 +167,9 @@ function like() {
async function unlike() {
if (!flash.value) return;
- pleaseLogin();
+
+ const isLoggedIn = await pleaseLogin();
+ if (!isLoggedIn) return;
const confirm = await os.confirm({
type: 'warning',
diff --git a/packages/frontend/src/pages/reversi/index.vue b/packages/frontend/src/pages/reversi/index.vue
index 0ae374649d..8438943126 100644
--- a/packages/frontend/src/pages/reversi/index.vue
+++ b/packages/frontend/src/pages/reversi/index.vue
@@ -197,7 +197,8 @@ async function matchHeatbeat() {
}
async function matchUser() {
- pleaseLogin();
+ const isLoggedIn = await pleaseLogin();
+ if (!isLoggedIn) return;
const user = await os.selectUser({ includeSelf: false, localOnly: true });
if (user == null) return;
@@ -207,8 +208,9 @@ async function matchUser() {
matchHeatbeat();
}
-function matchAny(ev: MouseEvent) {
- pleaseLogin();
+async function matchAny(ev: MouseEvent) {
+ const isLoggedIn = await pleaseLogin();
+ if (!isLoggedIn) return;
os.popupMenu([{
text: i18n.ts._reversi.allowIrregularRules,
diff --git a/packages/frontend/src/utility/please-login.ts b/packages/frontend/src/utility/please-login.ts
index 737e7d7c6e..8120a8d1af 100644
--- a/packages/frontend/src/utility/please-login.ts
+++ b/packages/frontend/src/utility/please-login.ts
@@ -48,8 +48,8 @@ export async function pleaseLogin(opts: {
path?: string;
message?: string;
openOnRemote?: OpenOnRemoteOptions;
-} = {}) {
- if ($i) return;
+} = {}): Promise<boolean> {
+ if ($i != null) return true;
let _openOnRemote: OpenOnRemoteOptions | undefined = undefined;
@@ -71,5 +71,5 @@ export async function pleaseLogin(opts: {
closed: () => dispose(),
});
- throw new Error('signin required');
+ return false;
}