timgremore commited on
Commit
c066ce6
1 Parent(s): 9372521

feat: Use user's timezone

Browse files
assets/js/app.js CHANGED
@@ -22,6 +22,8 @@ import { Socket } from "phoenix";
22
  import { LiveSocket } from "phoenix_live_view";
23
  import topbar from "../vendor/topbar";
24
 
 
 
25
  let Hooks = {};
26
  /**
27
  * This hook is necessary because we're watching for a blur event on a `p` tag with `contenteditable`.
@@ -55,7 +57,7 @@ let csrfToken = document
55
  .getAttribute("content");
56
  let liveSocket = new LiveSocket("/live", Socket, {
57
  hooks: Hooks,
58
- params: { _csrf_token: csrfToken },
59
  });
60
 
61
  // Show progress bar on live navigation and form submits
 
22
  import { LiveSocket } from "phoenix_live_view";
23
  import topbar from "../vendor/topbar";
24
 
25
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
26
+
27
  let Hooks = {};
28
  /**
29
  * This hook is necessary because we're watching for a blur event on a `p` tag with `contenteditable`.
 
57
  .getAttribute("content");
58
  let liveSocket = new LiveSocket("/live", Socket, {
59
  hooks: Hooks,
60
+ params: { _csrf_token: csrfToken, timezone },
61
  });
62
 
63
  // Show progress bar on live navigation and form submits
config/config.exs CHANGED
@@ -37,6 +37,8 @@ config :medicode, :generators,
37
  # at the `config/runtime.exs`.
38
  config :medicode, Medicode.Mailer, adapter: Swoosh.Adapters.Local
39
 
 
 
40
  # Configure esbuild (the version is required)
41
  config :esbuild,
42
  version: "0.17.11",
 
37
  # at the `config/runtime.exs`.
38
  config :medicode, Medicode.Mailer, adapter: Swoosh.Adapters.Local
39
 
40
+ config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase
41
+
42
  # Configure esbuild (the version is required)
43
  config :esbuild,
44
  version: "0.17.11",
lib/medicode_web/components/components.ex CHANGED
@@ -78,6 +78,13 @@ defmodule MedicodeWeb.Components do
78
  Shows the status and keywords for the current session.
79
  """
80
  def result_heading(assigns) do
 
 
 
 
 
 
 
81
  ~H"""
82
  <div class="flex justify-between">
83
  <div class="flex items-center">
@@ -117,7 +124,7 @@ defmodule MedicodeWeb.Components do
117
  <img src={~p"/images/calendar.svg"} width="16" />
118
 
119
  <span class="text-sm leading-normal font-bold text-type-black-tertiary uppercase">
120
- <%= Calendar.strftime(DateTime.now!("Etc/UTC"), "%a, %b %d, %Y, %I:%M %p") %>
121
  </span>
122
  </div>
123
  <div class="px-4 pt-2 pb-10 flex flex-col gap-2">
 
78
  Shows the status and keywords for the current session.
79
  """
80
  def result_heading(assigns) do
81
+ assigns =
82
+ assign_new(assigns, :transcript_inserted_at, fn _ ->
83
+ assigns.transcription.inserted_at
84
+ |> DateTime.shift_zone!(assigns.timezone)
85
+ |> Calendar.strftime("%a, %b %d, %Y, %I:%M %p")
86
+ end)
87
+
88
  ~H"""
89
  <div class="flex justify-between">
90
  <div class="flex items-center">
 
124
  <img src={~p"/images/calendar.svg"} width="16" />
125
 
126
  <span class="text-sm leading-normal font-bold text-type-black-tertiary uppercase">
127
+ <%= @transcript_inserted_at %>
128
  </span>
129
  </div>
130
  <div class="px-4 pt-2 pb-10 flex flex-col gap-2">
lib/medicode_web/live/transcriptions_live/show.ex CHANGED
@@ -10,6 +10,8 @@ defmodule MedicodeWeb.TranscriptionsLive.Show do
10
  def mount(params, session, socket) do
11
  transcription = get_transcription(params["id"])
12
 
 
 
13
  if is_nil(transcription), do: raise(Medicode.Fallback)
14
 
15
  if connected?(socket) do
@@ -30,7 +32,8 @@ defmodule MedicodeWeb.TranscriptionsLive.Show do
30
  summary_keywords: summary_keywords,
31
  transcription: transcription,
32
  transcriptions: list_transcriptions(session["current_user"]),
33
- finalized_codes: finalized_codes
 
34
  }
35
 
36
  socket =
@@ -59,6 +62,7 @@ defmodule MedicodeWeb.TranscriptionsLive.Show do
59
  transcription={@transcription}
60
  summary_keywords={@summary_keywords}
61
  finalized_codes={@finalized_codes}
 
62
  />
63
 
64
  <img
 
10
  def mount(params, session, socket) do
11
  transcription = get_transcription(params["id"])
12
 
13
+ timezone = get_connect_params(socket)["timezone"] || "Etc/UTC"
14
+
15
  if is_nil(transcription), do: raise(Medicode.Fallback)
16
 
17
  if connected?(socket) do
 
32
  summary_keywords: summary_keywords,
33
  transcription: transcription,
34
  transcriptions: list_transcriptions(session["current_user"]),
35
+ finalized_codes: finalized_codes,
36
+ timezone: timezone
37
  }
38
 
39
  socket =
 
62
  transcription={@transcription}
63
  summary_keywords={@summary_keywords}
64
  finalized_codes={@finalized_codes}
65
+ timezone={@timezone}
66
  />
67
 
68
  <img
mix.exs CHANGED
@@ -72,7 +72,8 @@ defmodule Medicode.MixProject do
72
  {:hackney, "~> 1.8"},
73
  {:sentry, "~> 8.0"},
74
  {:ecto_psql_extras, "~> 0.6"},
75
- {:circular_buffer, "~> 0.4.0"}
 
76
  # {:membrane_portaudio_plugin, "~> 0.18.0"}
77
  ]
78
  end
 
72
  {:hackney, "~> 1.8"},
73
  {:sentry, "~> 8.0"},
74
  {:ecto_psql_extras, "~> 0.6"},
75
+ {:circular_buffer, "~> 0.4.0"},
76
+ {:tzdata, "~> 1.1"}
77
  # {:membrane_portaudio_plugin, "~> 0.18.0"}
78
  ]
79
  end
mix.lock CHANGED
@@ -103,6 +103,7 @@
103
  "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
104
  "thousand_island": {:hex, :thousand_island, "1.3.5", "6022b6338f1635b3d32406ff98d68b843ba73b3aa95cfc27154223244f3a6ca5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2be6954916fdfe4756af3239fb6b6d75d0b8063b5df03ba76fd8a4c87849e180"},
105
  "tokenizers": {:hex, :tokenizers, "0.4.0", "140283ca74a971391ddbd83cd8cbdb9bd03736f37a1b6989b82d245a95e1eb97", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.6", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "ef1a9824f5a893cd3b831c0e5b3d72caa250d2ec462035cc6afef6933b13a82e"},
 
106
  "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
107
  "unifex": {:hex, :unifex, "1.1.0", "26b1bcb6c3b3454e1ea15f85b2e570aaa5b5c609566aa9f5c2e0a8b213379d6b", [:mix], [{:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.0", [hex: :bundlex, repo: "hexpm", optional: false]}, {:shmex, "~> 0.5.0", [hex: :shmex, repo: "hexpm", optional: false]}], "hexpm", "d8f47e9e3240301f5b20eec5792d1d4341e1a3a268d94f7204703b48da4aaa06"},
108
  "unpickler": {:hex, :unpickler, "0.1.0", "c2262c0819e6985b761e7107546cef96a485f401816be5304a65fdd200d5bd6a", [:mix], [], "hexpm", "e2b3f61e62406187ac52afead8a63bfb4e49394028993f3c4c42712743cab79e"},
 
103
  "telemetry_poller": {:hex, :telemetry_poller, "1.0.0", "db91bb424e07f2bb6e73926fcafbfcbcb295f0193e0a00e825e589a0a47e8453", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b3a24eafd66c3f42da30fc3ca7dda1e9d546c12250a2d60d7b81d264fbec4f6e"},
104
  "thousand_island": {:hex, :thousand_island, "1.3.5", "6022b6338f1635b3d32406ff98d68b843ba73b3aa95cfc27154223244f3a6ca5", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2be6954916fdfe4756af3239fb6b6d75d0b8063b5df03ba76fd8a4c87849e180"},
105
  "tokenizers": {:hex, :tokenizers, "0.4.0", "140283ca74a971391ddbd83cd8cbdb9bd03736f37a1b6989b82d245a95e1eb97", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, ">= 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.6", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "ef1a9824f5a893cd3b831c0e5b3d72caa250d2ec462035cc6afef6933b13a82e"},
106
+ "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"},
107
  "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
108
  "unifex": {:hex, :unifex, "1.1.0", "26b1bcb6c3b3454e1ea15f85b2e570aaa5b5c609566aa9f5c2e0a8b213379d6b", [:mix], [{:bunch, "~> 1.0", [hex: :bunch, repo: "hexpm", optional: false]}, {:bundlex, "~> 1.0", [hex: :bundlex, repo: "hexpm", optional: false]}, {:shmex, "~> 0.5.0", [hex: :shmex, repo: "hexpm", optional: false]}], "hexpm", "d8f47e9e3240301f5b20eec5792d1d4341e1a3a268d94f7204703b48da4aaa06"},
109
  "unpickler": {:hex, :unpickler, "0.1.0", "c2262c0819e6985b761e7107546cef96a485f401816be5304a65fdd200d5bd6a", [:mix], [], "hexpm", "e2b3f61e62406187ac52afead8a63bfb4e49394028993f3c4c42712743cab79e"},