OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / chat / message / message-create-date.js

41 lines · javascript ref:
import { last as t } from "../../lib/array"
import { formatTimestamp as e, getStartOfNextDay as o } from "../../lib/date"
const i = (t) => {
  const e = []
  for (let o = t.length - 1; o >= 0; o -= 1) {
    const { datetime: i, msgsByDate: s } = t[o]
    let a = e.length
    for (let t = s.length - 1; t >= 0; t -= 1) {
      const o = s[t]
      for (const t of o) e.push(t)
    }
    const m = e.length - 1
    for (; a < m; ) {
      const t = e[a]
      ;(t.datetime && (e[a] = { ...t, datetime: void 0 }), (a += 1))
    }
    const n = e[m]
    if (0 === o && n.seq > 0) {
      ;(n.isHead || n.datetime) && (e[m] = { ...n, datetime: void 0, isHead: !1 })
      break
    }
    n.isOutOfOrder
      ? n.datetime && (e[m] = { ...n, datetime: void 0 })
      : n.datetime !== i && (e[m] = { ...n, datetime: i })
  }
  return e
}
export function groupByDate(s = []) {
  const a = []
  let m = null,
    n = 0
  for (let i = s.length - 1; i >= 0; i -= 1) {
    const r = s[i],
      { timestamp: d } = t(r)
    d < n
      ? m.msgsByDate.push(r)
      : ((n = o(d).getTime()), (m = { datetime: e(d), msgsByDate: [r] }), a.push(m))
  }
  return i(a)
}