mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-04 22:40:29 +03:00
move timeline utils functions to new file
This commit is contained in:
parent
d73428ee3d
commit
174b315278
3 changed files with 85 additions and 73 deletions
|
|
@ -128,6 +128,16 @@ import { useTheme } from '../../hooks/useTheme';
|
|||
import { useRoomCreatorsTag } from '../../hooks/useRoomCreatorsTag';
|
||||
import { usePowerLevelTags } from '../../hooks/usePowerLevelTags';
|
||||
import { ThreadSelector, ThreadSelectorContainer } from './message/thread-selector';
|
||||
import {
|
||||
getEventIdAbsoluteIndex,
|
||||
getFirstLinkedTimeline,
|
||||
getLinkedTimelines,
|
||||
getTimelineAndBaseIndex,
|
||||
getTimelineEvent,
|
||||
getTimelineRelativeIndex,
|
||||
getTimelinesEventsCount,
|
||||
timelineToEventsCount,
|
||||
} from './utils';
|
||||
|
||||
const TimelineFloat = as<'div', css.TimelineFloatVariants>(
|
||||
({ position, className, ...props }, ref) => (
|
||||
|
|
@ -152,79 +162,6 @@ const TimelineDivider = as<'div', { variant?: ContainerColor | 'Inherit' }>(
|
|||
)
|
||||
);
|
||||
|
||||
export const getLiveTimeline = (room: Room): EventTimeline =>
|
||||
room.getUnfilteredTimelineSet().getLiveTimeline();
|
||||
|
||||
export const getEventTimeline = (room: Room, eventId: string): EventTimeline | undefined => {
|
||||
const timelineSet = room.getUnfilteredTimelineSet();
|
||||
return timelineSet.getTimelineForEvent(eventId) ?? undefined;
|
||||
};
|
||||
|
||||
export const getFirstLinkedTimeline = (
|
||||
timeline: EventTimeline,
|
||||
direction: Direction
|
||||
): EventTimeline => {
|
||||
const linkedTm = timeline.getNeighbouringTimeline(direction);
|
||||
if (!linkedTm) return timeline;
|
||||
return getFirstLinkedTimeline(linkedTm, direction);
|
||||
};
|
||||
|
||||
export const getLinkedTimelines = (timeline: EventTimeline): EventTimeline[] => {
|
||||
const firstTimeline = getFirstLinkedTimeline(timeline, Direction.Backward);
|
||||
const timelines: EventTimeline[] = [];
|
||||
|
||||
for (
|
||||
let nextTimeline: EventTimeline | null = firstTimeline;
|
||||
nextTimeline;
|
||||
nextTimeline = nextTimeline.getNeighbouringTimeline(Direction.Forward)
|
||||
) {
|
||||
timelines.push(nextTimeline);
|
||||
}
|
||||
return timelines;
|
||||
};
|
||||
|
||||
export const timelineToEventsCount = (t: EventTimeline) => t.getEvents().length;
|
||||
export const getTimelinesEventsCount = (timelines: EventTimeline[]): number => {
|
||||
const timelineEventCountReducer = (count: number, tm: EventTimeline) =>
|
||||
count + timelineToEventsCount(tm);
|
||||
return timelines.reduce(timelineEventCountReducer, 0);
|
||||
};
|
||||
|
||||
export const getTimelineAndBaseIndex = (
|
||||
timelines: EventTimeline[],
|
||||
index: number
|
||||
): [EventTimeline | undefined, number] => {
|
||||
let uptoTimelineLen = 0;
|
||||
const timeline = timelines.find((t) => {
|
||||
uptoTimelineLen += t.getEvents().length;
|
||||
if (index < uptoTimelineLen) return true;
|
||||
return false;
|
||||
});
|
||||
if (!timeline) return [undefined, 0];
|
||||
return [timeline, uptoTimelineLen - timeline.getEvents().length];
|
||||
};
|
||||
|
||||
export const getTimelineRelativeIndex = (absoluteIndex: number, timelineBaseIndex: number) =>
|
||||
absoluteIndex - timelineBaseIndex;
|
||||
|
||||
export const getTimelineEvent = (timeline: EventTimeline, index: number): MatrixEvent | undefined =>
|
||||
timeline.getEvents()[index];
|
||||
|
||||
export const getEventIdAbsoluteIndex = (
|
||||
timelines: EventTimeline[],
|
||||
eventTimeline: EventTimeline,
|
||||
eventId: string
|
||||
): number | undefined => {
|
||||
const timelineIndex = timelines.findIndex((t) => t === eventTimeline);
|
||||
if (timelineIndex === -1) return undefined;
|
||||
const eventIndex = eventTimeline.getEvents().findIndex((evt) => evt.getId() === eventId);
|
||||
if (eventIndex === -1) return undefined;
|
||||
const baseIndex = timelines
|
||||
.slice(0, timelineIndex)
|
||||
.reduce((accValue, timeline) => timeline.getEvents().length + accValue, 0);
|
||||
return baseIndex + eventIndex;
|
||||
};
|
||||
|
||||
type RoomTimelineProps = {
|
||||
room: Room;
|
||||
eventId?: string;
|
||||
|
|
@ -234,6 +171,14 @@ type RoomTimelineProps = {
|
|||
|
||||
const PAGINATION_LIMIT = 80;
|
||||
|
||||
export const getLiveTimeline = (room: Room): EventTimeline =>
|
||||
room.getUnfilteredTimelineSet().getLiveTimeline();
|
||||
|
||||
export const getEventTimeline = (room: Room, eventId: string): EventTimeline | undefined => {
|
||||
const timelineSet = room.getUnfilteredTimelineSet();
|
||||
return timelineSet.getTimelineForEvent(eventId) ?? undefined;
|
||||
};
|
||||
|
||||
type Timeline = {
|
||||
linkedTimelines: EventTimeline[];
|
||||
range: ItemRange;
|
||||
|
|
|
|||
1
src/app/features/room/utils/index.ts
Normal file
1
src/app/features/room/utils/index.ts
Normal file
|
|
@ -0,0 +1 @@
|
|||
export * from './timeline';
|
||||
66
src/app/features/room/utils/timeline.ts
Normal file
66
src/app/features/room/utils/timeline.ts
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import { Room, EventTimeline, Direction, MatrixEvent } from 'matrix-js-sdk';
|
||||
|
||||
export const getFirstLinkedTimeline = (
|
||||
timeline: EventTimeline,
|
||||
direction: Direction
|
||||
): EventTimeline => {
|
||||
const linkedTm = timeline.getNeighbouringTimeline(direction);
|
||||
if (!linkedTm) return timeline;
|
||||
return getFirstLinkedTimeline(linkedTm, direction);
|
||||
};
|
||||
|
||||
export const getLinkedTimelines = (timeline: EventTimeline): EventTimeline[] => {
|
||||
const firstTimeline = getFirstLinkedTimeline(timeline, Direction.Backward);
|
||||
const timelines: EventTimeline[] = [];
|
||||
|
||||
for (
|
||||
let nextTimeline: EventTimeline | null = firstTimeline;
|
||||
nextTimeline;
|
||||
nextTimeline = nextTimeline.getNeighbouringTimeline(Direction.Forward)
|
||||
) {
|
||||
timelines.push(nextTimeline);
|
||||
}
|
||||
return timelines;
|
||||
};
|
||||
|
||||
export const timelineToEventsCount = (t: EventTimeline) => t.getEvents().length;
|
||||
export const getTimelinesEventsCount = (timelines: EventTimeline[]): number => {
|
||||
const timelineEventCountReducer = (count: number, tm: EventTimeline) =>
|
||||
count + timelineToEventsCount(tm);
|
||||
return timelines.reduce(timelineEventCountReducer, 0);
|
||||
};
|
||||
|
||||
export const getTimelineAndBaseIndex = (
|
||||
timelines: EventTimeline[],
|
||||
index: number
|
||||
): [EventTimeline | undefined, number] => {
|
||||
let uptoTimelineLen = 0;
|
||||
const timeline = timelines.find((t) => {
|
||||
uptoTimelineLen += t.getEvents().length;
|
||||
if (index < uptoTimelineLen) return true;
|
||||
return false;
|
||||
});
|
||||
if (!timeline) return [undefined, 0];
|
||||
return [timeline, uptoTimelineLen - timeline.getEvents().length];
|
||||
};
|
||||
|
||||
export const getTimelineRelativeIndex = (absoluteIndex: number, timelineBaseIndex: number) =>
|
||||
absoluteIndex - timelineBaseIndex;
|
||||
|
||||
export const getTimelineEvent = (timeline: EventTimeline, index: number): MatrixEvent | undefined =>
|
||||
timeline.getEvents()[index];
|
||||
|
||||
export const getEventIdAbsoluteIndex = (
|
||||
timelines: EventTimeline[],
|
||||
eventTimeline: EventTimeline,
|
||||
eventId: string
|
||||
): number | undefined => {
|
||||
const timelineIndex = timelines.findIndex((t) => t === eventTimeline);
|
||||
if (timelineIndex === -1) return undefined;
|
||||
const eventIndex = eventTimeline.getEvents().findIndex((evt) => evt.getId() === eventId);
|
||||
if (eventIndex === -1) return undefined;
|
||||
const baseIndex = timelines
|
||||
.slice(0, timelineIndex)
|
||||
.reduce((accValue, timeline) => timeline.getEvents().length + accValue, 0);
|
||||
return baseIndex + eventIndex;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue