From f485f7bd8f4c2601fbf2ae37a87fc65fa717216c Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 9 Jul 2025 20:04:26 +0200 Subject: [PATCH 1/6] feat: migration to phoenix 1.8 - merge changed files --- mix.exs | 4 ++-- mix.lock | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mix.exs b/mix.exs index 9b4fdd1..8c0d331 100644 --- a/mix.exs +++ b/mix.exs @@ -59,7 +59,7 @@ defmodule Mv.MixProject do {:tailwind, "~> 0.3", runtime: Mix.env() == :dev}, {:heroicons, github: "tailwindlabs/heroicons", - tag: "v2.2.0", + tag: "v2.1.1", sparse: "optimized", app: false, compile: false, @@ -70,7 +70,7 @@ defmodule Mv.MixProject do {:telemetry_poller, "~> 1.0"}, {:gettext, "~> 0.26"}, {:jason, "~> 1.2"}, - {:dns_cluster, "~> 0.2.0"}, + {:dns_cluster, "~> 0.1.1"}, {:bandit, "~> 1.5"}, {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false}, {:sobelow, "~> 0.14", only: [:dev, :test], runtime: false}, diff --git a/mix.lock b/mix.lock index bbb190e..e0392cb 100644 --- a/mix.lock +++ b/mix.lock @@ -32,7 +32,7 @@ "floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"}, "gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"}, "glob_ex": {:hex, :glob_ex, "0.1.11", "cb50d3f1ef53f6ca04d6252c7fde09fd7a1cf63387714fe96f340a1349e62c93", [:mix], [], "hexpm", "342729363056e3145e61766b416769984c329e4378f1d558b63e341020525de4"}, - "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "0435d4ca364a608cc75e2f8683d374e55abbae26", [tag: "v2.2.0", sparse: "optimized", depth: 1]}, + "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized", depth: 1]}, "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, "igniter": {:hex, :igniter, "0.6.19", "d87703b36890bc4278341d966a7ed8e10604a18610a4331ac10c75d1af48fff4", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:phx_new, "~> 1.7", [hex: :phx_new, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}, {:rewrite, ">= 1.1.1 and < 2.0.0-0", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}], "hexpm", "c2070b3fdbd238fc0a0bfbc1f125b5c0f79a1fe2f5b3c7b43cd33de696783663"}, "inflex": {:hex, :inflex, "2.1.0", "a365cf0821a9dacb65067abd95008ca1b0bb7dcdd85ae59965deef2aa062924c", [:mix], [], "hexpm", "14c17d05db4ee9b6d319b0bff1bdf22aa389a25398d1952c7a0b5f3d93162dd8"}, -- 2.47.2 From bbf760c2b5a8dee4913284e33b012475cb67ffbc Mon Sep 17 00:00:00 2001 From: carla Date: Wed, 16 Jul 2025 15:42:45 +0200 Subject: [PATCH 2/6] feature(memberslist): added columns to memberslist and added selection and sortable header --- lib/mv_web/components/layouts.ex | 6 +- lib/mv_web/components/table_components.ex | 44 +++++++ lib/mv_web/live/member_live/index.ex | 120 ++++++++++++-------- lib/mv_web/live/member_live/index.html.heex | 80 +++++++++++++ 4 files changed, 200 insertions(+), 50 deletions(-) create mode 100644 lib/mv_web/components/table_components.ex create mode 100644 lib/mv_web/live/member_live/index.html.heex diff --git a/lib/mv_web/components/layouts.ex b/lib/mv_web/components/layouts.ex index ba8ec67..f08c6ba 100644 --- a/lib/mv_web/components/layouts.ex +++ b/lib/mv_web/components/layouts.ex @@ -19,7 +19,7 @@ defmodule MvWeb.Layouts do

Content

