diff --git a/public/pages/CreateRollup/containers/CreateRollup/CreateRollup.tsx b/public/pages/CreateRollup/containers/CreateRollup/CreateRollup.tsx index 1572e0e89..92905139e 100644 --- a/public/pages/CreateRollup/containers/CreateRollup/CreateRollup.tsx +++ b/public/pages/CreateRollup/containers/CreateRollup/CreateRollup.tsx @@ -36,7 +36,7 @@ interface CreateRollupProps extends RouteComponentProps, DataSourceMenuPropertie hasAggregation: boolean; } -export class CreateRollup extends Component { +export default class CreateRollup extends Component { render() { if (this.props.currentStep !== 1) { return null; @@ -63,9 +63,3 @@ export class CreateRollup extends Component { ); } } - -export default function (props: CreateRollupProps) { - const dataSourceMenuProperties = useContext(DataSourceMenuContext); - useUpdateUrlWithDataSourceProperties(); - return ; -} diff --git a/public/pages/CreateRollup/containers/CreateRollupForm/CreateRollupForm.tsx b/public/pages/CreateRollup/containers/CreateRollupForm/CreateRollupForm.tsx index bf743f838..b16281742 100644 --- a/public/pages/CreateRollup/containers/CreateRollupForm/CreateRollupForm.tsx +++ b/public/pages/CreateRollup/containers/CreateRollupForm/CreateRollupForm.tsx @@ -5,7 +5,7 @@ import React, { ChangeEvent, Component, useContext } from "react"; import { EuiButton, EuiButtonEmpty, EuiComboBoxOptionOption, EuiFlexGroup, EuiFlexItem } from "@elastic/eui"; -import { RouteComponentProps } from "react-router-dom"; +import { RouteComponentProps, useHistory } from "react-router-dom"; import moment from "moment"; import { RollupService } from "../../../../services"; import { BREADCRUMBS, ROUTES } from "../../../../utils/constants"; @@ -21,10 +21,15 @@ import CreateRollupStep3 from "../CreateRollupStep3"; import CreateRollupStep4 from "../CreateRollupStep4"; import { compareFieldItem, parseFieldOptions } from "../../utils/helpers"; import { CoreServicesContext } from "../../../../components/core_services"; -import { DataSourceMenuContext, DataSourceMenuProperties } from "../../../../services/DataSourceMenuContext"; +import { + DataSourceMenuContext, + DataSourceMenuProperties, + DataSourceMenuReadOnlyContext, + DataSourceMenuReadOnlyProperties, +} from "../../../../services/DataSourceMenuContext"; import { useUpdateUrlWithDataSourceProperties } from "../../../../components/MDSEnabledComponent"; -interface CreateRollupFormProps extends RouteComponentProps, DataSourceMenuProperties { +interface CreateRollupFormProps extends RouteComponentProps, DataSourceMenuProperties, DataSourceMenuReadOnlyProperties { rollupService: RollupService; indexService: IndexService; } @@ -226,6 +231,14 @@ export class CreateRollupForm extends Component) { + const dataSourceReadOnlyProperties = useContext(DataSourceMenuReadOnlyContext); const dataSourceMenuProperties = useContext(DataSourceMenuContext); useUpdateUrlWithDataSourceProperties(); - return ; + return ; } diff --git a/public/pages/CreateTransform/components/DefineTransforms/DefineTransforms.tsx b/public/pages/CreateTransform/components/DefineTransforms/DefineTransforms.tsx index 79d3fcc52..d13b84c0b 100644 --- a/public/pages/CreateTransform/components/DefineTransforms/DefineTransforms.tsx +++ b/public/pages/CreateTransform/components/DefineTransforms/DefineTransforms.tsx @@ -96,7 +96,7 @@ export default function DefineTransforms({ const fetchData = useCallback(async () => { setLoading(true); try { - const response = await transformService.searchSampleData(sourceIndex, { from: 0, size: DefaultSampleDataSize }, sourceIndexFilter); + const response = await transformService.searchSampleData(sourceIndex, sourceIndexFilter, { from: 0, size: DefaultSampleDataSize }); if (response.ok) { setData(response.response.data); @@ -162,7 +162,7 @@ export default function DefineTransforms({ } const val = data[rowIndex]._source[columnId]; return val !== undefined ? JSON.stringify(val) : "-"; - } + }; //TODO: remove duplicate code here after extracting the first table as separate component if (isReadOnly) diff --git a/public/pages/CreateTransform/containers/CreateTransformForm/CreateTransformForm.tsx b/public/pages/CreateTransform/containers/CreateTransformForm/CreateTransformForm.tsx index 326daff6c..a2a46f4ab 100644 --- a/public/pages/CreateTransform/containers/CreateTransformForm/CreateTransformForm.tsx +++ b/public/pages/CreateTransform/containers/CreateTransformForm/CreateTransformForm.tsx @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { ChangeEvent, Component } from "react"; +import React, { ChangeEvent, Component, useContext } from "react"; import { EuiButton, EuiButtonEmpty, EuiComboBoxOptionOption, EuiFlexGroup, EuiFlexItem } from "@elastic/eui"; import { RouteComponentProps } from "react-router-dom"; import moment from "moment"; @@ -27,8 +27,15 @@ import SpecifyScheduleStep from "../SpecifyScheduleStep"; import ReviewAndCreateStep from "../ReviewAndCreateStep"; import { compareFieldItem, createdTransformToastMessage, isGroupBy, parseFieldOptions } from "../../utils/helpers"; import { CoreServicesContext } from "../../../../components/core_services"; - -interface CreateTransformFormProps extends RouteComponentProps { +import { + DataSourceMenuContext, + DataSourceMenuProperties, + DataSourceMenuReadOnlyContext, + DataSourceMenuReadOnlyProperties, +} from "../../../../services/DataSourceMenuContext"; +import { useUpdateUrlWithDataSourceProperties } from "../../../../components/MDSEnabledComponent"; + +interface CreateTransformFormProps extends RouteComponentProps, DataSourceMenuProperties, DataSourceMenuReadOnlyProperties { rollupService: RollupService; transformService: TransformService; indexService: IndexService; @@ -78,7 +85,7 @@ interface CreateTransformFormState { isLoading: boolean; } -export default class CreateTransformForm extends Component { +export class CreateTransformForm extends Component { static contextType = CoreServicesContext; _isMount: boolean; @@ -188,11 +195,10 @@ export default class CreateTransformForm extends Component) { + const dataSourceReadOnlyProperties = useContext(DataSourceMenuReadOnlyContext); + const dataSourceMenuProperties = useContext(DataSourceMenuContext); + useUpdateUrlWithDataSourceProperties(); + return ; +} diff --git a/public/pages/EditRollup/containers/EditRollup.tsx b/public/pages/EditRollup/containers/EditRollup.tsx index cec6dc41e..ea46a8adb 100644 --- a/public/pages/EditRollup/containers/EditRollup.tsx +++ b/public/pages/EditRollup/containers/EditRollup.tsx @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { ChangeEvent, Component } from "react"; +import React, { ChangeEvent, Component, useContext } from "react"; import { RouteComponentProps } from "react-router-dom"; import moment from "moment"; import queryString from "query-string"; @@ -17,6 +17,7 @@ import { RollupService } from "../../../services"; import { EMPTY_ROLLUP } from "../../CreateRollup/utils/constants"; import { CoreServicesContext } from "../../../components/core_services"; import { delayTimeUnitToMS, msToDelayTimeUnit } from "../../CreateRollup/utils/helpers"; +import { useUpdateUrlWithDataSourceProperties } from "../../../components/MDSEnabledComponent"; interface EditRollupProps extends RouteComponentProps { rollupService: RollupService; @@ -45,7 +46,7 @@ interface EditRollupState { rollupJSON: any; } -export default class EditRollup extends Component { +export class EditRollup extends Component { static contextType = CoreServicesContext; constructor(props: EditRollupProps) { super(props); @@ -343,3 +344,8 @@ export default class EditRollup extends Component; +} diff --git a/public/pages/Main/Main.tsx b/public/pages/Main/Main.tsx index dcbbd7ae1..2f2568438 100644 --- a/public/pages/Main/Main.tsx +++ b/public/pages/Main/Main.tsx @@ -58,9 +58,10 @@ import ForceMerge from "../ForceMerge"; import Notifications from "../Notifications"; import ComposableTemplates from "../ComposableTemplates"; import CreateComposableTemplate from "../CreateComposableTemplate"; -import { DataSourceMenuContext, DataSourceMenuProperties } from "../../services/DataSourceMenuContext"; +import { DataSourceMenuContext, DataSourceMenuProperties, DataSourceMenuReadOnlyContext } from "../../services/DataSourceMenuContext"; import queryString from "query-string"; import { DataSourceManagementPluginSetup } from "../../../../../src/plugins/data_source_management/public"; +import { bool } from "aws-sdk/clients/signer"; enum Navigation { IndexManagement = "Index Management", @@ -131,7 +132,9 @@ interface MainProps extends RouteComponentProps { dataSourceManagement: DataSourceManagementPluginSetup; } -interface MainState extends Pick {} +interface MainState extends Pick { + dataSourceReadOnly: boolean; +} const dataSourceEnabledPaths: string[] = [ ROUTES.CREATE_DATA_STREAM, @@ -159,28 +162,38 @@ const dataSourceEnabledPaths: string[] = [ ROUTES.REINDEX, ROUTES.ROLLUPS, ROUTES.CREATE_ROLLUP, + ROUTES.EDIT_ROLLUP, + ROUTES.ROLLUP_DETAILS, + ROUTES.TRANSFORMS, + ROUTES.CREATE_TRANSFORM, ]; export default class Main extends Component { constructor(props: MainProps) { super(props); + let dataSourceId = ""; + let dataSourceLabel = ""; if (props.multiDataSourceEnabled) { - const { dataSourceId = "", dataSourceLabel = "" } = queryString.parse(this.props.location.search) as { + const { dataSourceId: parsedDataSourceId, dataSourceLabel: parsedDataSourceLabel } = queryString.parse( + this.props.location.search + ) as { dataSourceId: string; dataSourceLabel: string; }; - this.state = { - dataSourceId: dataSourceId, - dataSourceLabel: dataSourceLabel, - }; - } else { - this.state = { - dataSourceId: "", - dataSourceLabel: "", - }; + dataSourceId = parsedDataSourceId || ""; + dataSourceLabel = parsedDataSourceLabel || ""; } + this.state = { + dataSourceId: dataSourceId, + dataSourceLabel: dataSourceLabel, + dataSourceReadOnly: false, + }; } + setDataSourceReadOnly = (readonly: boolean) => { + this.setState({ dataSourceReadOnly: readonly }); + }; + isDataSourceEnabledForPath(path: string): boolean { return dataSourceEnabledPaths.some((dataSourceEnabledPath: string) => path.startsWith(dataSourceEnabledPath)); } @@ -215,6 +228,7 @@ export default class Main extends Component { services.policyService = new PolicyService(http, this.state.dataSourceId, this.props.multiDataSourceEnabled); services.notificationService = new NotificationService(http, this.state.dataSourceId, this.props.multiDataSourceEnabled); services.rollupService = new RollupService(http, this.state.dataSourceId, this.props.multiDataSourceEnabled); + services.transformService = new TransformService(http, this.state.dataSourceId, this.props.multiDataSourceEnabled); } return services; } @@ -341,504 +355,548 @@ export default class Main extends Component { multiDataSourceEnabled: this.props.multiDataSourceEnabled, }} > - {this.props.multiDataSourceEnabled && ( - - ( - { - if (this.state.dataSourceId && this.state.dataSourceId !== "") { - return [ - { - id: this.state.dataSourceId, - label: this.state.dataSourceLabel, - }, - ]; - } - return undefined; - })()} - fullWidth={false} - hideLocalCluster={false} - /> - )} - /> - ( - { - this.setState({ dataSourceId, dataSourceLabel }); - }} - disableDataSourceSelectable={false} - notifications={services.notificationService} - savedObjects={core.savedObjects.client} - selectedOption={(() => { - if (this.state.dataSourceId && this.state.dataSourceId !== "") { - return [ - { - id: this.state.dataSourceId, - label: this.state.dataSourceLabel, - }, - ]; - } - return undefined; - })()} - fullWidth={false} - hideLocalCluster={false} - /> - )} - /> - - )} - - - {/* Hide side navigation bar when creating or editing rollup job*/} - {!HIDDEN_NAV_ROUTES.includes(pathname) && - !HIDDEN_NAV_STARTS_WITH_ROUTE.some((item) => pathname.startsWith(item)) ? ( - - - - ) : null} - + + {this.props.multiDataSourceEnabled && ( ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( - - )} - /> - ( - ( + { + if (this.state.dataSourceId && this.state.dataSourceId !== "") { + return [ + { + id: this.state.dataSourceId, + label: this.state.dataSourceLabel, + }, + ]; + } + return undefined; + })()} + fullWidth={false} + hideLocalCluster={false} /> )} /> ( - ( + { + this.setState({ dataSourceId, dataSourceLabel }); + }} + disableDataSourceSelectable={false} + notifications={services.notificationService} + savedObjects={core.savedObjects.client} + selectedOption={(() => { + if (this.state.dataSourceId && this.state.dataSourceId !== "") { + return [ + { + id: this.state.dataSourceId, + label: this.state.dataSourceLabel, + }, + ]; + } + return undefined; + })()} + fullWidth={false} + hideLocalCluster={false} /> )} /> ( - ( + { + this.setState({ dataSourceId, dataSourceLabel }); + } + } + notifications={this.state.dataSourceReadOnly ? undefined : services.notificationService} + savedObjects={this.state.dataSourceReadOnly ? undefined : core.savedObjects.client} + selectedOption={(() => { + if (this.state.dataSourceId && this.state.dataSourceId !== "") { + return [ + { + id: this.state.dataSourceId, + label: this.state.dataSourceLabel, + }, + ]; + } + return undefined; + })()} + fullWidth={false} + hideLocalCluster={false} /> )} /> - - queryString.parse(this.props.location.search).type == "visual" ? ( - + )} + + + {/* Hide side navigation bar when creating or editing rollup job*/} + {!HIDDEN_NAV_ROUTES.includes(pathname) && + !HIDDEN_NAV_STARTS_WITH_ROUTE.some((item) => pathname.startsWith(item)) ? ( + + + + ) : null} + + + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( + - ) : ( - - ) - } - /> - - queryString.parse(this.props.location.search).type == "visual" ? ( - + ( + - ) : ( - - ) - } - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- + ( + -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- + ( + -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - ( -
- -
- )} - /> - -
-
-
+ )} + /> + + queryString.parse(this.props.location.search).type == "visual" ? ( + + ) : ( + + ) + } + /> + + queryString.parse(this.props.location.search).type == "visual" ? ( + + ) : ( + + ) + } + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + ( +
+ +
+ )} + /> + +
+
+
+ ) diff --git a/public/pages/RollupDetails/containers/RollupDetails/RollupDetails.tsx b/public/pages/RollupDetails/containers/RollupDetails/RollupDetails.tsx index 78eb046bc..1b4109e25 100644 --- a/public/pages/RollupDetails/containers/RollupDetails/RollupDetails.tsx +++ b/public/pages/RollupDetails/containers/RollupDetails/RollupDetails.tsx @@ -33,6 +33,7 @@ import { DimensionItem, MetricItem, RollupDimensionItem, RollupMetadata, RollupM import { renderTime } from "../../../Rollups/utils/helpers"; import DeleteModal from "../../../Rollups/components/DeleteModal"; import { CoreServicesContext } from "../../../../components/core_services"; +import { useUpdateUrlWithDataSourceProperties } from "../../../../components/MDSEnabledComponent"; interface RollupDetailsProps extends RouteComponentProps { rollupService: RollupService; @@ -69,7 +70,7 @@ interface RollupDetailsState { isDeleteModalVisible: boolean; } -export default class RollupDetails extends Component { +export class RollupDetails extends Component { static contextType = CoreServicesContext; constructor(props: RollupDetailsProps) { super(props); @@ -412,3 +413,8 @@ export default class RollupDetails extends Component; +} diff --git a/public/pages/Rollups/containers/Rollups/Rollups.tsx b/public/pages/Rollups/containers/Rollups/Rollups.tsx index 7fea01eae..4c06703e7 100644 --- a/public/pages/Rollups/containers/Rollups/Rollups.tsx +++ b/public/pages/Rollups/containers/Rollups/Rollups.tsx @@ -74,6 +74,7 @@ export class Rollups extends MDSEnabledComponent { const { from, size, search, sortField, sortDirection } = getURLQueryParams(this.props.location); this.state = { + ...this.state, totalRollups: 0, from, size, diff --git a/public/pages/Transforms/containers/Transforms/EditTransform.tsx b/public/pages/Transforms/containers/Transforms/EditTransform.tsx index b674f3c9e..9fb1c0b5b 100644 --- a/public/pages/Transforms/containers/Transforms/EditTransform.tsx +++ b/public/pages/Transforms/containers/Transforms/EditTransform.tsx @@ -17,6 +17,7 @@ import Schedule from "../../components/Schedule"; import Indices from "../../components/Indices"; import moment from "moment"; import { Transform } from "../../../../../models/interfaces"; +import { useUpdateUrlWithDataSourceProperties } from "../../../../components/MDSEnabledComponent"; interface EditTransformProps extends RouteComponentProps { transformService: TransformService; @@ -45,7 +46,7 @@ interface EditTransformState { schedule: string; } -export default class EditTransform extends Component { +export class EditTransform extends Component { static contextType = CoreServicesContext; constructor(props: EditTransformProps) { @@ -297,3 +298,8 @@ export default class EditTransform extends Component; +} diff --git a/public/pages/Transforms/containers/Transforms/TransformDetails.tsx b/public/pages/Transforms/containers/Transforms/TransformDetails.tsx index cbf19d2f7..bf2d9fc5f 100644 --- a/public/pages/Transforms/containers/Transforms/TransformDetails.tsx +++ b/public/pages/Transforms/containers/Transforms/TransformDetails.tsx @@ -36,6 +36,7 @@ import { EMPTY_TRANSFORM } from "../../utils/constants"; import TransformSettings from "./TransformSettings"; import GeneralInformation from "../../components/GeneralInformation"; import { buildIntervalScheduleText } from "../../../CreateRollup/utils/helpers"; +import { useUpdateUrlWithDataSourceProperties } from "../../../../components/MDSEnabledComponent"; interface TransformDetailsProps extends RouteComponentProps { transformService: TransformService; @@ -64,7 +65,7 @@ interface TransformDetailsState { isPopOverOpen: boolean; } -export default class TransformDetails extends Component { +export class TransformDetails extends Component { static contextType = CoreServicesContext; constructor(props: TransformDetailsProps) { super(props); @@ -440,3 +441,8 @@ export default class TransformDetails extends Component; +} diff --git a/public/pages/Transforms/containers/Transforms/Transforms.tsx b/public/pages/Transforms/containers/Transforms/Transforms.tsx index fea04a856..0ec8986af 100644 --- a/public/pages/Transforms/containers/Transforms/Transforms.tsx +++ b/public/pages/Transforms/containers/Transforms/Transforms.tsx @@ -31,7 +31,7 @@ import queryString from "query-string"; import { RouteComponentProps } from "react-router-dom"; import TransformService from "../../../../services/TransformService"; import { DocumentTransform } from "../../../../../models/interfaces"; -import React, { Component } from "react"; +import React, { Component, useContext } from "react"; import { CoreServicesContext } from "../../../../components/core_services"; import { getURLQueryParams, renderTime } from "../../utils/helpers"; import { TransformQueryParams } from "../../models/interfaces"; @@ -44,12 +44,14 @@ import { DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_QUERY_PARAMS } from "../../../Indice import _ from "lodash"; import { ManagedCatIndex } from "../../../../../server/models/interfaces"; import { renderContinuous } from "../../../Rollups/utils/helpers"; +import { DataSourceMenuContext, DataSourceMenuProperties } from "../../../../services/DataSourceMenuContext"; +import MDSEnabledComponent from "../../../../components/MDSEnabledComponent"; -interface TransformProps extends RouteComponentProps { +interface TransformProps extends RouteComponentProps, DataSourceMenuProperties { transformService: TransformService; } -interface TransformState { +interface TransformState extends DataSourceMenuProperties { totalTransforms: number; from: number; size: number; @@ -64,7 +66,7 @@ interface TransformState { isDeleteModalVisible: boolean; } -export default class Transforms extends Component { +export class Transforms extends MDSEnabledComponent { static contextType = CoreServicesContext; constructor(props: TransformProps) { super(props); @@ -72,6 +74,7 @@ export default class Transforms extends Component) { + const dataSourceMenuProps = useContext(DataSourceMenuContext); + return ; +} diff --git a/public/services/DataSourceMenuContext.ts b/public/services/DataSourceMenuContext.ts index 3770b1100..8e30d3b16 100644 --- a/public/services/DataSourceMenuContext.ts +++ b/public/services/DataSourceMenuContext.ts @@ -1,3 +1,4 @@ +import { create } from "lodash"; import { createContext } from "react"; export interface DataSourceMenuProperties { @@ -6,6 +7,11 @@ export interface DataSourceMenuProperties { multiDataSourceEnabled: boolean; } +export interface DataSourceMenuReadOnlyProperties { + dataSourceReadOnly: boolean; + setDataSourceReadOnly: (dataSourceMenuReadOnly: boolean) => void; +} + const DataSourceMenuContext = createContext({ dataSourceId: "", dataSourceLabel: "", @@ -14,4 +20,9 @@ const DataSourceMenuContext = createContext({ const DataSourceMenuConsumer = DataSourceMenuContext.Consumer; -export { DataSourceMenuContext, DataSourceMenuConsumer }; +const DataSourceMenuReadOnlyContext = createContext({ + dataSourceReadOnly: false, + setDataSourceReadOnly: () => {}, +}); + +export { DataSourceMenuContext, DataSourceMenuReadOnlyContext, DataSourceMenuConsumer }; diff --git a/public/services/TransformService.test.ts b/public/services/TransformService.test.ts index 58e11434f..9a8f71e08 100644 --- a/public/services/TransformService.test.ts +++ b/public/services/TransformService.test.ts @@ -92,7 +92,7 @@ describe("transformService spec", () => { const indexName = "index_1"; const queryObject = {}; const body = ""; - await transformService.searchSampleData(indexName, queryObject, body); + await transformService.searchSampleData(indexName, body, queryObject); expect(httpClientMock.post).toHaveBeenCalledTimes(1); expect(httpClientMock.post).toHaveBeenCalledWith(`..${NODE_API._SEARCH_SAMPLE_DATA}/${indexName}`, { query: queryObject, body: body }); @@ -107,7 +107,7 @@ describe("transformService spec", () => { customer_gender: "FEMALE", }, }); - await transformService.searchSampleData(indexName, queryObject, body); + await transformService.searchSampleData(indexName, body, queryObject); expect(httpClientMock.post).toHaveBeenCalledTimes(1); expect(httpClientMock.post).toHaveBeenCalledWith(`..${NODE_API._SEARCH_SAMPLE_DATA}/${indexName}`, { query: queryObject, body: body }); diff --git a/public/services/TransformService.ts b/public/services/TransformService.ts index c2a1d68a6..e96c60e2b 100644 --- a/public/services/TransformService.ts +++ b/public/services/TransformService.ts @@ -3,21 +3,17 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { HttpSetup } from "opensearch-dashboards/public"; +import { HttpFetchQuery, HttpSetup } from "opensearch-dashboards/public"; import { ServerResponse } from "../../server/models/types"; import { GetFieldsResponse, GetTransformsResponse, PreviewTransformResponse, PutTransformResponse } from "../../server/models/interfaces"; import { NODE_API } from "../../utils/constants"; import { DocumentTransform, Transform } from "../../models/interfaces"; +import { MDSEnabledClientService } from "./MDSEnabledClientService"; -export default class TransformService { - httpClient: HttpSetup; - - constructor(httpClient: HttpSetup) { - this.httpClient = httpClient; - } - - getTransforms = async (queryObject: object): Promise> => { +export default class TransformService extends MDSEnabledClientService { + getTransforms = async (queryObject?: HttpFetchQuery): Promise> => { const url = `..${NODE_API.TRANSFORMS}`; + queryObject = this.patchQueryObjectWithDataSourceId(queryObject); // @ts-ignore return (await this.httpClient.get(url, { query: queryObject })) as ServerResponse; }; @@ -29,47 +25,49 @@ export default class TransformService { primaryTerm?: number ): Promise> => { const url = `..${NODE_API.TRANSFORMS}/${transformId}`; - return (await this.httpClient.put(url, { query: { seqNo, primaryTerm }, body: JSON.stringify(transform) })) as ServerResponse< + let queryObject = this.patchQueryObjectWithDataSourceId({ seqNo, primaryTerm }); + return (await this.httpClient.put(url, { query: queryObject, body: JSON.stringify(transform) })) as ServerResponse< PutTransformResponse >; }; getTransform = async (transformId: string): Promise> => { const url = `..${NODE_API.TRANSFORMS}/${transformId}`; - return (await this.httpClient.get(url)) as ServerResponse; + const queryObject = this.patchQueryObjectWithDataSourceId(); + return (await this.httpClient.get(url, { query: queryObject })) as ServerResponse; }; deleteTransform = async (transformId: string): Promise> => { const url = `..${NODE_API.TRANSFORMS}/${transformId}`; - return (await this.httpClient.delete(url)) as ServerResponse; + const queryObject = this.patchQueryObjectWithDataSourceId(); + return (await this.httpClient.delete(url, { query: queryObject })) as ServerResponse; }; startTransform = async (transformId: string): Promise> => { const url = `..${NODE_API.TRANSFORMS}/${transformId}/_start`; - return (await this.httpClient.post(url)) as ServerResponse; + const queryObject = this.patchQueryObjectWithDataSourceId(); + return (await this.httpClient.post(url, { query: queryObject })) as ServerResponse; }; stopTransform = async (transformId: string): Promise> => { const url = `..${NODE_API.TRANSFORMS}/${transformId}/_stop`; - return (await this.httpClient.post(url)) as ServerResponse; + const queryObject = this.patchQueryObjectWithDataSourceId(); + return (await this.httpClient.post(url, { query: queryObject })) as ServerResponse; }; previewTransform = async (transform: any): Promise> => { const url = `..${NODE_API.TRANSFORMS}/_preview`; + const queryObject = this.patchQueryObjectWithDataSourceId(); // @ts-ignore - return (await this.httpClient.post(url, { body: JSON.stringify(transform) })) as ServerResponse; + return (await this.httpClient.post(url, { body: JSON.stringify(transform), query: queryObject })) as ServerResponse< + PreviewTransformResponse + >; }; //Function to search for fields from a source index using GET /${source_index}/_mapping - getMappings = async (index: string): Promise> => { - const url = `..${NODE_API._MAPPINGS}`; - const body = { index: index }; - const response = (await this.httpClient.post(url, { body: JSON.stringify(body) })) as ServerResponse; - return response; - }; - - searchSampleData = async (index: string, queryObject: object, body: string): Promise> => { + searchSampleData = async (index: string, body: string, queryObject?: HttpFetchQuery): Promise> => { const url = `..${NODE_API._SEARCH_SAMPLE_DATA}/${index}`; + queryObject = this.patchQueryObjectWithDataSourceId(queryObject); const response = (await this.httpClient.post(url, { query: queryObject, body: body })) as ServerResponse; return response; }; diff --git a/server/plugin.ts b/server/plugin.ts index 38a536a13..387fada15 100644 --- a/server/plugin.ts +++ b/server/plugin.ts @@ -53,7 +53,7 @@ export class IndexPatternManagementPlugin implements Plugin ({ _seqNo: transform._seqNo as number, @@ -69,7 +64,9 @@ export default class TransformService { })); if (totalTransforms) { const ids = transforms.map((transform: DocumentTransform) => transform._id).join(","); - const explainResponse = await callWithRequest("ism.explainTransform", { transformId: ids }); + const callWithRequest = this.getClientBasedOnDataSource(context, request); + + const explainResponse = (await callWithRequest("ism.explainTransform", { transformId: ids })) as any; if (!explainResponse.error) { transforms.map((transform: DocumentTransform) => { transform.metadata = explainResponse[transform._id]; @@ -123,7 +120,7 @@ export default class TransformService { try { const { id } = request.params as { id: string }; const params = { transformId: id }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); + const callWithRequest = this.getClientBasedOnDataSource(context, request); const getResponse = await callWithRequest("ism.getTransform", params); const metadata = await callWithRequest("ism.explainTransform", params); const transform = _.get(getResponse, "transform", null); @@ -183,7 +180,7 @@ export default class TransformService { try { const { id } = request.params as { id: string }; const params = { transformId: id }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); + const callWithRequest = this.getClientBasedOnDataSource(context, request); const startResponse = await callWithRequest("ism.startTransform", params); const acknowledged = _.get(startResponse, "acknowledged"); if (acknowledged) { @@ -214,7 +211,7 @@ export default class TransformService { try { const { id } = request.params as { id: string }; const params = { transformId: id }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); + const callWithRequest = this.getClientBasedOnDataSource(context, request); const stopResponse = await callWithRequest("ism.stopTransform", params); const acknowledged = _.get(stopResponse, "acknowledged"); if (acknowledged) { @@ -245,8 +242,8 @@ export default class TransformService { try { const { id } = request.params as { id: string }; const params = { transformId: id }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); - const deleteResponse = await callWithRequest("ism.deleteTransform", params); + const callWithRequest = this.getClientBasedOnDataSource(context, request); + const deleteResponse = (await callWithRequest("ism.deleteTransform", params)) as any; if (!deleteResponse.errors) { return response.custom({ statusCode: 200, @@ -286,8 +283,8 @@ export default class TransformService { method = "ism.putTransform"; params = { transformId: id, body: JSON.stringify(request.body) }; } - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); - const putTransformResponse: PutTransformResponse = await callWithRequest(method, params); + const callWithRequest = this.getClientBasedOnDataSource(context, request); + const putTransformResponse: PutTransformResponse = (await callWithRequest(method, params)) as PutTransformResponse; return response.custom({ statusCode: 200, body: { @@ -324,8 +321,8 @@ export default class TransformService { size: size, body: request.body ? JSON.stringify({ query: request.body }) : {}, }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); - const searchResponse: SearchResponse = await callWithRequest("search", params); + const callWithRequest = this.getClientBasedOnDataSource(context, request); + const searchResponse: SearchResponse = (await callWithRequest("search", params)) as SearchResponse; return response.custom({ statusCode: 200, body: { @@ -369,8 +366,8 @@ export default class TransformService { let params = { body: JSON.stringify(request.body), }; - const { callAsCurrentUser: callWithRequest } = this.esDriver.asScoped(request); - const previewResponse: PreviewTransformResponse = await callWithRequest("ism.previewTransform", params); + const callWithRequest = this.getClientBasedOnDataSource(context, request); + const previewResponse: PreviewTransformResponse = (await callWithRequest("ism.previewTransform", params)) as PreviewTransformResponse; return response.custom({ statusCode: 200, body: {