diff options
author | David Gay <david@davidgay.org> | 2023-11-03 01:03:48 -0400 |
---|---|---|
committer | David Gay <david@davidgay.org> | 2023-11-03 01:03:48 -0400 |
commit | 0c5cccbecfc8b71fb318c275f142306e19bb7e43 (patch) | |
tree | 178b401fe2ecf6bd965524e078e9882305342a69 /app | |
parent | 47ecf3f515ef5bd7db2c4f3bce0a872a46ca2233 (diff) |
Pokedex entry recording and viewing on runs#show
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/pokedex_entries_controller.rb | 36 | ||||
-rw-r--r-- | app/helpers/pokedex_entries_helper.rb | 2 | ||||
-rw-r--r-- | app/models/pokemon.rb | 4 | ||||
-rw-r--r-- | app/views/pokedex/show.html.erb | 2 | ||||
-rw-r--r-- | app/views/pokedex_entries/index.html.erb | 20 | ||||
-rw-r--r-- | app/views/pokedex_entries/new.html.erb | 25 | ||||
-rw-r--r-- | app/views/runs/show.html.erb | 80 |
7 files changed, 133 insertions, 36 deletions
diff --git a/app/controllers/pokedex_entries_controller.rb b/app/controllers/pokedex_entries_controller.rb new file mode 100644 index 0000000..952f0cc --- /dev/null +++ b/app/controllers/pokedex_entries_controller.rb @@ -0,0 +1,36 @@ +class PokedexEntriesController < ApplicationController + before_action :set_run + before_action :only_allow_if_checked_out, only: [:create] + + def index + @pokedex_entries = PokedexEntry.where(run: @run).order(:created_at).reverse + end + + def new + @pokedex_entry = PokedexEntry.new + end + + def create + @pokedex_entry = current_user.pokedex_entries.build(pokedex_entry_params) + @pokedex_entry.run_id = params[:run_id] + if @pokedex_entry.save + redirect_to run_pokedex_entries_path(@run) + else + render :new, status: :unprocessable_entity + end + end + +protected + + def pokedex_entry_params + params.require(:pokedex_entry).permit(:pokemon_id, :recorded_at, :shiny) + end + + def set_run + @run = Run.find(params[:run_id]) + end + + def only_allow_if_checked_out + redirect_to run_path(@run) unless @run.checked_out_user == current_user + end +end diff --git a/app/helpers/pokedex_entries_helper.rb b/app/helpers/pokedex_entries_helper.rb new file mode 100644 index 0000000..87a593f --- /dev/null +++ b/app/helpers/pokedex_entries_helper.rb @@ -0,0 +1,2 @@ +module PokedexEntriesHelper +end diff --git a/app/models/pokemon.rb b/app/models/pokemon.rb index 293281a..ec9ff9f 100644 --- a/app/models/pokemon.rb +++ b/app/models/pokemon.rb @@ -2,4 +2,8 @@ class Pokemon < ApplicationRecord has_many :pokedex_entries, dependent: :restrict_with_error validates :pokedex_num, :name, presence: true + + def sprite_path(shiny: false) + "sprites/pokemon/#{"shiny/" if shiny}#{pokedex_num}.png" + end end diff --git a/app/views/pokedex/show.html.erb b/app/views/pokedex/show.html.erb index f920b19..e463d58 100644 --- a/app/views/pokedex/show.html.erb +++ b/app/views/pokedex/show.html.erb @@ -8,7 +8,7 @@ border border-orange-900 rounded shadow"> <div class="flex-1 text-display text-center">No. <%= pokemon.pokedex_num %></div> <div class="flex-grow flex flex-col justify-around"> - <%= image_tag "sprites/pokemon/#{pokemon.pokedex_num}.png" %> + <%= image_tag pokemon.sprite_path %> </div> <div class="flex-1"><%= pokemon.name %></div> </div> diff --git a/app/views/pokedex_entries/index.html.erb b/app/views/pokedex_entries/index.html.erb new file mode 100644 index 0000000..e31cf2d --- /dev/null +++ b/app/views/pokedex_entries/index.html.erb @@ -0,0 +1,20 @@ +<%= turbo_frame_tag "pokedex_entries" do %> + <%= link_to "Record an entry", new_run_pokedex_entry_path(@run) %> + + <div class="space-y-2 p-4 h-[400px] border border-orange-900 overflow-y-scroll"> + <% @pokedex_entries.each do |entry| %> + <div class="flex space-x-2 items-center"> + <div class="flex justify-around bg-white h-[60px] w-[60px] border border-orange-900 + rounded shadow"> + <%= image_tag entry.pokemon.sprite_path(shiny: entry.shiny?) %> + </div> + <div> + <div><%= "Shiny " if entry.shiny? %><%= entry.pokemon.name %></div> + <div class="text-sm">Recorded by + <%= link_to entry.user.name || "???", user_path(entry.user) %> @ <%= entry.recorded_at %> + </div> + </div> + </div> + <% end %> + </div> +<% end %> diff --git a/app/views/pokedex_entries/new.html.erb b/app/views/pokedex_entries/new.html.erb new file mode 100644 index 0000000..03bcbc8 --- /dev/null +++ b/app/views/pokedex_entries/new.html.erb @@ -0,0 +1,25 @@ +<%= turbo_frame_tag "pokedex_entries" do %> + <%= form_with model: [@run, @pokedex_entry], class: "space-y-4" do |form| %> + <div> + <%= form.label :pokemon_id %> + <%= form.collection_select :pokemon_id, Pokemon.order(:pokedex_num), :id, + ->(pokemon) { "#{pokemon.pokedex_num} - #{pokemon.name}" }, prompt: "Choose...", + required: true %> + </div> + + <div> + <%= form.label :recorded_at %> + <%= form.datetime_local_field :recorded_at, value: Time.zone.now, required: true %> + </div> + + <div> + <%= form.label :shiny %> + <%= form.check_box :shiny %> + </div> + + <div class="space-x-2"> + <%= form.submit "Got 'em!", class: "btn btn-primary" %> + <%= link_to "Cancel", run_pokedex_entries_path %> + </div> + <% end %> +<% end %> diff --git a/app/views/runs/show.html.erb b/app/views/runs/show.html.erb index e080783..cca5029 100644 --- a/app/views/runs/show.html.erb +++ b/app/views/runs/show.html.erb @@ -21,44 +21,54 @@ <% end %> </div> - <h2 class="text-xl">Checkpoints</h2> - <div><%= link_to "New checkpoint", new_run_checkpoint_path(@run) %></div> + <div class="grid grid-cols-1 md:grid-cols-2"> + <div> + <h2 class="text-xl">Checkpoints</h2> + <div><%= link_to "New checkpoint", new_run_checkpoint_path(@run) %></div> - <% @run.checkpoints.order(:created_at).reverse.each do |checkpoint| %> - <div class="border-l border-orange-900 p-2"> - <div class="flex flex-col"> - <div class="flex space-x-2 text-sm"> - <div> - <% case checkpoint.kind.to_sym %> - <% when :comment %> - 💬 - <% when :checkin %> - 📬 - <% when :checkout %> - 📠- <% else %> - <%# Should never happen. %> - <% end %> - </div> - <div class="flex space-x-2"> - <span class="uppercase"><%= checkpoint.kind %></span> - <% if checkpoint.save_file.attached? %> - <%= link_to "Download save file", rails_blob_path(checkpoint.save_file, disposition: "attachment") %> + <% @run.checkpoints.order(:created_at).reverse.each do |checkpoint| %> + <div class="border-l border-orange-900 p-2"> + <div class="flex flex-col"> + <div class="flex space-x-2 text-sm"> + <div> + <% case checkpoint.kind.to_sym %> + <% when :comment %> + 💬 + <% when :checkin %> + 📬 + <% when :checkout %> + 📠+ <% else %> + <%# Should never happen. %> + <% end %> + </div> + <div class="flex space-x-2"> + <span class="uppercase"><%= checkpoint.kind %></span> + <% if checkpoint.save_file.attached? %> + <%= link_to "Download save file", rails_blob_path(checkpoint.save_file, disposition: "attachment") %> + <% end %> + </div> + + </div> + <div> + </div> + <div class="text-sm"> + <%= time_ago_in_words(checkpoint.created_at) %> ago by + <%= link_to checkpoint.user.name || "???", user_path(checkpoint.user) %> + <span>@ <%= checkpoint.created_at %></span> + </div> + <% if checkpoint.comment %> + <div class="text-lg"><%= checkpoint.comment %></div> <% end %> </div> - - </div> - <div> </div> - <div class="text-sm"> - <%= time_ago_in_words(checkpoint.created_at) %> ago by - <%= link_to checkpoint.user.name || "???", user_path(checkpoint.user) %> - <span>@ <%= checkpoint.created_at %></span> - </div> - <% if checkpoint.comment %> - <div class="text-lg"><%= checkpoint.comment %></div> - <% end %> - </div> + <% end %> </div> - <% end %> + <div> + <% if @run.checked_out_user == current_user %> + <h2 class="text-xl">Pokédex Entries</h2> + <%= turbo_frame_tag "pokedex_entries", src: run_pokedex_entries_url(@run) %> + <% end %> + </div> + </div> </div> |