- + """ attr :flash, :map, required: true, doc: "the map of flash messages" @@ -67,8 +67,8 @@ defmodule MvWeb.Layouts do -
-
+
+
{render_slot(@inner_block)}
diff --git a/lib/mv_web/components/table_components.ex b/lib/mv_web/components/table_components.ex new file mode 100644 index 0000000..ed94994 --- /dev/null +++ b/lib/mv_web/components/table_components.ex @@ -0,0 +1,44 @@ +defmodule MvWeb.TableComponents do + @moduledoc """ + TableComponents that can be used in tables as components (like a button for sorting, a filter...) + """ + use Phoenix.Component + import MvWeb.CoreComponents + use Gettext, backend: MvWeb.Gettext + + attr :field, :atom, required: true + attr :label, :string, required: true + attr :sort_field, :atom, default: nil + attr :sort_order, :atom, default: nil + + @doc """ + A sort button (with chevron icon) that can be used to sort a list of items + """ + def sort_button(assigns) do + ~H""" + + """ + end + + defp aria_sort(current_field, current_order, this_field) do + cond do + current_field != this_field -> "none" + current_order == :asc -> "ascending" + true -> "descending" + end + end +end diff --git a/lib/mv_web/live/member_live/index.ex b/lib/mv_web/live/member_live/index.ex index 1cff898..38a6f93 100644 --- a/lib/mv_web/live/member_live/index.ex +++ b/lib/mv_web/live/member_live/index.ex @@ -1,58 +1,19 @@ defmodule MvWeb.MemberLive.Index do use MvWeb, :live_view - - @impl true - def render(assigns) do - ~H""" - - <.header> - {gettext("Listing Members")} - <:actions> - <.button variant="primary" navigate={~p"/members/new"}> - <.icon name="hero-plus" /> {gettext("New Member")} - - - - - <.table - id="members" - rows={@streams.members} - row_click={fn {_id, member} -> JS.navigate(~p"/members/#{member}") end} - > - - <:col :let={{_id, member}} label={gettext("First Name")}>{member.first_name} - <:col :let={{_id, member}} label={gettext("Last Name")}>{member.last_name} - <:col :let={{_id, member}} label={gettext("Email")}>{member.email} - <:col :let={{_id, member}} label={gettext("City")}>{member.city} - <:col :let={{_id, member}} label={gettext("Join Date")}>{member.join_date} - - <:action :let={{_id, member}}> -
- <.link navigate={~p"/members/#{member}"}>{gettext("Show")} -
- - <.link navigate={~p"/members/#{member}/edit"}>{gettext("Edit")} - - - <:action :let={{id, member}}> - <.link - phx-click={JS.push("delete", value: %{id: member.id}) |> hide("##{id}")} - data-confirm={gettext("Are you sure?")} - > - {gettext("Delete")} - - - -
- """ - end + import MvWeb.TableComponents @impl true def mount(_params, _session, socket) do + members = Ash.read!(Mv.Membership.Member) + sorted = Enum.sort_by(members, & &1.first_name) + {:ok, socket |> assign(:page_title, gettext("Listing Members")) - |> stream(:members, Ash.read!(Mv.Membership.Member))} + |> assign(:sort_field, :first_name) + |> assign(:sort_order, :asc) + |> assign(:members, sorted) + |> assign(:selected_members, [])} end @impl true @@ -62,4 +23,69 @@ defmodule MvWeb.MemberLive.Index do {:noreply, stream_delete(socket, :members, member)} end + + @doc """ + Selects one member in the list of members + """ + @impl true + def handle_event("select_member", %{"id" => id}, socket) do + selected = + if id in socket.assigns.selected_members do + List.delete(socket.assigns.selected_members, id) + else + [id | socket.assigns.selected_members] + end + + {:noreply, assign(socket, :selected_members, selected)} + end + + @doc """ + Sorts the list of members according to a field, when you click on the column header + """ + @impl true + def handle_event("sort", %{"field" => field_str}, socket) do + members = socket.assigns.members + field = String.to_existing_atom(field_str) + + new_order = + if socket.assigns.sort_field == field do + toggle_order(socket.assigns.sort_order) + else + :asc + end + + sorted_members = + members + |> Enum.sort_by(&Map.get(&1, field), sort_fun(new_order)) + + {:noreply, + socket + |> assign(:sort_field, field) + |> assign(:sort_order, new_order) + |> assign(:members, sorted_members)} + end + + @doc """ + Selects all members in the list of members + """ + @impl true + def handle_event("select_all", _params, socket) do + members = socket.assigns.members + + all_ids = Enum.map(members, & &1.id) + + selected = + if Enum.sort(socket.assigns.selected_members) == Enum.sort(all_ids) do + [] + else + all_ids + end + + {:noreply, assign(socket, :selected_members, selected)} + end + + defp toggle_order(:asc), do: :desc + defp toggle_order(:desc), do: :asc + defp sort_fun(:asc), do: &<=/2 + defp sort_fun(:desc), do: &>=/2 end diff --git a/lib/mv_web/live/member_live/index.html.heex b/lib/mv_web/live/member_live/index.html.heex new file mode 100644 index 0000000..b873805 --- /dev/null +++ b/lib/mv_web/live/member_live/index.html.heex @@ -0,0 +1,80 @@ + + <.header> + {gettext("Listing Members")} + <:actions> + <.button variant="primary" navigate={~p"/members/new"}> + <.icon name="hero-plus" /> {gettext("New Member")} + + + + + <.table + id="members" + rows={@members} + row_click={fn member -> JS.navigate(~p"/members/#{member}") end} + > + + + <:col :let={member} label={ + ~H""" + <.input + type="checkbox" + name="select_all" + phx-click="select_all" + checked={Enum.sort(@selected_members) == Enum.map(@members, & &1.id) |> Enum.sort()} + aria-label={gettext("Select all members")} + role="checkbox" + /> + """ + }> + <.input + type="checkbox" + name={member.id} + phx-click="select_member" + phx-value-id={member.id} + checked={member.id in @selected_members} + phx-capture-click + phx-stop-propagation + aria-label={gettext("Select member")} + role="checkbox" + /> + + <:col + :let={member} + label= { + sort_button(%{ + field: :first_name, + label: gettext("Name"), + sort_field: @sort_field, + sort_order: @sort_order + }) + } + > + {member.first_name} {member.last_name} + + <:col :let={member} label={gettext("Email")}>{member.email} + <:col :let={member} label={gettext("Street")}>{member.street} + <:col :let={member} label={gettext("House Number")}>{member.house_number} + <:col :let={member} label={gettext("Postal Code")}>{member.postal_code} + <:col :let={member} label={gettext("City")}>{member.city} + <:col :let={member} label={gettext("Phone Number")}>{member.phone_number} + <:col :let={member} label={gettext("Join Date")}>{member.join_date} + + <:action :let={member}> +
+ <.link navigate={~p"/members/#{member}"}>{gettext("Show")} +
+ + <.link navigate={~p"/members/#{member}/edit"}>{gettext("Edit")} + + + <:action :let={member}> + <.link + phx-click={JS.push("delete", value: %{id: member.id}) |> hide("#row-#{member.id}")} + data-confirm={gettext("Are you sure?")} + > + {gettext("Delete")} + + + +
-- 2.47.2 From f17f8fe74db5f411d56c02a3240db687c7c2543f Mon Sep 17 00:00:00 2001 From: carla Date: Mon, 21 Jul 2025 11:45:29 +0200 Subject: [PATCH 3/6] feat (navbar): updated navbar with daisy UI component as demo --- lib/mv_web/components/layouts.ex | 39 ++--------------------- lib/mv_web/components/layouts/navbar.ex | 42 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 36 deletions(-) create mode 100644 lib/mv_web/components/layouts/navbar.ex diff --git a/lib/mv_web/components/layouts.ex b/lib/mv_web/components/layouts.ex index f08c6ba..b109b25 100644 --- a/lib/mv_web/components/layouts.ex +++ b/lib/mv_web/components/layouts.ex @@ -8,6 +8,8 @@ defmodule MvWeb.Layouts do in regular views and live views. """ use MvWeb, :html + use Gettext, backend: MvWeb.Gettext + import MvWeb.Layouts.Navbar embed_templates "layouts/*" @@ -31,42 +33,7 @@ defmodule MvWeb.Layouts do def app(assigns) do ~H""" - - + <.navbar />
{render_slot(@inner_block)} diff --git a/lib/mv_web/components/layouts/navbar.ex b/lib/mv_web/components/layouts/navbar.ex new file mode 100644 index 0000000..08184f3 --- /dev/null +++ b/lib/mv_web/components/layouts/navbar.ex @@ -0,0 +1,42 @@ +defmodule MvWeb.Layouts.Navbar do + @moduledoc """ + Navbar that is used in the rootlayout shown on every page + """ + use Phoenix.Component + use Gettext, backend: MvWeb.Gettext + + def navbar(assigns) do + ~H""" + + """ + end +end -- 2.47.2 From 50c80eed386146b0ffec688068cb63de61c6d0bf Mon Sep 17 00:00:00 2001 From: carla Date: Mon, 21 Jul 2025 11:45:56 +0200 Subject: [PATCH 4/6] chore: updated listing member translation --- lib/mv_web/components/layouts/navbar.ex | 2 +- lib/mv_web/live/member_live/index.ex | 23 +- lib/mv_web/live/member_live/index.html.heex | 17 +- mix.lock | 2 +- priv/gettext/de/LC_MESSAGES/default.po | 296 ++++++++++++++------ priv/gettext/default.pot | 296 ++++++++++++++------ priv/gettext/en/LC_MESSAGES/default.po | 296 ++++++++++++++------ 7 files changed, 639 insertions(+), 293 deletions(-) diff --git a/lib/mv_web/components/layouts/navbar.ex b/lib/mv_web/components/layouts/navbar.ex index 08184f3..4f1027d 100644 --- a/lib/mv_web/components/layouts/navbar.ex +++ b/lib/mv_web/components/layouts/navbar.ex @@ -11,7 +11,7 @@ defmodule MvWeb.Layouts.Navbar do diff --git a/lib/mv_web/live/member_live/index.ex b/lib/mv_web/live/member_live/index.ex index 38a6f93..476abd1 100644 --- a/lib/mv_web/live/member_live/index.ex +++ b/lib/mv_web/live/member_live/index.ex @@ -9,7 +9,7 @@ defmodule MvWeb.MemberLive.Index do {:ok, socket - |> assign(:page_title, gettext("Listing Members")) + |> assign(:page_title, gettext("Members")) |> assign(:sort_field, :first_name) |> assign(:sort_order, :asc) |> assign(:members, sorted) @@ -24,9 +24,7 @@ defmodule MvWeb.MemberLive.Index do {:noreply, stream_delete(socket, :members, member)} end - @doc """ - Selects one member in the list of members - """ + # Selects one member in the list of members @impl true def handle_event("select_member", %{"id" => id}, socket) do selected = @@ -39,9 +37,7 @@ defmodule MvWeb.MemberLive.Index do {:noreply, assign(socket, :selected_members, selected)} end - @doc """ - Sorts the list of members according to a field, when you click on the column header - """ + # Sorts the list of members according to a field, when you click on the column header @impl true def handle_event("sort", %{"field" => field_str}, socket) do members = socket.assigns.members @@ -59,15 +55,14 @@ defmodule MvWeb.MemberLive.Index do |> Enum.sort_by(&Map.get(&1, field), sort_fun(new_order)) {:noreply, - socket - |> assign(:sort_field, field) - |> assign(:sort_order, new_order) - |> assign(:members, sorted_members)} + socket + |> assign(:sort_field, field) + |> assign(:sort_order, new_order) + |> assign(:members, sorted_members)} end - @doc """ - Selects all members in the list of members - """ + # Selects all members in the list of members + @impl true def handle_event("select_all", _params, socket) do members = socket.assigns.members diff --git a/lib/mv_web/live/member_live/index.html.heex b/lib/mv_web/live/member_live/index.html.heex index b873805..fc38889 100644 --- a/lib/mv_web/live/member_live/index.html.heex +++ b/lib/mv_web/live/member_live/index.html.heex @@ -1,6 +1,6 @@ <.header> - {gettext("Listing Members")} + {gettext("Members")} <:actions> <.button variant="primary" navigate={~p"/members/new"}> <.icon name="hero-plus" /> {gettext("New Member")} @@ -13,10 +13,12 @@ rows={@members} row_click={fn member -> JS.navigate(~p"/members/#{member}") end} > - - - <:col :let={member} label={ - ~H""" + + + <:col + :let={member} + label={ + ~H""" <.input type="checkbox" name="select_all" @@ -26,7 +28,8 @@ role="checkbox" /> """ - }> + } + > <.input type="checkbox" name={member.id} @@ -41,7 +44,7 @@ <:col :let={member} - label= { + label={ sort_button(%{ field: :first_name, label: gettext("Name"), diff --git a/mix.lock b/mix.lock index e0392cb..c3b0bba 100644 --- a/mix.lock +++ b/mix.lock @@ -17,7 +17,7 @@ "credo": {:hex, :credo, "1.7.12", "9e3c20463de4b5f3f23721527fcaf16722ec815e70ff6c60b86412c695d426c1", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8493d45c656c5427d9c729235b99d498bd133421f3e0a683e5c1b561471291e5"}, "db_connection": {:hex, :db_connection, "2.8.0", "64fd82cfa6d8e25ec6660cea73e92a4cbc6a18b31343910427b702838c4b33b2", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "008399dae5eee1bf5caa6e86d204dcb44242c82b1ed5e22c881f2c34da201b15"}, "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, - "dns_cluster": {:hex, :dns_cluster, "0.2.0", "aa8eb46e3bd0326bd67b84790c561733b25c5ba2fe3c7e36f28e88f384ebcb33", [:mix], [], "hexpm", "ba6f1893411c69c01b9e8e8f772062535a4cf70f3f35bcc964a324078d8c8240"}, + "dns_cluster": {:hex, :dns_cluster, "0.1.3", "0bc20a2c88ed6cc494f2964075c359f8c2d00e1bf25518a6a6c7fd277c9b0c66", [:mix], [], "hexpm", "46cb7c4a1b3e52c7ad4cbe33ca5079fbde4840dedeafca2baf77996c2da1bc33"}, "ecto": {:hex, :ecto, "3.13.2", "7d0c0863f3fc8d71d17fc3ad3b9424beae13f02712ad84191a826c7169484f01", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "669d9291370513ff56e7b7e7081b7af3283d02e046cf3d403053c557894a0b3e"}, "ecto_commons": {:hex, :ecto_commons, "0.3.6", "7b1d9e59396cf8c8cbe5a26d50d03f9b6d0fe6c640210dd503622f276f1e59bb", [:mix], [{:burnex, "~> 3.0", [hex: :burnex, repo: "hexpm", optional: true]}, {:ecto, "~> 3.4", [hex: :ecto, repo: "hexpm", optional: false]}, {:ex_phone_number, "~> 0.2", [hex: :ex_phone_number, repo: "hexpm", optional: false]}, {:luhn, "~> 0.3.0", [hex: :luhn, repo: "hexpm", optional: false]}], "hexpm", "3f12981a1e398f206c5d2014e7b732b7ec91b110b9cb84875cb5b28fc75d7a0a"}, "ecto_sql": {:hex, :ecto_sql, "3.13.2", "a07d2461d84107b3d037097c822ffdd36ed69d1cf7c0f70e12a3d1decf04e2e1", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.13.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "539274ab0ecf1a0078a6a72ef3465629e4d6018a3028095dc90f60a19c371717"}, diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 7e6d755..c3d4c84 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -10,230 +10,206 @@ msgid "" msgstr "" "Language: en\n" -#: lib/mv_web/components/core_components.ex:482 +#: lib/mv_web/components/core_components.ex:339 #, elixir-autogen, elixir-format msgid "Actions" msgstr "" -#: lib/mv_web/member_live/index.ex:39 +#: lib/mv_web/live/member_live/index.html.heex:77 #, elixir-autogen, elixir-format msgid "Are you sure?" msgstr "Bist du sicher?" -#: lib/mv_web/components/core_components.ex:160 +#: lib/mv_web/components/layouts.ex:71 +#: lib/mv_web/components/layouts.ex:83 #, elixir-autogen, elixir-format msgid "Attempting to reconnect" msgstr "Verbindung wird wiederhergestellt" -#: lib/mv_web/member_live/form_component.ex:50 -#: lib/mv_web/member_live/index.ex:25 -#: lib/mv_web/member_live/show.ex:32 +#: lib/mv_web/live/member_live/form.ex:25 +#: lib/mv_web/live/member_live/index.html.heex:62 +#: lib/mv_web/live/member_live/show.ex:36 #, elixir-autogen, elixir-format msgid "City" msgstr "Stadt" -#: lib/mv_web/member_live/index.ex:41 +#: lib/mv_web/live/member_live/index.html.heex:79 #, elixir-autogen, elixir-format msgid "Delete" msgstr "Löschen" -#: lib/mv_web/member_live/index.ex:33 +#: lib/mv_web/live/member_live/index.html.heex:71 #, elixir-autogen, elixir-format msgid "Edit" msgstr "Bearbeiten" -#: lib/mv_web/member_live/index.ex:76 -#: lib/mv_web/member_live/show.ex:93 +#: lib/mv_web/live/member_live/show.ex:18 +#: lib/mv_web/live/member_live/show.ex:81 #, elixir-autogen, elixir-format msgid "Edit Member" msgstr "Mitglied bearbeiten" -#: lib/mv_web/member_live/form_component.ex:43 -#: lib/mv_web/member_live/index.ex:24 -#: lib/mv_web/member_live/show.ex:23 +#: lib/mv_web/live/member_live/form.ex:18 +#: lib/mv_web/live/member_live/index.html.heex:58 +#: lib/mv_web/live/member_live/show.ex:27 #, elixir-autogen, elixir-format msgid "Email" msgstr "E-Mail" -#: lib/mv_web/components/core_components.ex:151 -#, elixir-autogen, elixir-format -msgid "Error!" -msgstr "Fehler!" - -#: lib/mv_web/member_live/form_component.ex:41 -#: lib/mv_web/member_live/index.ex:22 -#: lib/mv_web/member_live/show.ex:21 +#: lib/mv_web/live/member_live/form.ex:16 +#: lib/mv_web/live/member_live/show.ex:25 #, elixir-autogen, elixir-format msgid "First Name" msgstr "Vorname" -#: lib/mv_web/components/core_components.ex:172 -#, elixir-autogen, elixir-format -msgid "Hang in there while we get back on track" -msgstr "Bitte warten, wir stellen die Verbindung wieder her." - -#: lib/mv_web/member_live/form_component.ex:47 -#: lib/mv_web/member_live/index.ex:26 -#: lib/mv_web/member_live/show.ex:29 +#: lib/mv_web/live/member_live/form.ex:22 +#: lib/mv_web/live/member_live/index.html.heex:64 +#: lib/mv_web/live/member_live/show.ex:33 #, elixir-autogen, elixir-format msgid "Join Date" msgstr "Beitrittsdatum" -#: lib/mv_web/member_live/form_component.ex:42 -#: lib/mv_web/member_live/index.ex:23 -#: lib/mv_web/member_live/show.ex:22 +#: lib/mv_web/live/member_live/form.ex:17 +#: lib/mv_web/live/member_live/show.ex:26 #, elixir-autogen, elixir-format msgid "Last Name" msgstr "Nachname" -#: lib/mv_web/member_live/index.ex:8 -#: lib/mv_web/member_live/index.ex:88 -#, elixir-autogen, elixir-format -msgid "Listing Members" -msgstr "Mitglieder" - -#: lib/mv_web/member_live/index.ex:11 -#: lib/mv_web/member_live/index.ex:82 +#: lib/mv_web/live/member_live/index.html.heex:6 #, elixir-autogen, elixir-format msgid "New Member" msgstr "Neues Mitglied" -#: lib/mv_web/member_live/index.ex:30 +#: lib/mv_web/live/member_live/index.html.heex:68 #, elixir-autogen, elixir-format msgid "Show" msgstr "Anzeigen" -#: lib/mv_web/components/core_components.ex:167 +#: lib/mv_web/components/layouts.ex:78 #, elixir-autogen, elixir-format msgid "Something went wrong!" msgstr "Etwas ist schiefgelaufen!" -#: lib/mv_web/components/core_components.ex:150 -#, elixir-autogen, elixir-format -msgid "Success!" -msgstr "Erfolg!" - -#: lib/mv_web/components/core_components.ex:155 +#: lib/mv_web/components/layouts.ex:66 #, elixir-autogen, elixir-format msgid "We can't find the internet" msgstr "Keine Internetverbindung gefunden" -#: lib/mv_web/components/core_components.ex:76 -#: lib/mv_web/components/core_components.ex:130 +#: lib/mv_web/components/core_components.ex:74 #, elixir-autogen, elixir-format msgid "close" msgstr "schließen" -#: lib/mv_web/member_live/form_component.ex:44 -#: lib/mv_web/member_live/show.ex:24 +#: lib/mv_web/live/member_live/form.ex:19 +#: lib/mv_web/live/member_live/show.ex:28 #, elixir-autogen, elixir-format msgid "Birth Date" msgstr "Geburtsdatum" -#: lib/mv_web/member_live/form_component.ex:55 -#: lib/mv_web/member_live/show.ex:38 +#: lib/mv_web/live/member_live/form.ex:30 +#: lib/mv_web/live/member_live/show.ex:42 #, elixir-autogen, elixir-format msgid "Custom Properties" msgstr "Eigene Eigenschaften" -#: lib/mv_web/member_live/form_component.ex:48 -#: lib/mv_web/member_live/show.ex:30 +#: lib/mv_web/live/member_live/form.ex:23 +#: lib/mv_web/live/member_live/show.ex:34 #, elixir-autogen, elixir-format msgid "Exit Date" msgstr "Austrittsdatum" -#: lib/mv_web/member_live/form_component.ex:52 -#: lib/mv_web/member_live/show.ex:34 +#: lib/mv_web/live/member_live/form.ex:27 +#: lib/mv_web/live/member_live/index.html.heex:60 +#: lib/mv_web/live/member_live/show.ex:38 #, elixir-autogen, elixir-format msgid "House Number" msgstr "Hausnummer" -#: lib/mv_web/member_live/form_component.ex:49 -#: lib/mv_web/member_live/show.ex:31 +#: lib/mv_web/live/member_live/form.ex:24 +#: lib/mv_web/live/member_live/show.ex:35 #, elixir-autogen, elixir-format msgid "Notes" msgstr "Notizen" -#: lib/mv_web/member_live/form_component.ex:45 -#: lib/mv_web/member_live/show.ex:25 +#: lib/mv_web/live/member_live/form.ex:20 +#: lib/mv_web/live/member_live/show.ex:29 #, elixir-autogen, elixir-format msgid "Paid" msgstr "Bezahlt" -#: lib/mv_web/member_live/form_component.ex:46 -#: lib/mv_web/member_live/show.ex:28 +#: lib/mv_web/live/member_live/form.ex:21 +#: lib/mv_web/live/member_live/index.html.heex:63 +#: lib/mv_web/live/member_live/show.ex:32 #, elixir-autogen, elixir-format msgid "Phone Number" msgstr "Telefonnummer" -#: lib/mv_web/member_live/form_component.ex:53 -#: lib/mv_web/member_live/show.ex:35 +#: lib/mv_web/live/member_live/form.ex:28 +#: lib/mv_web/live/member_live/index.html.heex:61 +#: lib/mv_web/live/member_live/show.ex:39 #, elixir-autogen, elixir-format msgid "Postal Code" msgstr "Postleitzahl" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:50 #, elixir-autogen, elixir-format msgid "Save Member" msgstr "Mitglied speichern" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:49 +#: lib/mv_web/live/property_live/form.ex:41 +#: lib/mv_web/live/property_type_live/form.ex:29 #, elixir-autogen, elixir-format msgid "Saving..." msgstr "Speichern..." -#: lib/mv_web/member_live/form_component.ex:51 -#: lib/mv_web/member_live/show.ex:33 +#: lib/mv_web/live/member_live/form.ex:26 +#: lib/mv_web/live/member_live/index.html.heex:59 +#: lib/mv_web/live/member_live/show.ex:37 #, elixir-autogen, elixir-format msgid "Street" msgstr "Straße" -#: lib/mv_web/member_live/form_component.ex:30 +#: lib/mv_web/live/member_live/form.ex:11 #, elixir-autogen, elixir-format msgid "Use this form to manage member records and their properties." msgstr "Dieses Formular dient zur Verwaltung von Mitgliedern und deren Eigenschaften." -#: lib/mv_web/member_live/show.ex:52 -#, elixir-autogen, elixir-format -msgid "Back to members" -msgstr "Zurück zur Mitgliederliste" - -#: lib/mv_web/member_live/show.ex:14 -#, elixir-autogen, elixir-format -msgid "Edit member" -msgstr "Mitglied bearbeiten" - -#: lib/mv_web/member_live/show.ex:20 +#: lib/mv_web/live/member_live/show.ex:24 #, elixir-autogen, elixir-format msgid "Id" msgstr "ID" -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "No" msgstr "Nein" -#: lib/mv_web/member_live/show.ex:92 +#: lib/mv_web/live/member_live/show.ex:80 #, elixir-autogen, elixir-format, fuzzy msgid "Show Member" msgstr "Mitglied anzeigen" -#: lib/mv_web/member_live/show.ex:10 +#: lib/mv_web/live/member_live/show.ex:11 #, elixir-autogen, elixir-format msgid "This is a member record from your database." msgstr "Dies ist ein Mitglied aus deiner Datenbank." -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "Yes" msgstr "Ja" -#: lib/mv_web/member_live/form_component.ex:102 +#: lib/mv_web/live/member_live/form.ex:108 +#: lib/mv_web/live/property_live/form.ex:200 +#: lib/mv_web/live/property_type_live/form.ex:73 #, elixir-autogen, elixir-format msgid "create" msgstr "erstellt" -#: lib/mv_web/member_live/form_component.ex:103 +#: lib/mv_web/live/member_live/form.ex:109 +#: lib/mv_web/live/property_live/form.ex:201 +#: lib/mv_web/live/property_type_live/form.ex:74 #, elixir-autogen, elixir-format msgid "update" msgstr "aktualisiert" @@ -243,7 +219,7 @@ msgstr "aktualisiert" msgid "Incorrect email or password" msgstr "" -#: lib/mv_web/member_live/form_component.ex:109 +#: lib/mv_web/live/member_live/form.ex:115 #, elixir-autogen, elixir-format msgid "Member %{action} successfully" msgstr "Mitglied %{action} erfolgreich" @@ -258,7 +234,7 @@ msgstr "" msgid "You are now signed out" msgstr "" -#: lib/mv_web/controllers/auth_controller.ex:36 +#: lib/mv_web/controllers/auth_controller.ex:37 #, elixir-autogen, elixir-format msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" msgstr "" @@ -272,3 +248,143 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Your password has successfully been reset" msgstr "" + +#: lib/mv_web/live/member_live/form.ex:52 +#: lib/mv_web/live/property_live/form.ex:44 +#: lib/mv_web/live/property_type_live/form.ex:32 +#, elixir-autogen, elixir-format +msgid "Cancel" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:29 +#, elixir-autogen, elixir-format +msgid "Choose a member" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Choose a property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:25 +#, elixir-autogen, elixir-format +msgid "Description" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:26 +#, elixir-autogen, elixir-format +msgid "Immutable" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:35 +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:14 +#: lib/mv_web/live/member_live/index.ex:12 +#: lib/mv_web/live/member_live/index.html.heex:3 +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "Mitglieder" + +#: lib/mv_web/live/member_live/index.html.heex:50 +#: lib/mv_web/live/property_type_live/form.ex:16 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:37 +#, elixir-autogen, elixir-format +msgid "Please select a property type first" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:31 +#, elixir-autogen, elixir-format +msgid "Profil" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:207 +#, elixir-autogen, elixir-format, fuzzy +msgid "Property %{action} successfully" +msgstr "Mitglied %{action} erfolgreich" + +#: lib/mv_web/live/property_live/form.ex:18 +#, elixir-autogen, elixir-format +msgid "Property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:80 +#, elixir-autogen, elixir-format +msgid "Property type %{action} successfully" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:42 +#, elixir-autogen, elixir-format +msgid "Save Property" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:30 +#, elixir-autogen, elixir-format +msgid "Save Property type" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:27 +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:41 +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:34 +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:95 +#, elixir-autogen, elixir-format +msgid "Unsupported value type: %{type}" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:10 +#, elixir-autogen, elixir-format, fuzzy +msgid "Use this form to manage property records in your database." +msgstr "Dieses Formular dient zur Verwaltung von Mitgliedern und deren Eigenschaften." + +#: lib/mv_web/live/property_type_live/form.ex:11 +#, elixir-autogen, elixir-format, fuzzy +msgid "Use this form to manage property_type records in your database." +msgstr "Dieses Formular dient zur Verwaltung von Mitgliedern und deren Eigenschaften." + +#: lib/mv_web/live/property_live/form.ex:59 +#, elixir-autogen, elixir-format +msgid "Value" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index aad2ae9..bb17d15 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -11,230 +11,206 @@ msgid "" msgstr "" -#: lib/mv_web/components/core_components.ex:482 +#: lib/mv_web/components/core_components.ex:339 #, elixir-autogen, elixir-format msgid "Actions" msgstr "" -#: lib/mv_web/member_live/index.ex:39 +#: lib/mv_web/live/member_live/index.html.heex:77 #, elixir-autogen, elixir-format msgid "Are you sure?" msgstr "" -#: lib/mv_web/components/core_components.ex:160 +#: lib/mv_web/components/layouts.ex:71 +#: lib/mv_web/components/layouts.ex:83 #, elixir-autogen, elixir-format msgid "Attempting to reconnect" msgstr "" -#: lib/mv_web/member_live/form_component.ex:50 -#: lib/mv_web/member_live/index.ex:25 -#: lib/mv_web/member_live/show.ex:32 +#: lib/mv_web/live/member_live/form.ex:25 +#: lib/mv_web/live/member_live/index.html.heex:62 +#: lib/mv_web/live/member_live/show.ex:36 #, elixir-autogen, elixir-format msgid "City" msgstr "" -#: lib/mv_web/member_live/index.ex:41 +#: lib/mv_web/live/member_live/index.html.heex:79 #, elixir-autogen, elixir-format msgid "Delete" msgstr "" -#: lib/mv_web/member_live/index.ex:33 +#: lib/mv_web/live/member_live/index.html.heex:71 #, elixir-autogen, elixir-format msgid "Edit" msgstr "" -#: lib/mv_web/member_live/index.ex:76 -#: lib/mv_web/member_live/show.ex:93 +#: lib/mv_web/live/member_live/show.ex:18 +#: lib/mv_web/live/member_live/show.ex:81 #, elixir-autogen, elixir-format msgid "Edit Member" msgstr "" -#: lib/mv_web/member_live/form_component.ex:43 -#: lib/mv_web/member_live/index.ex:24 -#: lib/mv_web/member_live/show.ex:23 +#: lib/mv_web/live/member_live/form.ex:18 +#: lib/mv_web/live/member_live/index.html.heex:58 +#: lib/mv_web/live/member_live/show.ex:27 #, elixir-autogen, elixir-format msgid "Email" msgstr "" -#: lib/mv_web/components/core_components.ex:151 -#, elixir-autogen, elixir-format -msgid "Error!" -msgstr "" - -#: lib/mv_web/member_live/form_component.ex:41 -#: lib/mv_web/member_live/index.ex:22 -#: lib/mv_web/member_live/show.ex:21 +#: lib/mv_web/live/member_live/form.ex:16 +#: lib/mv_web/live/member_live/show.ex:25 #, elixir-autogen, elixir-format msgid "First Name" msgstr "" -#: lib/mv_web/components/core_components.ex:172 -#, elixir-autogen, elixir-format -msgid "Hang in there while we get back on track" -msgstr "" - -#: lib/mv_web/member_live/form_component.ex:47 -#: lib/mv_web/member_live/index.ex:26 -#: lib/mv_web/member_live/show.ex:29 +#: lib/mv_web/live/member_live/form.ex:22 +#: lib/mv_web/live/member_live/index.html.heex:64 +#: lib/mv_web/live/member_live/show.ex:33 #, elixir-autogen, elixir-format msgid "Join Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:42 -#: lib/mv_web/member_live/index.ex:23 -#: lib/mv_web/member_live/show.ex:22 +#: lib/mv_web/live/member_live/form.ex:17 +#: lib/mv_web/live/member_live/show.ex:26 #, elixir-autogen, elixir-format msgid "Last Name" msgstr "" -#: lib/mv_web/member_live/index.ex:8 -#: lib/mv_web/member_live/index.ex:88 -#, elixir-autogen, elixir-format -msgid "Listing Members" -msgstr "" - -#: lib/mv_web/member_live/index.ex:11 -#: lib/mv_web/member_live/index.ex:82 +#: lib/mv_web/live/member_live/index.html.heex:6 #, elixir-autogen, elixir-format msgid "New Member" msgstr "" -#: lib/mv_web/member_live/index.ex:30 +#: lib/mv_web/live/member_live/index.html.heex:68 #, elixir-autogen, elixir-format msgid "Show" msgstr "" -#: lib/mv_web/components/core_components.ex:167 +#: lib/mv_web/components/layouts.ex:78 #, elixir-autogen, elixir-format msgid "Something went wrong!" msgstr "" -#: lib/mv_web/components/core_components.ex:150 -#, elixir-autogen, elixir-format -msgid "Success!" -msgstr "" - -#: lib/mv_web/components/core_components.ex:155 +#: lib/mv_web/components/layouts.ex:66 #, elixir-autogen, elixir-format msgid "We can't find the internet" msgstr "" -#: lib/mv_web/components/core_components.ex:76 -#: lib/mv_web/components/core_components.ex:130 +#: lib/mv_web/components/core_components.ex:74 #, elixir-autogen, elixir-format msgid "close" msgstr "" -#: lib/mv_web/member_live/form_component.ex:44 -#: lib/mv_web/member_live/show.ex:24 +#: lib/mv_web/live/member_live/form.ex:19 +#: lib/mv_web/live/member_live/show.ex:28 #, elixir-autogen, elixir-format msgid "Birth Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:55 -#: lib/mv_web/member_live/show.ex:38 +#: lib/mv_web/live/member_live/form.ex:30 +#: lib/mv_web/live/member_live/show.ex:42 #, elixir-autogen, elixir-format msgid "Custom Properties" msgstr "" -#: lib/mv_web/member_live/form_component.ex:48 -#: lib/mv_web/member_live/show.ex:30 +#: lib/mv_web/live/member_live/form.ex:23 +#: lib/mv_web/live/member_live/show.ex:34 #, elixir-autogen, elixir-format msgid "Exit Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:52 -#: lib/mv_web/member_live/show.ex:34 +#: lib/mv_web/live/member_live/form.ex:27 +#: lib/mv_web/live/member_live/index.html.heex:60 +#: lib/mv_web/live/member_live/show.ex:38 #, elixir-autogen, elixir-format msgid "House Number" msgstr "" -#: lib/mv_web/member_live/form_component.ex:49 -#: lib/mv_web/member_live/show.ex:31 +#: lib/mv_web/live/member_live/form.ex:24 +#: lib/mv_web/live/member_live/show.ex:35 #, elixir-autogen, elixir-format msgid "Notes" msgstr "" -#: lib/mv_web/member_live/form_component.ex:45 -#: lib/mv_web/member_live/show.ex:25 +#: lib/mv_web/live/member_live/form.ex:20 +#: lib/mv_web/live/member_live/show.ex:29 #, elixir-autogen, elixir-format msgid "Paid" msgstr "" -#: lib/mv_web/member_live/form_component.ex:46 -#: lib/mv_web/member_live/show.ex:28 +#: lib/mv_web/live/member_live/form.ex:21 +#: lib/mv_web/live/member_live/index.html.heex:63 +#: lib/mv_web/live/member_live/show.ex:32 #, elixir-autogen, elixir-format msgid "Phone Number" msgstr "" -#: lib/mv_web/member_live/form_component.ex:53 -#: lib/mv_web/member_live/show.ex:35 +#: lib/mv_web/live/member_live/form.ex:28 +#: lib/mv_web/live/member_live/index.html.heex:61 +#: lib/mv_web/live/member_live/show.ex:39 #, elixir-autogen, elixir-format msgid "Postal Code" msgstr "" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:50 #, elixir-autogen, elixir-format msgid "Save Member" msgstr "" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:49 +#: lib/mv_web/live/property_live/form.ex:41 +#: lib/mv_web/live/property_type_live/form.ex:29 #, elixir-autogen, elixir-format msgid "Saving..." msgstr "" -#: lib/mv_web/member_live/form_component.ex:51 -#: lib/mv_web/member_live/show.ex:33 +#: lib/mv_web/live/member_live/form.ex:26 +#: lib/mv_web/live/member_live/index.html.heex:59 +#: lib/mv_web/live/member_live/show.ex:37 #, elixir-autogen, elixir-format msgid "Street" msgstr "" -#: lib/mv_web/member_live/form_component.ex:30 +#: lib/mv_web/live/member_live/form.ex:11 #, elixir-autogen, elixir-format msgid "Use this form to manage member records and their properties." msgstr "" -#: lib/mv_web/member_live/show.ex:52 -#, elixir-autogen, elixir-format -msgid "Back to members" -msgstr "" - -#: lib/mv_web/member_live/show.ex:14 -#, elixir-autogen, elixir-format -msgid "Edit member" -msgstr "" - -#: lib/mv_web/member_live/show.ex:20 +#: lib/mv_web/live/member_live/show.ex:24 #, elixir-autogen, elixir-format msgid "Id" msgstr "" -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "No" msgstr "" -#: lib/mv_web/member_live/show.ex:92 +#: lib/mv_web/live/member_live/show.ex:80 #, elixir-autogen, elixir-format msgid "Show Member" msgstr "" -#: lib/mv_web/member_live/show.ex:10 +#: lib/mv_web/live/member_live/show.ex:11 #, elixir-autogen, elixir-format msgid "This is a member record from your database." msgstr "" -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "Yes" msgstr "" -#: lib/mv_web/member_live/form_component.ex:102 +#: lib/mv_web/live/member_live/form.ex:108 +#: lib/mv_web/live/property_live/form.ex:200 +#: lib/mv_web/live/property_type_live/form.ex:73 #, elixir-autogen, elixir-format msgid "create" msgstr "" -#: lib/mv_web/member_live/form_component.ex:103 +#: lib/mv_web/live/member_live/form.ex:109 +#: lib/mv_web/live/property_live/form.ex:201 +#: lib/mv_web/live/property_type_live/form.ex:74 #, elixir-autogen, elixir-format msgid "update" msgstr "" @@ -244,7 +220,7 @@ msgstr "" msgid "Incorrect email or password" msgstr "" -#: lib/mv_web/member_live/form_component.ex:109 +#: lib/mv_web/live/member_live/form.ex:115 #, elixir-autogen, elixir-format msgid "Member %{action} successfully" msgstr "" @@ -259,7 +235,7 @@ msgstr "" msgid "You are now signed out" msgstr "" -#: lib/mv_web/controllers/auth_controller.ex:36 +#: lib/mv_web/controllers/auth_controller.ex:37 #, elixir-autogen, elixir-format msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" msgstr "" @@ -273,3 +249,143 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Your password has successfully been reset" msgstr "" + +#: lib/mv_web/live/member_live/form.ex:52 +#: lib/mv_web/live/property_live/form.ex:44 +#: lib/mv_web/live/property_type_live/form.ex:32 +#, elixir-autogen, elixir-format +msgid "Cancel" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:29 +#, elixir-autogen, elixir-format +msgid "Choose a member" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Choose a property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:25 +#, elixir-autogen, elixir-format +msgid "Description" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:26 +#, elixir-autogen, elixir-format +msgid "Immutable" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:35 +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:14 +#: lib/mv_web/live/member_live/index.ex:12 +#: lib/mv_web/live/member_live/index.html.heex:3 +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:50 +#: lib/mv_web/live/property_type_live/form.ex:16 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:37 +#, elixir-autogen, elixir-format +msgid "Please select a property type first" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:31 +#, elixir-autogen, elixir-format +msgid "Profil" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:207 +#, elixir-autogen, elixir-format +msgid "Property %{action} successfully" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:18 +#, elixir-autogen, elixir-format +msgid "Property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:80 +#, elixir-autogen, elixir-format +msgid "Property type %{action} successfully" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:42 +#, elixir-autogen, elixir-format +msgid "Save Property" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:30 +#, elixir-autogen, elixir-format +msgid "Save Property type" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:27 +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:41 +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:34 +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:95 +#, elixir-autogen, elixir-format +msgid "Unsupported value type: %{type}" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:10 +#, elixir-autogen, elixir-format +msgid "Use this form to manage property records in your database." +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:11 +#, elixir-autogen, elixir-format +msgid "Use this form to manage property_type records in your database." +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:59 +#, elixir-autogen, elixir-format +msgid "Value" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 3317236..616b323 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -11,230 +11,206 @@ msgstr "" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/mv_web/components/core_components.ex:482 +#: lib/mv_web/components/core_components.ex:339 #, elixir-autogen, elixir-format msgid "Actions" msgstr "" -#: lib/mv_web/member_live/index.ex:39 +#: lib/mv_web/live/member_live/index.html.heex:77 #, elixir-autogen, elixir-format msgid "Are you sure?" msgstr "" -#: lib/mv_web/components/core_components.ex:160 +#: lib/mv_web/components/layouts.ex:71 +#: lib/mv_web/components/layouts.ex:83 #, elixir-autogen, elixir-format msgid "Attempting to reconnect" msgstr "" -#: lib/mv_web/member_live/form_component.ex:50 -#: lib/mv_web/member_live/index.ex:25 -#: lib/mv_web/member_live/show.ex:32 +#: lib/mv_web/live/member_live/form.ex:25 +#: lib/mv_web/live/member_live/index.html.heex:62 +#: lib/mv_web/live/member_live/show.ex:36 #, elixir-autogen, elixir-format msgid "City" msgstr "" -#: lib/mv_web/member_live/index.ex:41 +#: lib/mv_web/live/member_live/index.html.heex:79 #, elixir-autogen, elixir-format msgid "Delete" msgstr "" -#: lib/mv_web/member_live/index.ex:33 +#: lib/mv_web/live/member_live/index.html.heex:71 #, elixir-autogen, elixir-format msgid "Edit" msgstr "" -#: lib/mv_web/member_live/index.ex:76 -#: lib/mv_web/member_live/show.ex:93 +#: lib/mv_web/live/member_live/show.ex:18 +#: lib/mv_web/live/member_live/show.ex:81 #, elixir-autogen, elixir-format msgid "Edit Member" msgstr "" -#: lib/mv_web/member_live/form_component.ex:43 -#: lib/mv_web/member_live/index.ex:24 -#: lib/mv_web/member_live/show.ex:23 +#: lib/mv_web/live/member_live/form.ex:18 +#: lib/mv_web/live/member_live/index.html.heex:58 +#: lib/mv_web/live/member_live/show.ex:27 #, elixir-autogen, elixir-format msgid "Email" msgstr "" -#: lib/mv_web/components/core_components.ex:151 -#, elixir-autogen, elixir-format -msgid "Error!" -msgstr "" - -#: lib/mv_web/member_live/form_component.ex:41 -#: lib/mv_web/member_live/index.ex:22 -#: lib/mv_web/member_live/show.ex:21 +#: lib/mv_web/live/member_live/form.ex:16 +#: lib/mv_web/live/member_live/show.ex:25 #, elixir-autogen, elixir-format msgid "First Name" msgstr "" -#: lib/mv_web/components/core_components.ex:172 -#, elixir-autogen, elixir-format -msgid "Hang in there while we get back on track" -msgstr "" - -#: lib/mv_web/member_live/form_component.ex:47 -#: lib/mv_web/member_live/index.ex:26 -#: lib/mv_web/member_live/show.ex:29 +#: lib/mv_web/live/member_live/form.ex:22 +#: lib/mv_web/live/member_live/index.html.heex:64 +#: lib/mv_web/live/member_live/show.ex:33 #, elixir-autogen, elixir-format msgid "Join Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:42 -#: lib/mv_web/member_live/index.ex:23 -#: lib/mv_web/member_live/show.ex:22 +#: lib/mv_web/live/member_live/form.ex:17 +#: lib/mv_web/live/member_live/show.ex:26 #, elixir-autogen, elixir-format msgid "Last Name" msgstr "" -#: lib/mv_web/member_live/index.ex:8 -#: lib/mv_web/member_live/index.ex:88 -#, elixir-autogen, elixir-format -msgid "Listing Members" -msgstr "" - -#: lib/mv_web/member_live/index.ex:11 -#: lib/mv_web/member_live/index.ex:82 +#: lib/mv_web/live/member_live/index.html.heex:6 #, elixir-autogen, elixir-format msgid "New Member" msgstr "" -#: lib/mv_web/member_live/index.ex:30 +#: lib/mv_web/live/member_live/index.html.heex:68 #, elixir-autogen, elixir-format msgid "Show" msgstr "" -#: lib/mv_web/components/core_components.ex:167 +#: lib/mv_web/components/layouts.ex:78 #, elixir-autogen, elixir-format msgid "Something went wrong!" msgstr "" -#: lib/mv_web/components/core_components.ex:150 -#, elixir-autogen, elixir-format -msgid "Success!" -msgstr "" - -#: lib/mv_web/components/core_components.ex:155 +#: lib/mv_web/components/layouts.ex:66 #, elixir-autogen, elixir-format msgid "We can't find the internet" msgstr "" -#: lib/mv_web/components/core_components.ex:76 -#: lib/mv_web/components/core_components.ex:130 +#: lib/mv_web/components/core_components.ex:74 #, elixir-autogen, elixir-format msgid "close" msgstr "" -#: lib/mv_web/member_live/form_component.ex:44 -#: lib/mv_web/member_live/show.ex:24 +#: lib/mv_web/live/member_live/form.ex:19 +#: lib/mv_web/live/member_live/show.ex:28 #, elixir-autogen, elixir-format msgid "Birth Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:55 -#: lib/mv_web/member_live/show.ex:38 +#: lib/mv_web/live/member_live/form.ex:30 +#: lib/mv_web/live/member_live/show.ex:42 #, elixir-autogen, elixir-format msgid "Custom Properties" msgstr "" -#: lib/mv_web/member_live/form_component.ex:48 -#: lib/mv_web/member_live/show.ex:30 +#: lib/mv_web/live/member_live/form.ex:23 +#: lib/mv_web/live/member_live/show.ex:34 #, elixir-autogen, elixir-format msgid "Exit Date" msgstr "" -#: lib/mv_web/member_live/form_component.ex:52 -#: lib/mv_web/member_live/show.ex:34 +#: lib/mv_web/live/member_live/form.ex:27 +#: lib/mv_web/live/member_live/index.html.heex:60 +#: lib/mv_web/live/member_live/show.ex:38 #, elixir-autogen, elixir-format msgid "House Number" msgstr "" -#: lib/mv_web/member_live/form_component.ex:49 -#: lib/mv_web/member_live/show.ex:31 +#: lib/mv_web/live/member_live/form.ex:24 +#: lib/mv_web/live/member_live/show.ex:35 #, elixir-autogen, elixir-format msgid "Notes" msgstr "" -#: lib/mv_web/member_live/form_component.ex:45 -#: lib/mv_web/member_live/show.ex:25 +#: lib/mv_web/live/member_live/form.ex:20 +#: lib/mv_web/live/member_live/show.ex:29 #, elixir-autogen, elixir-format msgid "Paid" msgstr "" -#: lib/mv_web/member_live/form_component.ex:46 -#: lib/mv_web/member_live/show.ex:28 +#: lib/mv_web/live/member_live/form.ex:21 +#: lib/mv_web/live/member_live/index.html.heex:63 +#: lib/mv_web/live/member_live/show.ex:32 #, elixir-autogen, elixir-format msgid "Phone Number" msgstr "" -#: lib/mv_web/member_live/form_component.ex:53 -#: lib/mv_web/member_live/show.ex:35 +#: lib/mv_web/live/member_live/form.ex:28 +#: lib/mv_web/live/member_live/index.html.heex:61 +#: lib/mv_web/live/member_live/show.ex:39 #, elixir-autogen, elixir-format msgid "Postal Code" msgstr "" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:50 #, elixir-autogen, elixir-format, fuzzy msgid "Save Member" msgstr "" -#: lib/mv_web/member_live/form_component.ex:75 +#: lib/mv_web/live/member_live/form.ex:49 +#: lib/mv_web/live/property_live/form.ex:41 +#: lib/mv_web/live/property_type_live/form.ex:29 #, elixir-autogen, elixir-format msgid "Saving..." msgstr "" -#: lib/mv_web/member_live/form_component.ex:51 -#: lib/mv_web/member_live/show.ex:33 +#: lib/mv_web/live/member_live/form.ex:26 +#: lib/mv_web/live/member_live/index.html.heex:59 +#: lib/mv_web/live/member_live/show.ex:37 #, elixir-autogen, elixir-format msgid "Street" msgstr "" -#: lib/mv_web/member_live/form_component.ex:30 +#: lib/mv_web/live/member_live/form.ex:11 #, elixir-autogen, elixir-format msgid "Use this form to manage member records and their properties." msgstr "" -#: lib/mv_web/member_live/show.ex:52 -#, elixir-autogen, elixir-format -msgid "Back to members" -msgstr "" - -#: lib/mv_web/member_live/show.ex:14 -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit member" -msgstr "" - -#: lib/mv_web/member_live/show.ex:20 +#: lib/mv_web/live/member_live/show.ex:24 #, elixir-autogen, elixir-format msgid "Id" msgstr "" -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "No" msgstr "" -#: lib/mv_web/member_live/show.ex:92 +#: lib/mv_web/live/member_live/show.ex:80 #, elixir-autogen, elixir-format, fuzzy msgid "Show Member" msgstr "" -#: lib/mv_web/member_live/show.ex:10 +#: lib/mv_web/live/member_live/show.ex:11 #, elixir-autogen, elixir-format msgid "This is a member record from your database." msgstr "" -#: lib/mv_web/member_live/show.ex:26 +#: lib/mv_web/live/member_live/show.ex:30 #, elixir-autogen, elixir-format msgid "Yes" msgstr "" -#: lib/mv_web/member_live/form_component.ex:102 +#: lib/mv_web/live/member_live/form.ex:108 +#: lib/mv_web/live/property_live/form.ex:200 +#: lib/mv_web/live/property_type_live/form.ex:73 #, elixir-autogen, elixir-format msgid "create" msgstr "" -#: lib/mv_web/member_live/form_component.ex:103 +#: lib/mv_web/live/member_live/form.ex:109 +#: lib/mv_web/live/property_live/form.ex:201 +#: lib/mv_web/live/property_type_live/form.ex:74 #, elixir-autogen, elixir-format msgid "update" msgstr "" @@ -244,7 +220,7 @@ msgstr "" msgid "Incorrect email or password" msgstr "" -#: lib/mv_web/member_live/form_component.ex:109 +#: lib/mv_web/live/member_live/form.ex:115 #, elixir-autogen, elixir-format msgid "Member %{action} successfully" msgstr "" @@ -259,7 +235,7 @@ msgstr "" msgid "You are now signed out" msgstr "" -#: lib/mv_web/controllers/auth_controller.ex:36 +#: lib/mv_web/controllers/auth_controller.ex:37 #, elixir-autogen, elixir-format msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" msgstr "" @@ -273,3 +249,143 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Your password has successfully been reset" msgstr "" + +#: lib/mv_web/live/member_live/form.ex:52 +#: lib/mv_web/live/property_live/form.ex:44 +#: lib/mv_web/live/property_type_live/form.ex:32 +#, elixir-autogen, elixir-format +msgid "Cancel" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:29 +#, elixir-autogen, elixir-format +msgid "Choose a member" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Choose a property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:25 +#, elixir-autogen, elixir-format +msgid "Description" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:26 +#, elixir-autogen, elixir-format +msgid "Immutable" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:35 +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:14 +#: lib/mv_web/live/member_live/index.ex:12 +#: lib/mv_web/live/member_live/index.html.heex:3 +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:50 +#: lib/mv_web/live/property_type_live/form.ex:16 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:37 +#, elixir-autogen, elixir-format +msgid "Please select a property type first" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:31 +#, elixir-autogen, elixir-format +msgid "Profil" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:207 +#, elixir-autogen, elixir-format, fuzzy +msgid "Property %{action} successfully" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:18 +#, elixir-autogen, elixir-format +msgid "Property type" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:80 +#, elixir-autogen, elixir-format +msgid "Property type %{action} successfully" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:27 +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:42 +#, elixir-autogen, elixir-format +msgid "Save Property" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:30 +#, elixir-autogen, elixir-format +msgid "Save Property type" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:27 +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex:41 +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "" + +#: lib/mv_web/components/layouts/navbar.ex:34 +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:95 +#, elixir-autogen, elixir-format +msgid "Unsupported value type: %{type}" +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:10 +#, elixir-autogen, elixir-format, fuzzy +msgid "Use this form to manage property records in your database." +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:11 +#, elixir-autogen, elixir-format, fuzzy +msgid "Use this form to manage property_type records in your database." +msgstr "" + +#: lib/mv_web/live/property_live/form.ex:59 +#, elixir-autogen, elixir-format +msgid "Value" +msgstr "" + +#: lib/mv_web/live/property_type_live/form.ex:20 +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "" + +#: lib/mv_web/components/table_components.ex:30 +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "" -- 2.47.2 From ab81b294675fe3d3399f734f06cb52f6b1b320a4 Mon Sep 17 00:00:00 2001 From: carla Date: Mon, 21 Jul 2025 15:24:47 +0200 Subject: [PATCH 5/6] feat (navbar): readded theme toggle and language picker --- lib/mv_web/components/layouts/navbar.ex | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/mv_web/components/layouts/navbar.ex b/lib/mv_web/components/layouts/navbar.ex index 4f1027d..ca87d98 100644 --- a/lib/mv_web/components/layouts/navbar.ex +++ b/lib/mv_web/components/layouts/navbar.ex @@ -4,6 +4,7 @@ defmodule MvWeb.Layouts.Navbar do """ use Phoenix.Component use Gettext, backend: MvWeb.Gettext + import MvWeb.Layouts def navbar(assigns) do ~H""" @@ -16,6 +17,14 @@ defmodule MvWeb.Layouts.Navbar do
+
+ + +
+ <.theme_toggle />