UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

48 lines (47 loc) 1.71 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _useSharedState = require("../../shared/helpers/useSharedState.js"); var _FilterContext = require("./FilterContext.js"); var _jsxRuntime = require("react/jsx-runtime"); function FilterHighlighting({ children, connectedTo }) { var _ref, _ref2, _data$search; const context = (0, _react.useContext)(_FilterContext.FilterContext); const connectedId = (0, _react.useContext)(_FilterContext.FilterConnectedIdContext); const resolvedId = (_ref = connectedTo !== null && connectedTo !== void 0 ? connectedTo : connectedId) !== null && _ref !== void 0 ? _ref : context?.id; const { data } = (0, _useSharedState.useSharedState)(resolvedId); const search = (_ref2 = (_data$search = data?.search) !== null && _data$search !== void 0 ? _data$search : context?.state?.search) !== null && _ref2 !== void 0 ? _ref2 : ''; return (0, _react.useMemo)(() => highlightText(children, search), [children, search]); } function highlightText(text, search) { if (!search || !text) { return text; } const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(`(${escaped})`, 'gi'); const parts = text.split(regex); if (parts.length === 1) { return text; } return parts.map((part, index) => { if (regex.test(part)) { regex.lastIndex = 0; return (0, _jsxRuntime.jsx)("mark", { className: "dnb-filter__highlighting", children: part }, index); } return part; }); } var _default = exports.default = FilterHighlighting; //# sourceMappingURL=FilterHighlighting.js.map