update to 1.6
This commit is contained in:
		| @@ -5,19 +5,21 @@ defmodule Lokal.Application do | ||||
|  | ||||
|   use Application | ||||
|  | ||||
|   @impl true | ||||
|   def start(_type, _args) do | ||||
|     children = [ | ||||
|       # Start the Ecto repository | ||||
|       Lokal.Repo, | ||||
|       Lokal.Repo.Migrator, | ||||
|       # Start the Telemetry supervisor | ||||
|       LokalWeb.Telemetry, | ||||
|       # Start the PubSub system | ||||
|       {Phoenix.PubSub, name: Lokal.PubSub}, | ||||
|       # Start the Endpoint (http/https) | ||||
|       LokalWeb.Endpoint | ||||
|       LokalWeb.Endpoint, | ||||
|       # Start a worker by calling: Lokal.Worker.start_link(arg) | ||||
|       # {Lokal.Worker, arg} | ||||
|       # Automatically migrate on start | ||||
|       Lokal.Repo.Migrator | ||||
|     ] | ||||
|  | ||||
|     # See https://hexdocs.pm/elixir/Supervisor.html | ||||
| @@ -28,6 +30,7 @@ defmodule Lokal.Application do | ||||
|  | ||||
|   # Tell Phoenix to update the endpoint configuration | ||||
|   # whenever the application is updated. | ||||
|   @impl true | ||||
|   def config_change(changed, _new, removed) do | ||||
|     LokalWeb.Endpoint.config_change(changed, removed) | ||||
|     :ok | ||||
|   | ||||
							
								
								
									
										3
									
								
								lib/lokal/mailer.ex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								lib/lokal/mailer.ex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| defmodule Lokal.Mailer do | ||||
|   use Swoosh.Mailer, otp_app: :lokal | ||||
| end | ||||
| @@ -59,6 +59,14 @@ defmodule LokalWeb do | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def component do | ||||
|     quote do | ||||
|       use Phoenix.Component | ||||
|  | ||||
|       unquote(view_helpers()) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def router do | ||||
|     quote do | ||||
|       use Phoenix.Router | ||||
| @@ -81,7 +89,7 @@ defmodule LokalWeb do | ||||
|       # Use all HTML functionality (forms, tags, etc) | ||||
|       use Phoenix.HTML | ||||
|  | ||||
|       # Import LiveView helpers (live_render, live_component, live_patch, etc) | ||||
|       # Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc) | ||||
|       import Phoenix.LiveView.Helpers | ||||
|       import LokalWeb.LiveHelpers | ||||
|  | ||||
|   | ||||
| @@ -1,35 +0,0 @@ | ||||
| defmodule LokalWeb.UserSocket do | ||||
|   use Phoenix.Socket | ||||
|  | ||||
|   ## Channels | ||||
|   # channel "room:*", LokalWeb.RoomChannel | ||||
|  | ||||
|   # Socket params are passed from the client and can | ||||
|   # be used to verify and authenticate a user. After | ||||
|   # verification, you can put default assigns into | ||||
|   # the socket that will be set for all channels, ie | ||||
|   # | ||||
|   #     {:ok, socket |> assign(:user_id, verified_user_id)} | ||||
|   # | ||||
|   # To deny connection, return `:error`. | ||||
|   # | ||||
|   # See `Phoenix.Token` documentation for examples in | ||||
|   # performing token verification on connect. | ||||
|   @impl true | ||||
|   def connect(_params, socket, _connect_info) do | ||||
|     {:ok, socket} | ||||
|   end | ||||
|  | ||||
|   # Socket id's are topics that allow you to identify all sockets for a given user: | ||||
|   # | ||||
|   #     def id(socket), do: "user_socket:#{socket.assigns.user_id}" | ||||
|   # | ||||
|   # Would allow you to broadcast a "disconnect" event and terminate | ||||
|   # all active sockets and channels for a given user: | ||||
|   # | ||||
|   #     LokalWeb.Endpoint.broadcast("user_socket:#{user.id}", "disconnect", %{}) | ||||
|   # | ||||
|   # Returning `nil` makes this socket anonymous. | ||||
|   @impl true | ||||
|   def id(_socket), do: nil | ||||
| end | ||||
| @@ -1,32 +1,32 @@ | ||||
| defmodule LokalWeb.Live.Component.Topbar do | ||||
|   use LokalWeb, :live_component | ||||
|    | ||||
|   alias LokalWeb.{PageLive} | ||||
|    | ||||
|   def mount(socket) do | ||||
|     {:ok, socket |> assign(results: [], title_content: nil)} | ||||
|   end | ||||
|    | ||||
|   def update(assigns, socket) do | ||||
|     {:ok, socket |> assign(assigns)} | ||||
|   end | ||||
| defmodule LokalWeb.Component.Topbar do | ||||
|   @moduledoc """ | ||||
|   Phoenix.Component for rendering an interactive topbar | ||||
|   Assign | ||||
|   """ | ||||
| 
 | ||||
