From dc6d267245273d806baa870e7a7b3a8259ffa7e2 Mon Sep 17 00:00:00 2001
From: Alex Lion <dev@alexandrelion.com>
Date: Mon, 30 Dec 2024 20:45:12 -0500
Subject: [PATCH] Add hyperlinks in messages

---
 CHANGELOG.md                                    |  2 ++
 lib/claper_web/helpers.ex                       | 17 +++++++++++++++++
 .../event_live/manageable_post_component.ex     |  2 +-
 .../live/event_live/post_component.ex           |  8 +++-----
 4 files changed, 23 insertions(+), 6 deletions(-)
 create mode 100644 lib/claper_web/helpers.ex

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6cb91607..9a6c31d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@
 ### Fixes and improvements
 
 - Improve performance of presentation to load slides faster
+- Fix manager layout on small screens
+- Add clickable hyperlinks in messages
 
 ### v.2.3.0
 
diff --git a/lib/claper_web/helpers.ex b/lib/claper_web/helpers.ex
new file mode 100644
index 00000000..787e4d9e
--- /dev/null
+++ b/lib/claper_web/helpers.ex
@@ -0,0 +1,17 @@
+defmodule ClaperWeb.Helpers do
+  def format_body(body) do
+    url_regex = ~r/(https?:\/\/[^\s]+)/
+
+    body
+    |> String.split(url_regex, include_captures: true)
+    |> Enum.map(fn
+      "http" <> _rest = url ->
+        Phoenix.HTML.raw(
+          ~s(<a href="#{url}" target="_blank" class="cursor-pointer text-primary-500 hover:underline font-medium">#{url}</a>)
+        )
+
+      text ->
+        text
+    end)
+  end
+end
diff --git a/lib/claper_web/live/event_live/manageable_post_component.ex b/lib/claper_web/live/event_live/manageable_post_component.ex
index a41c3c35..d5256c8d 100644
--- a/lib/claper_web/live/event_live/manageable_post_component.ex
+++ b/lib/claper_web/live/event_live/manageable_post_component.ex
@@ -119,7 +119,7 @@ defmodule ClaperWeb.EventLive.ManageablePostComponent do
           <% end %>
 
           <p class="text-xl">
-            <%= @post.body %>
+            <%= ClaperWeb.Helpers.format_body(@post.body) %>
           </p>
         </div>
       </div>
diff --git a/lib/claper_web/live/event_live/post_component.ex b/lib/claper_web/live/event_live/post_component.ex
index b38dc442..3d54dc3a 100644
--- a/lib/claper_web/live/event_live/post_component.ex
+++ b/lib/claper_web/live/event_live/post_component.ex
@@ -76,7 +76,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
               ) %>
             </span>
           </div>
-          <p><%= @post.body %></p>
+          <p><%= ClaperWeb.Helpers.format_body(@post.body) %></p>
 
           <div class="flex h-6 text-sm float-right text-white space-x-2">
             <%= if @post.like_count > 0 do %>
@@ -176,7 +176,7 @@ defmodule ClaperWeb.EventLive.PostComponent do
             </div>
           <% end %>
 
-          <p><%= @post.body %></p>
+          <p><%= ClaperWeb.Helpers.format_body(@post.body) %></p>
 
           <div class="flex h-6 text-xs float-right space-x-2">
             <%= if @reaction_enabled do %>
@@ -273,7 +273,5 @@ defmodule ClaperWeb.EventLive.PostComponent do
          end))
   end
 
-  defp pinned?(post) do
-    post.pinned == true
-  end
+  defp pinned?(post), do: post.pinned
 end