From e62a3b2082f0568783424fa924e53e50293b3866 Mon Sep 17 00:00:00 2001 From: FilipeR13 Date: Wed, 20 Mar 2024 22:19:21 +0000 Subject: [PATCH 1/9] feat: started popover component --- lib/atomic_web/components/activity.ex | 4 ++- lib/atomic_web/components/popover.ex | 43 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 lib/atomic_web/components/popover.ex diff --git a/lib/atomic_web/components/activity.ex b/lib/atomic_web/components/activity.ex index 84ee53e61..7dca7fbcf 100644 --- a/lib/atomic_web/components/activity.ex +++ b/lib/atomic_web/components/activity.ex @@ -5,6 +5,7 @@ defmodule AtomicWeb.Components.Activity do use AtomicWeb, :component import AtomicWeb.Components.Avatar + import AtomicWeb.Components.Popover alias Atomic.Activities.Activity @@ -14,9 +15,10 @@ defmodule AtomicWeb.Components.Activity do ~H"""
-
+
<.avatar name={@activity.organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@activity.organization.logo, @activity.organization}, :original)} />
+ <.popover type={:organization} organization={@activity.organization}/>
<.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @activity.organization.id)}> diff --git a/lib/atomic_web/components/popover.ex b/lib/atomic_web/components/popover.ex new file mode 100644 index 000000000..41597c1de --- /dev/null +++ b/lib/atomic_web/components/popover.ex @@ -0,0 +1,43 @@ +defmodule AtomicWeb.Components.Popover do + @moduledoc """ + Renders a popover. + """ + + use AtomicWeb, :component + + import AtomicWeb.Components.Avatar + + attr :type, :atom, values: [:user, :organization], default: :user, doc: "The type of entity associated with the avatar." + attr :organization, :map, default: %{}, doc: "The organization to render." + attr :user, :map, default: %{}, doc: "The user to render." + + def popover(assigns) do + ~H""" + + """ + end + + def render_organization_popover(assigns) do + ~H""" +
+
+ <.avatar name={@organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@organization.logo, @organization}, :original)} /> +
+ +
+
+

+ <.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @organization.id)}> + <%= @organization.name %> + +

+

+ <%= @organization.description %> +

+
+
+ """ + end +end From d0770d29551261e151151d0d12f7fc1a1191c761 Mon Sep 17 00:00:00 2001 From: FilipeR13 Date: Thu, 21 Mar 2024 19:28:07 +0000 Subject: [PATCH 2/9] feat: implemented popover --- lib/atomic_web/components/activity.ex | 38 +++++++------- lib/atomic_web/components/announcement.ex | 34 ++++++------ lib/atomic_web/components/popover.ex | 64 ++++++++++++++++------- 3 files changed, 83 insertions(+), 53 deletions(-) diff --git a/lib/atomic_web/components/activity.ex b/lib/atomic_web/components/activity.ex index 7dca7fbcf..88b51c844 100644 --- a/lib/atomic_web/components/activity.ex +++ b/lib/atomic_web/components/activity.ex @@ -4,8 +4,7 @@ defmodule AtomicWeb.Components.Activity do """ use AtomicWeb, :component - import AtomicWeb.Components.Avatar - import AtomicWeb.Components.Popover + import AtomicWeb.Components.{Avatar, Popover} alias Atomic.Activities.Activity @@ -14,23 +13,26 @@ defmodule AtomicWeb.Components.Activity do def activity(assigns) do ~H"""
-
-
- <.avatar name={@activity.organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@activity.organization.logo, @activity.organization}, :original)} /> +
+
+ <.popover type={:organization} organization={@activity.organization} position="position:top"> + <.avatar name={@activity.organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@activity.organization.logo, @activity.organization}, :original)} /> +
- <.popover type={:organization} organization={@activity.organization}/> -
- - <.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @activity.organization.id)}> - - <%= @activity.organization.name %> - - - -

- Published on - -

+
+
+ + <.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @activity.organization.id)}> + + <%= @activity.organization.name %> + + + +

+ Published on + +

+

<%= @activity.title %>

diff --git a/lib/atomic_web/components/announcement.ex b/lib/atomic_web/components/announcement.ex index 78569fe90..21b685924 100644 --- a/lib/atomic_web/components/announcement.ex +++ b/lib/atomic_web/components/announcement.ex @@ -4,29 +4,33 @@ defmodule AtomicWeb.Components.Announcement do """ use AtomicWeb, :component - import AtomicWeb.Components.Avatar + import AtomicWeb.Components.{Avatar, Popover} attr :announcement, :map, required: true, doc: "The announcement to render." def announcement(assigns) do ~H"""
-
+
- <.avatar name={@announcement.organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@announcement.organization.logo, @announcement.organization}, :original)} /> + <.popover type={:organization} organization={@announcement.organization} position="position:top"> + <.avatar name={@announcement.organization.name} color={:light_gray} class="!h-10 !w-10" size={:xs} type={:organization} src={Uploaders.Logo.url({@announcement.organization.logo, @announcement.organization}, :original)} /> +
-
- - <.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @announcement.organization.id)} class="hover:underline focus:outline-none"> -

- <%= @announcement.organization.name %> -

- -
-

- Published on - -

+
+
+ + <.link navigate={Routes.organization_show_path(AtomicWeb.Endpoint, :show, @announcement.organization.id)} class="hover:underline focus:outline-none"> +

+ <%= @announcement.organization.name %> +

+ +
+

+ Published on + +

+

<%= @announcement.title %>

diff --git a/lib/atomic_web/components/popover.ex b/lib/atomic_web/components/popover.ex index 41597c1de..21e298162 100644 --- a/lib/atomic_web/components/popover.ex +++ b/lib/atomic_web/components/popover.ex @@ -7,37 +7,61 @@ defmodule AtomicWeb.Components.Popover do import AtomicWeb.Components.Avatar - attr :type, :atom, values: [:user, :organization], default: :user, doc: "The type of entity associated with the avatar." + attr :type, :atom, + values: [:user, :organization], + default: :user, + doc: "The type of entity associated with the avatar." + + attr :position, :string, required: true attr :organization, :map, default: %{}, doc: "The organization to render." attr :user, :map, default: %{}, doc: "The user to render." + slot :inner_block def popover(assigns) do ~H""" -