Spaces:
Sleeping
Sleeping
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; | |