muryshev's picture
init
79278ec
import "./SearchResults.scss";
import { ChunkType, DocumentDataType } from "@/api/predictions/types";
import { useMemo, useState } from "react";
import { DocumentModal } from "../documentModal/DocumentModal";
import FlipMove from "react-flip-move";
import GroupResults from "../groupResults/GroupResults";
import { RocksNNResults } from "../rocksNNResults/RocksNNResults";
import SearchResultsItem from "../searchResultsItem/SearchResultsItem";
import { SearchResultsProps } from "./SearchResultsProps";
import SegmentationResult from "../segmentationResults/SegmentationResult";
import StaffResultsItem from "../staffResultsItem/StaffResultsItem";
const SearchResults = ({ data, loading, documentsNumbers = [] }: SearchResultsProps) => {
const [isReadOpen, setIsReadOpen] = useState(false);
const [currentFile, setCurrentFile] = useState<{
file_xml_name: string;
file_id: string | null;
filename: string;
}>({ filename: "", file_id: null, file_xml_name: "" });
const llmResults = useMemo(
() => data.filter((document) => documentsNumbers.includes(document.number)),
[documentsNumbers, data]
);
const sortedResults = useMemo(
() => (documentsNumbers.length > 0 ? llmResults : data),
[data, documentsNumbers.length, llmResults]
);
const handleRead = (document: DocumentDataType) => {
setCurrentFile({
file_id: document.id,
file_xml_name: "", //TODO: что это и нужно ли?
filename:
document.title && document.title !== "unknown"
? document.title.toUpperCase()
: document.filename.replace(".json", "").toUpperCase(),
});
setIsReadOpen(true);
};
return (
<div className="search_results">
<div className="label">
<span>Результаты поиска</span>
</div>
<FlipMove>
{!loading && sortedResults.length > 0
? sortedResults.map((document) => {
switch (document.type) {
case ChunkType.doc_chunks:
return document.chunk.doc_chunks ? (
<SearchResultsItem
key={document.chunk.doc_chunks?.filename + document.number}
document={document.chunk.doc_chunks}
index={document.number}
handleRead={handleRead}
/>
) : null;
case ChunkType.people_search:
return document.chunk.people_search ? (
<StaffResultsItem
key={document.chunk.people_search.person_name + document.number}
staff={document.chunk.people_search}
index={document.number}
/>
) : null;
case ChunkType.groups_search:
return document.chunk.groups_search ? (
<GroupResults
key={document.chunk.groups_search?.group_name + document.number}
group={document.chunk.groups_search}
index={document.number}
/>
) : null;
case ChunkType.rocks_nn_search:
return document.chunk.rocks_nn_search ? (
<RocksNNResults
key={document.chunk.rocks_nn_search?.division + document.number}
rocksNN={document.chunk.rocks_nn_search}
index={document.number}
/>
) : null;
case ChunkType.segmentation_search:
return document.chunk.segmentation_search ? (
<SegmentationResult
key={document.chunk.segmentation_search?.segmentation_model + document.number}
segmentationModel={document.chunk.segmentation_search}
index={document.number}
/>
) : null;
default:
break;
}
})
: null}
</FlipMove>
<DocumentModal isOpen={isReadOpen} setIsOpen={setIsReadOpen} {...currentFile} />
</div>
);
};
export default SearchResults;