adjust dashboard templates style
This commit is contained in:
@@ -6,6 +6,8 @@ class DashboardController < ApplicationController
|
|||||||
def index
|
def index
|
||||||
return render 'pages/landing' unless signed_in?
|
return render 'pages/landing' unless signed_in?
|
||||||
|
|
||||||
@pagy, @templates = pagy(current_account.templates.active, items: 12)
|
templates = current_account.templates.active.preload(:author).order(id: :desc)
|
||||||
|
|
||||||
|
@pagy, @templates = pagy(templates, items: 12)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class SubmissionsController < ApplicationController
|
class SubmissionsController < ApplicationController
|
||||||
before_action :load_template, only: %i[index new create]
|
before_action :load_template, only: %i[new create]
|
||||||
|
|
||||||
def index
|
|
||||||
@pagy, @submissions = pagy(@template.submissions.active)
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@submission =
|
@submission =
|
||||||
@@ -32,7 +28,7 @@ class SubmissionsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to template_submissions_path(@template),
|
redirect_to template_path(@template),
|
||||||
notice: "#{submissions.size} #{'recipient'.pluralize(submissions.size)} added"
|
notice: "#{submissions.size} #{'recipient'.pluralize(submissions.size)} added"
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -42,7 +38,7 @@ class SubmissionsController < ApplicationController
|
|||||||
|
|
||||||
submission.update!(deleted_at: Time.current)
|
submission.update!(deleted_at: Time.current)
|
||||||
|
|
||||||
redirect_to template_submissions_path(submission.template), notice: 'Submission has been archived'
|
redirect_back(fallback_location: template_path(submission.template), notice: 'Submission has been archived')
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class TemplatesController < ApplicationController
|
class TemplatesController < ApplicationController
|
||||||
layout 'plain'
|
|
||||||
|
|
||||||
before_action :load_base_template, only: %i[new create]
|
before_action :load_base_template, only: %i[new create]
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@template = current_account.templates.preload(documents_attachments: { preview_images_attachments: :blob })
|
@template = current_account.templates.find(params[:id])
|
||||||
.find(params[:id])
|
|
||||||
|
@pagy, @submissions = pagy(@template.submissions.active)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@@ -15,20 +14,22 @@ class TemplatesController < ApplicationController
|
|||||||
@template.name = "#{@base_template.name} (Clone)" if @base_template
|
@template.name = "#{@base_template.name} (Clone)" if @base_template
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def edit
|
||||||
@template =
|
@template = current_account.templates.preload(documents_attachments: { preview_images_attachments: :blob })
|
||||||
if @base_template
|
.find(params[:id])
|
||||||
current_account.templates.new(**@base_template.slice(:fields, :schema, :submitters), **template_params)
|
|
||||||
else
|
|
||||||
current_account.templates.new(template_params)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
render :edit, layout: 'plain'
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@template = current_account.templates.new(template_params)
|
||||||
@template.author = current_user
|
@template.author = current_user
|
||||||
|
@template.assign_attributes(@base_template.slice(:fields, :schema, :submitters)) if @base_template
|
||||||
|
|
||||||
if @template.save
|
if @template.save
|
||||||
Templates::CloneAttachments.call(template: @template, original_template: @base_template) if @base_template
|
Templates::CloneAttachments.call(template: @template, original_template: @base_template) if @base_template
|
||||||
|
|
||||||
redirect_to template_path(@template)
|
redirect_to edit_template_path(@template)
|
||||||
else
|
else
|
||||||
render turbo_stream: turbo_stream.replace(:modal, template: 'templates/new'), status: :unprocessable_entity
|
render turbo_stream: turbo_stream.replace(:modal, template: 'templates/new'), status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
@@ -38,7 +39,7 @@ class TemplatesController < ApplicationController
|
|||||||
@template = current_account.templates.find(params[:id])
|
@template = current_account.templates.find(params[:id])
|
||||||
@template.update!(deleted_at: Time.current)
|
@template.update!(deleted_at: Time.current)
|
||||||
|
|
||||||
redirect_to settings_users_path, notice: 'template has been archived.'
|
redirect_back(fallback_location: root_path, notice: 'Template has been archived.')
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ export default {
|
|||||||
this.isSaving = true
|
this.isSaving = true
|
||||||
|
|
||||||
this.save().then(() => {
|
this.save().then(() => {
|
||||||
window.Turbo.visit(`/templates/${this.template.id}/submissions`)
|
window.Turbo.visit(`/templates/${this.template.id}`)
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.isSaving = false
|
this.isSaving = false
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<%- if @templates.any? %>
|
<% if @templates.any? %>
|
||||||
<div class="flex justify-between mb-4">
|
<div class="flex justify-between mb-4">
|
||||||
<h1 class="text-4xl font-bold">Templates</h1>
|
<h1 class="text-4xl font-bold">Templates</h1>
|
||||||
<%= link_to new_template_path, class: 'btn btn-primary btn-md gap-2', data: { turbo_frame: :modal } do %>
|
<%= link_to new_template_path, class: 'btn btn-primary btn-md gap-2', data: { turbo_frame: :modal } do %>
|
||||||
@@ -8,24 +8,38 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid gap-4 md:grid-cols-3">
|
<div class="grid gap-4 md:grid-cols-3">
|
||||||
<% @templates.each do |template| %>
|
<% @templates.each do |template| %>
|
||||||
<div class="card bg-base-300">
|
<div class="h-36 relative group">
|
||||||
<div class="card-body">
|
<a href="<%= template_path(template) %>" class="flex h-full flex-col justify-between rounded-2xl pt-6 px-7 w-full bg-base-200 peer">
|
||||||
<h2 class="card-title flex justify-between">
|
<div class="pb-4 text-xl font-semibold" style="overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;">
|
||||||
<%= link_to template.name, template_submissions_path(template) %>
|
<%= template.name %>
|
||||||
<%= link_to 'Edit', template_path(template), class: 'btn btn-outline btn-xs' %>
|
</div>
|
||||||
</h2>
|
<div class="pb-6 pt-1" >
|
||||||
<div >
|
<p class="flex items-center space-x-1 text-xs text-base-content/60">
|
||||||
<p class="text-sm opacity-70 mb-1">Created by <%= template.author.full_name %></p>
|
<%= svg_icon('user', class: 'w-4 h-4') %>
|
||||||
<p class="flex items-center gap-1 text-xs opacity-50">
|
<span><%= template.author.full_name %></span>
|
||||||
|
</p>
|
||||||
|
<p class="flex items-center space-x-1 text-xs text-base-content/60">
|
||||||
<%= svg_icon('calendar', class: 'w-4 h-4') %>
|
<%= svg_icon('calendar', class: 'w-4 h-4') %>
|
||||||
<span><%= l(template.created_at, format: :long) %></span>
|
<span><%= l(template.created_at, format: :long) %></span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
</a>
|
||||||
|
<div class="absolute top-0 bottom-0 w-0 pt-7 space-y-1.5 hidden group-hover:block" style="right: 40px">
|
||||||
|
<a href="<%= edit_template_path(template) %>" class="btn btn-xs btn-outline bg-base-200 btn-circle">
|
||||||
|
<%= svg_icon('pencil', class: 'w-4 h-4') %>
|
||||||
|
</a>
|
||||||
|
<a href="<%= new_template_path(base_template_id: template.id) %>" data-turbo-frame="modal" class="btn btn-xs btn-outline bg-base-200 btn-circle">
|
||||||
|
<%= svg_icon('copy', class: 'w-4 h-4') %>
|
||||||
|
</a>
|
||||||
|
<%= button_to template_path(template), data: { turbo_confirm: 'Are you sure?' }, method: :delete, class: "btn btn-xs btn-outline bg-base-200 btn-circle" do %>
|
||||||
|
<%= svg_icon('trash', class: 'w-4 h-4 enabled') %>
|
||||||
|
<%= svg_icon('loader', class: 'w-4 h-4 animate-spin disabled') %>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<%= render 'shared/pagination', pagy: @pagy %>
|
<%= render 'shared/pagination', pagy: @pagy, items_name: 'Templates' %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="card bg-base-200 h-96 mb-2">
|
<div class="card bg-base-200 h-96 mb-2">
|
||||||
<div class="card-body text-center">
|
<div class="card-body text-center">
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<turbo-frame id="modal"></turbo-frame>
|
<turbo-frame id="modal"></turbo-frame>
|
||||||
<%= render 'shared/navbar' %>
|
<%= render 'shared/navbar' %>
|
||||||
<% if flash.present? %><%= render 'shared/flash' %><% end %>
|
<% if flash.present? %><%= render 'shared/flash' %><% end %>
|
||||||
<div class="max-w-6xl mx-auto px-4 md:px-2">
|
<div class="max-w-6xl mx-auto px-4 md:px-2 mb-8">
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<% if signed_in? %>
|
<% if signed_in? %>
|
||||||
<div class="space-x-6">
|
<div class="space-x-6">
|
||||||
<%= link_to 'Settings', settings_storage_index_path, class: 'font-medium text-lg' %>
|
<%= link_to 'Settings', settings_profile_index_path, class: 'font-medium text-lg' %>
|
||||||
<div class="dropdown dropdown-end z-50">
|
<div class="dropdown dropdown-end z-50">
|
||||||
<label tabindex="0" class="cursor-pointer bg-base-content text-purple-300 rounded-full w-8 p-2">
|
<label tabindex="0" class="cursor-pointer bg-base-content text-purple-300 rounded-full w-8 p-2">
|
||||||
<span class="text-sm align-text-top"><%= current_user.initials %></span>
|
<span class="text-sm align-text-top"><%= current_user.initials %></span>
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
<% link = pagy_link_proc(@pagy) %>
|
<% link = pagy_link_proc(@pagy) %>
|
||||||
<% if @pagy.pages > 1 %>
|
<% if @pagy.pages > 1 %>
|
||||||
<div class="flex my-6 items-center justify-center md:justify-end">
|
<div class="flex my-6 justify-center md:justify-between">
|
||||||
|
<div class="hidden md:block text-sm">
|
||||||
|
<%= @pagy.from %>-<%= @pagy.to %> of <%= @pagy.count %> of <%= local_assigns[:items_name] || 'items' %>
|
||||||
|
</div>
|
||||||
<div class="join">
|
<div class="join">
|
||||||
<% if @pagy.prev %>
|
<% if @pagy.prev %>
|
||||||
<%== link.call(@pagy.prev, "«", 'class="join-item btn btn-sm"') %>
|
<%== link.call(@pagy.prev, "«", 'class="join-item btn min-h-full h-10"') %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="join-item btn btn-sm btn-disabled !bg-base-200">«</span>
|
<span class="join-item btn btn-disabled !bg-base-200 min-h-full h-10">«</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<span class="join-item btn btn-sm uppercase">
|
<span class="join-item btn uppercase min-h-full h-10">
|
||||||
Page <%= @pagy.page %>
|
Page <%= @pagy.page %>
|
||||||
</span>
|
</span>
|
||||||
<% if @pagy.next %>
|
<% if @pagy.next %>
|
||||||
<%== link.call(@pagy.next, "»", 'class="join-item btn btn-sm"') %>
|
<%== link.call(@pagy.next, "»", 'class="join-item btn min-h-full h-10"') %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="join-item btn btn-sm btn-disabled !bg-base-200">»</span>
|
<span class="join-item btn btn-disabled !bg-base-200 min-h-full h-10">»</span>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
<div class="card card-compact bg-primary mb-12 md:card-normal">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="grid md:grid-cols-2 gap-4 md:flex md:justify-between">
|
|
||||||
<h2 class="card-title text-4xl ">
|
|
||||||
<%= @template.name %>
|
|
||||||
</h2>
|
|
||||||
<div class="flex md:justify-between space-x-2">
|
|
||||||
<%= link_to new_template_path(base_template_id: @template.id), class: 'btn btn-outline btn-sm', data: { turbo_frame: :modal } do %>
|
|
||||||
<%= svg_icon('copy', class: 'w-6 h-6') %>
|
|
||||||
<span>Clone</span>
|
|
||||||
<% end %>
|
|
||||||
<%= link_to template_path(@template), class: 'btn btn-outline btn-sm' do %>
|
|
||||||
<span class="flex items-center justify-center space-x-2">
|
|
||||||
<%= svg_icon('pencil', class: 'w-6 h-6') %>
|
|
||||||
<span>Edit</span>
|
|
||||||
</span>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% if @template.submitters.size == 1 %>
|
|
||||||
<div class="join w-full">
|
|
||||||
<buttun class="btn bg-neutral btn-disabled text-white join-item">
|
|
||||||
Share link
|
|
||||||
</buttun>
|
|
||||||
<input id="share-link-input" autocomplete="off" type="text" class="input input-bordered w-full join-item" value="<%= start_form_url(slug: @template.slug) %>" disabled>
|
|
||||||
<clipboard-copy class="btn btn-neutral btn-square join-item text-white font-bold swap swap-active" for="share-link-input">
|
|
||||||
<%= svg_icon('clipboard', class: 'w-6 h-6 swap-on text-white') %>
|
|
||||||
<%= svg_icon('clipboard_copy', class: 'w-6 h-6 swap-off text-white') %>
|
|
||||||
</clipboard-copy>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex justify-between mb-4">
|
|
||||||
<h1 class="text-3xl font-bold">Recipients</h1>
|
|
||||||
<%= link_to new_template_submission_path(@template), class: 'btn btn-primary btn-sm gap-2', data: { turbo_frame: 'modal' } do %>
|
|
||||||
<%= svg_icon('plus', class: 'w-6 h-6') %>
|
|
||||||
<span class="hidden md:block">Add Recipients</span>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<div class="overflow-x-auto">
|
|
||||||
<%- if @submissions.any? %>
|
|
||||||
<table class="table w-full table-lg rounded-t-2xl overflow-hidden">
|
|
||||||
<thead class="bg-base-200">
|
|
||||||
<tr class="text-neutral uppercase">
|
|
||||||
<th>
|
|
||||||
Email
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
Status
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
Share Link
|
|
||||||
</th>
|
|
||||||
<th class="text-right" width="1px">
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% @submissions.each do |submission| %>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<% submission.submitters.each do |submitter| %>
|
|
||||||
<%= submitter.email %>
|
|
||||||
<br>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<% submission.submitters.each do |submitter| %>
|
|
||||||
<div>
|
|
||||||
<span class="badge badge-info badge-outline">
|
|
||||||
<%= submitter.status %>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<% submission.submitters.each do |submitter| %>
|
|
||||||
<% share_link_input_id = "share-link-input_#{submitter.id}" %>
|
|
||||||
<div class="join ">
|
|
||||||
<input id="<%= share_link_input_id %>" autocomplete="off" type="text" class="input input-xs input-bordered join-item" value="<%= submit_form_url(slug: submitter.slug) %>" disabled>
|
|
||||||
<clipboard-copy class="btn btn-xs btn-neutral btn-square join-item text-white font-bold swap swap-active" for="<%= share_link_input_id %>">
|
|
||||||
<%= svg_icon('clipboard', class: 'w-3 h-3 swap-on text-white') %>
|
|
||||||
<%= svg_icon('clipboard_copy', class: 'w-3 h-3 swap-off text-white') %>
|
|
||||||
</clipboard-copy>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td class="flex items-center space-x-2 justify-end">
|
|
||||||
<%= link_to 'View', submission_path(submission), title: 'View', class: 'btn btn-outline btn-xs' %>
|
|
||||||
<%= button_to 'Remove', submission_path(submission), class: 'btn btn-outline btn-error btn-xs', title: 'Delete', method: :delete, data: { turbo_confirm: 'Are you sure?' } %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<%= render 'shared/pagination', pagy: @pagy %>
|
|
||||||
<% else %>
|
|
||||||
<%= render 'shared/no_data_banner' %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<template-builder data-template="<%= @template.to_json(include: { documents: { include: { preview_images: { methods: %i[url metadata filename] } } } }) %>"></template-builder>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<%= render 'shared/turbo_modal', title: 'New Template' do %>
|
<%= render 'shared/turbo_modal', title: @base_template ? 'Clone Template' : 'New Template' do %>
|
||||||
<%= form_for @template, data: { turbo_frame: :_top } do |f| %>
|
<%= form_for @template, data: { turbo_frame: :_top } do |f| %>
|
||||||
<% if @base_template %>
|
<% if @base_template %>
|
||||||
<%= hidden_field_tag :base_template_id, @base_template.id %>
|
<%= hidden_field_tag :base_template_id, @base_template.id %>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<%= f.text_field :name, required: true, placeholder: 'Template Name', class: 'base-input' %>
|
<%= f.text_field :name, required: true, placeholder: 'Template Name', class: 'base-input' %>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-control mt-4">
|
<div class="form-control mt-4">
|
||||||
<%= f.button button_title(title: 'Create', disabled_with: 'Creating'), class: 'base-button' %>
|
<%= f.button button_title(title: @base_template ? 'Submit' : 'Create', disabled_with: 'Creating'), class: 'base-button' %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -1 +1,103 @@
|
|||||||
<template-builder data-template="<%= @template.to_json(include: { documents: { include: { preview_images: { methods: %i[url metadata filename] } } } }) %>"></template-builder>
|
<div class="card card-compact bg-primary mb-12 md:card-normal">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="grid md:grid-cols-2 gap-4 md:flex md:justify-between">
|
||||||
|
<h2 class="card-title text-4xl ">
|
||||||
|
<%= @template.name %>
|
||||||
|
</h2>
|
||||||
|
<div class="flex md:justify-between space-x-2">
|
||||||
|
<%= link_to new_template_path(base_template_id: @template.id), class: 'btn btn-outline btn-sm', data: { turbo_frame: :modal } do %>
|
||||||
|
<%= svg_icon('copy', class: 'w-6 h-6') %>
|
||||||
|
<span>Clone</span>
|
||||||
|
<% end %>
|
||||||
|
<%= link_to edit_template_path(@template), class: 'btn btn-outline btn-sm' do %>
|
||||||
|
<span class="flex items-center justify-center space-x-2">
|
||||||
|
<%= svg_icon('pencil', class: 'w-6 h-6') %>
|
||||||
|
<span>Edit</span>
|
||||||
|
</span>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% if @template.submitters.size == 1 %>
|
||||||
|
<div class="join w-full">
|
||||||
|
<buttun class="btn bg-neutral btn-disabled text-white join-item">
|
||||||
|
Share link
|
||||||
|
</buttun>
|
||||||
|
<input id="share-link-input" autocomplete="off" type="text" class="input input-bordered w-full join-item" value="<%= start_form_url(slug: @template.slug) %>" disabled>
|
||||||
|
<clipboard-copy class="btn btn-neutral btn-square join-item text-white font-bold swap swap-active" for="share-link-input">
|
||||||
|
<%= svg_icon('clipboard', class: 'w-6 h-6 swap-on text-white') %>
|
||||||
|
<%= svg_icon('clipboard_copy', class: 'w-6 h-6 swap-off text-white') %>
|
||||||
|
</clipboard-copy>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-between mb-4">
|
||||||
|
<h1 class="text-3xl font-bold">Recipients</h1>
|
||||||
|
<%= link_to new_template_submission_path(@template), class: 'btn btn-primary btn-sm gap-2', data: { turbo_frame: 'modal' } do %>
|
||||||
|
<%= svg_icon('plus', class: 'w-6 h-6') %>
|
||||||
|
<span class="hidden md:block">Add Recipients</span>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<div class="overflow-x-auto">
|
||||||
|
<%- if @submissions.any? %>
|
||||||
|
<table class="table w-full table-lg rounded-t-2xl overflow-hidden">
|
||||||
|
<thead class="bg-base-200">
|
||||||
|
<tr class="text-neutral uppercase">
|
||||||
|
<th>
|
||||||
|
Email
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Status
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Share Link
|
||||||
|
</th>
|
||||||
|
<th class="text-right" width="1px">
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @submissions.each do |submission| %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<% submission.submitters.each do |submitter| %>
|
||||||
|
<%= submitter.email %>
|
||||||
|
<br>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<% submission.submitters.each do |submitter| %>
|
||||||
|
<div>
|
||||||
|
<span class="badge badge-info badge-outline">
|
||||||
|
<%= submitter.status %>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<% submission.submitters.each do |submitter| %>
|
||||||
|
<% share_link_input_id = "share-link-input_#{submitter.id}" %>
|
||||||
|
<div class="join ">
|
||||||
|
<input id="<%= share_link_input_id %>" autocomplete="off" type="text" class="input input-xs input-bordered join-item" value="<%= submit_form_url(slug: submitter.slug) %>" disabled>
|
||||||
|
<clipboard-copy class="btn btn-xs btn-neutral btn-square join-item text-white font-bold swap swap-active" for="<%= share_link_input_id %>">
|
||||||
|
<%= svg_icon('clipboard', class: 'w-3 h-3 swap-on text-white') %>
|
||||||
|
<%= svg_icon('clipboard_copy', class: 'w-3 h-3 swap-off text-white') %>
|
||||||
|
</clipboard-copy>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td class="flex items-center space-x-2 justify-end">
|
||||||
|
<%= link_to 'View', submission_path(submission), title: 'View', class: 'btn btn-outline btn-xs' %>
|
||||||
|
<%= button_to 'Remove', submission_path(submission), class: 'btn btn-outline btn-error btn-xs', title: 'Delete', method: :delete, data: { turbo_confirm: 'Are you sure?' } %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<%= render 'shared/pagination', pagy: @pagy, items_name: 'Submissions' %>
|
||||||
|
<% else %>
|
||||||
|
<%= render 'shared/no_data_banner' %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -58,6 +58,6 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<%= render 'shared/pagination', pagy: @pagy %>
|
<%= render 'shared/pagination', pagy: @pagy, items_name: 'Users' %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+2
-2
@@ -30,8 +30,8 @@ Rails.application.routes.draw do
|
|||||||
resources :setup, only: %i[index create]
|
resources :setup, only: %i[index create]
|
||||||
resources :users, only: %i[new create edit update destroy]
|
resources :users, only: %i[new create edit update destroy]
|
||||||
resources :submissions, only: %i[show destroy]
|
resources :submissions, only: %i[show destroy]
|
||||||
resources :templates, only: %i[new create show destroy] do
|
resources :templates, only: %i[new create edit show destroy] do
|
||||||
resources :submissions, only: %i[index new create]
|
resources :submissions, only: %i[new create]
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :start_form, only: %i[show update], path: 'd', param: 'slug' do
|
resources :start_form, only: %i[show update], path: 'd', param: 'slug' do
|
||||||
|
|||||||
Reference in New Issue
Block a user