Skip to content

Commit 02c32c4

Browse files
authored
fix: code snippet loads when a sample is selected (#3789)
1 parent 289a1e3 commit 02c32c4

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

src/app/services/slices/snippet.slice.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ const snippetSlice = createSlice({
8989
})
9090
.addCase(getSnippet.fulfilled, (state, action) => {
9191
state.pending = false;
92-
state.data = action.payload as Snippet;
92+
const [rawKey, value] = Object.entries(action.payload)[0];
93+
const key = rawKey.toLowerCase();
94+
state.data = { [key]: value };
9395
state.error = {} as SnippetError;
9496
})
9597
.addCase(getSnippet.rejected, (state, action) => {

src/app/views/query-response/snippets/Snippets.tsx

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ import {
77
Spinner,
88
Tab,
99
TabList,
10-
TabValue,
1110
Text
1211
} from '@fluentui/react-components';
13-
import { useContext, useEffect, useState } from 'react';
12+
import { useContext, useEffect } from 'react';
1413
import { useAppDispatch, useAppSelector } from '../../../../store';
1514
import { componentNames, telemetry } from '../../../../telemetry';
1615
import { CODE_SNIPPETS_COPY_BUTTON } from '../../../../telemetry/component-names';
1716
import { ValidationContext } from '../../../services/context/validation-context/ValidationContext';
18-
import { getSnippet } from '../../../services/slices/snippet.slice';
17+
import { getSnippet, setSnippetTabSuccess } from '../../../services/slices/snippet.slice';
1918
import { translateMessage } from '../../../utils/translate-messages';
2019
import { Monaco } from '../../common';
2120
import { copyAndTrackText } from '../../common/copy';
@@ -129,7 +128,15 @@ const trackLinkClickedEvent = (
129128

130129
const ExtraSnippetInformation: React.FC<{ language: string }> = ({ language }) => {
131130
const styles = useSnippetStyles();
132-
const { sdkDownloadLink, sdkDocLink } = supportedLanguages[language];
131+
const langKey = Object.keys(supportedLanguages).find(
132+
(key) => key.toLowerCase() === language.toLowerCase()
133+
);
134+
135+
if (!langKey) {
136+
return null;
137+
}
138+
139+
const { sdkDownloadLink, sdkDocLink } = supportedLanguages[langKey];
133140
const libParagraph =
134141
setCommentSymbol(language) +
135142
translateMessage('Leverage libraries') +
@@ -182,10 +189,14 @@ const GetSnippets = () => {
182189

183190
const RenderSnippets = () => {
184191
const styles = useSnippetStyles();
185-
const [selectedLanguage, setSelectedLanguage] = useState<TabValue>('CSharp');
192+
const dispatch = useAppDispatch();
193+
const selectedLanguage = useAppSelector(state => state.snippets.snippetTab);
186194

187195
const onTabSelect = (_event: SelectTabEvent, data: SelectTabData) => {
188-
setSelectedLanguage(data.value);
196+
const newLang = data.value as string;
197+
dispatch(setSnippetTabSuccess(newLang));
198+
dispatch(getSnippet(newLang.toLowerCase()));
199+
telemetry.trackTabClickEvent(newLang);
189200
};
190201
return (
191202
<div id='snippets-tablist' className={styles.container}>
@@ -213,12 +224,14 @@ const SnippetContent: React.FC<SnippetContentProps> = (
213224
const dispatch = useAppDispatch();
214225
const language = props.language.toLowerCase();
215226
const snippets = useAppSelector((state) => state.snippets);
227+
const sampleQuery = useAppSelector((state) => state.sampleQuery);
228+
const snippetTab = useAppSelector((state) => state.snippets.snippetTab);
216229
const { data, pending: loadingState, error } = snippets;
217230
const hasSnippetError =
218231
(error?.status && error.status === 404) ||
219232
(error?.status && error.status === 400);
220233

221-
const snippet = !loadingState && data ? data[language] : '';
234+
const snippet = !loadingState && data ? data[language.toLowerCase()] : '';
222235

223236
const handleCopy = async () => {
224237
copyAndTrackText(snippet, CODE_SNIPPETS_COPY_BUTTON, {
@@ -227,8 +240,16 @@ const SnippetContent: React.FC<SnippetContentProps> = (
227240
};
228241

229242
useEffect(() => {
230-
dispatch(getSnippet(language));
231-
}, [language, dispatch]);
243+
if (snippetTab) {
244+
dispatch(getSnippet(snippetTab.toLowerCase()));
245+
}
246+
}, [snippetTab]);
247+
248+
useEffect(() => {
249+
if (sampleQuery && snippetTab) {
250+
dispatch(getSnippet(snippetTab.toLowerCase()));
251+
}
252+
}, [sampleQuery]);
232253

233254
const showSpinner = loadingState && !hasSnippetError;
234255
const notAvailable = !loadingState && hasSnippetError;

0 commit comments

Comments
 (0)