diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts index e52ad714..b73ca197 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/components/nxql-tab/nxql-tab.component.ts @@ -75,6 +75,7 @@ export class NXQLTabComponent implements OnInit, OnDestroy { nxqlQueryHintSanitized: SafeHtml = ""; activeFeature: FeaturesKey = {} as FeaturesKey; inputPlaceholder = ""; + requestQuery = ""; constructor( public dialogService: MatDialog, @@ -206,13 +207,13 @@ export class NXQLTabComponent implements OnInit, OnDestroy { /* decode user input to handle path names that contain spaces, which would not be decoded by default by nuxeo js client & would result in invalid api parameter */ try { - const decodedUserInput = decodeURIComponent( + this.requestQuery = decodeURIComponent( /* Remove leading single & double quotes in case of path, to avoid invalid nuxeo js client api parameter */ this.genericMultiFeatureUtilitiesService.removeLeadingCharacters( userInput ) ); - this.fetchNoOfDocuments(decodedUserInput); + this.fetchNoOfDocuments(this.requestQuery); } catch (error) { this.genericMultiFeatureUtilitiesService.spinnerStatus.next(false); this.showActionErrorModal({ @@ -313,9 +314,19 @@ export class NXQLTabComponent implements OnInit, OnDestroy { this.activeFeature ) as FeaturesKey; if (featureKey in FEATURES) { + let requestUrl = ""; + let requestParams = this.templateConfigData?.data["bodyParam"]; + if (requestParams) { + // Since, it is bodyParam, the query would be part of body params object & not the url + requestParams["query"] = this.requestQuery; + } else { + // since it is queryParam, the query would be appended to the url + requestUrl = this.requestQuery; + } this.store.dispatch( FeatureActions.performNxqlAction({ - nxqlQuery: this.decodedUserInput, + requestUrl: this.requestQuery, + requestParams, featureEndpoint: REST_END_POINTS[featureKey as FeaturesKey], }) ); diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts index ef6c3660..56c5da43 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/generic-multi-feature-layout.mapping.ts @@ -21,7 +21,6 @@ export function getFeatureKeyByValue( export const featureMap = () => ({ [FEATURES.ELASTIC_SEARCH_REINDEX]: (tabType: string) => { - let requestParams: string; let labels: labelsList; let data = {}; @@ -49,11 +48,15 @@ export const featureMap = () => ({ break; case GENERIC_LABELS.NXQL: - (requestParams = `ecm:uuid='{queryParam}' OR ecm:ancestorId='{queryParam}' ${GENERIC_LABELS.AND} ${GENERIC_LABELS.SELECT_QUERY_CONDITIONS}`), - (labels = { - pageTitle: ELASTIC_SEARCH_LABELS.NXQL_QUERY_REINDEX_TITLE, - submitBtnLabel: ELASTIC_SEARCH_LABELS.REINDEX_BUTTON_LABEL, - }); + labels = { + pageTitle: ELASTIC_SEARCH_LABELS.NXQL_QUERY_REINDEX_TITLE, + submitBtnLabel: ELASTIC_SEARCH_LABELS.REINDEX_BUTTON_LABEL, + }; + data = { + queryParam: { + query: `ecm:uuid='{query}' OR ecm:ancestorId='{query}' ${GENERIC_LABELS.AND} ${GENERIC_LABELS.SELECT_QUERY_CONDITIONS}`, + }, + }; break; default: diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/services/generic-multi-feature-endpoints.service.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/services/generic-multi-feature-endpoints.service.ts index 537a7416..0d29ec7b 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/services/generic-multi-feature-endpoints.service.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/services/generic-multi-feature-endpoints.service.ts @@ -42,12 +42,13 @@ export class GenericMultiFeatureEndpointsService { } performNXQLAction( - nxqlQuery: string | null, + requestUrl: string | null, + requestParams: unknown, featureEndpoint: string ): Observable { return this.networkService.makeHttpRequest( REST_END_POINTS[featureEndpoint as keyof typeof REST_END_POINTS], - { query: nxqlQuery } + { queryParam: { requestUrl }, bodyParam: { requestParams } } ); } } diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/actions.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/actions.ts index bb21fba7..610a56ad 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/actions.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/actions.ts @@ -34,7 +34,7 @@ export const resetFolderActionState = createAction( ); export const performNxqlAction = createAction( "[Admin] Perform NXQL Action", - props<{ nxqlQuery: string | null; featureEndpoint: string }>() + props<{ requestUrl: string | null; requestParams: unknown; featureEndpoint: string }>() ); export const onNxqlActionLaunch = createAction( "[Admin] On NXQL Action Launch", diff --git a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/effects.ts b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/effects.ts index cd385057..c7d84a6e 100644 --- a/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/effects.ts +++ b/nuxeo-admin-console-web/angular-app/src/app/features/sub-features/generic-multi-feature-layout/store/effects.ts @@ -68,7 +68,7 @@ export const loadPerformNxqlActionEffect = createEffect( ofType(FeatureActions.performNxqlAction), switchMap((action) => { return genericMultiFeatureEndpointsService - .performNXQLAction(action?.nxqlQuery, action?.featureEndpoint) + .performNXQLAction(action?.requestUrl, action?.requestParams, action?.featureEndpoint) .pipe( map((data) => { return FeatureActions.onNxqlActionLaunch({