Fix-timeline-loading (#1506)

* fix timeline jump to search item after markAsRead

* improve pagination logic

* add jumbo emoji support in msg rendering
This commit is contained in:
Ajay Bura 2023-10-26 16:21:55 +11:00 committed by GitHub
parent f53bb28b66
commit 72bb5b42af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 2 deletions

View file

@ -137,6 +137,13 @@ import initMatrix from '../../../client/initMatrix';
import { useKeyDown } from '../../hooks/useKeyDown'; import { useKeyDown } from '../../hooks/useKeyDown';
import cons from '../../../client/state/cons'; import cons from '../../../client/state/cons';
import { useDocumentFocusChange } from '../../hooks/useDocumentFocusChange'; import { useDocumentFocusChange } from '../../hooks/useDocumentFocusChange';
import { EMOJI_PATTERN, VARIATION_SELECTOR_PATTERN } from '../../utils/regex';
// Thumbs up emoji found to have Variation Selector 16 at the end
// so included variation selector pattern in regex
const JUMBO_EMOJI_REG = new RegExp(
`^(((${EMOJI_PATTERN})|(:.+?:))(${VARIATION_SELECTOR_PATTERN}|\\s)*){1,10}$`
);
const TimelineFloat = as<'div', css.TimelineFloatVariants>( const TimelineFloat = as<'div', css.TimelineFloatVariants>(
({ position, className, ...props }, ref) => ( ({ position, className, ...props }, ref) => (
@ -334,6 +341,7 @@ const useTimelinePagination = (
return async (backwards: boolean) => { return async (backwards: boolean) => {
if (fetching) return; if (fetching) return;
const targetTimeline = timelineRef.current;
const { linkedTimelines: lTimelines } = timelineRef.current; const { linkedTimelines: lTimelines } = timelineRef.current;
const timelinesEventsCount = lTimelines.map(timelineToEventsCount); const timelinesEventsCount = lTimelines.map(timelineToEventsCount);
@ -373,6 +381,7 @@ const useTimelinePagination = (
} }
fetching = false; fetching = false;
if (targetTimeline !== timelineRef.current) return;
if (alive()) { if (alive()) {
recalibratePagination(lTimelines, timelinesEventsCount, backwards); recalibratePagination(lTimelines, timelinesEventsCount, backwards);
} }
@ -582,7 +591,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli
focusItem.current = { focusItem.current = {
index: evtAbsIndex, index: evtAbsIndex,
scrollTo: true, scrollTo: true,
highlight: evtId !== unreadInfo?.readUptoEventId, highlight: evtId !== readUptoEventIdRef.current,
}; };
setTimeline({ setTimeline({
linkedTimelines: lTimelines, linkedTimelines: lTimelines,
@ -592,7 +601,7 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli
}, },
}); });
}, },
[unreadInfo, alive] [alive]
), ),
useCallback(() => { useCallback(() => {
if (!alive()) return; if (!alive()) return;
@ -990,12 +999,16 @@ export function RoomTimeline({ room, eventId, roomInputRef, editor }: RoomTimeli
editedEvent?.getContent()['m.new_content'] ?? mEvent.getContent(); editedEvent?.getContent()['m.new_content'] ?? mEvent.getContent();
if (typeof body !== 'string') return null; if (typeof body !== 'string') return null;
const jumboEmoji = JUMBO_EMOJI_REG.test(body);
return ( return (
<Text <Text
as="div" as="div"
style={{ style={{
whiteSpace: typeof customBody === 'string' ? 'initial' : 'pre-wrap', whiteSpace: typeof customBody === 'string' ? 'initial' : 'pre-wrap',
wordBreak: 'break-word', wordBreak: 'break-word',
fontSize: jumboEmoji ? '1.504em' : undefined,
lineHeight: jumboEmoji ? '1.4962em' : undefined,
}} }}
priority="400" priority="400"
> >

File diff suppressed because one or more lines are too long