mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-07 07:40:29 +03:00
Timeline-refactor-fixes (#1438)
* fix type * fix missing member from reaction * stop context menu event propagation in msg modal * prevent encode blur hash from freezing app * replace roboto font with inter and fix weight * add recent emoji when selecting emoji * fix room latest evt hook * add option to drop typing status
This commit is contained in:
parent
f9b895b32c
commit
1bdb7f4e3a
18 changed files with 138 additions and 64 deletions
|
|
@ -1,29 +0,0 @@
|
|||
import { MatrixEvent, Room, RoomEvent, RoomEventHandlerMap } from 'matrix-js-sdk';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
export const useRoomLatestEvent = (room: Room) => {
|
||||
const [latestEvent, setLatestEvent] = useState<MatrixEvent>();
|
||||
|
||||
useEffect(() => {
|
||||
const getLatestEvent = (): MatrixEvent | undefined => {
|
||||
const liveEvents = room.getLiveTimeline().getEvents();
|
||||
for (let i = liveEvents.length - 1; i >= 0; i -= 1) {
|
||||
const evt = liveEvents[i];
|
||||
if (evt) return evt;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const handleTimelineEvent: RoomEventHandlerMap[RoomEvent.Timeline] = () => {
|
||||
setLatestEvent(getLatestEvent());
|
||||
};
|
||||
setLatestEvent(getLatestEvent());
|
||||
|
||||
room.on(RoomEvent.Timeline, handleTimelineEvent);
|
||||
return () => {
|
||||
room.removeListener(RoomEvent.Timeline, handleTimelineEvent);
|
||||
};
|
||||
}, [room]);
|
||||
|
||||
return latestEvent;
|
||||
};
|
||||
57
src/app/hooks/useRoomLatestRenderedEvent.ts
Normal file
57
src/app/hooks/useRoomLatestRenderedEvent.ts
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/* eslint-disable no-continue */
|
||||
import { MatrixEvent, Room, RoomEvent, RoomEventHandlerMap } from 'matrix-js-sdk';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { settingsAtom } from '../state/settings';
|
||||
import { useSetting } from '../state/hooks/settings';
|
||||
import { MessageEvent, StateEvent } from '../../types/matrix/room';
|
||||
|
||||
export const useRoomLatestRenderedEvent = (room: Room) => {
|
||||
const [hideMembershipEvents] = useSetting(settingsAtom, 'hideMembershipEvents');
|
||||
const [hideNickAvatarEvents] = useSetting(settingsAtom, 'hideNickAvatarEvents');
|
||||
const [showHiddenEvents] = useSetting(settingsAtom, 'showHiddenEvents');
|
||||
const [latestEvent, setLatestEvent] = useState<MatrixEvent>();
|
||||
|
||||
useEffect(() => {
|
||||
const getLatestEvent = (): MatrixEvent | undefined => {
|
||||
const liveEvents = room.getLiveTimeline().getEvents();
|
||||
for (let i = liveEvents.length - 1; i >= 0; i -= 1) {
|
||||
const evt = liveEvents[i];
|
||||
|
||||
if (!evt) continue;
|
||||
if (evt.isRelation()) continue;
|
||||
if (evt.getType() === StateEvent.RoomMember) {
|
||||
const membershipChanged = evt.getContent().membership !== evt.getPrevContent().membership;
|
||||
if (membershipChanged && hideMembershipEvents) continue;
|
||||
if (!membershipChanged && hideNickAvatarEvents) continue;
|
||||
return evt;
|
||||
}
|
||||
|
||||
if (
|
||||
evt.getType() === MessageEvent.RoomMessage ||
|
||||
evt.getType() === MessageEvent.RoomMessageEncrypted ||
|
||||
evt.getType() === MessageEvent.Sticker ||
|
||||
evt.getType() === StateEvent.RoomName ||
|
||||
evt.getType() === StateEvent.RoomTopic ||
|
||||
evt.getType() === StateEvent.RoomAvatar
|
||||
) {
|
||||
return evt;
|
||||
}
|
||||
|
||||
if (showHiddenEvents) return evt;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const handleTimelineEvent: RoomEventHandlerMap[RoomEvent.Timeline] = () => {
|
||||
setLatestEvent(getLatestEvent());
|
||||
};
|
||||
setLatestEvent(getLatestEvent());
|
||||
|
||||
room.on(RoomEvent.Timeline, handleTimelineEvent);
|
||||
return () => {
|
||||
room.removeListener(RoomEvent.Timeline, handleTimelineEvent);
|
||||
};
|
||||
}, [room, hideMembershipEvents, hideNickAvatarEvents, showHiddenEvents]);
|
||||
|
||||
return latestEvent;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue