From 23a8872e1131d949feaa5e037fb593cd85296425 Mon Sep 17 00:00:00 2001 From: Martin Artnik Date: Thu, 17 Aug 2023 16:32:42 +0200 Subject: [PATCH] Add some basic result component layout [SCI-8959] --- app/controllers/results_controller.rb | 14 +- app/javascript/vue/results/result.vue | 209 +++++++++++++++---------- app/javascript/vue/results/results.vue | 2 +- app/serializers/result_serializer.rb | 3 +- app/views/results/index.html.erb | 2 + config/locales/en.yml | 2 + 6 files changed, 146 insertions(+), 86 deletions(-) diff --git a/app/controllers/results_controller.rb b/app/controllers/results_controller.rb index d94b981e9..5bdbdae80 100644 --- a/app/controllers/results_controller.rb +++ b/app/controllers/results_controller.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true class ResultsController < ApplicationController - skip_before_action :verify_authenticity_token, only: %i(create destroy) + skip_before_action :verify_authenticity_token, only: %i(create update destroy) before_action :load_my_module - before_action :load_vars, only: %i(destroy elements assets upload_attachment update_view_state update_asset_view_mode ) + before_action :load_vars, only: %i(destroy elements assets upload_attachment update_view_state update_asset_view_mode update) before_action :check_destroy_permissions, only: :destroy def index @@ -32,6 +32,12 @@ class ResultsController < ApplicationController render json: result end + def update + @result.update!(result_params) + + render json: @result + end + def elements render json: @result.result_orderable_elements.order(:position), each_serializer: ResultOrderableElementSerializer, @@ -107,6 +113,10 @@ class ResultsController < ApplicationController private + def result_params + params.require(:result).permit(:name) + end + def apply_sort(results) case params[:sort] when 'updated_at_asc' diff --git a/app/javascript/vue/results/result.vue b/app/javascript/vue/results/result.vue index d80fa91d7..18b105fb4 100644 --- a/app/javascript/vue/results/result.vue +++ b/app/javascript/vue/results/result.vue @@ -1,85 +1,123 @@ @@ -122,6 +161,7 @@ import ResultTable from '../shared/content/table.vue'; import ResultText from '../shared/content/text.vue'; import Attachments from '../shared/content/attachments.vue'; + import InlineEdit from '../shared/inline_edit.vue' import AttachmentsMixin from '../shared/content/mixins/attachments.js' import WopiFileModal from '../shared/content/attachments/mixins/wopi_file_modal.js' @@ -146,7 +186,8 @@ { label: 'protocols.steps.insert.well_plate_options.6_x_8', dimensions: [6, 8] }, { label: 'protocols.steps.insert.well_plate_options.6_x_4', dimensions: [6, 4] }, { label: 'protocols.steps.insert.well_plate_options.2_x_3', dimensions: [2, 3] } - ] + ], + editingName: false } }, mixins: [UtilsMixin, AttachmentsMixin, WopiFileModal], @@ -154,7 +195,8 @@ ReorderableItemsModal, ResultTable, ResultText, - Attachments + Attachments, + InlineEdit }, computed: { reorderableElements() { @@ -278,7 +320,7 @@ $.post(this.urls[`create_${elementType}_url`], { tableDimensions: tableDimensions, plateTemplate: plateTemplate }, (result) => { result.data.isNew = true; this.elements.push(result.data) - this.$emit('stepUpdated') + this.$emit('resultUpdated') }).fail(() => { HelperModule.flashAlertMsg(this.i18n.t('errors.general'), 'danger'); }).done(() => { @@ -298,6 +340,11 @@ }, duplicateResult() { + }, + updateName(name) { + axios.patch(this.urls.update_url, { result: { name: name } }, (_) => { + this.$emit('resultUpdated') + }); } } } diff --git a/app/javascript/vue/results/results.vue b/app/javascript/vue/results/results.vue index 7bf54f142..6c733ffe0 100644 --- a/app/javascript/vue/results/results.vue +++ b/app/javascript/vue/results/results.vue @@ -1,6 +1,6 @@