overleaf-cep/services/web/modules/full-project-search/frontend/js/components/matched-hit.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

45 lines
1.2 KiB
TypeScript

import { FC, useCallback, useLayoutEffect, useRef } from 'react'
import { Hit, MatchedFile } from '../util/search-snapshot'
import { MatchedHitHighlight } from './matched-hit-highlight'
import classnames from 'classnames'
export const MatchedHit: FC<{
matchedFile: MatchedFile
hit: Hit
selected?: boolean
setSelectedHit(hit?: Hit): void
tabIndex: 0 | -1
}> = ({ matchedFile, hit, selected = false, setSelectedHit, tabIndex }) => {
const containerRef = useRef<HTMLButtonElement>(null)
useLayoutEffect(() => {
if (selected) {
containerRef.current?.focus()
}
}, [selected])
const handleSelect: React.MouseEventHandler = useCallback(
event => {
event.preventDefault()
setSelectedHit(hit)
},
[hit, setSelectedHit]
)
return (
<button
className={classnames('list-group-item matched-file-hit', {
'matched-file-hit-selected': selected,
})}
ref={containerRef}
tabIndex={tabIndex}
onMouseDown={handleSelect}
aria-selected={selected}
role="option"
>
<span className="matched-line-number">{hit.lineIndex + 1}</span>
<MatchedHitHighlight text={matchedFile.lines[hit.lineIndex]} hit={hit} />
</button>
)
}