/**
 * Copyright (c) 2013-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 *
 * @providesModule BlockNode
 * @format
 * @flow
 */

'use strict';

import type CharacterMetadata from 'CharacterMetadata';
import type {DraftBlockType} from 'DraftBlockType';
import type {DraftInlineStyle} from 'DraftInlineStyle';
import type {List, Map} from 'immutable';

export type BlockNodeKey = string;

export type BlockNodeConfig = {
  characterList?: List<CharacterMetadata>,
  data?: Map<any, any>,
  depth?: number,
  key?: BlockNodeKey,
  text?: string,
  type?: DraftBlockType,
};

export interface BlockNode {
  findEntityRanges(
    filterFn: (value: CharacterMetadata) => boolean,
    callback: (start: number, end: number) => void,
  ): void,

  findStyleRanges(
    filterFn: (value: CharacterMetadata) => boolean,
    callback: (start: number, end: number) => void,
  ): void,

  getCharacterList(): List<CharacterMetadata>,

  getData(): Map<any, any>,

  getDepth(): number,

  getEntityAt(offset: number): ?string,

  getInlineStyleAt(offset: number): DraftInlineStyle,

  getKey(): BlockNodeKey,

  getLength(): number,

  getText(): string,

  getType(): DraftBlockType,
}

/**
 * Copyright (c) 2013-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 *
 * @providesModule BlockNode
 * @format
 * @flow
 */

'use strict';

import type CharacterMetadata from 'CharacterMetadata';
import type {DraftBlockType} from 'DraftBlockType';
import type {DraftInlineStyle} from 'DraftInlineStyle';
import type {List, Map} from 'immutable';

export type BlockNodeKey = string;

export type BlockNodeConfig = {
  characterList?: List<CharacterMetadata>,
  data?: Map<any, any>,
  depth?: number,
  key?: BlockNodeKey,
  text?: string,
  type?: DraftBlockType,
};

// https://github.com/facebook/draft-js/issues/1492
// prettier-ignore
export interface BlockNode {
  findEntityRanges(
    filterFn: (value: CharacterMetadata) => boolean,
    callback: (start: number, end: number) => void,
  ): void,

  findStyleRanges(
    filterFn: (value: CharacterMetadata) => boolean,
    callback: (start: number, end: number) => void,
  ): void,

  getCharacterList(): List<CharacterMetadata>,

  getData(): Map<any, any>,

  getDepth(): number,

  getEntityAt(offset: number): ?string,

  getInlineStyleAt(offset: number): DraftInlineStyle,

  getKey(): BlockNodeKey,

  getLength(): number,

  getText(): string,

  getType(): DraftBlockType,
}

Fix syntax nit for prettier in BlockType