OverviewFilesCommitsIssuesDocsReleasesPeers

holepunchto-deps / @holepunchto / keet-editor-parser / src / display / to-display-replace.js

41 lines · javascript ref:
const { DISPLAY_TYPES, MENTION_PREFIX } = require('../constants.js')

module.exports = { displayReplaceMention }

function displayReplaceMention({ text, display }, memberId, name) {
  if (!text) return { text: '', display }

  let newText
  const newDisplay = []
  let delta = 0
  let replaced = false

  const sorted = [...display].sort((a, b) => a.start - b.start)
  for (const d of sorted) {
    const start = d.start + delta
    if (d.type === DISPLAY_TYPES.MENTION && d.memberId === memberId) {
      const mention = MENTION_PREFIX + name
      const length = mention.length
      newText = text.slice(0, start) + mention + text.slice(start + d.length)
      newDisplay.push({
        ...d,
        start,
        length
      })
      delta += length - d.length
      replaced = true
    } else {
      newDisplay.push({
        ...d,
        start
      })
    }
  }

  if (!replaced) {
    return { text, display }
  }

  return { text: newText, display: newDisplay }
}