/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { createContext, useContext, useState } from 'react'; import { DocumentsIndex, SearchResults, QueryError } from '../types/index'; import { getDocumentRank, DocumentRank } from './utils'; export const initialQueryErrorState: QueryError = { selectIndex: '', queryString: '', }; export interface SearchRelevanceContextProps { documentsIndexes: DocumentsIndex[]; setDocumentsIndexes: React.Dispatch>; showFlyout: boolean; setShowFlyout: React.Dispatch>; comparedResult1: DocumentRank; updateComparedResult1: (result: SearchResults) => void; comparedResult2: DocumentRank; updateComparedResult2: (result: SearchResults) => void; selectedIndex1: string; setSelectedIndex1: React.Dispatch>; selectedIndex2: string; setSelectedIndex2: React.Dispatch>; queryError1: QueryError; setQueryError1: React.Dispatch>; queryError2: QueryError; setQueryError2: React.Dispatch>; } export const SearchRelevanceContext = createContext(null); export const useSearchRelevanceContext = () => { const context = useContext(SearchRelevanceContext); if (!context) { throw Error('No Search Relevance context'); } return context; }; export const SearchRelevanceContextProvider = ({ children }: { children: React.ReactNode }) => { const [documentsIndexes, setDocumentsIndexes] = useState([]); const [showFlyout, setShowFlyout] = useState(false); const [comparedResult1, setComparedResult1] = useState({}); const [comparedResult2, setComparedResult2] = useState({}); const [selectedIndex1, setSelectedIndex1] = useState(''); const [selectedIndex2, setSelectedIndex2] = useState(''); const [queryError1, setQueryError1] = useState(initialQueryErrorState); const [queryError2, setQueryError2] = useState(initialQueryErrorState); const updateComparedResult1 = (result: SearchResults) => { setComparedResult1(getDocumentRank(result?.hits?.hits)); }; const updateComparedResult2 = (result: SearchResults) => { setComparedResult2(getDocumentRank(result?.hits?.hits)); }; return ( {children} ); };