diff --git a/src/app/utils/query-url-sanitization.ts b/src/app/utils/query-url-sanitization.ts index 1d46e11fe6..0c814a5d06 100644 --- a/src/app/utils/query-url-sanitization.ts +++ b/src/app/utils/query-url-sanitization.ts @@ -58,7 +58,7 @@ export function sanitizeGraphAPISandboxUrl(url: string): string { export function sanitizeQueryUrl(url: string): string { try { return sanitizedQueryUrl(url); - } catch (e: any) { + } catch (e: unknown) { return ''; } } diff --git a/src/app/utils/resources/resources-filter.ts b/src/app/utils/resources/resources-filter.ts index a30f0f18ea..ecb2e95802 100644 --- a/src/app/utils/resources/resources-filter.ts +++ b/src/app/utils/resources/resources-filter.ts @@ -35,7 +35,18 @@ function getMatchingResourceForUrl(url: string, resources: IResource[]): IResour return node; } +const getResourceFromURL = (url: string, resource: IResource): IResource | null =>{ + url.split('/').filter(u=>u!=='').forEach((segment:string)=>{ + const foundResource = resource?.children?.find(res=> res.segment === segment); + if(foundResource){ + resource = foundResource + } + }) + return resource; +} + export { searchResources, - getMatchingResourceForUrl + getMatchingResourceForUrl, + getResourceFromURL } diff --git a/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx b/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx index 9ddd5d9be8..ea67faf227 100644 --- a/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx +++ b/src/app/views/query-runner/query-input/auto-complete/AutoComplete.tsx @@ -1,4 +1,4 @@ -import { getTheme, ITextFieldProps, KeyCodes, mergeStyles, Text, TextField } from '@fluentui/react'; +import { getTheme, ITextField, ITextFieldProps, mergeStyles, Text, TextField } from '@fluentui/react'; import { useContext, useEffect, useRef, useState } from 'react'; import { delimiters, getLastDelimiterInUrl, getSuggestions, SignContext } from '../../../../../modules/suggestions'; @@ -24,8 +24,7 @@ const AutoComplete = (props: IAutoCompleteProps) => { const dispatch = useAppDispatch(); const validation = useContext(ValidationContext); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const focusRef = useRef(null); + const focusRef = useRef(null); let element: HTMLDivElement | null | undefined = null; @@ -99,34 +98,35 @@ const AutoComplete = (props: IAutoCompleteProps) => { }; const onKeyDown = (event: React.KeyboardEvent) => { - switch (event.keyCode) { - case KeyCodes.enter: + const keyCode = event.code + switch (keyCode) { + case 'Enter': event.preventDefault(); handleEnterKeyPressed(); break; - case KeyCodes.tab: + case 'Tab': if (shouldShowSuggestions) { event.preventDefault(); handleTabKeyPressed(); } break; - case KeyCodes.up: + case 'ArrowUp': event.preventDefault(); handleUpKeyPressed(); break; - case KeyCodes.down: + case 'ArrowDown': event.preventDefault(); handleDownKeyPressed(); break; - case KeyCodes.escape: + case 'Escape': handleEscapeKeyPressed(); break; - case KeyCodes.backspace: + case 'Backspace': setBackspacing(true); break; diff --git a/src/app/views/query-runner/query-input/auto-complete/use-previous.ts b/src/app/views/query-runner/query-input/auto-complete/use-previous.ts index 80bca8bf8a..c525a62ba3 100644 --- a/src/app/views/query-runner/query-input/auto-complete/use-previous.ts +++ b/src/app/views/query-runner/query-input/auto-complete/use-previous.ts @@ -1,7 +1,7 @@ import { useRef, useEffect } from 'react'; const usePrevious = (value: string) => { - const reference = useRef(null); + const reference = useRef(''); useEffect(() => { reference.current = value; }); diff --git a/src/modules/suggestions/suggestions.ts b/src/modules/suggestions/suggestions.ts index 33abb2132b..42feb02568 100644 --- a/src/modules/suggestions/suggestions.ts +++ b/src/modules/suggestions/suggestions.ts @@ -1,8 +1,6 @@ import { ISuggestions, SignContext } from '.'; import { parseOpenApiResponse } from '../../app/utils/open-api-parser'; -import { - getMatchingResourceForUrl -} from '../../app/utils/resources/resources-filter'; +import { getResourceFromURL } from '../../app/utils/resources/resources-filter'; import { IOpenApiParseContent, IOpenApiResponse, IParsedOpenApiResponse } from '../../types/open-api'; import { IRequestOptions } from '../../types/request'; import { IResource } from '../../types/resources'; @@ -12,7 +10,6 @@ class Suggestions implements ISuggestions { public async getSuggestions(url: string, api: string, version: string, context: SignContext, resources?: IResource): Promise { - if (context === 'paths') { const resourceOptions = await this.getSuggestionsFromResources(url, resources!); if (resourceOptions) { @@ -43,7 +40,8 @@ class Suggestions implements ISuggestions { if (!url) { return this.createOpenApiResponse(resources.children, url); } else { - const matching = getMatchingResourceForUrl(url, resources.children); + // const matching = getMatchingResourceForUrl(url, resources.children); + const matching = getResourceFromURL(url, resources) if (matching && matching.children && matching.children.length > 0) { return this.createOpenApiResponse(matching.children, url) }