瀏覽代碼

Only display the 5 closest 'after' slots

theenglishway (time) 4 年之前
父節點
當前提交
7a7adc4585
共有 2 個文件被更改,包括 9 次插入4 次删除
  1. 4 2
      lib/vaccins/location_store.ex
  2. 5 2
      lib/vaccins_web/live/location_component.ex

+ 4 - 2
lib/vaccins/location_store.ex

@@ -28,10 +28,10 @@ defmodule Vaccins.LocationStore do
             case slots
                  |> Enum.group_by(&(&1 |> DateTime.diff(DateTime.utc_now()) |> abs < @limit)) do
               grouped = %{true: before_limit} ->
-                {:ok, before_limit, grouped |> Map.get(false, [])}
+                {:ok, before_limit |> sort, grouped |> Map.get(false, []) |> sort}
 
               %{false: after_limit} ->
-                {:ok, after_limit}
+                {:ok, after_limit |> sort}
             end
 
           error = {:error, reason} when reason in [:no_availability] ->
@@ -39,6 +39,8 @@ defmodule Vaccins.LocationStore do
         end
       end
     end
+
+    defp sort(list) when is_list(list), do: list |> Enum.sort_by(& &1, {:asc, DateTime})
   end
 
   defmodule LocationRaw do

+ 5 - 2
lib/vaccins_web/live/location_component.ex

@@ -74,14 +74,17 @@ defmodule VaccinsWeb.LocationComponent do
 
   defp integrate_availabilities(assigns = %{availabilities: {:ok, after_slots}})
        when is_list(after_slots),
-       do: assigns |> Map.put(:has_availabilities, true) |> Map.put(:slots_after, after_slots)
+       do:
+         assigns
+         |> Map.put(:has_availabilities, true)
+         |> Map.put(:slots_after, after_slots |> Enum.take(5))
 
   defp integrate_availabilities(assigns = %{availabilities: {:ok, before_slots, after_slots}})
        when is_list(before_slots),
        do:
          assigns
          |> Map.put(:has_availabilities, true)
-         |> Map.put(:slots_after, after_slots)
+         |> Map.put(:slots_after, after_slots |> Enum.take(5))
          |> Map.put(:slots_before, before_slots)
 
   defp integrate_availabilities(assigns), do: assigns