overleaf-cep/services/web/modules/full-project-search/frontend/js/components/matched-hit-highlight.tsx
Jakob Ackermann 67342e9c33 [terraform] clsi: add pre-emp C2D capacity in zone b (#26755)
GitOrigin-RevId: aa52dec1f7135f53f8c887199c1d1e4e31ef70ff
2025-07-03 08:04:53 +00:00

49 lines
1.3 KiB
TypeScript

import React, { FC, useMemo } from 'react'
import { Hit } from '../util/search-snapshot'
export const MatchedHitHighlight: FC<{ text: string; hit: Hit }> = ({
text,
hit,
}) => {
const parts = useMemo(() => {
let before = text.substring(0, hit.matchIndex).trimStart()
const match = text.substring(hit.matchIndex, hit.matchIndex + hit.length)
let after = text.substring(hit.matchIndex + hit.length).trimEnd()
// reduce the prefix to a sensible size before trimming
if (before.length > 250) {
before = before.substring(before.length - 250)
}
while (before.length > 10) {
const replacement = before.replace(/^\S+\s+/, '')
if (before.length === replacement.length) {
break
}
before = replacement
}
// reduce the suffix to a sensible size before trimming
if (after.length > 250) {
after = after.substring(0, 250)
}
while (after.length > 100) {
const replacement = after.replace(/\s+\S+$/, '')
if (after.length === replacement.length) {
break
}
after = replacement
}
return { before, match, after }
}, [hit, text])
return (
<span className="matched-hit-snippet">
{parts.before}
<b className="matched-hit-highlight">{parts.match}</b>
{parts.after}
</span>
)
}