import React from "react";
import { isNullOrUndefined, unionSortedHighlights } from "../../utils";
import Kendra from "aws-sdk/clients/kendra";
import HighlightedText from "./Highlight";
import "../../search.scss";
interface TextHighlightsProps {
className?: string;
textWithHighlights: Kendra.TextWithHighlights;
}
export default class TextHighlights extends React.Component<
TextHighlightsProps,
{}
> {
render() {
const { className, textWithHighlights } = this.props;
if (isNullOrUndefined(textWithHighlights)) {
return null;
}
const text = textWithHighlights.Text;
if (isNullOrUndefined(textWithHighlights.Highlights)) {
return {text};
}
// TopAnswer will be out of order, sort the highlights
const sortedHighlights = unionSortedHighlights(
textWithHighlights.Highlights!.sort(
(highlight1: any, highlight2: any) =>
highlight1.BeginOffset - highlight2.BeginOffset
)
);
const lastHighlight = sortedHighlights[sortedHighlights.length - 1];
return (
{sortedHighlights.map((highlight: any, idx: number) => (
{text!.substring(
idx === 0 ? 0 : sortedHighlights[idx - 1].EndOffset,
highlight.BeginOffset
)}
))}
{text!.substring(lastHighlight ? lastHighlight.EndOffset : 0)}
);
}
}