@@ -33,7 +33,7 @@ defineProps<{
reaction: string;
users: Misskey.entities.UserLite[];
count: number;
- targetElement: HTMLElement;
+ anchorElement: HTMLElement;
}>();
const emit = defineEmits<{
diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
index 7d76dffa5a..d96f0e2420 100644
--- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue
@@ -38,6 +38,7 @@ import { prefer } from '@/preferences.js';
import { DI } from '@/di.js';
import { noteEvents } from '@/composables/use-note-capture.js';
import { mute as muteEmoji, unmute as unmuteEmoji, checkMuted as isEmojiMuted } from '@/utility/emoji-mute.js';
+import { haptic } from '@/utility/haptic.js';
const props = defineProps<{
noteId: Misskey.entities.Note['id'];
@@ -57,18 +58,22 @@ const emit = defineEmits<{
const buttonEl = useTemplateRef('buttonEl');
const emojiName = computed(() => props.reaction.replace(/:/g, '').replace(/@\./, ''));
-const emoji = computed(() => customEmojisMap.get(emojiName.value) ?? getUnicodeEmoji(props.reaction));
const canToggle = computed(() => {
+ const emoji = customEmojisMap.get(emojiName.value) ?? getUnicodeEmoji(props.reaction);
+
// TODO
- //return !props.reaction.match(/@\w/) && $i && emoji.value && checkReactionPermissions($i, props.note, emoji.value);
- return !props.reaction.match(/@\w/) && $i && emoji.value;
+ //return !props.reaction.match(/@\w/) && $i && emoji && checkReactionPermissions($i, props.note, emoji);
+ return !props.reaction.match(/@\w/) && $i && emoji;
});
const canGetInfo = computed(() => !props.reaction.match(/@\w/) && props.reaction.includes(':'));
const isLocalCustomEmoji = props.reaction[0] === ':' && props.reaction.includes('@.');
async function toggleReaction() {
if (!canToggle.value) return;
+ if ($i == null) return;
+
+ const me = $i;
const oldReaction = props.myReaction;
if (oldReaction) {
@@ -80,6 +85,7 @@ async function toggleReaction() {
if (oldReaction !== props.reaction) {
sound.playMisskeySfx('reaction');
+ haptic();
}
if (mock) {
@@ -91,7 +97,7 @@ async function toggleReaction() {
noteId: props.noteId,
}).then(() => {
noteEvents.emit(`unreacted:${props.noteId}`, {
- userId: $i!.id,
+ userId: me.id,
reaction: oldReaction,
});
if (oldReaction !== props.reaction) {
@@ -99,10 +105,12 @@ async function toggleReaction() {
noteId: props.noteId,
reaction: props.reaction,
}).then(() => {
+ const emoji = customEmojisMap.get(emojiName.value);
+ if (emoji == null) return;
noteEvents.emit(`reacted:${props.noteId}`, {
- userId: $i!.id,
+ userId: me.id,
reaction: props.reaction,
- emoji: emoji.value,
+ emoji: emoji,
});
});
}
@@ -118,6 +126,7 @@ async function toggleReaction() {
}
sound.playMisskeySfx('reaction');
+ haptic();
if (mock) {
emit('reactionToggled', props.reaction, (props.count + 1));
@@ -128,10 +137,13 @@ async function toggleReaction() {
noteId: props.noteId,
reaction: props.reaction,
}).then(() => {
+ const emoji = customEmojisMap.get(emojiName.value);
+ if (emoji == null) return;
+
noteEvents.emit(`reacted:${props.noteId}`, {
- userId: $i!.id,
+ userId: me.id,
reaction: props.reaction,
- emoji: emoji.value,
+ emoji: emoji,
});
});
// TODO: 上位コンポーネントでやる
@@ -214,6 +226,8 @@ onMounted(() => {
if (!mock) {
useTooltip(buttonEl, async (showing) => {
+ if (buttonEl.value == null) return;
+
const reactions = await misskeyApiGet('notes/reactions', {
noteId: props.noteId,
type: props.reaction,
@@ -228,7 +242,7 @@ if (!mock) {
reaction: props.reaction,
users,
count: props.count,
- targetElement: buttonEl.value,
+ anchorElement: buttonEl.value,
}, {
closed: () => dispose(),
});
diff --git a/packages/frontend/src/components/MkRolePreview.vue b/packages/frontend/src/components/MkRolePreview.vue
index 3f14c5b5e0..8e5cbde8c3 100644
--- a/packages/frontend/src/components/MkRolePreview.vue
+++ b/packages/frontend/src/components/MkRolePreview.vue
@@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -23,7 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ role.name }}
-
+
{{ role.usersCount }} users
? users
@@ -39,9 +39,9 @@ import * as Misskey from 'misskey-js';
import { i18n } from '@/i18n.js';
const props = withDefaults(defineProps<{
- role: Misskey.entities.Role;
+ role: Misskey.entities.Role | Misskey.entities.IResponse['roles'][number];
forModeration: boolean;
- detailed: boolean;
+ detailed?: boolean;
}>(), {
detailed: true,
});
diff --git a/packages/frontend/src/components/MkRoleSelectDialog.vue b/packages/frontend/src/components/MkRoleSelectDialog.vue
index fc7ba50fb3..937804703d 100644
--- a/packages/frontend/src/components/MkRoleSelectDialog.vue
+++ b/packages/frontend/src/components/MkRoleSelectDialog.vue
@@ -102,14 +102,12 @@ async function addRole() {
const items = roles.value
.filter(r => r.isPublic)
.filter(r => !selectedRoleIds.value.includes(r.id))
- .map(r => ({ text: r.name, value: r }));
+ .map(r => ({ label: r.name, value: r.id }));
- const { canceled, result: role } = await os.select({ items });
- if (canceled) {
- return;
- }
+ const { canceled, result: roleId } = await os.select({ items });
+ if (canceled || roleId == null) return;
- selectedRoleIds.value.push(role.id);
+ selectedRoleIds.value.push(roleId);
}
async function removeRole(roleId: string) {
diff --git a/packages/frontend/src/components/MkSelect.vue b/packages/frontend/src/components/MkSelect.vue
index 58a4edfddf..e79236fe54 100644
--- a/packages/frontend/src/components/MkSelect.vue
+++ b/packages/frontend/src/components/MkSelect.vue
@@ -39,32 +39,42 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
+
+
+
diff --git a/packages/frontend/src/components/MkSignin.input.vue b/packages/frontend/src/components/MkSignin.input.vue
index aacd1eae2a..4c73eab3f5 100644
--- a/packages/frontend/src/components/MkSignin.input.vue
+++ b/packages/frontend/src/components/MkSignin.input.vue
@@ -69,9 +69,11 @@ import MkInfo from '@/components/MkInfo.vue';
const props = withDefaults(defineProps<{
message?: string,
openOnRemote?: OpenOnRemoteOptions,
+ initialUsername?: string;
}>(), {
message: '',
openOnRemote: undefined,
+ initialUsername: undefined,
});
const emit = defineEmits<{
@@ -81,7 +83,7 @@ const emit = defineEmits<{
const host = toUnicode(configHost);
-const username = ref('');
+const username = ref(props.initialUsername ?? '');
//#region Open on remote
function openRemote(options: OpenOnRemoteOptions, targetHost?: string): void {
diff --git a/packages/frontend/src/components/MkSignin.password.vue b/packages/frontend/src/components/MkSignin.password.vue
index cd003a39df..3b3b6a0b73 100644
--- a/packages/frontend/src/components/MkSignin.password.vue
+++ b/packages/frontend/src/components/MkSignin.password.vue
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+