diff --git a/packages/ui/src/ui/pages/query-tracker/module/api.ts b/packages/ui/src/ui/pages/query-tracker/module/api.ts index f8cbd12ab..6dfa22203 100644 --- a/packages/ui/src/ui/pages/query-tracker/module/api.ts +++ b/packages/ui/src/ui/pages/query-tracker/module/api.ts @@ -11,7 +11,11 @@ import {generateQuerySettings, generateQueryText} from '../utils/query_generate' import {RootState} from '../../../store/reducers'; import {makeDirectDownloadPath} from '../../../utils/navigation'; import {QueriesHistoryCursorDirection, UPDATE_QUERIES_LIST} from './query-tracker-contants'; -import {getEffectiveApiStage, getQueryTrackerRequestOptions} from './query/selectors'; +import { + getEffectiveApiStage, + getQueryAnnotations, + getQueryTrackerRequestOptions, +} from './query/selectors'; import {AnyAction} from 'redux'; import {QueryEngine} from './engines'; import {getLastSelectedACONamespaces, selectIsMultipleAco} from './query_aco/selectors'; @@ -618,6 +622,8 @@ export function updateACOQuery({ const state = getState(); const isMultipleAco = selectIsMultipleAco(state); const {stage} = getQueryTrackerRequestOptions(state); + const annotations = getQueryAnnotations(state); + const chartConfig = state.queryTracker.queryChart.visualization; return ytApiV4Id .alterQuery(YTApiId.alterQuery, { @@ -627,6 +633,10 @@ export function updateACOQuery({ ...(isMultipleAco ? {access_control_objects: aco} : {access_control_object: aco[0]}), + annotations: { + ...annotations, + chartConfig, + }, }, setup: getQTApiSetup(), }) diff --git a/packages/ui/src/ui/pages/query-tracker/module/query/selectors.ts b/packages/ui/src/ui/pages/query-tracker/module/query/selectors.ts index 838e6e690..aae8d2856 100644 --- a/packages/ui/src/ui/pages/query-tracker/module/query/selectors.ts +++ b/packages/ui/src/ui/pages/query-tracker/module/query/selectors.ts @@ -21,6 +21,7 @@ export const SHARED_QUERY_ACO = 'everyone-share'; export const getQuery = (state: RootState) => getState(state).queryItem; export const getQueryId = (state: RootState) => getState(state).queryItem?.id; +export const getQueryAnnotations = (state: RootState) => getState(state).queryItem?.annotations; export const getQueryGetParams = (state: RootState) => getState(state).params; export const getQueryDraft = (state: RootState) => getState(state).draft; diff --git a/packages/ui/src/ui/pages/query-tracker/module/queryChart/actions.ts b/packages/ui/src/ui/pages/query-tracker/module/queryChart/actions.ts index 0e50717f5..610f5a482 100644 --- a/packages/ui/src/ui/pages/query-tracker/module/queryChart/actions.ts +++ b/packages/ui/src/ui/pages/query-tracker/module/queryChart/actions.ts @@ -4,7 +4,7 @@ import {RootState} from '../../../../store/reducers'; import {wrapApiPromiseByToaster} from '../../../../utils/utils'; import {ThunkAction} from 'redux-thunk'; import {Action, Dispatch} from 'redux'; -import {getQueryItem} from '../query/selectors'; +import {getCurrentQueryACO, getQueryAnnotations, getQueryItem} from '../query/selectors'; import { Config, FieldKey, @@ -23,24 +23,38 @@ import { } from './selectors'; import {getPointValue} from '../../QueryResultsVisualization/preparers/getPointData'; import {ChartKitWidgetAxisType} from '@gravity-ui/chartkit/build/types/widget-data/axis'; +import {selectIsMultipleAco} from '../query_aco/selectors'; const DELAY = 2 * 1000; type AsyncAction = ThunkAction; -type SaveQueryChartConfig = { +type SaveQueryChartConfigPayload = { state: VisualizationState; queryId: string; }; -const saveChartConfig = (dispatch: Dispatch, chartConfig: SaveQueryChartConfig) => { +const saveChartConfig = ( + dispatch: Dispatch, + getState: () => RootState, + payload: SaveQueryChartConfigPayload, +) => { dispatch(setSaved(false)); + const state = getState(); + const annotations = getQueryAnnotations(state); + const isMultipleAco = selectIsMultipleAco(state); + const aco = getCurrentQueryACO(state); + wrapApiPromiseByToaster( ytApiV4Id.alterQuery(YTApiId.alterQuery, { parameters: { - query_id: chartConfig.queryId, + query_id: payload.queryId, + ...(isMultipleAco + ? {access_control_objects: aco} + : {access_control_object: aco[0]}), annotations: { - chartConfig: chartConfig.state, + ...annotations, + chartConfig: payload.state, }, }, }), @@ -57,9 +71,9 @@ const saveChartConfig = (dispatch: Dispatch, chartConfig: SaveQueryChartConfig) const debouncedSaveQueryChartConfig = debounce_(saveChartConfig, DELAY); export const saveQueryChartConfig = - (payload: SaveQueryChartConfig): AsyncAction => - (dispatch) => { - debouncedSaveQueryChartConfig(dispatch, payload); + (payload: SaveQueryChartConfigPayload): AsyncAction => + (dispatch, getState) => { + debouncedSaveQueryChartConfig(dispatch, getState, payload); }; export const changeAxisType =