timgremore commited on
Commit
a89b862
1 Parent(s): 618a9e3

fix: Display nav options according to auth status

Browse files

Include `current_user` in live sessions for convenience.

lib/medical_transcription_web/components/header_component.ex ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ defmodule MedicalTranscriptionWeb.Components.HeaderComponent do
2
+ import MedicalTranscriptionWeb.CoreComponents
3
+
4
+ use Phoenix.Component
5
+ use MedicalTranscriptionWeb, :verified_routes
6
+
7
+ def header(assigns) do
8
+ ~H"""
9
+ <header class="hidden w-[335px] min-w-[335px] pt-6 border-r border-gray-200 lg:flex flex-col gap-12">
10
+ <div class="flex items-center gap-[10.5px]">
11
+ <img src={~p"/images/logo.svg"} width="48" />
12
+
13
+ <h1 class="text-lg leading-normal px-2 font-semibold">
14
+ Medical Code Transcriber
15
+ </h1>
16
+ </div>
17
+
18
+ <ul class="flex flex-col items-center gap-4 px-4">
19
+ <%= if @current_user do %>
20
+ <li class="text-[0.8125rem] leading-6 text-zinc-900">
21
+ <%= @current_user.email %>
22
+ </li>
23
+ <li>
24
+ <.link
25
+ href={~p"/users/settings"}
26
+ class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
27
+ >
28
+ Settings
29
+ </.link>
30
+ </li>
31
+ <li>
32
+ <.link
33
+ href={~p"/users/log_out"}
34
+ method="delete"
35
+ class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
36
+ >
37
+ Log out
38
+ </.link>
39
+ </li>
40
+ <% else %>
41
+ <li class="w-full">
42
+ <.link
43
+ href={~p"/users/register"}
44
+ class="text-[0.8125rem] text-left w-full block leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
45
+ >
46
+ Register
47
+ </.link>
48
+ </li>
49
+ <li class="w-full">
50
+ <.link
51
+ href={~p"/users/log_in"}
52
+ class="text-[0.8125rem] text-left w-full leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
53
+ >
54
+ Log in
55
+ </.link>
56
+ </li>
57
+ <% end %>
58
+ </ul>
59
+
60
+ <%= if @current_user do %>
61
+ <div class="flex-1 px-6">
62
+ <p class="text-xs leading-normal tracking-[0.2em] font-semibold uppercase">Today</p>
63
+ </div>
64
+
65
+ <div class="px-6 flex flex-col items-center">
66
+ <%= if MedicalTranscription.Coding.icd9_present?() do %>
67
+ <div
68
+ class="w-full px-3 py-2 bg-emerald-600 text-white text-center rounded-lg"
69
+ title="Precalculated vector embeddings for classification labels were found."
70
+ >
71
+ <.icon name="hero-check-circle" /> Vector embeddings found!
72
+ </div>
73
+ <% else %>
74
+ <div
75
+ class="w-full px-3 py-2 bg-red-300 text-slate-900 text-center rounded-lg"
76
+ title="Precalculated vector embeddings for classification labels were found."
77
+ >
78
+ <.icon name="hero-x-circle" /> Vector embeddings need to be built. Run
79
+ <code class="p-1 text-sm bg-slate-300 rounded-lg">mix build_code_vectors</code>
80
+ on the server.
81
+ </div>
82
+ <% end %>
83
+ </div>
84
+ <% end %>
85
+ </header>
86
+ """
87
+ end
88
+ end
lib/medical_transcription_web/components/layouts/app.html.heex CHANGED
@@ -1,37 +1,5 @@
1
  <div class="min-h-[calc(100vh-56px)] flex gap-5">
2
- <header class="hidden w-[335px] min-w-[335px] pt-6 border-r border-gray-200 lg:flex flex-col gap-12">
3
- <div class="flex items-center gap-[10.5px]">
4
- <img src={~p"/images/logo.svg"} width="48" />
5
-
6
- <h1 class="text-lg leading-normal px-2 font-semibold">
7
- Medical Code Transcriber
8
- </h1>
9
- </div>
10
-
11
- <div class="flex-1 px-6">
12
- <p class="text-xs leading-normal tracking-[0.2em] font-semibold uppercase">Today</p>
13
- </div>
14
-
15
- <div class="px-6 flex flex-col items-center">
16
- <%= if MedicalTranscription.Coding.icd9_present?() do %>
17
- <div
18
- class="w-full px-3 py-2 bg-emerald-600 text-white text-center rounded-lg"
19
- title="Precalculated vector embeddings for classification labels were found."
20
- >
21
- <.icon name="hero-check-circle" /> Vector embeddings found!
22
- </div>
23
- <% else %>
24
- <div
25
- class="w-full px-3 py-2 bg-red-300 text-slate-900 text-center rounded-lg"
26
- title="Precalculated vector embeddings for classification labels were found."
27
- >
28
- <.icon name="hero-x-circle" /> Vector embeddings need to be built. Run
29
- <code class="p-1 text-sm bg-slate-300 rounded-lg">mix build_code_vectors</code>
30
- on the server.
31
- </div>
32
- <% end %>
33
- </div>
34
- </header>
35
 
36
  <main class="flex-1 pl-16 pr-16 pt-[25px]">
37
  <div class="flex flex-col h-full mx-auto max-w-5xl">
 
1
  <div class="min-h-[calc(100vh-56px)] flex gap-5">
2
+ <MedicalTranscriptionWeb.Components.HeaderComponent.header current_user={@current_user} />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  <main class="flex-1 pl-16 pr-16 pt-[25px]">
5
  <div class="flex flex-col h-full mx-auto max-w-5xl">
