mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-13 18:50:29 +03:00
Hidden Typing & Read Receipts (#2230)
* add hide activity toggle * stop sending/receiving typing status * send private read receipt when setting toggle is activated * prevent showing read-receipt when feature toggle in on
This commit is contained in:
parent
5c94471956
commit
b7e5e0db3e
21 changed files with 165 additions and 66 deletions
|
|
@ -228,20 +228,18 @@ export const useBindRoomToUnreadAtom = (
|
|||
|
||||
useEffect(() => {
|
||||
const handleReceipt = (mEvent: MatrixEvent, room: Room) => {
|
||||
if (mEvent.getType() === 'm.receipt') {
|
||||
const myUserId = mx.getUserId();
|
||||
if (!myUserId) return;
|
||||
if (room.isSpaceRoom()) return;
|
||||
const content = mEvent.getContent<ReceiptContent>();
|
||||
const myUserId = mx.getUserId();
|
||||
if (!myUserId) return;
|
||||
if (room.isSpaceRoom()) return;
|
||||
const content = mEvent.getContent<ReceiptContent>();
|
||||
|
||||
const isMyReceipt = Object.keys(content).find((eventId) =>
|
||||
(Object.keys(content[eventId]) as ReceiptType[]).find(
|
||||
(receiptType) => content[eventId][receiptType][myUserId]
|
||||
)
|
||||
);
|
||||
if (isMyReceipt) {
|
||||
setUnreadAtom({ type: 'DELETE', roomId: room.roomId });
|
||||
}
|
||||
const isMyReceipt = Object.keys(content).find((eventId) =>
|
||||
(Object.keys(content[eventId]) as ReceiptType[]).find(
|
||||
(receiptType) => content[eventId][receiptType][myUserId]
|
||||
)
|
||||
);
|
||||
if (isMyReceipt) {
|
||||
setUnreadAtom({ type: 'DELETE', roomId: room.roomId });
|
||||
}
|
||||
};
|
||||
mx.on(RoomEvent.Receipt, handleReceipt);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ export interface Settings {
|
|||
editorToolbar: boolean;
|
||||
twitterEmoji: boolean;
|
||||
pageZoom: number;
|
||||
hideActivity: boolean;
|
||||
|
||||
isPeopleDrawer: boolean;
|
||||
memberSortFilterIndex: number;
|
||||
|
|
@ -45,6 +46,7 @@ const defaultSettings: Settings = {
|
|||
editorToolbar: false,
|
||||
twitterEmoji: false,
|
||||
pageZoom: 100,
|
||||
hideActivity: false,
|
||||
|
||||
isPeopleDrawer: true,
|
||||
memberSortFilterIndex: 0,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import produce from 'immer';
|
|||
import { atom, useSetAtom } from 'jotai';
|
||||
import { MatrixClient, RoomMemberEvent, RoomMemberEventHandlerMap } from 'matrix-js-sdk';
|
||||
import { useEffect } from 'react';
|
||||
import { useSetting } from './hooks/settings';
|
||||
import { settingsAtom } from './settings';
|
||||
|
||||
export const TYPING_TIMEOUT_MS = 5000; // 5 seconds
|
||||
|
||||
|
|
@ -127,12 +129,16 @@ export const useBindRoomIdToTypingMembersAtom = (
|
|||
typingMembersAtom: typeof roomIdToTypingMembersAtom
|
||||
) => {
|
||||
const setTypingMembers = useSetAtom(typingMembersAtom);
|
||||
const [hideActivity] = useSetting(settingsAtom, 'hideActivity');
|
||||
|
||||
useEffect(() => {
|
||||
const handleTypingEvent: RoomMemberEventHandlerMap[RoomMemberEvent.Typing] = (
|
||||
event,
|
||||
member
|
||||
) => {
|
||||
if (hideActivity) {
|
||||
return;
|
||||
}
|
||||
setTypingMembers({
|
||||
type: member.typing ? 'PUT' : 'DELETE',
|
||||
roomId: member.roomId,
|
||||
|
|
@ -145,5 +151,5 @@ export const useBindRoomIdToTypingMembersAtom = (
|
|||
return () => {
|
||||
mx.removeListener(RoomMemberEvent.Typing, handleTypingEvent);
|
||||
};
|
||||
}, [mx, setTypingMembers]);
|
||||
}, [mx, setTypingMembers, hideActivity]);
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue