Skip to content

Commit affbd24

Browse files
committed
update phoenix and switch to streams
1 parent 7fb1f11 commit affbd24

4 files changed

Lines changed: 60 additions & 47 deletions

File tree

lib/chuko_web/components/components.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule ChukoWeb.Components do
44
def item(assigns) do
55
~H"""
66
<div
7-
id={"item-#{@item.id}"}
7+
id={@id}
88
class="relative flex flex-col overflow-hidden bg-white border border-gray-200 rounded-lg shadow-xl group"
99
>
1010
<div class="overflow-hidden rounded-lg shadow-md aspect-w-3 h-96">

lib/chuko_web/live/home_live.ex

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ defmodule ChukoWeb.HomeLive do
3939
<.loading />
4040
<% @query == "" && @items == [] -> %>
4141
<div class="py-16 text-center">
42-
try searching something 🕵️
42+
search something 🕵️
4343
</div>
4444
<% @query != "" && @items == [] -> %>
4545
<div class="py-16 text-center">
@@ -61,18 +61,19 @@ defmodule ChukoWeb.HomeLive do
6161
</select>
6262
</form>
6363
</div>
64+
<% :otherwise -> %>
6465
<%!-- Actual product container --%>
65-
<%= if @sorting do %>
66-
<.loading />
67-
<% else %>
66+
<%= unless @sorting do %>
6867
<div
6968
id="infinite-scroll-body"
70-
phx-update="append"
69+
phx-update="stream"
7170
class="grid grid-cols-1 gap-y-4 sm:grid-cols-2 sm:gap-x-6 sm:gap-y-10 lg:grid-cols-3 lg:gap-x-8"
7271
>
73-
<.item :for={item <- @page_items} item={item} />
72+
<.item :for={{id, item} <- @streams.page_items} item={item} id={id} />
7473
</div>
7574
<div id="infinite-scroll-marker" phx-hook="InfiniteScroll" data-page={@page}></div>
75+
<% else %>
76+
<.loading />
7677
<% end %>
7778
<% end %>
7879
</div>
@@ -83,20 +84,22 @@ defmodule ChukoWeb.HomeLive do
8384
@impl true
8485
def mount(_params, _session, socket) do
8586
socket =
86-
assign(socket,
87+
socket
88+
|> assign(
8789
query: "",
8890
items: [],
8991
page: 1,
9092
pages: 0,
9193
searching: false,
9294
sorting: false
9395
)
96+
|> stream(:page_items, [], dom_id: &"item-#{&1.id}")
9497

9598
if connected?(socket) do
9699
Phoenix.PubSub.subscribe(Chuko.PubSub, "session_#{socket.id}")
97100
end
98101

99-
{:ok, socket, temporary_assigns: [page_items: []]}
102+
{:ok, socket}
100103
end
101104

102105
@impl true
@@ -117,11 +120,12 @@ defmodule ChukoWeb.HomeLive do
117120
)
118121
when page < pages do
119122
socket =
120-
assign(socket,
123+
socket
124+
|> assign(
121125
items: items,
122-
page_items: Enum.at(items, page, []),
123126
page: page + 1
124127
)
128+
|> insert_page_items(Enum.at(items, page, []))
125129

126130
{:noreply, socket}
127131
end
@@ -170,12 +174,13 @@ defmodule ChukoWeb.HomeLive do
170174
@impl true
171175
def handle_info({:items_sorted, %{items: items}}, socket) do
172176
socket =
173-
assign(socket,
177+
socket
178+
|> assign(
174179
items: items,
175-
page_items: Enum.at(items, 0, []),
176180
page: 1,
177181
sorting: false
178182
)
183+
|> insert_page_items(Enum.at(items, 0, []))
179184

180185
{:noreply, socket}
181186
end
@@ -188,13 +193,15 @@ defmodule ChukoWeb.HomeLive do
188193
|> Enum.chunk_every(9)
189194

190195
socket =
191-
assign(socket,
196+
socket
197+
|> assign(
192198
items: items,
193199
page_items: Enum.at(items, 0, []),
194200
page: 1,
195201
pages: Enum.count(items),
196202
searching: false
197203
)
204+
|> insert_page_items(Enum.at(items, 0, []))
198205

199206
{:noreply, socket}
200207
end
@@ -212,4 +219,8 @@ defmodule ChukoWeb.HomeLive do
212219

213220
assign(socket, query: query, page_title: query, searching: true)
214221
end
222+
223+
defp insert_page_items(socket, pages) do
224+
Enum.reduce(pages, socket, &stream_insert(&2, :page_items, &1))
225+
end
215226
end

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ defmodule Chuko.MixProject do
3232
# Type `mix help deps` for examples and options.
3333
defp deps do
3434
[
35-
{:phoenix, "~> 1.7.0-rc.0", override: true},
35+
{:phoenix, "~> 1.7.2", override: true},
3636
{:phoenix_ecto, "~> 4.4"},
3737
{:ecto_sql, "~> 3.6"},
3838
{:ecto_sqlite3, ">= 0.0.0"},

0 commit comments

Comments
 (0)