1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports["default"] = void 0;
|
9 |
|
10 | var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
|
11 |
|
12 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
13 |
|
14 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
15 |
|
16 | var _react = _interopRequireDefault(require("react"));
|
17 |
|
18 | var _utils = require("../utils");
|
19 |
|
20 | var propTypes = {
|
21 | children: _propTypes["default"].string.isRequired,
|
22 | highlightClassName: _propTypes["default"].string,
|
23 | search: _propTypes["default"].string.isRequired
|
24 | };
|
25 | var defaultProps = {
|
26 | highlightClassName: 'rbt-highlight-text'
|
27 | };
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | var Highlighter = function (_React$PureComponent) {
|
36 | (0, _inheritsLoose2["default"])(Highlighter, _React$PureComponent);
|
37 |
|
38 | function Highlighter() {
|
39 | return _React$PureComponent.apply(this, arguments) || this;
|
40 | }
|
41 |
|
42 | var _proto = Highlighter.prototype;
|
43 |
|
44 | _proto.render = function render() {
|
45 | var _this$props = this.props,
|
46 | children = _this$props.children,
|
47 | highlightClassName = _this$props.highlightClassName,
|
48 | search = _this$props.search;
|
49 |
|
50 | if (!search || !children) {
|
51 | return children;
|
52 | }
|
53 |
|
54 | var matchCount = 0;
|
55 | var remaining = children;
|
56 | var highlighterChildren = [];
|
57 |
|
58 | while (remaining) {
|
59 | var bounds = (0, _utils.getMatchBounds)(remaining, search);
|
60 |
|
61 | if (!bounds) {
|
62 | highlighterChildren.push(remaining);
|
63 | break;
|
64 | }
|
65 |
|
66 |
|
67 | var nonMatch = remaining.slice(0, bounds.start);
|
68 |
|
69 | if (nonMatch) {
|
70 | highlighterChildren.push(nonMatch);
|
71 | }
|
72 |
|
73 |
|
74 | var match = remaining.slice(bounds.start, bounds.end);
|
75 | highlighterChildren.push( _react["default"].createElement("mark", {
|
76 | className: highlightClassName,
|
77 | key: matchCount
|
78 | }, match));
|
79 | matchCount += 1;
|
80 |
|
81 | remaining = remaining.slice(bounds.end);
|
82 | }
|
83 |
|
84 | return highlighterChildren;
|
85 | };
|
86 |
|
87 | return Highlighter;
|
88 | }(_react["default"].PureComponent);
|
89 |
|
90 | (0, _defineProperty2["default"])(Highlighter, "propTypes", propTypes);
|
91 | (0, _defineProperty2["default"])(Highlighter, "defaultProps", defaultProps);
|
92 | var _default = Highlighter;
|
93 | exports["default"] = _default; |
\ | No newline at end of file |