/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @flow * @emails oncall+draft_js */ 'use strict'; import type ContentState from "./ContentState"; const UnicodeBidiService = require("fbjs/lib/UnicodeBidiService"); const Immutable = require("immutable"); const nullthrows = require("fbjs/lib/nullthrows"); const { OrderedMap } = Immutable; let bidiService; const EditorBidiService = { getDirectionMap: function (content: ContentState, prevBidiMap: ?OrderedMap): OrderedMap { if (!bidiService) { bidiService = new UnicodeBidiService(); } else { bidiService.reset(); } const blockMap = content.getBlockMap(); const nextBidi = blockMap.valueSeq().map(block => nullthrows(bidiService).getDirection(block.getText())); const bidiMap = OrderedMap(blockMap.keySeq().zip(nextBidi)); if (prevBidiMap != null && Immutable.is(prevBidiMap, bidiMap)) { return prevBidiMap; } return bidiMap; } }; module.exports = EditorBidiService;