File tree 2 files changed +34
-2
lines changed
2 files changed +34
-2
lines changed Original file line number Diff line number Diff line change 1
1
defmodule ExRssWeb.FeedLive.Index do
2
2
use ExRssWeb , :live_view
3
3
4
- alias ExRss.User
4
+ alias ExRss . { Entry , Feed , Repo , User }
5
5
6
6
def mount (
7
7
_params ,
@@ -12,12 +12,44 @@ defmodule ExRssWeb.FeedLive.Index do
12
12
13
13
socket =
14
14
socket
15
+ |> assign ( :current_user , current_user )
15
16
|> assign ( :api_token , api_token )
16
17
|> assign ( :oldest_unread_entry , oldest_unread_entry )
17
18
18
19
{ :ok , socket }
19
20
end
20
21
22
+ def handle_event ( "mark_as_read" , % { "entry-id" => entry_id } , socket ) do
23
+ changeset =
24
+ Repo . get! ( User , socket . assigns . current_user . id )
25
+ |> Ecto . assoc ( :entries )
26
+ |> Repo . get! ( entry_id )
27
+ |> Entry . changeset ( % { "read" => true } )
28
+
29
+ case Repo . update ( changeset ) do
30
+ { :ok , entry } ->
31
+ updated_feed = Repo . get! ( Feed , entry . feed_id )
32
+
33
+ update_broadcaster =
34
+ Application . get_env ( :ex_rss , :update_broadcaster , ExRss.Crawler.UpdateBroadcaster )
35
+
36
+ Task.Supervisor . start_child (
37
+ ExRss.TaskSupervisor ,
38
+ update_broadcaster ,
39
+ :broadcast_update ,
40
+ [ updated_feed ]
41
+ )
42
+
43
+ oldest_unread_entry =
44
+ User . oldest_unread_entry ( socket . assigns . current_user . id )
45
+
46
+ { :noreply , assign ( socket , :oldest_unread_entry , oldest_unread_entry ) }
47
+
48
+ _ ->
49
+ { :noreply , socket }
50
+ end
51
+ end
52
+
21
53
# 2024-12-03
22
54
# This `use` is needed for `content_tag` to be available in `elm_module`.
23
55
use Phoenix.HTML
Original file line number Diff line number Diff line change 12
12
< a href = { @ oldest_unread_entry . url } target = "_blank " aria-label = { "View entry #{ @ oldest_unread_entry . title } " } >
13
13
< . icon name = "hero-arrow-top-right-on-square-solid " />
14
14
</ a >
15
- < button aria-label = "Mark as read " >
15
+ < button aria-label = "Mark as read " phx-click = " mark_as_read " phx-value-entry-id = { @ oldest_unread_entry . id } >
16
16
< . icon name = "hero-check-circle-solid " />
17
17
</ button >
18
18
</ div >
You can’t perform that action at this time.
0 commit comments