Implement details and notes sections of shareable links [SCI-8750] (#5710)

Co-authored-by: Sboursen <dev.sboursen@gmail.com>
This commit is contained in:
Soufiane 2023-07-06 15:10:26 +02:00 committed by GitHub
parent 6049c7d8b9
commit 33bb79d17a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 177 additions and 10 deletions

View file

@ -5,7 +5,7 @@ class MyModuleShareableLinksController < ApplicationController
before_action :load_shareable_link, only: %i(update destroy)
before_action :check_view_permissions, only: :show
before_action :check_manage_permissions, except: %i(show my_module_protocol_show)
skip_before_action :authenticate_user!, only: %(my_module_protocol_show)
skip_before_action :authenticate_user!, only: %i(my_module_protocol_show)
def show
render json: @my_module.shareable_link

View file

@ -37,7 +37,7 @@ module SecondaryNavigationHelper
end
def is_module_protocols?
action_name == 'protocols'
%w(protocols my_module_protocol_show).include?(action_name)
end
def is_module_results?

View file

@ -21,14 +21,14 @@
<%= csrf_meta_tags %>
</head>
<body class="">
<div class="sci--sl-layout">
<body id="sci-shareable-links">
<div class="flex flex-row">
<div class="w-80 h-screen px-4 py-6 flex flex-col
border-0 border-r border-solid border-sn-sleepy-grey">
<%= render "shareable_links/left_navigation" %>
</div>
<div class="sci--sl-layout-content">
<%= yield :content %>
<div class="flex flex-col flex-1 min-h-screen p-4 bg-sn-super-light-grey">
<%= yield %>
</div>
</div>

View file

@ -2,7 +2,7 @@
<span class="date-text" data-editable="<%= due_date_editable %>">
<span id="dueDateLabelContainer" class="view-block">
<%= render partial: "due_date_label.html.erb" , locals: { my_module: my_module, due_date_editable: due_date_editable } %>
<%= render partial: "my_modules/due_date_label.html.erb" , locals: { my_module: my_module, due_date_editable: due_date_editable } %>
</span>
<% if due_date_editable %>
<div class="datetime-picker-container" id="due-date">

View file

@ -2,7 +2,7 @@
<span class="date-text" data-editable="<%= start_date_editable %>">
<span id="startDateLabelContainer" class="view-block">
<%= render partial: "start_date_label.html.erb" , locals: { my_module: my_module, start_date_editable: start_date_editable } %>
<%= render partial: "my_modules/start_date_label.html.erb" , locals: { my_module: my_module } %>
</span>
<% if start_date_editable %>
<div class="datetime-picker-container" id="start-date">

View file

@ -1,7 +1,7 @@
<div class="task-notes">
<div class="task-notes-content">
<% if can_update_my_module_description?(@my_module) %>
<%= render partial: "description_form" %>
<%= render partial: "my_modules/description_form" %>
<% elsif @my_module.description.present? %>
<%= custom_auto_link(@my_module.tinymce_render(:description),
simple_format: false,

View file

@ -0,0 +1,18 @@
<div class="flex items-center uppercase text-bold">
<a class="p-4 border-b-4 border-transparent hover:no-underline capitalize <%= is_module_protocols? ? "text-sn-blue" : "text-sn-grey" %>"
href="<%= shared_protocol_path(@my_module.signed_id) %>"
title="<%= t("nav2.modules.steps") %>"
>
<%= t("nav2.modules.steps") %>
</a>
<a class="p-4 border-b-4 border-transparent hover:no-underline capitalize <%= is_module_results? ? "text-sn-blue" : "text-sn-grey" %>"
href="#"
title="<%= t("nav2.modules.results") %>"
>
<%= t("nav2.modules.results") %>
<% @active_results_size = @my_module.results.where(archived:false).size %>
<% if @active_results_size.positive? %>
<sup class="navigation-results-counter"><%= @my_module.archived_branch? ? @my_module.results.size : @active_results_size %></sup>
<% end %>
</a>
</div>

View file

@ -0,0 +1,58 @@
<% my_module_editable = false %>
<div class="flex-block date-block">
<div class="flex-block-label">
<span class="sn-icon block-icon sn-icon-calendar mr-2.5"></span>
<span class="hidden-xs hidden-sm hidden-md"><%= t('my_modules.details.start_date') %></span>
</div>
<div id="startDateContainer" class="datetime-container">
<span class="date-text">
<span id="startDateLabelContainer" class="view-block">
<%= render partial: "my_modules/start_date_label.html.erb" , locals: { my_module: @my_module } %>
</span>
</span>
</div>
</div>
<div class="flex-block date-block" >
<div class="flex-block-label">
<span class="sn-icon block-icon sn-icon-calendar mr-2.5"></span>
<span class="hidden-xs hidden-sm hidden-md"><%= t('my_modules.details.due_date') %></span>
</div>
<div id="dueDateContainer" class="datetime-container">
<span class="date-text">
<span id="dueDateLabelContainer" class="view-block">
<%= render partial: "my_modules/due_date_label.html.erb" , locals: { my_module: @my_module, due_date_editable: false } %>
</span>
</span>
</div>
</div>
<% if @my_module.completed? %>
<div class="flex-block date-block" >
<div class="flex-block-label">
<span class="fas block-icon fa-calendar-day"></span>
<span class="hidden-xs hidden-sm hidden-md"><%= t('my_modules.details.completed_date') %></span>
</div>
<div class="datetime-container">
<span class="date-text">
<%= l(@my_module.completed_on, format: :full) %>
</span>
</div>
</div>
<% end %>
<div class="flex items-center w-full justify-start h-8">
<span class="sn-icon block-icon sn-icon-users mr-2.5"></span>
<span class="hidden-xs hidden-sm"><%= t('my_modules.details.assigned_users') %></span>
<%= render partial: "shareable_links/user_my_modules", locals: { my_module: @my_module } %>
</div>
<div class="flex items-center w-full justify-start h-8">
<span class="sn-icon block-icon sn-icon-tag mr-2.5"></span>
<span class="hidden-xs hidden-sm tags-title"><%=t "my_modules.details.tags" %></span>
<%= render partial: "shareable_links/tags", locals: { my_module: @my_module } %>
</div>

View file

@ -0,0 +1,10 @@
<div class="inline-flex flex-row flex-nowrap ml-3 gap-2">
<% my_module.tags.order(:id).each do |tag| %>
<% color = escape_input(tag[:color]) %>
<div class="inline-flex flex-nowrap h-6 px-2 py-1 items-center text-sn-white rounded-md select-none"
title="<%= escape_input(tag[:name]) %>"
style="background-color: <%= color %>;">
<%= escape_input(tag[:name]) %>
</div>
<% end %>
</div>

View file

@ -0,0 +1,15 @@
<% status = my_module.my_module_status %>
<%= t('my_module_statuses.dropdown.status_label') %>
<button class="btn btn-secondary disabled"
type="button">
<span>
<% if my_module.status_changing %>
<i class="fas fa-spinner fa-spin"></i>
<span><%= t('my_module_statuses.dropdown.status_transitioning_label') %></span>
<% end %>
<%= status.name %>
</span>
<span class="sn-icon sn-icon-down"></span>
</button>

View file

@ -0,0 +1,9 @@
<div class="inline-flex flex-row flex-nowrap">
<% my_module.user_my_modules.each do |um| %>
<% user = um.user %>
<div class="inline-flex gap-2 flex-nowrap h-6 px-2 py-1 items-center select-none" title="<%= user.full_name %>">
<img class="block rounded-full h-5" src="<%= avatar_path(user, :icon_small)%>" alt="<%= user.full_name %>">
<span style="block"><%= user.full_name %></span>
</div>
<% end %>
</div>

View file

@ -0,0 +1,57 @@
<div class="text-3xl font-bold"><%= @my_module.name %></div>
<div class="my-5 max-w-4xl flex-1 bg-sn-white">
<div class="my-module-position-container">
<!-- Header Actions -->
<%= render partial: 'shareable_links/header_actions' %>
<!-- Details -->
<div class="task-section task-information">
<div id="task-details" class="task-section-header">
<div class="flex items-center gap-3">
<%= render partial: 'shareable_links/task_flow_button', locals: { my_module: @my_module } if @my_module.my_module_status_flow %>
</div>
<div class="task-details-container flex items-center gap-2">
<a class="task-section-caret" role="button" data-toggle="collapse" href="#details-container" aria-expanded="false" aria-controls="details-container">
<i class="sn-icon sn-icon-right"></i>
<span id="taskDetailsLabel" class="task-section-title">
<h2>
<%= t('my_modules.details.title') %>
</h2>
</span>
</a>
<span class="task-details-code">
<%= @my_module.code %>
</span>
</div>
</div>
<div id="details-container" class="task-details">
<%= render partial: 'shareable_links/my_module_details' %>
</div>
</div>
<!-- Notes -->
<div class="task-section">
<div class="task-section-header">
<a class="task-section-caret" role="button" data-toggle="collapse" href="#notes-container" aria-expanded="true" aria-controls="notes-container">
<i class="sn-icon sn-icon-right"></i>
<span class="task-section-title">
<h2><%= t('my_modules.notes.title') %></h2>
</span>
</a>
</div>
<div class="collapse in" id="notes-container" aria-expanded="true">
<div class="task-notes">
<div class="task-notes-content">
<% if @my_module.description.present? %>
<%= custom_auto_link(@my_module.tinymce_render(:description),
simple_format: false,
tags: %w(img),
team: current_team) %>
<% else %>
<span class="no-description"><%= t('my_modules.notes.no_description') %></span>
<% end %>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -961,7 +961,7 @@ Rails.application.routes.draw do
end
end
get '/shared_tasks/:uuid/protocol', to: 'my_module_shareable_links#my_module_protocol_show'
get '/shared/:uuid/protocol', to: 'my_module_shareable_links#my_module_protocol_show', as: :shared_protocol
resources :marvin_js_assets, only: %i(create update destroy show) do
collection do