Skip to content
Snippets Groups Projects
BlockDropDown.js 1.48 KiB
Newer Older
chris's avatar
chris committed
import React, { useMemo } from 'react';
chris's avatar
chris committed
import { injectable, inject } from 'inversify';
import { isEmpty } from 'lodash';
import { v4 as uuidv4 } from 'uuid';
chris's avatar
chris committed
import { ToolGroup } from 'wax-prosemirror-core';
import BlockDropDownComponent from './BlockDropDownComponent';
chris's avatar
chris committed

@injectable()
class BlockDropDown extends ToolGroup {
  tools = [];

  constructor(
    @inject('Title') title,
    @inject('Author') author,
    @inject('SubTitle') subtitle,
    @inject('EpigraphProse') epigraphprose,
    @inject('EpigraphPoetry') epigraphpoetry,
    @inject('Heading2') heading2,
    @inject('Heading3') heading3,
chris's avatar
chris committed
    @inject('Heading4') heading4,
chris's avatar
chris committed
    @inject('Paragraph') paragraph,
    @inject('ParagraphContinued') paragraphContinued,
    @inject('ExtractProse') extractProse,
    @inject('ExtractPoetry') extractPoetry,
    @inject('SourceNote') sourceNote,
    @inject('BlockQuote') blockQuote,
  ) {
    super();
    this.tools = [
      title,
      author,
      subtitle,
      epigraphprose,
      epigraphpoetry,
      heading2,
      heading3,
chris's avatar
chris committed
      heading4,
chris's avatar
chris committed
      paragraph,
      paragraphContinued,
      extractProse,
      extractPoetry,
      sourceNote,
      blockQuote,
    ];
  }
chris's avatar
chris committed

chris's avatar
chris committed
  renderTools(view) {
    if (isEmpty(view)) return null;
    const MultipleDropDown = useMemo(
      () => (
        <BlockDropDownComponent
chris's avatar
chris committed
          key={uuidv4()}
chris's avatar
chris committed
          tools={this._tools}
          view={view}
chris's avatar
chris committed
        />
chris's avatar
chris committed
      ),
      [],
chris's avatar
chris committed
    );
chris's avatar
chris committed
    return MultipleDropDown;
chris's avatar
chris committed
  }
}

export default BlockDropDown;