import React from 'react'; import {useHistory, useLocation} from 'react-router-dom'; import {v4 as uuidv4} from 'uuid'; import {QueryDetails} from '../../../../../components/QueryDetails/QueryDetails'; import {getTenantPath, parseQuery} from '../../../../../routes'; import {useMultiTabQueryEditorEnabled} from '../../../../../store/reducers/capabilities/hooks'; import { changeUserInput, setIsDirty, setQueryTabContent, } from '../../../../../store/reducers/query/query'; import { TENANT_PAGE, TENANT_PAGES_IDS, TENANT_QUERY_TABS_ID, } from '../../../../../store/reducers/tenant/constants'; import type {KeyValueRow} from '../../../../../types/api/query'; import {useTypedDispatch} from '../../../../../utils/hooks'; import {getQueryTextTabTitle} from '../../../Query/utils/queryTabTitles'; import {TenantTabsGroups} from '../../../TenantPages'; import {createQueryInfoItems} from '../utils'; import {NotFoundContainer} from './NotFoundContainer'; interface QueryDetailsDrawerContentProps { // Three cases: // 1. row is KeyValueRow and we can show it. // 2. row is null and we can show not found container. // 3. row is undefined and we can show nothing. row?: KeyValueRow | null; onClose: () => void; } export const QueryDetailsDrawerContent = ({row, onClose}: QueryDetailsDrawerContentProps) => { const dispatch = useTypedDispatch(); const location = useLocation(); const history = useHistory(); const isMultiTabEnabled = useMultiTabQueryEditorEnabled(); const handleOpenInEditor = React.useCallback(() => { if (row) { const input = row.QueryText as string; if (isMultiTabEnabled) { dispatch( setQueryTabContent({ tabId: uuidv4(), title: getQueryTextTabTitle(input), input, }), ); dispatch(setIsDirty(false)); } else { dispatch(changeUserInput({input})); dispatch(setIsDirty(false)); } const queryParams = parseQuery(location); const queryPath = getTenantPath({ ...queryParams, [TENANT_PAGE]: TENANT_PAGES_IDS.query, [TenantTabsGroups.queryTab]: TENANT_QUERY_TABS_ID.newQuery, }); history.push(queryPath); } }, [dispatch, history, isMultiTabEnabled, location, row]); if (row) { return ( ); } return ; };