mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-10-31 16:49:40 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class StepSerializer < ActiveModel::Serializer
 | |
|   include Canaid::Helpers::PermissionsHelper
 | |
|   include Rails.application.routes.url_helpers
 | |
|   include ApplicationHelper
 | |
|   include CommentHelper
 | |
|   include InputSanitizeHelper
 | |
| 
 | |
|   attributes :name, :position, :completed, :attachments_manageble, :urls, :assets_view_mode,
 | |
|              :marvinjs_enabled, :marvinjs_context, :created_by, :created_at, :assets_order,
 | |
|              :wopi_enabled, :wopi_context, :comments_count, :unseen_comments, :storage_limit,
 | |
|              :type, :open_vector_editor_context, :collapsed
 | |
| 
 | |
|   def collapsed
 | |
|     step_states = @instance_options[:user].settings.fetch('task_step_states', {})
 | |
|     step_states[object.id.to_s] == true
 | |
|   end
 | |
| 
 | |
|   def marvinjs_enabled
 | |
|     MarvinJsService.enabled?
 | |
|   end
 | |
| 
 | |
|   def type
 | |
|     'Step'
 | |
|   end
 | |
| 
 | |
|   def marvinjs_context
 | |
|     if marvinjs_enabled
 | |
|       {
 | |
|         marvin_js_asset_url: marvin_js_assets_path,
 | |
|         icon: image_path('icon_small/marvinjs.svg')
 | |
|       }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def open_vector_editor_context
 | |
|     if can_manage_step?(object)
 | |
|       {
 | |
|         new_sequence_asset_url: new_gene_sequence_asset_url(parent_type: 'Step', parent_id: object.id),
 | |
|         icon: image_path('icon_small/sequence-editor.svg')
 | |
|       }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def comments_count
 | |
|     object.comments.count
 | |
|   end
 | |
| 
 | |
|   def unseen_comments
 | |
|     has_unseen_comments?(object)
 | |
|   end
 | |
| 
 | |
|   def wopi_enabled
 | |
|     wopi_enabled?
 | |
|   end
 | |
| 
 | |
|   def wopi_context
 | |
|     if wopi_enabled
 | |
|       {
 | |
|         create_wopi: create_wopi_file_path,
 | |
|         icon: image_path('office/office.svg')
 | |
|       }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def storage_limit
 | |
|     nil
 | |
|   end
 | |
| 
 | |
|   def assets_order
 | |
|     object.current_view_state(@instance_options[:user]).state.dig('assets', 'sort') unless object.destroyed?
 | |
|   end
 | |
| 
 | |
|   def attachments_manageble
 | |
|     can_manage_step?(object)
 | |
|   end
 | |
| 
 | |
|   def urls
 | |
|     urls_list = {
 | |
|       elements_url: elements_step_path(object),
 | |
|       attachments_url: attachments_step_path(object)
 | |
|     }
 | |
| 
 | |
|     if object.my_module && can_complete_my_module_steps?(object.my_module)
 | |
|       urls_list[:state_url] = toggle_step_state_step_path(object)
 | |
|     end
 | |
| 
 | |
|     if can_manage_protocol_in_module?(object.protocol) || can_manage_protocol_draft_in_repository?(object.protocol)
 | |
|       urls_list[:duplicate_step_url] = duplicate_step_path(object)
 | |
|     end
 | |
| 
 | |
|     if can_manage_step?(object)
 | |
|       urls_list.merge!({
 | |
|         delete_url: step_path(object),
 | |
|         update_url: step_path(object),
 | |
|         create_table_url: step_tables_path(object),
 | |
|         create_text_url: step_texts_path(object),
 | |
|         create_checklist_url: step_checklists_path(object),
 | |
|         update_asset_view_mode_url: update_asset_view_mode_step_path(object),
 | |
|         update_view_state_url: update_view_state_step_path(object),
 | |
|         direct_upload_url: rails_direct_uploads_url,
 | |
|         upload_attachment_url: upload_attachment_step_path(object),
 | |
|         reorder_elements_url: reorder_step_step_orderable_elements_path(step_id: object.id)
 | |
|       })
 | |
| 
 | |
|       urls_list[:create_form_response_url] = step_form_responses_path(object) if Form.forms_enabled?
 | |
|     end
 | |
| 
 | |
|     urls_list
 | |
|   end
 | |
| 
 | |
|   def created_at
 | |
|     object.created_at.strftime('%B %d, %Y at %H:%M')
 | |
|   end
 | |
| 
 | |
|   def created_by
 | |
|     object.user.full_name
 | |
|   end
 | |
| end
 |