diff --git a/friends/lib/friends_web.ex b/friends/lib/friends_web.ex
index 0d769ee..ccfbcbd 100644
--- a/friends/lib/friends_web.ex
+++ b/friends/lib/friends_web.ex
@@ -37,6 +37,7 @@ defmodule FriendsWeb do
import Phoenix.Controller,
only: [get_flash: 1, get_flash: 2, view_module: 1, view_template: 1]
+ import Phoenix.Component
# Include shared imports and aliases for views
unquote(view_helpers())
end
@@ -70,7 +71,118 @@ defmodule FriendsWeb do
def router do
quote do
use Phoenix.Router
-
+ import Phoenix.Component
+ import Plug.Conn
+ import Phoenix.Controller
+ import Phoenix.LiveView.Router
+ end
+ end
+
+ def channel do
+ quote do
+ use Phoenix.Channel
+ import FriendsWeb.Gettext
+ end
+ end
+
+ defp view_helpers do
+ quote do
+ # Use all HTML functionality (forms, tags, etc)
+ use Phoenix.HTML
+
+ # Import LiveView and .heex helpers (live_render, live_patch, <.form>, etc)
+ import Phoenix.LiveView.Helpers
+
+ # Import basic rendering functionality (render, render_layout, etc)
+ import Phoenix.View
+
+ import FriendsWeb.ErrorHelpers
+ import FriendsWeb.Gettext
+ alias FriendsWeb.Router.Helpers, as: Routes
+ end
+ end
+
+ @doc """
+ When used, dispatch to the appropriate controller/view/etc.
+ """
+ defmacro __using__(which) when is_atom(which) do
+ apply(__MODULE__, which, [])
+ end
+end
+defmodule FriendsWeb do
+ @moduledoc """
+ The entrypoint for defining your web interface, such
+ as controllers, views, channels and so on.
+
+ This can be used in your application as:
+
+ use FriendsWeb, :controller
+ use FriendsWeb, :view
+
+ The definitions below will be executed for every view,
+ controller, etc, so keep them short and clean, focused
+ on imports, uses and aliases.
+
+ Do NOT define functions inside the quoted expressions
+ below. Instead, define any helper function in modules
+ and import those modules here.
+ """
+
+ def controller do
+ quote do
+ use Phoenix.Controller, namespace: FriendsWeb
+
+ import Plug.Conn
+ import FriendsWeb.Gettext
+ alias FriendsWeb.Router.Helpers, as: Routes
+ end
+ end
+
+ def view do
+ quote do
+ use Phoenix.View,
+ root: "lib/friends_web/templates",
+ namespace: FriendsWeb
+
+ # Import convenience functions from controllers
+ import Phoenix.Controller,
+ only: [get_flash: 1, get_flash: 2, view_module: 1, view_template: 1]
+
+ import Phoenix.Component
+ # Include shared imports and aliases for views
+ unquote(view_helpers())
+ end
+ end
+
+ def live_view do
+ quote do
+ use Phoenix.LiveView,
+ layout: {FriendsWeb.LayoutView, "live.html"}
+
+ unquote(view_helpers())
+ end
+ end
+
+ def live_component do
+ quote do
+ use Phoenix.LiveComponent
+
+ unquote(view_helpers())
+ end
+ end
+
+ def component do
+ quote do
+ use Phoenix.Component
+
+ unquote(view_helpers())
+ end
+ end
+
+ def router do
+ quote do
+ use Phoenix.Router
+ import Phoenix.Component
import Plug.Conn
import Phoenix.Controller
import Phoenix.LiveView.Router
diff --git a/friends/lib/friends_web/live/friends_live.ex b/friends/lib/friends_web/live/friends_live.ex
new file mode 100644
index 0000000..90267b6
--- /dev/null
+++ b/friends/lib/friends_web/live/friends_live.ex
@@ -0,0 +1,4 @@
+defmodule FriendsWeb.FriendsLive do
+ use FriendsWeb, :live_view
+
+end
diff --git a/friends/lib/friends_web/live/index.ex b/friends/lib/friends_web/live/index.ex
new file mode 100644
index 0000000..483247f
--- /dev/null
+++ b/friends/lib/friends_web/live/index.ex
@@ -0,0 +1,22 @@
+defmodule FriendsWeb.FriendsLive.Index do
+ use FriendsWeb, :live_view
+ import Helpers
+
+ alias Friends.{Friend, Relationship}
+
+ def mount(%{}, _token, socket) do
+ {:ok,
+ socket
+ |> assign(:friends, Friend.all)
+ |> assign(
+ :new_friend,
+ %Friend{}|> Friend.changeset()
+ )
+ |> assign(
+ :page_title,
+ "Welcome"
+ )
+ }
+ end
+
+end
diff --git a/friends/lib/friends_web/live/index.html.heex b/friends/lib/friends_web/live/index.html.heex
new file mode 100644
index 0000000..74c76a2
--- /dev/null
+++ b/friends/lib/friends_web/live/index.html.heex
@@ -0,0 +1,18 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/friends/lib/friends_web/router.ex b/friends/lib/friends_web/router.ex
index 46f3b14..d76c194 100644
--- a/friends/lib/friends_web/router.ex
+++ b/friends/lib/friends_web/router.ex
@@ -17,7 +17,9 @@ defmodule FriendsWeb.Router do
scope "/", FriendsWeb do
pipe_through :browser
- get "/", PageController, :index
+ live "/", FriendsLive.Index
+ live "/friend/:slug", FriendsLive.Show
+
end
# Other scopes may use custom stacks.
diff --git a/friends/lib/friends_web/templates/layout/live.html.heex b/friends/lib/friends_web/templates/layout/live.html.heex
index a29d604..9bb672b 100644
--- a/friends/lib/friends_web/templates/layout/live.html.heex
+++ b/friends/lib/friends_web/templates/layout/live.html.heex
@@ -1,11 +1,51 @@
-
-