/* Copyright 2021, Milkdown by Mirone. */
import type { Ctx } from '@milkdown/ctx'
import { editorViewCtx } from '@milkdown/core'

/// Get outline of the editor.
export function outline() {
  return (ctx: Ctx): Array<{ text: string, level: number, id: string }> => {
    const view = ctx.get(editorViewCtx)
    const data: { text: string, level: number, id: string }[] = []
    const doc = view.state.doc
    doc.descendants((node) => {
      if (node.type.name === 'heading' && node.attrs.level)
        data.push({ text: node.textContent, level: node.attrs.level, id: node.attrs.id })
    })
    return data
  }
}
