diff options
Diffstat (limited to 'app/views/rafts')
-rw-r--r-- | app/views/rafts/editor.html.erb | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/app/views/rafts/editor.html.erb b/app/views/rafts/editor.html.erb new file mode 100644 index 0000000..cde56d8 --- /dev/null +++ b/app/views/rafts/editor.html.erb @@ -0,0 +1,108 @@ +<div class="d-flex justify-content-between align-items-center mb-3"> + <h1 class="display-1">Rafts editor</h1> + <%= link_to "Back to dashboard", root_path, class: "btn btn-outline-secondary" %> +</div> + +<!-- Bulk assign all rafts --> +<div class="card"> + <div class="card-header">Assign ALL rafts</div> + <div class="card-body"> + <%= form_with url: assign_all_rafts_path, method: :patch, class: "row g-2", data: { turbo: false } do %> + <div class="col-12 col-md-6"> + <select class="form-select" name="crop_id"> + <option value="">— Unassigned (clear) —</option> + <% @crops.each do |crop| %> + <option value="<%= crop.id %>"><%= crop.name %></option> + <% end %> + </select> + </div> + <div class="col-12 col-md-auto"> + <button class="btn btn-primary">Apply to all</button> + </div> + <% end %> + </div> +</div> + +<div class="table-responsive"> + <table class="table table-sm table-striped text-center align-middle my-3"> + <thead> + <tr> + <th class="text-start">Bed</th> + <% max_cols = @beds.map { |b| b.rafts.count }.max %> + <% (1..max_cols).each do |i| %> + <th>R<%= i %></th> + <% end %> + </tr> + </thead> + <tbody> + <% @beds.each do |bed| %> + <tr> + <th><%= bed.location %></th> + <% bed.rafts.order(:location).each do |raft| %> + <td> + <% if raft.crop %> + <%= raft.crop.name %> + <% else %> + — + <% end %> + </td> + <% end %> + </tr> + <% end %> + </tbody> + </table> +</div> + +<!-- Per-bed tables --> +<% @beds.each do |bed| %> + <div class="card mb-3" id="bed-<%= bed.id %>"> + <div class="card-header d-flex flex-wrap gap-2 align-items-center"> + <span class="me-auto">Bed <strong>#<%= bed.location %></strong></span> + <%= form_with url: assign_bed_rafts_path, method: :patch, class: "d-flex gap-2 align-items-center", data: { turbo: false } do %> + <input type="hidden" name="bed_id" value="<%= bed.id %>"> + <select class="form-select" name="crop_id"> + <option value="">— Unassigned (clear) —</option> + <% @crops.each do |crop| %> + <option value="<%= crop.id %>"><%= crop.name %></option> + <% end %> + </select> + <button class="btn btn-primary">Apply</button> + <% end %> + </div> + <div class="card-body p-0"> + <div class="table-responsive"> + <table class="table table-sm mb-0 align-middle"> + <thead class="table-light"> + <tr> + <th class="text-nowrap text-center">Raft</th> + <th>Crop</th> + <th class="text-end">Actions</th> + </tr> + </thead> + <tbody> + <% bed.rafts.order(:location).each do |raft| %> + <tr> + <td class="text-center"><strong><%= raft.location %></strong></td> + <td style="max-width: 280px;"> + <%= form_with url: assign_one_raft_path(raft), method: :patch, class: "d-flex gap-2", data: { turbo: false } do %> + <select class="form-select" name="crop_id"> + <option value="">— Unassigned (clear) —</option> + <% @crops.each do |crop| %> + <option value="<%= crop.id %>" <%= "selected" if raft.crop_id == crop.id %>><%= crop.name %></option> + <% end %> + </select> + <button class="btn btn-outline-primary">Save</button> + <% end %> + </td> + <td class="text-end"> + <%= button_to "Clear", assign_one_raft_path(raft, crop_id: ""), method: :patch, + form: { data: { turbo: false } }, class: "btn btn-outline-secondary btn-sm" %> + </td> + </tr> + <% end %> + </tbody> + </table> + </div> + </div> + </div> +<% end %> |