wip
This commit is contained in:
parent
969b21a8e8
commit
aa9aa239a1
|
@ -25,8 +25,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<div :class="$style.footer">
|
||||
<button class="_textButton" style="color: currentColor;" @click="showMenu"><i class="ti ti-dots-circle-horizontal"></i></button>
|
||||
<MkTime :class="$style.time" :time="message.createdAt"/>
|
||||
<MkA v-if="isSearchResult && 'toRoom' in message && message.toRoom != null" :to="`/chat/room/${message.toRoomId}`">{{ message.toRoom?.name }}</MkA>
|
||||
<MkA v-if="isSearchResult && 'toUser' in message && message.toUser != null && isMe" :to="`/chat/user/${message.toUserId}`">@{{ message.toUser?.username }}</MkA>
|
||||
<MkA v-if="isSearchResult && 'toRoom' in message && message.toRoom != null" :to="`/chat/room/${message.toRoomId}`">{{ message.toRoom.name }}</MkA>
|
||||
<MkA v-if="isSearchResult && 'toUser' in message && message.toUser != null && isMe" :to="`/chat/user/${message.toUserId}`">@{{ message.toUser.username }}</MkA>
|
||||
</div>
|
||||
<TransitionGroup
|
||||
:enterActiveClass="prefer.s.animation ? $style.transition_reaction_enterActive : ''"
|
||||
|
@ -36,7 +36,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
:moveClass="prefer.s.animation ? $style.transition_reaction_move : ''"
|
||||
tag="div" :class="$style.reactions"
|
||||
>
|
||||
<div v-for="record in message.reactions" :key="record.reaction + record.user?.id" :class="[$style.reaction, record.user?.id === $i.id ? $style.reactionMy : null]" @click="onReactionClick(record)">
|
||||
<div v-for="record in message.reactions" :key="record.reaction + record.user.id" :class="[$style.reaction, record.user.id === $i.id ? $style.reactionMy : null]" @click="onReactionClick(record)">
|
||||
<MkAvatar :user="record.user!" :link="false" :class="$style.reactionAvatar"/>
|
||||
<MkReactionIcon
|
||||
:withTooltip="true"
|
||||
|
@ -111,13 +111,13 @@ function react(ev: MouseEvent) {
|
|||
function onReactionClick(record: Misskey.entities.ChatMessage['reactions'][0]) {
|
||||
if (!$i.policies.canChat) return;
|
||||
|
||||
if (record.user?.id === $i.id) {
|
||||
if (record.user.id === $i.id) {
|
||||
misskeyApi('chat/messages/unreact', {
|
||||
messageId: props.message.id,
|
||||
reaction: record.reaction,
|
||||
});
|
||||
} else {
|
||||
if (!props.message.reactions.some(r => r.user?.id === $i.id && r.reaction === record.reaction)) {
|
||||
if (!props.message.reactions.some(r => r.user.id === $i.id && r.reaction === record.reaction)) {
|
||||
sound.playMisskeySfx('reaction');
|
||||
misskeyApi('chat/messages/react', {
|
||||
messageId: props.message.id,
|
||||
|
|
|
@ -14,8 +14,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<hr v-if="memberships.length > 0">
|
||||
|
||||
<div v-for="membership in memberships" :key="membership.id" :class="$style.membership">
|
||||
<MkA v-if="membership.user != null" :class="$style.membershipBody" :to="`${userPage(membership.user)}`">
|
||||
<MkUserCardMini :user="membership.user"/>
|
||||
<MkA :class="$style.membershipBody" :to="`${userPage(membership.user!)}`">
|
||||
<MkUserCardMini :user="membership.user!"/>
|
||||
</MkA>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -178,10 +178,10 @@ async function initialize() {
|
|||
connection.value = useStream().useChannel('chatUser', {
|
||||
otherId: user.value.id,
|
||||
});
|
||||
connection.value?.on('message', onMessage);
|
||||
connection.value?.on('deleted', onDeleted);
|
||||
connection.value?.on('react', onReact);
|
||||
connection.value?.on('unreact', onUnreact);
|
||||
connection.value.on('message', onMessage);
|
||||
connection.value.on('deleted', onDeleted);
|
||||
connection.value.on('react', onReact);
|
||||
connection.value.on('unreact', onUnreact);
|
||||
} else {
|
||||
const [r, m] = await Promise.all([
|
||||
misskeyApi('chat/rooms/show', { roomId: props.roomId }),
|
||||
|
@ -272,10 +272,10 @@ function onReact(ctx: Parameters<Misskey.Channels['chatUser']['events']['react']
|
|||
reaction: ctx.reaction,
|
||||
user: message.fromUserId === $i.id ? user.value! : $i,
|
||||
});
|
||||
} else if (ctx.user != null) {
|
||||
} else {
|
||||
message.reactions.push({
|
||||
reaction: ctx.reaction,
|
||||
user: ctx.user,
|
||||
user: ctx.user!,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ function onReact(ctx: Parameters<Misskey.Channels['chatUser']['events']['react']
|
|||
|
||||
function onUnreact(ctx: Parameters<Misskey.Channels['chatUser']['events']['unreact']>[0] | Parameters<Misskey.Channels['chatRoom']['events']['unreact']>[0]) {
|
||||
const message = messages.value.find(m => m.id === ctx.messageId);
|
||||
if (message && ctx.user != null) {
|
||||
if (message) {
|
||||
const index = message.reactions.findIndex(r => r.reaction === ctx.reaction && r.user.id === ctx.user!.id);
|
||||
if (index !== -1) {
|
||||
message.reactions.splice(index, 1);
|
||||
|
@ -318,12 +318,14 @@ async function inviteUser() {
|
|||
|
||||
const invitee = await os.selectUser({ includeSelf: false, localOnly: true });
|
||||
os.apiWithDialog('chat/rooms/invitations/create', {
|
||||
roomId: room.value?.id,
|
||||
roomId: room.value.id,
|
||||
userId: invitee.id,
|
||||
});
|
||||
}
|
||||
|
||||
async function leaveRoom() {
|
||||
if (room.value == null) return;
|
||||
|
||||
const { canceled } = await os.confirm({
|
||||
type: 'warning',
|
||||
text: i18n.ts.areYouSure,
|
||||
|
@ -331,7 +333,7 @@ async function leaveRoom() {
|
|||
if (canceled) return;
|
||||
|
||||
misskeyApi('chat/rooms/leave', {
|
||||
roomId: room.value?.id,
|
||||
roomId: room.value.id,
|
||||
});
|
||||
router.push('/chat');
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue