From 8926fcb3a62fc36914e89cf46ffeff27dc1eecda Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Fri, 24 May 2019 14:41:24 +0200 Subject: [PATCH] helper functions to find next & previous editable events in timeline --- src/utils/EventUtils.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/utils/EventUtils.js b/src/utils/EventUtils.js index 68f6d4b14e..d7c2285e7b 100644 --- a/src/utils/EventUtils.js +++ b/src/utils/EventUtils.js @@ -16,7 +16,8 @@ limitations under the License. import { EventStatus } from 'matrix-js-sdk'; import MatrixClientPeg from '../MatrixClientPeg'; - +import { findLastIndex, findIndex } from "lodash"; +import shouldHideEvent from "../shouldHideEvent"; /** * Returns whether an event should allow actions like reply, reactions, edit, etc. * which effectively checks whether it's a regular message that has been sent and that we @@ -50,3 +51,35 @@ export function canEditContent(mxEvent) { mxEvent.getOriginalContent().msgtype === "m.text" && mxEvent.getSender() === MatrixClientPeg.get().getUserId(); } + +export function findPreviousEditableEvent(room, fromEventId = undefined) { + const liveTimeline = room.getLiveTimeline(); + const events = liveTimeline.getEvents(); + let startFromIdx = events.length - 1; + if (fromEventId) { + const fromEventIdx = findLastIndex(events, e => e.getId() === fromEventId); + if (fromEventIdx !== -1) { + startFromIdx = fromEventIdx - 1; + } + } + const nextEventIdx = findLastIndex(events, e => !shouldHideEvent(e) && canEditContent(e), startFromIdx); + if (nextEventIdx !== -1) { + return events[nextEventIdx]; + } +} + +export function findNextEditableEvent(room, fromEventId = undefined) { + const liveTimeline = room.getLiveTimeline(); + const events = liveTimeline.getEvents(); + let startFromIdx = 0; + if (fromEventId) { + const fromEventIdx = findIndex(events, e => e.getId() === fromEventId); + if (fromEventIdx !== -1) { + startFromIdx = fromEventIdx + 1; + } + } + const nextEventIdx = findIndex(events, e => !shouldHideEvent(e) && canEditContent(e), startFromIdx); + if (nextEventIdx !== -1) { + return events[nextEventIdx]; + } +}