|   def render(assigns) do | ||||
|     ~L""" | ||||
|   use LokalWeb, :component | ||||
|   alias LokalWeb.{PageLive} | ||||
| 
 | ||||
|   def topbar(assigns) do | ||||
|     assigns = | ||||
|       %{results: [], title_content: nil, current_user: nil, flash: nil} | ||||
|       |> Map.merge(assigns) | ||||
| 
 | ||||
|     ~H""" | ||||
|     <header class="mb-8 px-8 py-4 w-full bg-primary-400"> | ||||
|       <nav role="navigation"> | ||||
|         <div class="flex flex-row justify-between items-center space-x-4"> | ||||
|           <div class="flex flex-row justify-start items-center space-x-2"> | ||||
|             <%= link to: Routes.page_path(LokalWeb.Endpoint, :index) do %> | ||||
|             <%= link to: Routes.live_path(LokalWeb.Endpoint, PageLive) do %> | ||||
|               <h1 class="leading-5 text-xl text-white hover:underline">Lokal</h1> | ||||
|             <% end %> | ||||
|              | ||||
| 
 | ||||
|             <%= if @title_content do %> | ||||
|               <span>|</span> | ||||
|               <%= @title_content %> | ||||
|               <%= render_slot(@title_content) %> | ||||
|             <% end %> | ||||
|           </div> | ||||
|          | ||||
| 
 | ||||
|           <ul class="flex flex-row flex-wrap justify-center items-center | ||||
|             text-lg space-x-4 text-lg text-white"> | ||||
|             <%# search %> | ||||
| @@ -35,15 +35,14 @@ defmodule LokalWeb.Live.Component.Topbar do | ||||
|                 placeholder="Search" list="results" autocomplete="off"/> | ||||
|               <datalist id="results"> | ||||
|                 <%= for {app, _vsn} <- @results do %> | ||||
|                   <option value="<%= app %>"><%= app %></option> | ||||
|                   <option value={app}>"><%= app %></option> | ||||
|                 <% end %> | ||||
|               </datalist> | ||||
|             </form> | ||||
| 
 | ||||
|             <%# user settings %> | ||||
|             <%= if @current_user do %> | ||||
|               <li> | ||||
|                 <%= @current_user.email %></li> | ||||
|               <li><%= @current_user.email %></li> | ||||
|               <li> | ||||
|                 <%= link "Settings", class: "hover:underline", | ||||
|                   to: Routes.user_settings_path(LokalWeb.Endpoint, :edit) %> | ||||
| @@ -73,14 +72,14 @@ defmodule LokalWeb.Live.Component.Topbar do | ||||
|         </div> | ||||
|       </nav> | ||||
| 
 | ||||
|       <%= if live_flash(@flash, :info) do %> | ||||
|       <%= if @flash && @flash |> Map.has_key?(:info) do %> | ||||
|         <p class="alert alert-info" role="alert" | ||||
|           phx-click="lv:clear-flash" phx-value-key="info"> | ||||
|           <%= live_flash(@flash, :info) %> | ||||
|         </p> | ||||
|       <% end %> | ||||
| 
 | ||||
