From 4fc7cd5e01f970bad6f0a6985033eba42c22a9fb Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 16 May 2025 18:40:05 +0200 Subject: [PATCH] Improve expand/collapse for results [SCI-11918] --- app/controllers/my_modules_controller.rb | 8 +++++++ app/javascript/vue/results/results.vue | 27 ++++++++---------------- app/views/results/index.html.erb | 1 + config/routes.rb | 1 + 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index b1ba1783a..5e7725974 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -443,6 +443,14 @@ class MyModulesController < ApplicationController render json: my_modules end + def change_results_state + @my_module.results.find_each do |result| + current_user.settings['result_states'][result.id.to_s] = params[:collapsed].present? + end + current_user.save! + render json: { status: :ok } + end + private def load_vars diff --git a/app/javascript/vue/results/results.vue b/app/javascript/vue/results/results.vue index 2d1fec689..ce6e9c56d 100644 --- a/app/javascript/vue/results/results.vue +++ b/app/javascript/vue/results/results.vue @@ -74,7 +74,8 @@ export default { archived: { type: String, required: true }, active_url: { type: String, required: true }, archived_url: { type: String, required: true }, - userSettingsUrl: { type: String, required: false } + userSettingsUrl: { type: String, required: false }, + changeStatesUrl: { type: String, required: false } }, data() { return { @@ -218,25 +219,15 @@ export default { this.resultsCollapsed = false; }, updateResultStateSettings(newState) { - const updatedData = this.results.reduce((acc, currentResult) => { - acc[currentResult.id] = newState; - return acc; - }, {}); + const data = {}; - this.results = this.results.map((result) => ({ - ...result, - attributes: { - ...result.attributes, - collapsed: newState - } - })); + if (newState) { + data.collapsed = true; + } else { + data.expanded = true; + } - const settings = { - key: 'result_states', - data: updatedData - }; - - axios.put(this.userSettingsUrl, { settings: [settings] }); + axios.post(this.changeStatesUrl, data); }, removeResult(result_id) { this.results = this.results.filter((r) => r.id != result_id); diff --git a/app/views/results/index.html.erb b/app/views/results/index.html.erb index 5c9cbf026..51a1a75c7 100644 --- a/app/views/results/index.html.erb +++ b/app/views/results/index.html.erb @@ -21,6 +21,7 @@ archived=<%= params[:view_mode] == 'archived' %>> diff --git a/config/routes.rb b/config/routes.rb index 1bdf5647e..1b2854f78 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -478,6 +478,7 @@ Rails.application.routes.draw do get :permissions get :actions_dropdown get :provisioning_status + post :change_results_state end resources :my_module_tags, path: '/tags', only: [:index, :create, :destroy] do collection do