custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
96 lines (83 loc) • 3.35 kB
Flow
/**
* 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 DraftEditorNode.react
* @format
* @flow
*
* This is unstable and not part of the public API and should not be used by
* production systems. This file may be update/removed without notice.
*/
;
import type { BlockNodeRecord } from './BlockNodeRecord';
import type ContentState from './ContentState';
import type { DraftDecoratorType } from './DraftDecoratorType';
import type SelectionState from './SelectionState';
import type { BidiDirection } from 'fbjs/lib/UnicodeBidiDirection';
const DraftEditorDecoratedLeaves = require('./DraftEditorDecoratedLeaves.react');
const DraftEditorLeaf = require('./DraftEditorLeaf.react');
const DraftOffsetKey = require('./DraftOffsetKey');
const Immutable = require('immutable');
const React = require('react');
const cx = require('fbjs/lib/cx');
const { List } = Immutable;
type Props = {
block: BlockNodeRecord;
children: ?Array<React.Node>;
contentState: ContentState;
customStyleFn: Function;
customStyleMap: Object;
decorator: ?DraftDecoratorType;
direction: BidiDirection;
forceSelection: boolean;
hasSelection: boolean;
selection: SelectionState;
tree: List<any>;
};
class DraftEditorNode extends React.Component<Props> {
render(): React.Node {
const {
block,
contentState,
customStyleFn,
customStyleMap,
decorator,
direction,
forceSelection,
hasSelection,
selection,
tree
} = this.props;
const blockKey = block.getKey();
const text = block.getText();
const lastLeafSet = tree.size - 1;
const children = this.props.children || tree.map((leafSet, ii) => {
const decoratorKey = leafSet.get('decoratorKey');
const leavesForLeafSet = leafSet.get('leaves');
const lastLeaf = leavesForLeafSet.size - 1;
const Leaves = leavesForLeafSet.map((leaf, jj) => {
const offsetKey = DraftOffsetKey.encode(blockKey, ii, jj);
const start = leaf.get('start');
const end = leaf.get('end');
return <DraftEditorLeaf key={offsetKey} offsetKey={offsetKey} block={block} start={start} selection={hasSelection ? selection : null} forceSelection={forceSelection} text={text.slice(start, end)} styleSet={block.getInlineStyleAt(start)} customStyleMap={customStyleMap} customStyleFn={customStyleFn} isLast={decoratorKey === lastLeafSet && jj === lastLeaf} />;
}).toArray();
if (!decoratorKey || !decorator) {
return Leaves;
}
return <DraftEditorDecoratedLeaves block={block} children={Leaves} contentState={contentState} decorator={decorator} decoratorKey={decoratorKey} direction={direction} leafSet={leafSet} text={text} key={ii} />;
}).toArray();
return <div data-offset-key={DraftOffsetKey.encode(blockKey, 0, 0)} className={cx({
'public/DraftStyleDefault/block': true,
'public/DraftStyleDefault/ltr': direction === 'LTR',
'public/DraftStyleDefault/rtl': direction === 'RTL'
})}>
{children}
</div>;
}
}
module.exports = DraftEditorNode;