add ammo type stuff
This commit is contained in:
		| @@ -13,12 +13,25 @@ defmodule Cannery.Ammo.AmmoType do | |||||||
|   @primary_key {:id, :binary_id, autogenerate: true} |   @primary_key {:id, :binary_id, autogenerate: true} | ||||||
|   @foreign_key_type :binary_id |   @foreign_key_type :binary_id | ||||||
|   schema "ammo_types" do |   schema "ammo_types" do | ||||||
|     field :bullet_type, :string |  | ||||||
|     field :case_material, :string |  | ||||||
|     field :desc, :string |  | ||||||
|     field :manufacturer, :string |  | ||||||
|     field :name, :string |     field :name, :string | ||||||
|     field :grain, :integer |     field :desc, :string | ||||||
|  |  | ||||||
|  |     # https://en.wikipedia.org/wiki/Bullet#Abbreviations | ||||||
|  |     field :bullet_type, :string | ||||||
|  |     field :bullet_core, :string | ||||||
|  |     field :cartridge, :string | ||||||
|  |     field :caliber, :string | ||||||
|  |     field :case_material, :string | ||||||
|  |     field :grains, :integer | ||||||
|  |     field :pressure, :string | ||||||
|  |     field :rimfire, :boolean, null: false, default: false | ||||||
|  |     field :tracer, :boolean, null: false, default: false | ||||||
|  |     field :incendiary, :boolean, null: false, default: false | ||||||
|  |     field :blank, :boolean, null: false, default: false | ||||||
|  |     field :corrosive, :boolean, null: false, default: false | ||||||
|  |  | ||||||
|  |     field :manufacturer, :string | ||||||
|  |     field :sku, :string | ||||||
|  |  | ||||||
|     has_many :ammo_groups, AmmoGroup |     has_many :ammo_groups, AmmoGroup | ||||||
|  |  | ||||||
| @@ -27,12 +40,22 @@ defmodule Cannery.Ammo.AmmoType do | |||||||
|  |  | ||||||
|   @type t :: %AmmoType{ |   @type t :: %AmmoType{ | ||||||
|           id: id(), |           id: id(), | ||||||
|           bullet_type: String.t(), |  | ||||||
|           case_material: String.t(), |  | ||||||
|           desc: String.t(), |  | ||||||
|           manufacturer: String.t(), |  | ||||||
|           name: String.t(), |           name: String.t(), | ||||||
|           grain: integer(), |           desc: String.t(), | ||||||
|  |           bullet_type: String.t(), | ||||||
|  |           bullet_core: String.t(), | ||||||
|  |           cartridge: String.t(), | ||||||
|  |           caliber: String.t(), | ||||||
|  |           case_material: String.t(), | ||||||
|  |           grains: integer(), | ||||||
|  |           pressure: String.t(), | ||||||
|  |           rimfire: boolean(), | ||||||
|  |           tracer: boolean(), | ||||||
|  |           incendiary: boolean(), | ||||||
|  |           blank: boolean(), | ||||||
|  |           corrosive: boolean(), | ||||||
|  |           manufacturer: String.t(), | ||||||
|  |           sku: String.t(), | ||||||
|           ammo_groups: [AmmoGroup.t()] | nil, |           ammo_groups: [AmmoGroup.t()] | nil, | ||||||
|           inserted_at: NaiveDateTime.t(), |           inserted_at: NaiveDateTime.t(), | ||||||
|           updated_at: NaiveDateTime.t() |           updated_at: NaiveDateTime.t() | ||||||
| @@ -44,7 +67,24 @@ defmodule Cannery.Ammo.AmmoType do | |||||||
|   @spec changeset(t() | new_ammo_type(), attrs :: map()) :: Changeset.t(t() | new_ammo_type()) |   @spec changeset(t() | new_ammo_type(), attrs :: map()) :: Changeset.t(t() | new_ammo_type()) | ||||||
|   def changeset(ammo_type, attrs) do |   def changeset(ammo_type, attrs) do | ||||||
|     ammo_type |     ammo_type | ||||||
|     |> cast(attrs, [:name, :desc, :case_material, :bullet_type, :grain, :manufacturer]) |     |> cast(attrs, [ | ||||||
|  |       :name, | ||||||
|  |       :desc, | ||||||
|  |       :bullet_type, | ||||||
|  |       :bullet_core, | ||||||
|  |       :cartridge, | ||||||
|  |       :caliber, | ||||||
|  |       :case_material, | ||||||
|  |       :grains, | ||||||
|  |       :pressure, | ||||||
|  |       :rimfire, | ||||||
|  |       :tracer, | ||||||
|  |       :incendiary, | ||||||
|  |       :blank, | ||||||
|  |       :corrosive, | ||||||
|  |       :manufacturer, | ||||||
|  |       :sku | ||||||
|  |     ]) | ||||||
|     |> validate_required([:name]) |     |> validate_required([:name]) | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -63,26 +63,104 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do | |||||||
|           <%= error_tag(f, :desc) %> |           <%= error_tag(f, :desc) %> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <%= label(f, :case_material, class: "mr-4 title text-lg text-primary-500") %> |         <a | ||||||
|         <%= text_input(f, :case_material, class: "text-center col-span-2 input input-primary") %> |           href="https://en.wikipedia.org/wiki/Bullet#Abbreviations" | ||||||
|         <div class="col-span-3 text-center"> |           class="col-span-3 text-center link title text-md text-primary-600" | ||||||
|           <%= error_tag(f, :case_material) %> |         > | ||||||
|         </div> |           Example bullet type abbreviations | ||||||
|  |         </a> | ||||||
|         <%= label(f, :bullet_type, class: "mr-4 title text-lg text-primary-500") %> |         <%= label(f, :bullet_type, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|         <%= text_input(f, :bullet_type, class: "text-center col-span-2 input input-primary") %> |         <%= text_input(f, :bullet_type, | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           placeholder: "FMJ" | ||||||
|  |         ) %> | ||||||
|         <div class="col-span-3 text-center"> |         <div class="col-span-3 text-center"> | ||||||
|           <%= error_tag(f, :bullet_type) %> |           <%= error_tag(f, :bullet_type) %> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <%= label(f, :grain, class: "mr-4 title text-lg text-primary-500") %> |         <%= label(f, :bullet_core, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|         <%= number_input(f, :grain, |         <%= text_input(f, :bullet_core, | ||||||
|           step: "any", |  | ||||||
|           class: "text-center col-span-2 input input-primary", |           class: "text-center col-span-2 input input-primary", | ||||||
|           min: 0 |           placeholder: "Steel" | ||||||
|         ) %> |         ) %> | ||||||
|         <div class="col-span-3 text-center"> |         <div class="col-span-3 text-center"> | ||||||
|           <%= error_tag(f, :grain) %> |           <%= error_tag(f, :bullet_core) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :cartridge, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= text_input(f, :cartridge, | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           placeholder: "5.56x46mm NATO" | ||||||
|  |         ) %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :cartridge) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :caliber, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= text_input(f, :caliber, | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           placeholder: ".223" | ||||||
|  |         ) %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :caliber) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :case_material, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= text_input(f, :case_material, | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           placeholder: "Brass" | ||||||
|  |         ) %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :case_material) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :grains, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= number_input(f, :grains, | ||||||
|  |           step: "1", | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           min: 1 | ||||||
|  |         ) %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :grains) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :pressure, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= text_input(f, :pressure, | ||||||
|  |           class: "text-center col-span-2 input input-primary", | ||||||
|  |           placeholder: "+P" | ||||||
|  |         ) %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :pressure) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :rimfire, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= checkbox(f, :rimfire, class: "text-center col-span-2 checkbox") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :rimfire) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :tracer, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= checkbox(f, :tracer, class: "text-center col-span-2 checkbox") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :tracer) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :incendiary, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= checkbox(f, :incendiary, class: "text-center col-span-2 checkbox") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :incendiary) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :blank, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= checkbox(f, :blank, class: "text-center col-span-2 checkbox") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :blank) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :corrosive, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= checkbox(f, :corrosive, class: "text-center col-span-2 checkbox") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :corrosive) %> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <%= label(f, :manufacturer, class: "mr-4 title text-lg text-primary-500") %> |         <%= label(f, :manufacturer, class: "mr-4 title text-lg text-primary-500") %> | ||||||
| @@ -91,6 +169,12 @@ defmodule CanneryWeb.AmmoTypeLive.FormComponent do | |||||||
|           <%= error_tag(f, :manufacturer) %> |           <%= error_tag(f, :manufacturer) %> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  |         <%= label(f, :sku, class: "mr-4 title text-lg text-primary-500") %> | ||||||
|  |         <%= text_input(f, :sku, class: "text-center col-span-2 input input-primary") %> | ||||||
|  |         <div class="col-span-3 text-center"> | ||||||
|  |           <%= error_tag(f, :sku) %> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|         <%= submit("Save", |         <%= submit("Save", | ||||||
|           phx_disable_with: "Saving...", |           phx_disable_with: "Saving...", | ||||||
|           class: "mx-auto col-span-3 btn btn-primary" |           class: "mx-auto col-span-3 btn btn-primary" | ||||||
|   | |||||||
| @@ -22,21 +22,27 @@ | |||||||
|       <table class="min-w-full table-auto text-center bg-white"> |       <table class="min-w-full table-auto text-center bg-white"> | ||||||
|         <thead class="border-b border-primary-600"> |         <thead class="border-b border-primary-600"> | ||||||
|           <tr> |           <tr> | ||||||
|  |             <%= for field <- [ | ||||||
|  |                   :name, | ||||||
|  |                   :bullet_type, | ||||||
|  |                   :bullet_core, | ||||||
|  |                   :cartridge, | ||||||
|  |                   :caliber, | ||||||
|  |                   :case_material, | ||||||
|  |                   :grains, | ||||||
|  |                   :pressure, | ||||||
|  |                   :rimfire, | ||||||
|  |                   :tracer, | ||||||
|  |                   :incendiary, | ||||||
|  |                   :blank, | ||||||
|  |                   :corrosive, | ||||||
|  |                   :manufacturer, | ||||||
|  |                   :sku | ||||||
|  |                 ] do %> | ||||||
|               <th class="p-2"> |               <th class="p-2"> | ||||||
|               Name |                 <%= field |> humanize() %> | ||||||
|             </th> |  | ||||||
|             <th class="p-2"> |  | ||||||
|               Case material |  | ||||||
|             </th> |  | ||||||
|             <th class="p-2"> |  | ||||||
|               Bullet type |  | ||||||
|             </th> |  | ||||||
|             <th class="p-2"> |  | ||||||
|               Grain |  | ||||||
|             </th> |  | ||||||
|             <th class="p-2"> |  | ||||||
|               Manufacturer |  | ||||||
|               </th> |               </th> | ||||||
|  |             <% end %> | ||||||
|  |  | ||||||
|             <th class="p-2"></th> |             <th class="p-2"></th> | ||||||
|           </tr> |           </tr> | ||||||
| @@ -44,28 +50,49 @@ | |||||||
|         <tbody> |         <tbody> | ||||||
|           <%= for ammo_type <- @ammo_types do %> |           <%= for ammo_type <- @ammo_types do %> | ||||||
|             <tr id={"ammo_type-#{ammo_type.id}"}> |             <tr id={"ammo_type-#{ammo_type.id}"}> | ||||||
|  |               <%= for field <- [ | ||||||
|  |                     :name, | ||||||
|  |                     :bullet_type, | ||||||
|  |                     :bullet_core, | ||||||
|  |                     :cartridge, | ||||||
|  |                     :caliber, | ||||||
|  |                     :case_material, | ||||||
|  |                     :grains, | ||||||
|  |                     :pressure | ||||||
|  |                   ] do %> | ||||||
|                 <td class="p-2"> |                 <td class="p-2"> | ||||||
|                 <%= ammo_type.name %> |                   <%= ammo_type |> Map.get(field) %> | ||||||
|               </td> |  | ||||||
|               <td class="p-2"> |  | ||||||
|                 <%= ammo_type.case_material %> |  | ||||||
|               </td> |  | ||||||
|               <td class="p-2"> |  | ||||||
|                 <%= ammo_type.bullet_type %> |  | ||||||
|               </td> |  | ||||||
|               <td class="p-2"> |  | ||||||
|                 <%= ammo_type.grain %> |  | ||||||
|               </td> |  | ||||||
|               <td class="p-2"> |  | ||||||
|                 <%= ammo_type.manufacturer %> |  | ||||||
|                 </td> |                 </td> | ||||||
|  |               <% end %> | ||||||
|  |  | ||||||
|               <td class="p-2 w-full h-full space-x-2 flex justify-center items-center"> |               <%= for field <- [ | ||||||
|                 <%= live_redirect("View", to: Routes.ammo_type_show_path(@socket, :show, ammo_type)) %> |                     :rimfire, | ||||||
|  |                     :tracer, | ||||||
|  |                     :incendiary, | ||||||
|  |                     :blank, | ||||||
|  |                     :corrosive | ||||||
|  |                   ] do %> | ||||||
|  |                 <td class="p-2"> | ||||||
|  |                   <%= ammo_type |> Map.get(field) |> humanize() %> | ||||||
|  |                 </td> | ||||||
|  |               <% end %> | ||||||
|  |  | ||||||
|  |               <%= for field <- [:manufacturer, :sku] do %> | ||||||
|  |                 <td class="p-2"> | ||||||
|  |                   <%= ammo_type |> Map.get(field) %> | ||||||
|  |                 </td> | ||||||
|  |               <% end %> | ||||||
|  |  | ||||||
|  |               <td class="p-2"> | ||||||
|  |                 <div class="px-4 py-2 space-x-4 flex justify-center items-center"> | ||||||
|  |                   <%= live_redirect to: Routes.ammo_type_show_path(@socket, :show, ammo_type), | ||||||
|  |                                 class: "text-primary-500 link" do %> | ||||||
|  |                     <i class="fa-lg fas fa-eye"></i> | ||||||
|  |                   <% end %> | ||||||
|  |  | ||||||
|                   <%= live_patch to: Routes.ammo_type_index_path(@socket, :edit, ammo_type), |                   <%= live_patch to: Routes.ammo_type_index_path(@socket, :edit, ammo_type), | ||||||
|                             class: "text-primary-500 link" do %> |                             class: "text-primary-500 link" do %> | ||||||
|                   <i class="fa-fw fa-lg fas fa-edit"></i> |                     <i class="fa-lg fas fa-edit"></i> | ||||||
|                   <% end %> |                   <% end %> | ||||||
|  |  | ||||||
|                   <%= link to: "#", |                   <%= link to: "#", | ||||||
| @@ -73,8 +100,9 @@ | |||||||
|                       phx_click: "delete", |                       phx_click: "delete", | ||||||
|                       phx_value_id: ammo_type.id, |                       phx_value_id: ammo_type.id, | ||||||
|                       data: [confirm: "Are you sure you want to delete this ammo?"] do %> |                       data: [confirm: "Are you sure you want to delete this ammo?"] do %> | ||||||
|                   <i class="fa-fw fa-lg fas fa-trash"></i> |                     <i class="fa-lg fas fa-trash"></i> | ||||||
|                   <% end %> |                   <% end %> | ||||||
|  |                 </div> | ||||||
|               </td> |               </td> | ||||||
|             </tr> |             </tr> | ||||||
|           <% end %> |           <% end %> | ||||||
|   | |||||||
| @@ -1,40 +1,17 @@ | |||||||
| <div class="mx-auto space-y-4 max-w-3xl flex flex-col justify-center items-center"> | <div class="mx-auto px-4 sm:px-8 space-y-4 max-w-3xl | ||||||
|  |   flex flex-col justify-center items-center"> | ||||||
|   <h1 class="title text-2xl title-primary-500"> |   <h1 class="title text-2xl title-primary-500"> | ||||||
|     <%= @ammo_type.name %> |     <%= @ammo_type.name %> | ||||||
|   </h1> |   </h1> | ||||||
|  |  | ||||||
|   <div class="space-y-2 flex flex-col justify-center items-center"> |  | ||||||
|   <%= if @ammo_type.desc do %> |   <%= if @ammo_type.desc do %> | ||||||
|       <span class="rounded-lg title text-lg"> |     <span class="max-w-2xl w-full px-8 py-4 rounded-lg | ||||||
|         Desc: <%= @ammo_type.desc %> |       text-center title text-lg | ||||||
|  |       border border-primary-600"> | ||||||
|  |       <%= @ammo_type.desc %> | ||||||
|     </span> |     </span> | ||||||
|   <% end %> |   <% end %> | ||||||
|  |  | ||||||
|     <%= if @ammo_type.case_material do %> |  | ||||||
|       <span class="rounded-lg title text-lg"> |  | ||||||
|         Case material: <%= @ammo_type.case_material %> |  | ||||||
|       </span> |  | ||||||
|     <% end %> |  | ||||||
|  |  | ||||||
|     <%= if @ammo_type.bullet_type do %> |  | ||||||
|       <span class="rounded-lg title text-lg"> |  | ||||||
|         Bullet type: <%= @ammo_type.bullet_type %> |  | ||||||
|       </span> |  | ||||||
|     <% end %> |  | ||||||
|  |  | ||||||
|     <%= if @ammo_type.grain do %> |  | ||||||
|       <span class="rounded-lg title text-lg"> |  | ||||||
|         Grain: <%= @ammo_type.grain %> |  | ||||||
|       </span> |  | ||||||
|     <% end %> |  | ||||||
|  |  | ||||||
|     <%= if @ammo_type.manufacturer do %> |  | ||||||
|       <span class="rounded-lg title text-lg"> |  | ||||||
|         Manufacturer: <%= @ammo_type.manufacturer %> |  | ||||||
|       </span> |  | ||||||
|     <% end %> |  | ||||||
|   </div> |  | ||||||
|  |  | ||||||
|   <div class="flex space-x-4 justify-center items-center text-primary-500"> |   <div class="flex space-x-4 justify-center items-center text-primary-500"> | ||||||
|     <%= live_patch to: Routes.ammo_type_show_path(@socket, :edit, @ammo_type), |     <%= live_patch to: Routes.ammo_type_show_path(@socket, :edit, @ammo_type), | ||||||
|                class: "text-primary-500 link" do %> |                class: "text-primary-500 link" do %> | ||||||
| @@ -49,9 +26,61 @@ | |||||||
|     <% end %> |     <% end %> | ||||||
|   </div> |   </div> | ||||||
|  |  | ||||||
|   <hr class="mb-4 w-full"> |   <hr class="hr"> | ||||||
|  |  | ||||||
|   <div class="mb-4"> |   <div class="grid sm:grid-cols-2 text-center justify-center items-center"> | ||||||
|  |     <%= for field <- [ | ||||||
|  |           :bullet_type, | ||||||
|  |           :bullet_core, | ||||||
|  |           :cartridge, | ||||||
|  |           :caliber, | ||||||
|  |           :case_material, | ||||||
|  |           :grains, | ||||||
|  |           :pressure | ||||||
|  |         ] do %> | ||||||
|  |       <%= if @ammo_type |> Map.get(field) do %> | ||||||
|  |         <h3 class="mb-2 sm:mr-4 title text-lg"> | ||||||
|  |           <%= field |> humanize() %> : | ||||||
|  |         </h3> | ||||||
|  |  | ||||||
|  |         <span class="mb-4 sm:mb-2 text-primary-600"> | ||||||
|  |           <%= @ammo_type |> Map.get(field) %> | ||||||
|  |         </span> | ||||||
|  |       <% end %> | ||||||
|  |     <% end %> | ||||||
|  |  | ||||||
|  |     <%= for field <- [ | ||||||
|  |           :rimfire, | ||||||
|  |           :tracer, | ||||||
|  |           :incendiary, | ||||||
|  |           :blank, | ||||||
|  |           :corrosive | ||||||
|  |         ] do %> | ||||||
|  |       <h3 class="mb-2 sm:mr-4 title text-lg"> | ||||||
|  |         <%= field |> humanize() %> : | ||||||
|  |       </h3> | ||||||
|  |  | ||||||
|  |       <span class="mb-4 sm:mb-2 text-primary-600"> | ||||||
|  |         <%= @ammo_type |> Map.get(field) |> humanize() %> | ||||||
|  |       </span> | ||||||
|  |     <% end %> | ||||||
|  |  | ||||||
|  |     <%= for field <- [:manufacturer, :sku] do %> | ||||||
|  |       <%= if @ammo_type |> Map.get(field) do %> | ||||||
|  |         <h3 class="mb-2 sm:mr-4 title text-lg"> | ||||||
|  |           <%= field |> humanize() %> : | ||||||
|  |         </h3> | ||||||
|  |  | ||||||
|  |         <span class="mb-4 sm:mb-2 text-primary-600"> | ||||||
|  |           <%= @ammo_type |> Map.get(field) %> | ||||||
|  |         </span> | ||||||
|  |       <% end %> | ||||||
|  |     <% end %> | ||||||
|  |   </div> | ||||||
|  |  | ||||||
|  |   <hr class="hr"> | ||||||
|  |  | ||||||
|  |   <div> | ||||||
|     <%= if @ammo_type.ammo_groups |> Enum.empty?() do %> |     <%= if @ammo_type.ammo_groups |> Enum.empty?() do %> | ||||||
|       No ammo for this type |       No ammo for this type | ||||||
|     <% else %> |     <% else %> | ||||||
|   | |||||||
| @@ -20,15 +20,15 @@ defmodule CanneryWeb.ModalComponent do | |||||||
|       phx-target={"#{@id}"} |       phx-target={"#{@id}"} | ||||||
|       phx-page-loading |       phx-page-loading | ||||||
|     > |     > | ||||||
|       <div class="w-full max-w-4xl relative |       <div class="w-full max-w-3xl max-h-128 relative overflow-y-auto | ||||||
|         p-8 flex flex-col justify-start items-center |         flex flex-col justify-start items-center | ||||||
|         bg-white border-2 rounded-lg"> |         bg-white border-2 rounded-lg"> | ||||||
|         <%= live_patch to: @return_to, |         <%= live_patch to: @return_to, | ||||||
|                    class: |                    class: "absolute top-8 right-10 text-gray-500 hover:text-gray-800 | ||||||
|                      "absolute top-8 right-10 text-gray-500 hover:text-gray-800 transition-all duration-500 ease-in-out" do %> |                                                               transition-all duration-500 ease-in-out" do %> | ||||||
|           <i class="fa-fw fa-lg fas fa-times"></i> |           <i class="fa-fw fa-lg fas fa-times"></i> | ||||||
|         <% end %> |         <% end %> | ||||||
|         <div class="w-full flex flex-col space-y-4 justify-center items-center"> |         <div class="p-8 flex flex-col space-y-4 justify-start items-center"> | ||||||
|           <%= live_component(@component, @opts) %> |           <%= live_component(@component, @opts) %> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| <main class="container min-w-full min-h-full"> | <main class="container min-w-full"> | ||||||
|   <header> |   <header> | ||||||
|     <CanneryWeb.Component.Topbar.topbar current_user={assigns[:current_user]}></CanneryWeb.Component.Topbar.topbar> |     <CanneryWeb.Component.Topbar.topbar current_user={assigns[:current_user]}></CanneryWeb.Component.Topbar.topbar> | ||||||
|     <div class="mx-8 my-2 flex flex-col space-y-4 text-center"> |     <div class="mx-8 my-2 flex flex-col space-y-4 text-center"> | ||||||
|   | |||||||
| @@ -6,10 +6,23 @@ defmodule Cannery.Repo.Migrations.CreateAmmoTypes do | |||||||
|       add :id, :binary_id, primary_key: true |       add :id, :binary_id, primary_key: true | ||||||
|       add :name, :string |       add :name, :string | ||||||
|       add :desc, :text |       add :desc, :text | ||||||
|       add :case_material, :string |  | ||||||
|  |       # https://en.wikipedia.org/wiki/Bullet#Abbreviations | ||||||
|       add :bullet_type, :string |       add :bullet_type, :string | ||||||
|       add :grain, :integer |       add :bullet_core, :string | ||||||
|  |       add :cartridge, :string | ||||||
|  |       add :caliber, :string | ||||||
|  |       add :case_material, :string | ||||||
|  |       add :grains, :integer | ||||||
|  |       add :pressure, :string | ||||||
|  |       add :rimfire, :boolean, null: false, default: false | ||||||
|  |       add :tracer, :boolean, null: false, default: false | ||||||
|  |       add :incendiary, :boolean, null: false, default: false | ||||||
|  |       add :blank, :boolean, null: false, default: false | ||||||
|  |       add :corrosive, :boolean, null: false, default: false | ||||||
|  |  | ||||||
|       add :manufacturer, :string |       add :manufacturer, :string | ||||||
|  |       add :sku, :string | ||||||
|  |  | ||||||
|       timestamps() |       timestamps() | ||||||
|     end |     end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user