add ammo type stuff
This commit is contained in:
parent
4e3292f60b
commit
6f6402cf17
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user