|       <%= if live_flash(@flash, :error) do %> | ||||
|       <%= if @flash && @flash |> Map.has_key?(:error) do %> | ||||
|         <p class="alert alert-danger" role="alert" | ||||
|           phx-click="lv:clear-flash" phx-value-key="error"> | ||||
|           <%= live_flash(@flash, :error) %> | ||||
| @@ -89,4 +88,4 @@ defmodule LokalWeb.Live.Component.Topbar do | ||||
|     </header> | ||||
|     """ | ||||
|   end | ||||
| end | ||||
| end | ||||
| @@ -10,10 +10,6 @@ defmodule LokalWeb.Endpoint do | ||||
|     signing_salt: "fxAnJltS" | ||||
|   ] | ||||
|  | ||||
|   socket "/socket", LokalWeb.UserSocket, | ||||
|     websocket: true, | ||||
|     longpoll: false | ||||
|  | ||||
|   socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]] | ||||
|  | ||||
|   # Serve at "/" the static files from "priv/static" directory. | ||||
|   | ||||
| @@ -20,5 +20,5 @@ defmodule LokalWeb.Gettext do | ||||
|  | ||||
|   See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage. | ||||
|   """ | ||||
|   # use Gettext, otp_app: :lokal | ||||
|   use Gettext, otp_app: :lokal | ||||
| end | ||||
|   | ||||
| @@ -29,7 +29,7 @@ defmodule LokalWeb.LiveHelpers do | ||||
|       Accounts.get_user_by_session_token(user_token) | ||||
|     end) | ||||
|   end | ||||
|    | ||||
|  | ||||
|   def assign_defaults(socket, _session) do | ||||
|     socket | ||||
|   end | ||||
|   | ||||
| @@ -13,7 +13,7 @@ defmodule LokalWeb.ModalComponent do | ||||
|  | ||||
|       <div class="phx-modal-content"> | ||||
|         <%= live_patch raw("×"), to: @return_to, class: "phx-modal-close" %> | ||||
|         <%= live_component @socket, @component, @opts %> | ||||
|         <%= live_component @component, @opts %> | ||||
|       </div> | ||||
|     </div> | ||||
|     """ | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| defmodule LokalWeb.Router do | ||||
|   use LokalWeb, :router | ||||
|  | ||||
|   import LokalWeb.UserAuth | ||||
|  | ||||
|   pipeline :browser do | ||||
| @@ -20,9 +19,14 @@ defmodule LokalWeb.Router do | ||||
|   scope "/", LokalWeb do | ||||
|     pipe_through :browser | ||||
|  | ||||
|     live "/", PageLive, :index | ||||
|     live "/", PageLive | ||||
|   end | ||||
|  | ||||
|   # Other scopes may use custom stacks. | ||||
|   # scope "/api", LokalWeb do | ||||
|   #   pipe_through :api | ||||
|   # end | ||||
|  | ||||
|   # Enables LiveDashboard only for development | ||||
|   # | ||||
|   # If you want to use the LiveDashboard in production, you should put | ||||
| @@ -39,6 +43,18 @@ defmodule LokalWeb.Router do | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   # Enables the Swoosh mailbox preview in development. | ||||
|   # | ||||
|   # Note that preview only shows emails that were sent by the same | ||||
|   # node running the Phoenix server. | ||||
|   if Mix.env() == :dev do | ||||
|     scope "/dev" do | ||||
|       pipe_through :browser | ||||
|  | ||||
|       forward "/mailbox", Plug.Swoosh.MailboxPreview | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   ## Authentication routes | ||||
|  | ||||
|   scope "/", LokalWeb do | ||||
|   | ||||
| @@ -31,11 +31,27 @@ defmodule LokalWeb.Telemetry do | ||||
|       ), | ||||
|  | ||||
|       # Database Metrics | ||||
|       summary("lokal.repo.query.total_time", unit: {:native, :millisecond}), | ||||
|       summary("lokal.repo.query.decode_time", unit: {:native, :millisecond}), | ||||
|       summary("lokal.repo.query.query_time", unit: {:native, :millisecond}), | ||||
|       summary("lokal.repo.query.queue_time", unit: {:native, :millisecond}), | ||||
|       summary("lokal.repo.query.idle_time", unit: {:native, :millisecond}), | ||||
|       summary("lokal.repo.query.total_time", | ||||
|         unit: {:native, :millisecond}, | ||||
|         description: "The sum of the other measurements" | ||||
|       ), | ||||
|       summary("lokal.repo.query.decode_time", | ||||
|         unit: {:native, :millisecond}, | ||||
|         description: "The time spent decoding the data received from the database" | ||||
|       ), | ||||
|       summary("lokal.repo.query.query_time", | ||||
|         unit: {:native, :millisecond}, | ||||
|         description: "The time spent executing the query" | ||||
|       ), | ||||
|       summary("lokal.repo.query.queue_time", | ||||
|         unit: {:native, :millisecond}, | ||||
|         description: "The time spent waiting for a database connection" | ||||
|       ), | ||||
|       summary("lokal.repo.query.idle_time", | ||||
|         unit: {:native, :millisecond}, | ||||
|         description: | ||||
|           "The time the connection spent waiting before being checked out for the query" | ||||
|       ), | ||||
|  | ||||
|       # VM Metrics | ||||
|       summary("vm.memory.total", unit: {:byte, :kilobyte}), | ||||
|   | ||||
| @@ -1,19 +1,19 @@ | ||||
| <main role="main" class="container min-h-full min-w-full"> | ||||
| <main class="container min-h-full min-w-full"> | ||||
|   <header class="mb-4 px-8 py-4 w-full bg-primary-400"> | ||||
|     <%= render "topbar.html", assigns %> | ||||
|    | ||||
| 
 | ||||
|     <%= if get_flash(@conn, :info) do %> | ||||
|       <p class="alert alert-info" role="alert"> | ||||
|         <%= get_flash(@conn, :info) %> | ||||
|       </p> | ||||
|     <% end %> | ||||
|      | ||||
| 
 | ||||
|     <%= if get_flash(@conn, :error) do %> | ||||
|       <p class="alert alert-danger" role="alert"> | ||||
|         <%= get_flash(@conn, :error) %> | ||||
|       </p> | ||||
|     <% end %> | ||||
|   </header> | ||||
|    | ||||
| 
 | ||||
|   <%= @inner_content %> | ||||
| </main> | ||||
							
								
								
									
										19
									
								
								lib/lokal_web/templates/layout/live.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								lib/lokal_web/templates/layout/live.html.heex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| <main class="container"> | ||||
|   <LokalWeb.Component.Topbar.topbar | ||||
|     current_user={assigns[:current_user]}> | ||||
|   </LokalWeb.Component.Topbar.topbar> | ||||
|  | ||||
|   <%= if @flash && @flash |> Map.has_key?(:info) do %> | ||||
|     <p class="alert alert-info" role="alert" | ||||
|       phx-click="lv:clear-flash" | ||||
|       phx-value-key="info"><%= live_flash(@flash, :info) %></p> | ||||
|       <% end %> | ||||
|  | ||||
|   <%= if @flash && @flash |> Map.has_key?(:error) do %> | ||||
|     <p class="alert alert-danger" role="alert" | ||||
|       phx-click="lv:clear-flash" | ||||
|       phx-value-key="error"><%= live_flash(@flash, :error) %></p> | ||||
|   <% end %> | ||||
|  | ||||
|   <%= @inner_content %> | ||||
| </main> | ||||
| @@ -1,5 +0,0 @@ | ||||
| <main role="main" class="container min-w-full min-h-full"> | ||||
|   <%= live_component LokalWeb.Live.Component.Topbar, current_user: assigns[:current_user] %> | ||||
|  | ||||
|   <%= @inner_content %> | ||||
| </main> | ||||
| @@ -6,8 +6,8 @@ | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||
|     <%= csrf_meta_tag() %> | ||||
|     <%= live_title_tag assigns[:page_title] || "Lokal", suffix: "" %> | ||||
|     <link phx-track-static rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/> | ||||
|     <script defer phx-track-static type="text/javascript" src="<%= Routes.static_path(@conn, "/js/app.js") %>"></script> | ||||
|     <link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/css/app.css")}/> | ||||
|     <script defer phx-track-static type="text/javascript" src={Routes.static_path(@conn, "/js/app.js")}></script> | ||||
|   </head> | ||||
|   <body class="m-0 p-0 min-w-full min-h-full"> | ||||
|     <%= @inner_content %> | ||||
| @@ -1,15 +1,16 @@ | ||||
| <nav role="navigation"> | ||||
|   <div class="flex flex-row justify-between items-center space-x-4"> | ||||
|     <%= link to: Routes.page_path(LokalWeb.Endpoint, :index) do %> | ||||
|     <%= link to: Routes.live_path(LokalWeb.Endpoint, PageLive) do %> | ||||
|       <h1 class="leading-5 text-xl text-white hover:underline">Lokal</h1> | ||||
|     <% end %> | ||||
|    | ||||
|  | ||||
|     <ul class="flex flex-row flex-wrap justify-center items-center | ||||
|       space-x-4 text-lg text-white"> | ||||
|       <%# user settings %> | ||||
|       <%= if assigns |> Map.has_key?(:current_user) && @current_user do %> | ||||
|         <li> | ||||
|           <%= @current_user.email %></li> | ||||
|           <%= @current_user.email %> | ||||
|         </li> | ||||
|         <li> | ||||
|           <%= link "Settings", class: "hover:underline", | ||||
|             to: Routes.user_settings_path(LokalWeb.Endpoint, :edit) %> | ||||
| @@ -37,4 +38,4 @@ | ||||
|       <% end %> | ||||
|     </ul> | ||||
|   </div> | ||||
| </nav> | ||||
| </nav> | ||||
|   | ||||
| @@ -1,6 +1,11 @@ | ||||
| defmodule LokalWeb.LayoutView do | ||||
|   use LokalWeb, :view | ||||
|    | ||||
|   alias LokalWeb.{PageLive} | ||||
|  | ||||
|   # Phoenix LiveDashboard is available only in development by default, | ||||
|   # so we instruct Elixir to not warn if the dashboard route is missing. | ||||
|   @compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}} | ||||
|  | ||||
|   def get_title(conn) do | ||||
|     if conn.assigns |> Map.has_key?(:title) do | ||||
|       "Lokal | #{conn.assigns.title}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user