Skip to content

Commit 674572d

Browse files
feat: socials component (#538)
1 parent 4fedc1f commit 674572d

File tree

5 files changed

+60
-24
lines changed

5 files changed

+60
-24
lines changed

lib/atomic_web/components/sidebar.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ defmodule AtomicWeb.Components.Sidebar do
190190

191191
defp user_image(user) do
192192
if user.profile_picture do
193-
Uploaders.ProfilePicture.url({user, user.profile_picture}, :original)
193+
Uploaders.ProfilePicture.url({user.profile_picture, user}, :original)
194194
else
195195
nil
196196
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
defmodule AtomicWeb.Components.Socials do
2+
@moduledoc false
3+
4+
use AtomicWeb, :component
5+
6+
attr :entity, :map, required: true
7+
8+
def socials(assigns) do
9+
assigns = assign(assigns, :socials_with_values, get_social_values(assigns.entity))
10+
11+
~H"""
12+
<div class="grid grid-cols-2 gap-2 md:flex md:flex-row">
13+
<%= for {social, icon, url_base, social_value} <- @socials_with_values do %>
14+
<%= if social_value do %>
15+
<div class="flex flex-row items-center gap-x-2">
16+
<img src={"/images/" <> icon} class="h-5 w-5" alt={Atom.to_string(social)} />
17+
<.link class="capitalize text-blue-500" target="_blank" href={url_base <> social_value}>
18+
<%= Atom.to_string(social) %>
19+
</.link>
20+
</div>
21+
<% end %>
22+
<% end %>
23+
</div>
24+
"""
25+
end
26+
27+
defp get_social_values(entity) do
28+
get_socials()
29+
|> Enum.map(fn {social, icon, url_base} ->
30+
social_value = Map.get(entity, social)
31+
{social, icon, url_base, social_value}
32+
end)
33+
end
34+
35+
def get_socials do
36+
[
37+
{:tiktok, "tiktok.svg", "https://tiktok.com/"},
38+
{:instagram, "instagram.svg", "https://instagram.com/"},
39+
{:facebook, "facebook.svg", "https://facebook.com/"},
40+
{:x, "x.svg", "https://x.com/"}
41+
]
42+
end
43+
end

lib/atomic_web/live/partner_live/form_component.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ defmodule AtomicWeb.PartnerLive.FormComponent do
2525
<.field field={socials_form[:instagram]} type="text" class="w-full" />
2626
<.field field={socials_form[:facebook]} type="text" class="w-full" />
2727
<.field field={socials_form[:x]} type="text" class="w-full" />
28+
<.field field={socials_form[:tiktok]} type="text" class="w-full" />
2829
<.field field={socials_form[:website]} type="text" class="w-full" />
2930
</.inputs_for>
3031
</div>

lib/atomic_web/live/partner_live/show.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule AtomicWeb.PartnerLive.Show do
22
use AtomicWeb, :live_view
33

4-
import AtomicWeb.Components.Avatar
4+
import AtomicWeb.Components.{Avatar, Socials}
55

66
alias Atomic.Accounts
77
alias Atomic.Organizations

lib/atomic_web/live/partner_live/show.html.heex

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,28 @@
2121
</h1>
2222
</div>
2323
<%= if @partner.location do %>
24+
<!-- Location -->
2425
<div class="flex flex-row items-center gap-x-1 text-md leading-6">
25-
<.icon name="hero-map-pin" class="size-5 text-zinc-400" />
26-
<.link class="text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %></.link>
26+
<.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" />
27+
<.link class="text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}>
28+
<%= @partner.location.name %>
29+
</.link>
2730
</div>
2831
<% end %>
32+
2933
<%= if @partner.socials do %>
30-
<div class="grid grid-cols-2 grid-rows-3 lg:flex lg:flex-row lg:gap-x-4">
34+
<!-- Socials and Website -->
35+
<div class="flex flex-wrap gap-x-4 items-center mt-2">
36+
<!-- Website -->
3137
<%= if @partner.socials.website do %>
32-
<div class="flex flex-row items-center gap-x-1 ">
33-
<.icon name="hero-globe-alt" class="size-5 text-zinc-400" />
38+
<div class="flex flex-row items-center gap-x-1">
39+
<.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" />
3440
<.link class="text-blue-500" href={@partner.socials.website}>Website</.link>
3541
</div>
3642
<% end %>
37-
<%= if @partner.socials.instagram do %>
38-
<div class="flex flex-row items-center gap-x-1 gap-y-0 sm:gap-y-2">
39-
<img src="/images/instagram.svg" class="size-5" alt="Instagram" />
40-
<.link class="text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram</.link>
41-
</div>
42-
<% end %>
43-
<%= if @partner.socials.facebook do %>
44-
<div class="flex flex-row items-center gap-x-1 gap-y-0 sm:gap-y-2">
45-
<img src="/images/facebook.svg" class="size-5" alt="Facebook" />
46-
<.link class="text-blue-500" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook</.link>
47-
</div>
48-
<% end %>
49-
<%= if @partner.socials.x do %>
50-
<div class="flex flex-row items-center gap-x-1 gap-y-0 sm:gap-y-2">
51-
<img src="/images/x.svg" class="size-5" alt="X" />
52-
<.link class="text-blue-500" href={"https://x.com/" <> @partner.socials.x}>X</.link>
53-
</div>
43+
<!-- Socials -->
44+
<%= if @partner.socials do %>
45+
<.socials entity={@partner.socials} />
5446
<% end %>
5547
</div>
5648
<% end %>

0 commit comments

Comments
 (0)