Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/containers/Tenant/Query/QueriesHistory/QueriesHistory.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import React from 'react';

import type {Column} from '@gravity-ui/react-data-table';

import {ResizeableDataTable} from '../../../../components/ResizeableDataTable/ResizeableDataTable';
import {Search} from '../../../../components/Search';
import {TableWithControlsLayout} from '../../../../components/TableWithControlsLayout/TableWithControlsLayout';
import {TruncatedQuery} from '../../../../components/TruncatedQuery/TruncatedQuery';
import {
selectQueriesHistory,
selectQueriesHistoryFilter,
setIsDirty,
setQueryHistoryFilter,
} from '../../../../store/reducers/query/query';
import type {QueryInHistory} from '../../../../store/reducers/query/types';
import {useQueriesHistory} from '../../../../store/reducers/query/useQueriesHistory';
import {TENANT_QUERY_TABS_ID} from '../../../../store/reducers/tenant/constants';
import {setQueryTab} from '../../../../store/reducers/tenant/tenant';
import {cn} from '../../../../utils/cn';
Expand All @@ -34,9 +36,13 @@ interface QueriesHistoryProps {
function QueriesHistory({changeUserInput}: QueriesHistoryProps) {
const dispatch = useTypedDispatch();

const queriesHistory = useTypedSelector(selectQueriesHistory);
const {filteredHistoryQueries} = useQueriesHistory();

const reversedHistory = React.useMemo(() => {
return filteredHistoryQueries.toReversed();
}, [filteredHistoryQueries]);

const filter = useTypedSelector(selectQueriesHistoryFilter);
const reversedHistory = [...queriesHistory].reverse();

const applyQueryClick = (query: QueryInHistory) => {
changeUserInput({input: query.queryText});
Expand Down
31 changes: 25 additions & 6 deletions src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@ import {
} from '../../../../store/reducers/capabilities/hooks';
import {
queryApi,
saveQueryToHistory,
selectQueriesHistory,
selectQueriesHistoryCurrentIndex,
selectResult,
selectTenantPath,
setIsDirty,
setTenantPath,
} from '../../../../store/reducers/query/query';
import type {QueryResult} from '../../../../store/reducers/query/types';
import {useQueriesHistory} from '../../../../store/reducers/query/useQueriesHistory';
import {setQueryAction} from '../../../../store/reducers/queryActions/queryActions';
import {selectShowPreview, setShowPreview} from '../../../../store/reducers/schema/schema';
import {SETTING_KEYS} from '../../../../store/reducers/settings/constants';
Expand Down Expand Up @@ -77,10 +75,17 @@ export default function QueryEditor(props: QueryEditorProps) {
const {theme, changeUserInput} = props;
const savedPath = useTypedSelector(selectTenantPath);
const result = useTypedSelector(selectResult);
const historyQueries = useTypedSelector(selectQueriesHistory);
const historyCurrentIndex = useTypedSelector(selectQueriesHistoryCurrentIndex);
const showPreview = useTypedSelector(selectShowPreview);

const {
historyQueries,
historyCurrentIndex,
saveQueryToHistory,
updateQueryInHistory,
goToPreviousQuery,
goToNextQuery,
} = useQueriesHistory();

const isResultLoaded = Boolean(result);

const [querySettings] = useQueryExecutionSettings();
Expand Down Expand Up @@ -182,6 +187,17 @@ export default function QueryEditor(props: QueryEditorProps) {
base64: encodeTextWithBase64,
});

query
.then(({data}) => {
if (data?.queryId) {
updateQueryInHistory(data.queryId, data?.queryStats);
}
})
.catch((error) => {
// Do not add query stats for failed query
console.error('Failed to update query history:', error);
});

queryManagerInstance.registerQuery(query);
}

Expand All @@ -190,7 +206,7 @@ export default function QueryEditor(props: QueryEditorProps) {
// Don't save partial queries in history
if (!partial) {
if (text !== historyQueries[historyCurrentIndex]?.queryText) {
dispatch(saveQueryToHistory({queryText: text, queryId}));
saveQueryToHistory(text, queryId);
}
dispatch(setIsDirty(false));
}
Expand Down Expand Up @@ -279,6 +295,9 @@ export default function QueryEditor(props: QueryEditorProps) {
theme={theme}
handleSendExecuteClick={handleSendExecuteClick}
handleGetExplainQueryClick={handleGetExplainQueryClick}
historyQueries={historyQueries}
goToPreviousQuery={goToPreviousQuery}
goToNextQuery={goToNextQuery}
/>
</div>
</div>
Expand Down
22 changes: 11 additions & 11 deletions src/containers/Tenant/Query/QueryEditor/YqlEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,8 @@ import throttle from 'lodash/throttle';
import type Monaco from 'monaco-editor';

import {MonacoEditor} from '../../../../components/MonacoEditor/MonacoEditor';
import {
goToNextQuery,
goToPreviousQuery,
selectQueriesHistory,
selectUserInput,
setIsDirty,
} from '../../../../store/reducers/query/query';
import {selectUserInput, setIsDirty} from '../../../../store/reducers/query/query';
import type {QueryInHistory} from '../../../../store/reducers/query/types';
import {SETTING_KEYS} from '../../../../store/reducers/settings/constants';
import type {QueryAction} from '../../../../types/store/query';
import {
Expand All @@ -37,19 +32,24 @@ interface YqlEditorProps {
theme: string;
handleGetExplainQueryClick: (text: string) => void;
handleSendExecuteClick: (text: string, partial?: boolean) => void;
historyQueries: QueryInHistory[];
goToPreviousQuery: () => void;
goToNextQuery: () => void;
}

export function YqlEditor({
changeUserInput,
theme,
handleSendExecuteClick,
handleGetExplainQueryClick,
historyQueries,
goToPreviousQuery,
goToNextQuery,
}: YqlEditorProps) {
const input = useTypedSelector(selectUserInput);
const dispatch = useTypedDispatch();
const [monacoGhostInstance, setMonacoGhostInstance] =
React.useState<ReturnType<typeof createMonacoGhostInstance>>();
const historyQueries = useTypedSelector(selectQueriesHistory);
const [isCodeAssistEnabled] = useSetting(SETTING_KEYS.ENABLE_CODE_ASSISTANT);

const editorOptions = useEditorOptions();
Expand All @@ -76,7 +76,7 @@ export function YqlEditor({
window.ydbEditor = undefined;
};

const {monacoGhostConfig, prepareUserQueriesCache} = useCodeAssistHelpers();
const {monacoGhostConfig, prepareUserQueriesCache} = useCodeAssistHelpers(historyQueries);

React.useEffect(() => {
if (monacoGhostInstance && isCodeAssistEnabled) {
Expand Down Expand Up @@ -160,7 +160,7 @@ export function YqlEditor({
contextMenuGroupId: CONTEXT_MENU_GROUP_ID,
contextMenuOrder: 2,
run: () => {
dispatch(goToPreviousQuery());
goToPreviousQuery();
},
});
editor.addAction({
Expand All @@ -169,7 +169,7 @@ export function YqlEditor({
contextMenuGroupId: CONTEXT_MENU_GROUP_ID,
contextMenuOrder: 3,
run: () => {
dispatch(goToNextQuery());
goToNextQuery();
},
});
editor.addAction({
Expand Down
7 changes: 3 additions & 4 deletions src/containers/Tenant/Query/QueryEditor/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import type {AcceptEvent, DeclineEvent, IgnoreEvent, PromptFile} from '@ydb-plat
import type Monaco from 'monaco-editor';

import {codeAssistApi} from '../../../../store/reducers/codeAssist/codeAssist';
import {selectQueriesHistory} from '../../../../store/reducers/query/query';
import type {QueryInHistory} from '../../../../store/reducers/query/types';
import {SETTING_KEYS} from '../../../../store/reducers/settings/constants';
import type {TelemetryOpenTabs} from '../../../../types/api/codeAssist';
import {useSetting, useTypedSelector} from '../../../../utils/hooks';
import {useSetting} from '../../../../utils/hooks';
import {YQL_LANGUAGE_ID} from '../../../../utils/monaco/constats';
import {useSavedQueries} from '../utils/useSavedQueries';

Expand Down Expand Up @@ -39,13 +39,12 @@ export function useEditorOptions() {
return options;
}

export function useCodeAssistHelpers() {
export function useCodeAssistHelpers(historyQueries: QueryInHistory[]) {
const [sendCodeAssistPrompt] = codeAssistApi.useLazyGetCodeAssistSuggestionsQuery();
const [acceptSuggestion] = codeAssistApi.useAcceptSuggestionMutation();
const [discardSuggestion] = codeAssistApi.useDiscardSuggestionMutation();
const [ignoreSuggestion] = codeAssistApi.useIgnoreSuggestionMutation();
const [sendUserQueriesData] = codeAssistApi.useSendUserQueriesDataMutation();
const historyQueries = useTypedSelector(selectQueriesHistory);
const {savedQueries} = useSavedQueries();

const getCodeAssistSuggestions = React.useCallback(
Expand Down
4 changes: 0 additions & 4 deletions src/store/reducers/query/__test__/tabPersistence.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@ import type {QueryState} from '../types';
describe('QueryResultViewer tab persistence integration', () => {
const initialState: QueryState = {
input: '',
history: {
queries: [],
currentIndex: -1,
},
};

test('should save and retrieve tab selection for explain queries', () => {
Expand Down
Loading
Loading