From dc637ef83a84c41db4c97f5238837862124cd332 Mon Sep 17 00:00:00 2001 From: Vladimir Shushlin Date: Thu, 28 Apr 2022 16:48:56 +0700 Subject: [PATCH 1/2] PoC for environments search --- .../services/environments_service.js | 4 ++-- .../projects/environments_controller.rb | 20 ++++++++++++++----- .../environments/environments_finder.rb | 7 +++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/environments/services/environments_service.js b/app/assets/javascripts/environments/services/environments_service.js index dbd82a3c9853df..03689b4591edc8 100644 --- a/app/assets/javascripts/environments/services/environments_service.js +++ b/app/assets/javascripts/environments/services/environments_service.js @@ -8,7 +8,7 @@ export default class EnvironmentsService { fetchEnvironments(options = {}) { const { scope, page, nested } = options; - return axios.get(this.environmentsEndpoint, { params: { scope, page, nested } }); + return axios.get(this.environmentsEndpoint, { params: { scope, page, nested, search: "review/my-b" } }); } // eslint-disable-next-line class-methods-use-this @@ -22,6 +22,6 @@ export default class EnvironmentsService { } getFolderContent(folderUrl, scope) { - return axios.get(`${folderUrl}.json?per_page=${this.folderResults}&scope=${scope}`); + return axios.get(`${folderUrl}.json?per_page=${this.folderResults}&scope=${scope}&search=review/my-b`); } } diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index a100afd3488fee..0a3d0d41c848f8 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -35,8 +35,12 @@ def index respond_to do |format| format.html format.json do - @environments = project.environments - .with_state(params[:scope] || :available) + # @environments = project.environments + # .with_state(params[:scope] || :available) + + state = params[:scope] || :available + @environments = Environments::EnvironmentsFinder.new(project, current_user, + states: [state], search: params[:search]).execute Gitlab::PollingInterval.set_header(response, interval: 3_000) environments_count_by_state = project.environments.count_by_state @@ -59,9 +63,15 @@ def folder respond_to do |format| format.html format.json do - folder_environments = project.environments.where(environment_type: params[:id]) - @environments = folder_environments.with_state(params[:scope] || :available) - .order(:name) + # folder_environments = project.environments.where(environment_type: params[:id]) + # @environments = folder_environments.with_state(params[:scope] || :available) + # .order(:name) + + state = params[:scope] || :available + folder_environments = Environments::EnvironmentsFinder.new(project, current_user, + type: params[:id], states: [state], search: params[:search]).execute + + @environments = folder_environments.order(:name) render json: { environments: serialize_environments(request, response), diff --git a/app/finders/environments/environments_finder.rb b/app/finders/environments/environments_finder.rb index 46c49f096c6d1b..6b9f827881880e 100644 --- a/app/finders/environments/environments_finder.rb +++ b/app/finders/environments/environments_finder.rb @@ -14,6 +14,7 @@ def initialize(project, current_user, params = {}) def execute environments = project.environments + environments = by_type(environments) environments = by_name(environments) environments = by_search(environments) environments = by_ids(environments) @@ -24,6 +25,12 @@ def execute private + def by_type(environments) + return environments unless params[:type].present? + + environments.where(environment_type: params[:type]) + end + def by_name(environments) if params[:name].present? environments.for_name(params[:name]) -- GitLab From 47c076abc48c3419f0d2e5410a0c1f2000459af2 Mon Sep 17 00:00:00 2001 From: Andrew Fontaine Date: Fri, 29 Apr 2022 15:18:40 -0400 Subject: [PATCH 2/2] Frontend PoC for Environment Search We use the GlSearchBoxByType for instant searching, piping the query value through the local graphql resolvers to send off to the backend. --- .../environments/components/environment_folder.vue | 10 +++++++++- .../environments/components/environments_app.vue | 7 ++++++- .../graphql/queries/environment_app.query.graphql | 4 ++-- .../environments/graphql/queries/folder.query.graphql | 4 ++-- .../javascripts/environments/graphql/resolvers.js | 8 ++++---- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/environments/components/environment_folder.vue b/app/assets/javascripts/environments/components/environment_folder.vue index d5c6d26cfd0318..123a0790bd375c 100644 --- a/app/assets/javascripts/environments/components/environment_folder.vue +++ b/app/assets/javascripts/environments/components/environment_folder.vue @@ -24,6 +24,10 @@ export default { type: String, required: true, }, + search: { + type: String, + required: true, + }, }, data() { return { visible: false, interval: undefined }; @@ -32,7 +36,11 @@ export default { folder: { query: folderQuery, variables() { - return { environment: this.nestedEnvironment.latest, scope: this.scope }; + return { + environment: this.nestedEnvironment.latest, + scope: this.scope, + search: this.search, + }; }, pollInterval() { return this.interval; diff --git a/app/assets/javascripts/environments/components/environments_app.vue b/app/assets/javascripts/environments/components/environments_app.vue index f44182e822bb9c..440b3125129f2f 100644 --- a/app/assets/javascripts/environments/components/environments_app.vue +++ b/app/assets/javascripts/environments/components/environments_app.vue @@ -1,5 +1,5 @@