lib/medical_transcription_web/components/layouts/root.html.heex CHANGED
@@ -12,47 +12,6 @@
12
  </script>
13
  </head>
14
  <body class="bg-white antialiased px-5 py-7">
15
- <ul class="relative z-10 flex items-center gap-4 px-4 sm:px-6 lg:px-8 justify-end">
16
- <%= if @current_user do %>
17
- <li class="text-[0.8125rem] leading-6 text-zinc-900">
18
- <%= @current_user.email %>
19
- </li>
20
- <li>
21
- <.link
22
- href={~p"/users/settings"}
23
- class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
24
- >
25
- Settings
26
- </.link>
27
- </li>
28
- <li>
29
- <.link
30
- href={~p"/users/log_out"}
31
- method="delete"
32
- class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
33
- >
34
- Log out
35
- </.link>
36
- </li>
37
- <% else %>
38
- <li>
39
- <.link
40
- href={~p"/users/register"}
41
- class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
42
- >
43
- Register
44
- </.link>
45
- </li>
46
- <li>
47
- <.link
48
- href={~p"/users/log_in"}
49
- class="text-[0.8125rem] leading-6 text-zinc-900 font-semibold hover:text-zinc-700"
50
- >
51
- Log in
52
- </.link>
53
- </li>
54
- <% end %>
55
- </ul>
56
  <%= @inner_content %>
57
  </body>
58
  </html>
 
12
  </script>
13
  </head>
14
  <body class="bg-white antialiased px-5 py-7">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  <%= @inner_content %>
16
  </body>
17
  </html>
lib/medical_transcription_web/router.ex CHANGED
@@ -18,12 +18,6 @@ defmodule MedicalTranscriptionWeb.Router do
18
  plug :accepts, ["json"]
19
  end
20
 
21
- scope "/", MedicalTranscriptionWeb do
22
- pipe_through :browser
23
-
24
- live "/", HomeLive.Index
25
- end
26
-
27
  # Other scopes may use custom stacks.
28
  # scope "/api", MedicalTranscriptionWeb do
29
  # pipe_through :api
@@ -77,6 +71,7 @@ defmodule MedicalTranscriptionWeb.Router do
77
 
78
  live_session :require_authenticated_user,
79
  on_mount: [{MedicalTranscriptionWeb.UserAuth, :ensure_authenticated}] do
 
80
  live "/users/settings", UserSettingsLive, :edit
81
  live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
82
  end
@@ -85,6 +80,8 @@ defmodule MedicalTranscriptionWeb.Router do
85
  scope "/", MedicalTranscriptionWeb do
86
  pipe_through [:browser]
87
 
 
 
88
  delete "/users/log_out", UserSessionController, :delete
89
 
90
  live_session :current_user,
 
18
  plug :accepts, ["json"]
19
  end
20
 
 
 
 
 
 
 
21
  # Other scopes may use custom stacks.
22
  # scope "/api", MedicalTranscriptionWeb do
23
  # pipe_through :api
 
71
 
72
  live_session :require_authenticated_user,
73
  on_mount: [{MedicalTranscriptionWeb.UserAuth, :ensure_authenticated}] do
74
+ live "/", HomeLive.Index
75
  live "/users/settings", UserSettingsLive, :edit
76
  live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
77
  end
 
80
  scope "/", MedicalTranscriptionWeb do
81
  pipe_through [:browser]
82
 
83
+ live "/", UserLoginLive, :new
84
+
85
  delete "/users/log_out", UserSessionController, :delete
86
 
87
  live_session :current_user,
lib/medical_transcription_web/user_auth.ex CHANGED
@@ -31,7 +31,7 @@ defmodule MedicalTranscriptionWeb.UserAuth do
31
 
32
  conn
33
  |> renew_session()
34
- |> put_token_in_session(token)
35
  |> maybe_write_remember_me_cookie(token, params)
36
  |> redirect(to: user_return_to || signed_in_path(conn))
37
  end
@@ -101,7 +101,8 @@ defmodule MedicalTranscriptionWeb.UserAuth do
101
  conn = fetch_cookies(conn, signed: [@remember_me_cookie])
102
 
103
  if token = conn.cookies[@remember_me_cookie] do
104
- {token, put_token_in_session(conn, token)}
 
105
  else
106
  {nil, conn}
107
  end
@@ -211,9 +212,10 @@ defmodule MedicalTranscriptionWeb.UserAuth do
211
  end
212
  end
213
 
214
- defp put_token_in_session(conn, token) do
215
  conn
216
  |> put_session(:user_token, token)
 
217
  |> put_session(:live_socket_id, "users_sessions:#{Base.url_encode64(token)}")
218
  end
219
 
 
31
 
32
  conn
33
  |> renew_session()
34
+ |> put_token_and_current_user_in_session(token, user)
35
  |> maybe_write_remember_me_cookie(token, params)
36
  |> redirect(to: user_return_to || signed_in_path(conn))
37
  end
 
101
  conn = fetch_cookies(conn, signed: [@remember_me_cookie])
102
 
103
  if token = conn.cookies[@remember_me_cookie] do
104
+ user = Accounts.get_user_by_session_token(token)
105
+ {token, put_token_and_current_user_in_session(conn, token, user)}
106
  else
107
  {nil, conn}
108
  end
 
212
  end
213
  end
214
 
215
+ defp put_token_and_current_user_in_session(conn, token, user) do
216
  conn
217
  |> put_session(:user_token, token)
218
+ |> put_session(:current_user, user)
219
  |> put_session(:live_socket_id, "users_sessions:#{Base.url_encode64(token)}")
220
  end
221