@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
48 lines (47 loc) • 1.71 kB
JavaScript
;
"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