From 0f82b92b75f4bd322e7a8d162a06ed9d2b1e841d Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Sun, 27 Feb 2022 18:34:47 +0100 Subject: [PATCH] Organization chart #226 --- .../organization_chart/_edit.html.erb | 83 +++++-------------- .../organization_chart/_show.html.erb | 38 ++++----- .../organization_chart/_static.html.erb | 19 ++--- 3 files changed, 46 insertions(+), 94 deletions(-) diff --git a/app/views/admin/communication/blocks/templates/organization_chart/_edit.html.erb b/app/views/admin/communication/blocks/templates/organization_chart/_edit.html.erb index fd33bc977..3d0b35626 100644 --- a/app/views/admin/communication/blocks/templates/organization_chart/_edit.html.erb +++ b/app/views/admin/communication/blocks/templates/organization_chart/_edit.html.erb @@ -1,77 +1,32 @@ <a class="<%= button_classes('mb-4') %>" - v-on:click="data.elements.push({title: '', persons: []})"> - Add role + v-on:click="data.elements.push({id: '', role: ''})"> + Add person </a> -<draggable :list="data.elements" handle=".elementHandle"> - <div v-for="(element, elementIndex) in data.elements"> - <div class="d-flex"> - <div> - <a class="btn ps-0 elementHandle"> +<draggable :list="data.elements" class="list-group"> + <div v-for="person in data.elements" class="list-group-item"> + <div class="row"> + <div class="col-md-1"> + <a class="btn ps-0"> <i class="fa fa-bars handle"></i> </a> </div> - <div class="flex-fill"> - <div class="mb-3"> - <label class="visually-hidden" - aria-label="Title" - :for="'element-title-' + elementIndex"> - Title - </label> - <input class="form-control form-control-lg" - type="text" - v-model="element.title" - placeholder="Type role name here" - :id="'element-title-' + elementIndex"> - </div> - <div> - <div class="row"> - <div class="col-md-8"> - <p>People for “{{ element.title }}â€</p> - </div> - <div class="col-md-4 text-end"> - <a class="<%= button_classes('mt-n1') %>" - v-on:click="element.persons.push({id: '', role: ''})"> - Add person - </a> - </div> - </div> - <draggable :list="element.persons" class="list-group"> - <div v-for="person in element.persons" class="list-group-item"> - <div class="row"> - <div class="col-md-1"> - <a class="btn ps-0"> - <i class="fa fa-bars handle"></i> - </a> - </div> - <div class="col-md-5"> - <select class="form-select select" v-model="person.id"> - <% current_university.people.ordered.each_with_index do |person, index| %> - <option value="<%= person.id %>"><%= person.last_name %>, <%= person.first_name %></option> - <% end %> - </select> - </div> - <div class="col-md-5"> - <input class="form-control" type="text" v-model="person.role" placeholder="Type role here"> - </div> - <div class="col-md-1 text-end"> - <a class="btn btn-sm btn-danger mt-1" - v-on:click="element.persons.splice(element.persons.indexOf(person), 1)"> - <i class="fas fa-times"></i> - </a> - </div> - </div> - </div> - </draggable> - </div> + <div class="col-md-5"> + <select class="form-select select" v-model="person.id"> + <% current_university.people.ordered.each_with_index do |person, index| %> + <option value="<%= person.id %>"><%= person.last_name %>, <%= person.first_name %></option> + <% end %> + </select> </div> - <div> - <a class="btn btn-sm btn-danger ms-3" - v-on:click="data.elements.splice(data.elements.indexOf(element), 1)"> + <div class="col-md-5"> + <input class="form-control" type="text" v-model="person.role" placeholder="Type role here"> + </div> + <div class="col-md-1 text-end"> + <a class="btn btn-sm btn-danger mt-1" + v-on:click="data.elements.splice(data.elements.indexOf(person), 1)"> <i class="fas fa-times"></i> </a> </div> </div> - <hr class="my-5"> </div> </draggable> diff --git a/app/views/admin/communication/blocks/templates/organization_chart/_show.html.erb b/app/views/admin/communication/blocks/templates/organization_chart/_show.html.erb index b2fe5da06..44648c246 100644 --- a/app/views/admin/communication/blocks/templates/organization_chart/_show.html.erb +++ b/app/views/admin/communication/blocks/templates/organization_chart/_show.html.erb @@ -1,19 +1,19 @@ -<% @block.data['elements'].each do |element| %> - <h2><%= element['title'] %></h2> - <div class="row"> - <% element['persons'].each do |person| %> - <% - p = current_university.people.find person['id'] - next if p.nil? - %> - <div class="col-md-3"> - <article class="card"> - <div class="card-body"> - <h3 class="card-title h5"><%= link_to p, [:admin, p] %></h3> - <p class="mb-0"><%= person['role'] %></p> - </div> - </article> - </div> - <% end %> - </div> -<% end if @block.data %> +<div class="row"> + <% @block.data['elements'].each do |person| %> + <% + next unless person.has_key? 'id' + id = person['id'] + next if id.blank? + p = current_university.people.find person['id'] + next if p.nil? + %> + <div class="col-md-3"> + <article class="card"> + <div class="card-body"> + <h3 class="card-title h5"><%= link_to p, [:admin, p] %></h3> + <p class="mb-0"><%= person['role'] %></p> + </div> + </article> + </div> + <% end if @block.data %> +</div> diff --git a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb index f2694c15f..f245953a9 100644 --- a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb +++ b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb @@ -1,15 +1,12 @@ <% if block.data.has_key?('elements') %> -<% block.data['elements'].each do |element| %> - - title: > - <%= prepare_text_for_static element['title'] %> - persons: -<% -element['persons'].each do |person| - p = block.university.people.find person['id'] +<% block.data['elements'].each do |person| + next unless person.has_key? 'id' + id = person['id'] + next if id.blank? + p = block.university.people.find id %> - - slug: "<%= p.slug %>" - role: > - <%= prepare_text_for_static person['role'] %> -<% end %> + - slug: "<%= p.slug %>" + role: > + <%= prepare_text_for_static person['role'] %> <% end %> <% end %> -- GitLab