Is there a way I can implement a live view stream for things that have been grouped_by? When I try it, it’s leaving things that I thought would have been removed since it’s within the dive. (ie: the hr tag)
I’ve done it like this
def render(assigns) do
assigns = assign_new(assigns, :current_admin, fn -> nil end)
~H"""
<div phx-update="stream" id="event-list-stream-wrapper">
<div :for={{id, {date, event_list}} <- @events} id={id} class="space-y-1">
<h2 class="pl-2 mb-2 text-lg font-bold bg-orange-50">
<%= Calendar.strftime(date, "%a, %d ") %>
</h2>
<div :for={event <- event_list} id={event.id} class="pb-2 pl-1 space-y-2">
<% last_event_id = List.last(event_list).id %>
<.live_component
module={ClimateCollectiveWeb.EventLive.EventComponent}
id={event.id}
event={event}
current_admin={@current_admin}
/>
<hr :if={event.id != last_event_id} />
</div>
</div>
</div>
"""
end
Logic for separating events
def separate_event_stream_by_date(events) do
Enum.group_by(events, fn event ->
DateTime.to_date(event.starts_at)
end)
|> Enum.sort_by(fn {date, _} -> date end, {:asc, Date})
|> Enum.to_list()
end
defp assign_events(socket, events) do
separated_events = Event.separate_event_stream_by_date(events)
stream(socket, :events, separated_events, reset: true)
end
Thank you!