From dadd8d1d144f150aeff050da9aa1781d77ed1b8f Mon Sep 17 00:00:00 2001 From: faria-s Date: Thu, 26 Sep 2024 18:28:21 +0100 Subject: [PATCH 01/20] feat: partners show pages --- lib/atomic/organizations/partner.ex | 2 + .../partner_live/components/partner_card.ex | 43 ++++ lib/atomic_web/live/partner_live/show.ex | 8 +- .../live/partner_live/show.html.heex | 192 ++++++++++-------- .../20221123000537_create_partners.exs | 2 + 5 files changed, 162 insertions(+), 85 deletions(-) create mode 100644 lib/atomic_web/live/partner_live/components/partner_card.ex diff --git a/lib/atomic/organizations/partner.ex b/lib/atomic/organizations/partner.ex index 1da523918..17a965143 100644 --- a/lib/atomic/organizations/partner.ex +++ b/lib/atomic/organizations/partner.ex @@ -27,6 +27,8 @@ defmodule Atomic.Organizations.Partner do field :description, :string field :notes, :string + field :banner, Atomic.Uploaders.Banner.Type + field :benefits, :string field :archived, :boolean, default: false field :image, Uploaders.PartnerImage.Type diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex new file mode 100644 index 000000000..bb5ff8290 --- /dev/null +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -0,0 +1,43 @@ +defmodule AtomicWeb.PartnerLive.Components.PartnerCard do + @moduledoc false + use AtomicWeb, :component + + import AtomicWeb.Components.{Avatar, Gradient} + + def partner_card(assigns) do + ~H""" +
  • +
    + <%= if @partner.banner do %> + + <% else %> + <.gradient seed={@partner.id} class="rounded-t-lg" /> + <% end %> +
    +
    +
    + <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:sm} /> +
    +
    +

    <%= partner.name %>

    + <%= if partner.location do %> +
    + <.icon name={:map_pin} class="h-4 w-4 my-1 text-zinc-400" /> +

    <%= partner.location.name %>

    +
    + <% end %> +

    + <%= Enum.map(String.split(partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 100 do %> + <%= phrase %>
    + <% else %> + <%= String.slice(phrase, 0..100) <> "..." %>
    + <% end %> + <% end) %> +

    +
    +
    +
  • + """ + end +end diff --git a/lib/atomic_web/live/partner_live/show.ex b/lib/atomic_web/live/partner_live/show.ex index c2718ddd3..871860b44 100644 --- a/lib/atomic_web/live/partner_live/show.ex +++ b/lib/atomic_web/live/partner_live/show.ex @@ -1,7 +1,7 @@ defmodule AtomicWeb.PartnerLive.Show do use AtomicWeb, :live_view - import AtomicWeb.Components.Avatar + import AtomicWeb.Components.{Avatar,Gradient,Tabs} alias Atomic.Accounts alias Atomic.Organizations @@ -13,7 +13,7 @@ defmodule AtomicWeb.PartnerLive.Show do end @impl true - def handle_params(%{"organization_id" => organization_id, "id" => id}, _, socket) do + def handle_params(params = %{"organization_id" => organization_id, "id" => id}, _, socket) do organization = Organizations.get_organization!(organization_id) partner = Partners.get_partner!(id) @@ -21,6 +21,7 @@ defmodule AtomicWeb.PartnerLive.Show do socket |> assign(:page_title, partner.name) |> assign(:current_page, :partners) + |> assign(:current_tab, current_tab(socket, params)) |> assign(:organization, organization) |> assign(:partner, partner) |> assign( @@ -30,6 +31,9 @@ defmodule AtomicWeb.PartnerLive.Show do |> assign(:has_permissions?, has_permissions?(socket, organization_id))} end + defp current_tab(_socket, params) when is_map_key(params, "tab"), do: params["tab"] + defp current_tab(_socket, _params), do: "benefits" + defp has_permissions?(socket, _organization_id) when not socket.assigns.is_authenticated?, do: false diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 1f3815899..c6a5d0f16 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -1,4 +1,13 @@ -<.page title="Partners"> + +
    + <%= if @partner.banner do %> + + <% else %> + <.gradient seed={@partner.id} class="object-cover" /> + <% end %> +
    +<.page title=""> + <:actions> <%= if @has_permissions? do %>
    @@ -9,108 +18,125 @@ <% end %>
    -
    -
    +
    +
    <.avatar color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
    -
    +
    -

    +

    <%= @partner.name %>

    +
    <%= if @partner.location do %>
    <.icon name={:map_pin} class="h-5 w-5 text-zinc-400" /> - <.link class="text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %> -
    - <% end %> - <%= if @partner.socials do %> -
    - <%= if @partner.socials.website do %> -
    - <.icon name={:globe_alt} class="h-5 w-5 text-zinc-400" /> - <.link class="text-blue-500" href={@partner.socials.website}>Website -
    - <% end %> - <%= if @partner.socials.instagram do %> -
    - Instagram - <.link class="text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram -
    - <% end %> - <%= if @partner.socials.facebook do %> -
    - Facebook - <.link class="text-blue-500" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook -
    - <% end %> - <%= if @partner.socials.x do %> -
    - X - <.link class="text-blue-500" href={"https://x.com/" <> @partner.socials.x}>X -
    - <% end %> + <.link class="text-blue-500 text-sm" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %>
    <% end %> -
    -
    -
    -
    -
    - <.icon name={:clock} class="h-5 w-5 mb-2" /> -

    Overview

    -
    - - <%= Enum.map(String.split(@partner.description, "\n"), fn phrase -> %> - <%= phrase %> - <% end) %> - -
    -
    -
    - <.icon name={:signal} class="h-5 w-5 mb-2" /> -

    Benefits

    + <%= if @partner.socials do %> +
    + <%= if @partner.socials.website do %> +
    + <.icon name={:globe_alt} class="h-5 w-5 text-zinc-400" /> + <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website +
    + <% end %> + <%= if @partner.socials.instagram do %> +
    + Instagram + <.link class="text-blue-500 text-sm " href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram +
    + <% end %> + <%= if @partner.socials.facebook do %> +
    + Facebook + <.link class="text-blue-500 text-sm" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook +
    + <% end %> + <%= if @partner.socials.x do %> +
    + X + <.link class="text-blue-500 text-sm" href={"https://x.com/" <> @partner.socials.x}>X +
    + <% end %> +
    + <% end %>
    - - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 300 do %> - <%= phrase %> - <% else %> - <%= String.slice(phrase, 0..300) %> - <% end %> - <% end) %> -
    - <%= if @partners do %> -
    -
    - <.icon name={:star} class="h-5 w-5 mb-2" /> -

    Related Partners

    +
    + + <.tabs class="mt-2 overflow-scroll scrollbar-hide flex px-4 sm:px-6 lg:px-8"> + <.link patch="?tab=benefits" replace={false}> + <.tab id="benefits-tab" active={@current_tab == "benefits"}> + <.icon name={:signal} class="size-5 mr-2" /> + <%= gettext("Benefits") %> + + + <.link patch="?tab=about" replace={false}> + <.tab id="about-tab" active={@current_tab == "about"}> + <.icon name={:information_circle} class="size-5 mr-2" /> + <%= gettext("About") %> + + + + +
    +
    + + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 300 do %> + <%= phrase %> + <% else %> + <%= String.slice(phrase, 0..300) %> + <% end %> + <% end) %> +
    -
    - <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> -
    - <.link href={Routes.partner_show_path(@socket, :show, @organization, partner)}> -
    - <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> -

    <%= partner.name %>

    -
    - <%= if partner.location do %> -
    - <.icon name={:map_pin} class="h-5 w-5 text-zinc-400" /> - <%= partner.location.name %> -
    + <%= if @partners do %> +
    +
    + <.icon name={:star} class="h-5 w-5 mb-2" /> +

    Related Partners

    +
    +
    + <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> + <.link href={Routes.partner_show_path(@socket, :show, @organization, partner)}> +
  • +
    + <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> +
    +
    +

    <%= partner.name %>

    + <%= if partner.location do %> +
    + <.icon name={:map_pin} class="h-4 w-4 text-zinc-400 my-1" /> + <%= partner.location.name %> +
    + <% end %> +

    + <%= partner.description %> +

    +
    +
  • + <% end %> - <%= partner.description %> - +
    <% end %> +
    + +
    +
    + + <%= Enum.map(String.split(@partner.description, "\n"), fn phrase -> %> + <%= phrase %> + <% end) %> +
    - <% end %> -
    diff --git a/priv/repo/migrations/20221123000537_create_partners.exs b/priv/repo/migrations/20221123000537_create_partners.exs index 68470bf55..242660aa0 100644 --- a/priv/repo/migrations/20221123000537_create_partners.exs +++ b/priv/repo/migrations/20221123000537_create_partners.exs @@ -16,6 +16,8 @@ defmodule Atomic.Repo.Migrations.CreatePartners do add :location, :map add :socials, :map + add :banner, :string + add :organization_id, references(:organizations, on_delete: :delete_all, type: :binary_id) timestamps() From d22fb23b1484411d23a9769dae93c8d9aa8d057e Mon Sep 17 00:00:00 2001 From: faria-s Date: Thu, 26 Sep 2024 19:39:58 +0100 Subject: [PATCH 02/20] fix: partner_card --- .../live/partner_live/components/partner_card.ex | 12 +++++++----- lib/atomic_web/live/partner_live/index.ex | 5 +++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index bb5ff8290..94e04fab4 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -4,6 +4,8 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do import AtomicWeb.Components.{Avatar, Gradient} + attr :partner, :map, required: true + def partner_card(assigns) do ~H"""
  • @@ -16,18 +18,18 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do
  • - <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:sm} /> + <.avatar color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:sm} />
    -

    <%= partner.name %>

    - <%= if partner.location do %> +

    <%= @partner.name %>

    + <%= if @partner.location do %>
    <.icon name={:map_pin} class="h-4 w-4 my-1 text-zinc-400" /> -

    <%= partner.location.name %>

    +

    <%= @partner.location.name %>

    <% end %>

    - <%= Enum.map(String.split(partner.benefits, "\n"), fn phrase -> %> + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> <%= if String.length(phrase) < 100 do %> <%= phrase %>
    <% else %> diff --git a/lib/atomic_web/live/partner_live/index.ex b/lib/atomic_web/live/partner_live/index.ex index 1af444675..b68e70c5d 100644 --- a/lib/atomic_web/live/partner_live/index.ex +++ b/lib/atomic_web/live/partner_live/index.ex @@ -1,7 +1,8 @@ defmodule AtomicWeb.PartnerLive.Index do + import AtomicWeb.PartnerLive.Components.PartnerCard use AtomicWeb, :live_view - import AtomicWeb.Components.{Avatar, Button, Empty, Pagination, Tabs} + import AtomicWeb.Components.{Avatar,Gradient, Button, Empty, Pagination, Tabs} alias Atomic.Accounts alias Atomic.Organizations alias Atomic.Partners @@ -12,7 +13,7 @@ defmodule AtomicWeb.PartnerLive.Index do end @impl true - def handle_params(%{"organization_id" => organization_id} = params, _, socket) do + def handle_params(%{"organization_id" => organization_id } = params, _, socket) do organization = Organizations.get_organization!(organization_id) {:noreply, From 707e2adcbee9d65f0ebbe08fb5d0a5193bf66123 Mon Sep 17 00:00:00 2001 From: faria-s Date: Thu, 14 Nov 2024 11:23:19 +0000 Subject: [PATCH 03/20] refactor: partners index page --- .../partner_live/components/partner_card.ex | 46 +++++++++---------- .../live/partner_live/index.html.heex | 30 ++---------- 2 files changed, 26 insertions(+), 50 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index 94e04fab4..a1b77ded3 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -8,35 +8,35 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do def partner_card(assigns) do ~H""" -

  • -
    - <%= if @partner.banner do %> - - <% else %> +
  • +
    +
    <.gradient seed={@partner.id} class="rounded-t-lg" /> - <% end %> -
    -
    -
    - <.avatar color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:sm} /> +
    +
    + <.avatar color={:light_gray} name={@partner.name} class="size-28 object-cover" src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:sm} />
    -
    -

    <%= @partner.name %>

    +
    +
    +
    +

    <%= @partner.name %>

    <%= if @partner.location do %> -
    +
    <.icon name={:map_pin} class="h-4 w-4 my-1 text-zinc-400" /> -

    <%= @partner.location.name %>

    +

    <%= @partner.location.name %>

    <% end %> -

    - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 100 do %> - <%= phrase %>
    - <% else %> - <%= String.slice(phrase, 0..100) <> "..." %>
    - <% end %> - <% end) %> -

    +
    +

    + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 75 do %> + <%= phrase %>
    + <% else %> + <%= String.slice(phrase, 0..75) <> "..." %>
    + <% end %> + <% end) %> +

    +
  • diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index 73d31306b..d545f9d24 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -33,34 +33,10 @@ <.empty_state url={Routes.partner_edit_path(@socket, :new, @organization)} placeholder="partnership" />
    <% else %> -
      +
        <%= for partner <- @partners do %> - <.link navigate={Routes.partner_show_path(@socket, :show, @organization, partner)} class="block hover:bg-zinc-50"> -
      • -
        -
        - <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:sm} /> -
        -
        -

        <%= partner.name %>

        - <%= if partner.location do %> -
        - <.icon name={:map_pin} class="h-5 w-5 text-zinc-400" /> -

        <%= partner.location.name %>

        -
        - <% end %> -

        - <%= Enum.map(String.split(partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 150 do %> - <%= phrase %>
        - <% else %> - <%= String.slice(phrase, 0..150) <> "..." %>
        - <% end %> - <% end) %> -

        -
        -
        -
      • + <.link navigate={Routes.partner_show_path(@socket, :show, @organization, partner)} class="block mt-4 hover:bg-zinc-50"> + <.partner_card partner={partner}/> <% end %>
      From 942216f7bf9f9960a291ff0b57604863772feea2 Mon Sep 17 00:00:00 2001 From: faria-s Date: Mon, 25 Nov 2024 23:49:04 +0000 Subject: [PATCH 04/20] fix: router and icons --- lib/atomic_web/components/avatar.ex | 4 +- .../partner_live/components/partner_card.ex | 55 +++++++++++-------- .../live/partner_live/index.html.heex | 2 +- .../live/partner_live/show.html.heex | 25 +++++---- 4 files changed, 47 insertions(+), 39 deletions(-) diff --git a/lib/atomic_web/components/avatar.ex b/lib/atomic_web/components/avatar.ex index 2db005261..c08654728 100644 --- a/lib/atomic_web/components/avatar.ex +++ b/lib/atomic_web/components/avatar.ex @@ -16,7 +16,7 @@ defmodule AtomicWeb.Components.Avatar do doc: "The type of entity associated with the avatar." attr :size, :atom, - values: [:xs, :sm, :md, :lg, :xl], + values: [:xs, :sm, :md, :lg, :xl,:xl], default: :md, doc: "The size of the avatar." @@ -44,7 +44,7 @@ defmodule AtomicWeb.Components.Avatar do ~H""" <%= if @src do %> - + <% else %> <%= if @auto_generate_initials do %> <%= extract_initials(@name) %> diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index a1b77ded3..39a2e176a 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -8,36 +8,43 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do def partner_card(assigns) do ~H""" -
    • -
      -
      +
    • +
      +
      <.gradient seed={@partner.id} class="rounded-t-lg" />
      -
      - <.avatar color={:light_gray} name={@partner.name} class="size-28 object-cover" src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:sm} /> -
      -
      -
      -

      <%= @partner.name %>

      - <%= if @partner.location do %> -
      - <.icon name={:map_pin} class="h-4 w-4 my-1 text-zinc-400" /> -

      <%= @partner.location.name %>

      + +
      +
      +
      + <.avatar color={:light_gray} class="" name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> +
      +
      +
      +

      <%= @partner.name %>

      + +
      - <% end %> -
      -

      - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 75 do %> - <%= phrase %>
      - <% else %> - <%= String.slice(phrase, 0..75) <> "..." %>
      - <% end %> - <% end) %> -

      + <%= if @partner.location do %> +
      + <.icon name="hero-map-pin" class="h-4 w-4 my-1 text-zinc-400" /> +

      <%= @partner.location.name %>

      +
      + <% end %>
      +
      +

      + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 50 do %> + <%= phrase %>
      + <% else %> + <%= String.slice(phrase, 0..50) <> "..." %>
      + <% end %> + <% end) %> +

      +
    • """ diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index 4412c38b9..d7d3333cd 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -35,7 +35,7 @@ <% else %>
        <%= for partner <- @partners do %> - <.link navigate={Routes.partner_show_path(@socket, :show, @organization, partner)} class="block mt-4 hover:bg-zinc-50"> + <.link navigate={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"} class="block hover:bg-zinc-50"> <.partner_card partner={partner}/> <% end %> diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 74029ba08..14f705667 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -11,7 +11,7 @@ <:actions> <%= if @has_permissions? do %>
        - <.button navigate={~p"/organizations/#{@organization}/partners/#{@partner}/edit"} icon="hero-pencil"> + <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> <%= gettext("Edit Partner") %>
        @@ -19,9 +19,9 @@
        -
        +
        - <.avatar color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> + <.avatar class="size-28" color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
        @@ -32,7 +32,7 @@
        <%= if @partner.location do %>
        - <.icon name={:map_pin} class="h-5 w-5 text-zinc-400" /> + <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> <.link class="text-blue-500 text-sm" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %>
        <% end %> @@ -40,7 +40,7 @@
        <%= if @partner.socials.website do %>
        - <.icon name={:globe_alt} class="h-5 w-5 text-zinc-400" /> + <.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" /> <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website
        <% end %> @@ -64,19 +64,20 @@ <% end %>
        <% end %> +
        <.tabs class="mt-2 overflow-scroll scrollbar-hide flex px-4 sm:px-6 lg:px-8"> <.link patch="?tab=benefits" replace={false}> <.tab id="benefits-tab" active={@current_tab == "benefits"}> - <.icon name={:signal} class="size-5 mr-2" /> + <.icon name="hero-signal" class="size-5 mr-2" /> <%= gettext("Benefits") %> <.link patch="?tab=about" replace={false}> <.tab id="about-tab" active={@current_tab == "about"}> - <.icon name={:information_circle} class="size-5 mr-2" /> + <.icon name="hero-information-circle" class="size-5 mr-2" /> <%= gettext("About") %> @@ -97,21 +98,21 @@ <%= if @partners do %>
        - <.icon name={:star} class="h-5 w-5 mb-2" /> + <.icon name="hero-star" class="h-5 w-5 mb-2" />

        Related Partners

        <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> - <.link href={Routes.partner_show_path(@socket, :show, @organization, partner)}> + <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}>
      • - <.avatar color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> + <.avatar class="size-10" color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} />
        -
        +

        <%= partner.name %>

        <%= if partner.location do %>
        - <.icon name={:map_pin} class="h-4 w-4 text-zinc-400 my-1" /> + <.icon name="hero-map-pin" class="h-4 w-4 text-zinc-400 my-1" /> <%= partner.location.name %>
        <% end %> From eb1502f11c315bf9ae04ffbf7b1f85a524fe10a4 Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 26 Nov 2024 11:56:29 +0000 Subject: [PATCH 05/20] fix: avatar color --- lib/atomic_web/live/partner_live/components/partner_card.ex | 2 +- lib/atomic_web/live/partner_live/show.html.heex | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index 39a2e176a..cd90a2797 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -18,7 +18,7 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do
        - <.avatar color={:light_gray} class="" name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> + <.avatar color={:light_zinc} class="" name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
        diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 14f705667..75733cc9c 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -21,7 +21,7 @@
        - <.avatar class="size-28" color={:light_gray} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> + <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
        @@ -106,7 +106,7 @@ <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}>
      • - <.avatar class="size-10" color={:light_gray} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> + <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} />

        <%= partner.name %>

        From d7d57a0ede509a40a121254d6395347899c0215b Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 26 Nov 2024 12:13:42 +0000 Subject: [PATCH 06/20] fix: remove unused components --- lib/atomic_web/live/partner_live/index.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/atomic_web/live/partner_live/index.ex b/lib/atomic_web/live/partner_live/index.ex index b68e70c5d..84fa5206e 100644 --- a/lib/atomic_web/live/partner_live/index.ex +++ b/lib/atomic_web/live/partner_live/index.ex @@ -2,7 +2,7 @@ defmodule AtomicWeb.PartnerLive.Index do import AtomicWeb.PartnerLive.Components.PartnerCard use AtomicWeb, :live_view - import AtomicWeb.Components.{Avatar,Gradient, Button, Empty, Pagination, Tabs} + import AtomicWeb.Components.{Button, Empty, Pagination, Tabs} alias Atomic.Accounts alias Atomic.Organizations alias Atomic.Partners From 7f2057e3761482c58fe35854f708480cacc45c36 Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 26 Nov 2024 15:04:18 +0000 Subject: [PATCH 07/20] fix: code format --- .../partner_live/components/partner_card.ex | 74 ++++----- .../live/partner_live/edit.html.heex | 2 +- lib/atomic_web/live/partner_live/index.ex | 2 +- .../live/partner_live/index.html.heex | 5 +- lib/atomic_web/live/partner_live/show.ex | 2 +- .../live/partner_live/show.html.heex | 156 +++++++++--------- 6 files changed, 120 insertions(+), 121 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index cd90a2797..000bd41c2 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -8,45 +8,45 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do def partner_card(assigns) do ~H""" -
      • -
        -
        - <.gradient seed={@partner.id} class="rounded-t-lg" /> -
        -
        +
      • +
        +
        + <.gradient seed={@partner.id} class="rounded-t-lg" /> +
        +
        -
        -
        -
        - <.avatar color={:light_zinc} class="" name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> -
        -
        -
        -

        <%= @partner.name %>

        - - -
        - <%= if @partner.location do %> -
        - <.icon name="hero-map-pin" class="h-4 w-4 my-1 text-zinc-400" /> -

        <%= @partner.location.name %>

        -
        - <% end %> -
        -
        -
        -

        - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 50 do %> - <%= phrase %>
        - <% else %> - <%= String.slice(phrase, 0..50) <> "..." %>
        - <% end %> - <% end) %> -

        -
        +
        +
        +
        + <.avatar color={:light_zinc} class="" name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} /> +
        +
        +
        +

        <%= @partner.name %>

        + +
        -
      • + <%= if @partner.location do %> +
        + <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> +

        <%= @partner.location.name %>

        +
        + <% end %> +
        +
        +
        +

        + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 50 do %> + <%= phrase %>
        + <% else %> + <%= String.slice(phrase, 0..50) <> "..." %>
        + <% end %> + <% end) %> +

        +
        +
        + """ end end diff --git a/lib/atomic_web/live/partner_live/edit.html.heex b/lib/atomic_web/live/partner_live/edit.html.heex index 91ee4afa8..ca0057cdb 100644 --- a/lib/atomic_web/live/partner_live/edit.html.heex +++ b/lib/atomic_web/live/partner_live/edit.html.heex @@ -26,7 +26,7 @@
        <% end %> -
        +
        <.live_component module={AtomicWeb.PartnerLive.FormComponent} organization={@current_organization} id={@partner.id || :new} title={@page_title} action={@live_action} partner={@partner} return_to={~p"/organizations/#{@current_organization}/partners"} />
        diff --git a/lib/atomic_web/live/partner_live/index.ex b/lib/atomic_web/live/partner_live/index.ex index 84fa5206e..4ff02917b 100644 --- a/lib/atomic_web/live/partner_live/index.ex +++ b/lib/atomic_web/live/partner_live/index.ex @@ -13,7 +13,7 @@ defmodule AtomicWeb.PartnerLive.Index do end @impl true - def handle_params(%{"organization_id" => organization_id } = params, _, socket) do + def handle_params(%{"organization_id" => organization_id} = params, _, socket) do organization = Organizations.get_organization!(organization_id) {:noreply, diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index 973858057..15910f92e 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -33,11 +33,10 @@ <.empty_state url={~p"/organizations/#{@organization}/partners/new"} placeholder="partner" />
        <% else %> -
          +
            <%= for partner <- @partners do %> <.link navigate={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"} class="block hover:bg-zinc-50"> - <.partner_card partner={partner}/> - + <.partner_card partner={partner} /> <% end %>
          diff --git a/lib/atomic_web/live/partner_live/show.ex b/lib/atomic_web/live/partner_live/show.ex index 871860b44..3e185f6b3 100644 --- a/lib/atomic_web/live/partner_live/show.ex +++ b/lib/atomic_web/live/partner_live/show.ex @@ -1,7 +1,7 @@ defmodule AtomicWeb.PartnerLive.Show do use AtomicWeb, :live_view - import AtomicWeb.Components.{Avatar,Gradient,Tabs} + import AtomicWeb.Components.{Avatar, Gradient, Tabs} alias Atomic.Accounts alias Atomic.Organizations diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 765f34f83..b6cd94b2c 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -1,45 +1,45 @@ -
          - <%= if @partner.banner do %> - - <% else %> - <.gradient seed={@partner.id} class="object-cover" /> - <% end %> -
          +
          + <%= if @partner.banner do %> + + <% else %> + <.gradient seed={@partner.id} class="object-cover" /> + <% end %> +
          <.page title=""> - + <:actions> <%= if @has_permissions? do %> -
          +
          <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> <%= gettext("Edit Partner") %>
          <% end %> -
          -
          -
          -
          +
          +
          +
          +
          <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
          -

          +

          <%= @partner.name %>

          - <%= if @partner.location do %> -
          - <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> - <.link class="text-blue-500 text-sm" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %> -
          - <% end %> + <%= if @partner.location do %> +
          + <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> + <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %> +
          + <% end %> <%= if @partner.socials do %>
          <%= if @partner.socials.website do %> -
          +
          <.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" /> <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website
          @@ -47,28 +47,28 @@ <%= if @partner.socials.instagram do %>
          Instagram - <.link class="text-blue-500 text-sm " href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram + <.link class="text-sm text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram
          <% end %> <%= if @partner.socials.facebook do %>
          Facebook - <.link class="text-blue-500 text-sm" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook + <.link class="text-sm text-blue-500" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook
          <% end %> <%= if @partner.socials.x do %>
          X - <.link class="text-blue-500 text-sm" href={"https://x.com/" <> @partner.socials.x}>X + <.link class="text-sm text-blue-500" href={"https://x.com/" <> @partner.socials.x}>X
          <% end %>
          <% end %> -
          +
          - - <.tabs class="mt-2 overflow-scroll scrollbar-hide flex px-4 sm:px-6 lg:px-8"> + + <.tabs class="scrollbar-hide mt-2 flex overflow-scroll px-4 sm:px-6 lg:px-8"> <.link patch="?tab=benefits" replace={false}> <.tab id="benefits-tab" active={@current_tab == "benefits"}> <.icon name="hero-signal" class="size-5 mr-2" /> @@ -80,62 +80,62 @@ <.icon name="hero-information-circle" class="size-5 mr-2" /> <%= gettext("About") %> - + - -
          -
          - - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 300 do %> - <%= phrase %> - <% else %> - <%= String.slice(phrase, 0..300) %> - <% end %> - <% end) %> - + +
          +
          + + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + <%= if String.length(phrase) < 300 do %> + <%= phrase %> + <% else %> + <%= String.slice(phrase, 0..300) %> + <% end %> + <% end) %> + +
          + <%= if @partners do %> +
          +
          + <.icon name="hero-star" class="mb-2 h-5 w-5" /> +

          Related Partners

          - <%= if @partners do %> -
          -
          - <.icon name="hero-star" class="h-5 w-5 mb-2" /> -

          Related Partners

          -
          -
          - <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> - <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}> -
        • -
          - <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> -
          -
          -

          <%= partner.name %>

          - <%= if partner.location do %> -
          - <.icon name="hero-map-pin" class="h-4 w-4 text-zinc-400 my-1" /> - <%= partner.location.name %> -
          - <% end %> -

          - <%= partner.description %> -

          -
          -
        • - - <% end %> -
          -
          +
          + <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> + <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}> +
        • +
          + <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> +
          +
          +

          <%= partner.name %>

          + <%= if partner.location do %> +
          + <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> + <%= partner.location.name %> +
          + <% end %> +

          + <%= partner.description %> +

          +
          +
        • + <% end %> -
          -
          -
          - - <%= Enum.map(String.split(@partner.description, "\n"), fn phrase -> %> - <%= phrase %> - <% end) %> -
          + <% end %> +
          +
          +
          + + <%= Enum.map(String.split(@partner.description, "\n"), fn phrase -> %> + <%= phrase %> + <% end) %> + +
          +
          From 9feefd71a496256acb5b4ef04954d15567025172 Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 26 Nov 2024 15:10:01 +0000 Subject: [PATCH 08/20] fix: code format --- lib/atomic_web/components/avatar.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/atomic_web/components/avatar.ex b/lib/atomic_web/components/avatar.ex index 563e9c0ad..f6bb00be8 100644 --- a/lib/atomic_web/components/avatar.ex +++ b/lib/atomic_web/components/avatar.ex @@ -16,7 +16,7 @@ defmodule AtomicWeb.Components.Avatar do doc: "The type of entity associated with the avatar." attr :size, :atom, - values: [:xs, :sm, :md, :lg, :xl,:xl], + values: [:xs, :sm, :md, :lg, :xl, :xl], default: :md, doc: "The size of the avatar." @@ -44,7 +44,7 @@ defmodule AtomicWeb.Components.Avatar do ~H""" <%= if @src do %> - + <% else %> <%= if @auto_generate_initials do %> <%= extract_initials(@name) %> From 96dff8dd971204d29b71cb8e53068dafb1c609f8 Mon Sep 17 00:00:00 2001 From: faria-s Date: Mon, 2 Dec 2024 18:50:07 +0000 Subject: [PATCH 09/20] fix: new partner button position --- .../live/partner_live/show.html.heex | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index b6cd94b2c..6148d2d73 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -8,18 +8,9 @@
          <.page title=""> - <:actions> - <%= if @has_permissions? do %> -
          - <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> - <%= gettext("Edit Partner") %> - -
          - <% end %> -
          -
          +
          <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
          @@ -64,6 +55,13 @@ <% end %>
          <% end %> + <%= if @has_permissions? do %> +
          + <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> + <%= gettext("Edit Partner") %> + +
          + <% end %>
          From 52b4be0c1c3dbf32b78d59c3f57e3d6cb14c8d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A9=20Faria?= <147426601+faria-s@users.noreply.github.com> Date: Mon, 2 Dec 2024 18:52:08 +0000 Subject: [PATCH 10/20] Update lib/atomic_web/components/avatar.ex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mário Rodrigues <93675410+MarioRodrigues10@users.noreply.github.com> --- lib/atomic_web/components/avatar.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/atomic_web/components/avatar.ex b/lib/atomic_web/components/avatar.ex index f6bb00be8..74163e109 100644 --- a/lib/atomic_web/components/avatar.ex +++ b/lib/atomic_web/components/avatar.ex @@ -16,7 +16,7 @@ defmodule AtomicWeb.Components.Avatar do doc: "The type of entity associated with the avatar." attr :size, :atom, - values: [:xs, :sm, :md, :lg, :xl, :xl], + values: [:xs, :sm, :md, :lg, :xl], default: :md, doc: "The size of the avatar." From 588ff9e4ed5df4492cc6656d639aecbb618f35f4 Mon Sep 17 00:00:00 2001 From: faria-s Date: Mon, 2 Dec 2024 19:02:47 +0000 Subject: [PATCH 11/20] fix: format show.ex --- lib/atomic_web/live/partner_live/show.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/atomic_web/live/partner_live/show.ex b/lib/atomic_web/live/partner_live/show.ex index 8a3334827..3e185f6b3 100644 --- a/lib/atomic_web/live/partner_live/show.ex +++ b/lib/atomic_web/live/partner_live/show.ex @@ -3,7 +3,6 @@ defmodule AtomicWeb.PartnerLive.Show do import AtomicWeb.Components.{Avatar, Gradient, Tabs} - alias Atomic.Accounts alias Atomic.Organizations alias Atomic.Partners From d223e31bab24a2a5e9c579fa3bd3b7c67b733b47 Mon Sep 17 00:00:00 2001 From: faria-s Date: Mon, 2 Dec 2024 19:10:28 +0000 Subject: [PATCH 12/20] fix: lint show.ex --- lib/atomic_web/live/partner_live/show.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/atomic_web/live/partner_live/show.ex b/lib/atomic_web/live/partner_live/show.ex index 3e185f6b3..5ed17cd2b 100644 --- a/lib/atomic_web/live/partner_live/show.ex +++ b/lib/atomic_web/live/partner_live/show.ex @@ -13,7 +13,7 @@ defmodule AtomicWeb.PartnerLive.Show do end @impl true - def handle_params(params = %{"organization_id" => organization_id, "id" => id}, _, socket) do + def handle_params(%{"organization_id" => organization_id, "id" => id} = params, _, socket) do organization = Organizations.get_organization!(organization_id) partner = Partners.get_partner!(id) From 899f8308433f3371000b26768a3ba8f9f8c54e73 Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 4 Mar 2025 22:44:08 +0000 Subject: [PATCH 13/20] fix: mobile responsive --- .../live/partner_live/index.html.heex | 16 ++-- .../live/partner_live/show.html.heex | 80 ++++++++++--------- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index 15910f92e..a5bc25df0 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -8,9 +8,9 @@
          -
          -
          - <.tabs class="px-4 sm:px-6 lg:px-8"> +
          +
          + <.tabs class="px-4 sm:px-6 lg:px-8 overflow-auto"> <.link patch="?tab=all" replace={false}> <.tab active={@current_tab == "all"}> <%= gettext("Current Partners") %> @@ -27,20 +27,22 @@
          + <%= if @empty? and @has_permissions? do %> -
          +
          <.empty_state url={~p"/organizations/#{@organization}/partners/new"} placeholder="partner" />
          <% else %> -
            +
              <%= for partner <- @partners do %> <.link navigate={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"} class="block hover:bg-zinc-50"> <.partner_card partner={partner} /> <% end %>
            - - <.pagination items={@partners} meta={@meta} params={@params} class="mt-2 flex w-full items-center justify-between" /> + + <.pagination items={@partners} meta={@meta} params={@params} class="mt-2 flex w-full items-center justify-between flex-wrap" /> <% end %> + diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 6148d2d73..e345184b5 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -1,5 +1,5 @@ -
            +
            <%= if @partner.banner do %> <% else %> @@ -8,35 +8,33 @@
            <.page title=""> -
            +
            -
            +
            <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
            -
            -
            -

            - <%= @partner.name %> -

            -
            -
            +
            +

            + <%= @partner.name %> +

            +
            <%= if @partner.location do %> -
            +
            <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %>
            <% end %> <%= if @partner.socials do %> -
            +
            <%= if @partner.socials.website do %> -
            +
            <.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" /> <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website
            <% end %> <%= if @partner.socials.instagram do %> -
            +
            Instagram <.link class="text-sm text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram
            @@ -56,17 +54,20 @@
            <% end %> <%= if @has_permissions? do %> -
            +
            <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> - <%= gettext("Edit Partner") %> +
            <% end %>
            + - <.tabs class="scrollbar-hide mt-2 flex overflow-scroll px-4 sm:px-6 lg:px-8"> + <.tabs class="scrollbar-hide mt-2 flex overflow-auto px-4"> <.link patch="?tab=benefits" replace={false}> <.tab id="benefits-tab" active={@current_tab == "benefits"}> <.icon name="hero-signal" class="size-5 mr-2" /> @@ -80,26 +81,38 @@ - -
            -
            - - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> + + +
            + <%= if @current_tab == "benefits" do %> +
            + <%= for phrase <- String.split(@partner.benefits, "\n") do %> <%= if String.length(phrase) < 300 do %> <%= phrase %> <% else %> <%= String.slice(phrase, 0..300) %> <% end %> - <% end) %> - -
            - <%= if @partners do %> + <% end %> +
            + <% end %> + + <%= if @current_tab == "about" do %> +
            + <%= for phrase <- String.split(@partner.description, "\n") do %> + <%= phrase %> + <% end %> +
            + <% end %> +
            +
            +
            + <%= if @partners do %>
            <.icon name="hero-star" class="mb-2 h-5 w-5" />

            Related Partners

            -
            +
            <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}>
          • @@ -124,16 +137,5 @@
          • <% end %> -
            -
            -
            - - <%= Enum.map(String.split(@partner.description, "\n"), fn phrase -> %> - <%= phrase %> - <% end) %> - -
            -
            -
            -
            + From 4b8619b6bdd815316b201e7b5b610922857a521a Mon Sep 17 00:00:00 2001 From: faria-s Date: Tue, 11 Mar 2025 11:36:10 +0000 Subject: [PATCH 14/20] fix: mix format --- .../live/partner_live/index.html.heex | 14 ++-- .../live/partner_live/show.html.heex | 75 +++++++++---------- 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index a5bc25df0..3f823ce6d 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -9,8 +9,8 @@
            -
            - <.tabs class="px-4 sm:px-6 lg:px-8 overflow-auto"> +
            + <.tabs class="overflow-auto px-4 sm:px-6 lg:px-8"> <.link patch="?tab=all" replace={false}> <.tab active={@current_tab == "all"}> <%= gettext("Current Partners") %> @@ -27,22 +27,20 @@
            - <%= if @empty? and @has_permissions? do %> -
            +
            <.empty_state url={~p"/organizations/#{@organization}/partners/new"} placeholder="partner" />
            <% else %> -
              +
                <%= for partner <- @partners do %> <.link navigate={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"} class="block hover:bg-zinc-50"> <.partner_card partner={partner} /> <% end %>
              - - <.pagination items={@partners} meta={@meta} params={@params} class="mt-2 flex w-full items-center justify-between flex-wrap" /> + + <.pagination items={@partners} meta={@meta} params={@params} class="mt-2 flex w-full flex-wrap items-center justify-between" /> <% end %> - diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index e345184b5..f4514aeeb 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -1,5 +1,5 @@ -
              +
              <%= if @partner.banner do %> <% else %> @@ -10,15 +10,15 @@
              -
              +
              <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
              -
              -

              +
              +

              <%= @partner.name %>

              -
              +
              <%= if @partner.location do %>
              <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> @@ -54,7 +54,7 @@
              <% end %> <%= if @has_permissions? do %> -
              +
              <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil">
              - <.tabs class="scrollbar-hide mt-2 flex overflow-auto px-4"> <.link patch="?tab=benefits" replace={false}> @@ -81,7 +80,6 @@ -
              <%= if @current_tab == "benefits" do %> @@ -95,7 +93,7 @@ <% end %>
              <% end %> - + <%= if @current_tab == "about" do %>
              <%= for phrase <- String.split(@partner.description, "\n") do %> @@ -107,35 +105,34 @@
              <%= if @partners do %> -
              -
              - <.icon name="hero-star" class="mb-2 h-5 w-5" /> -

              Related Partners

              -
              -
              - <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> - <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}> -
            • -
              - <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> -
              -
              -

              <%= partner.name %>

              - <%= if partner.location do %> -
              - <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> - <%= partner.location.name %> -
              - <% end %> -

              - <%= partner.description %> -

              -
              -
            • - - <% end %> -
              -
              +
              +
              + <.icon name="hero-star" class="mb-2 h-5 w-5" /> +

              Related Partners

              +
              +
              + <%= for partner <- @partners |> Enum.filter(fn partner -> partner.id != @partner.id end) do %> + <.link href={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"}> +
            • +
              + <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} /> +
              +
              +

              <%= partner.name %>

              + <%= if partner.location do %> +
              + <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> + <%= partner.location.name %> +
              + <% end %> +

              + <%= partner.description %> +

              +
              +
            • + <% end %> +
              +
              + <% end %> - From 9d86782ebee17ba52e5e41f998f7439078913fd8 Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Wed, 30 Apr 2025 18:56:33 +0100 Subject: [PATCH 15/20] fix: pending files --- .../partner_live/components/partner_card.ex | 10 +++++----- .../live/partner_live/index.html.heex | 1 - .../live/partner_live/show.html.heex | 18 +++++++++--------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index 000bd41c2..3d9cabe84 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -22,14 +22,14 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do
              -

              <%= @partner.name %>

              - +

              {@partner.name}

              +
              <%= if @partner.location do %>
              <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> -

              <%= @partner.location.name %>

              +

              {@partner.location.name}

              <% end %>
              @@ -38,9 +38,9 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do

              <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> <%= if String.length(phrase) < 50 do %> - <%= phrase %>
              + {phrase}
              <% else %> - <%= String.slice(phrase, 0..50) <> "..." %>
              + {String.slice(phrase, 0..50) <> "..."}
              <% end %> <% end) %>

              diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index 97305da08..d59c48fc6 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -37,7 +37,6 @@ <%= for partner <- @partners do %> <.link navigate={~p"/organizations/#{partner.organization_id}/partners/#{partner.id}"} class="block hover:bg-zinc-50"> <.partner_card partner={partner} /> - <% end %>

            diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 90857dd0f..9ca0ccb74 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -16,13 +16,13 @@

            - <%= @partner.name %> + {@partner.name}

            <%= if @partner.location do %>
            <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> - <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}><%= @partner.location.name %> + <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}>{@partner.location.name}
            <% end %> <%= if @partner.socials do %> @@ -57,7 +57,7 @@
            <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil">
            @@ -70,13 +70,13 @@ <.link patch="?tab=benefits" replace={false}> <.tab id="benefits-tab" active={@current_tab == "benefits"}> <.icon name="hero-signal" class="size-5 mr-2" /> - <%= gettext("Benefits") %> + {gettext("Benefits")} <.link patch="?tab=about" replace={false}> <.tab id="about-tab" active={@current_tab == "about"}> <.icon name="hero-information-circle" class="size-5 mr-2" /> - <%= gettext("About") %> + {gettext("About")} @@ -97,7 +97,7 @@ <%= if @current_tab == "about" do %>
            <%= for phrase <- String.split(@partner.description, "\n") do %> - <%= phrase %> + {phrase} <% end %>
            <% end %> @@ -118,15 +118,15 @@ <.avatar class="size-10" color={:light_zinc} name={partner.name} src={Uploaders.PartnerImage.url({partner.image, partner}, :original)} type={:company} size={:xs} />
            -

            <%= partner.name %>

            +

            {partner.name}

            <%= if partner.location do %>
            <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> - <%= partner.location.name %> + {partner.location.name}
            <% end %>

            - <%= partner.description %> + {partner.description}

            From 6e85e7b2eaf8e9f7d7660d247f221c20fea2873d Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Wed, 30 Apr 2025 20:56:55 +0100 Subject: [PATCH 16/20] refactor: improve partners pages look and structure --- .../partner_live/components/partner_card.ex | 14 +-- lib/atomic_web/live/partner_live/index.ex | 2 +- .../live/partner_live/index.html.heex | 2 +- .../live/partner_live/show.html.heex | 101 ++++++++++-------- 4 files changed, 61 insertions(+), 58 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index 3d9cabe84..9a12b1b1a 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -34,17 +34,13 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do <% end %>
            -
            -

            +

              <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> - <%= if String.length(phrase) < 50 do %> - {phrase}
              - <% else %> - {String.slice(phrase, 0..50) <> "..."}
              - <% end %> +
            • + <%= phrase %> +
            • <% end) %> -

              -
            +
          """ diff --git a/lib/atomic_web/live/partner_live/index.ex b/lib/atomic_web/live/partner_live/index.ex index 24e56855f..d5c0afb4d 100644 --- a/lib/atomic_web/live/partner_live/index.ex +++ b/lib/atomic_web/live/partner_live/index.ex @@ -2,7 +2,7 @@ defmodule AtomicWeb.PartnerLive.Index do import AtomicWeb.PartnerLive.Components.PartnerCard use AtomicWeb, :live_view - import AtomicWeb.Components.{Avatar, Button, Empty, Pagination, Tabs} + import AtomicWeb.Components.{Button, Empty, Pagination, Tabs} import AtomicWeb.LiveHelpers alias Atomic.Accounts diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index d59c48fc6..b09bae6a1 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -1,4 +1,4 @@ -<.page title="Partners"> +<.page title={"#{@current_organization.name} Partners"}> <:actions> <%= if not @empty? and @has_permissions? do %> <.button navigate={~p"/organizations/#{@current_organization}/partners/new"} icon="hero-plus"> diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 9ca0ccb74..8fa86d11f 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -14,56 +14,63 @@
          <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
          -
          -

          - {@partner.name} -

          -
          - <%= if @partner.location do %> -
          - <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> - <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}>{@partner.location.name} -
          - <% end %> - <%= if @partner.socials do %> -
          - <%= if @partner.socials.website do %> -
          - <.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" /> - <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website -
          - <% end %> - <%= if @partner.socials.instagram do %> -
          - Instagram - <.link class="text-sm text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram -
          - <% end %> - <%= if @partner.socials.facebook do %> -
          - Facebook - <.link class="text-sm text-blue-500" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook -
          - <% end %> - <%= if @partner.socials.x do %> -
          - X - <.link class="text-sm text-blue-500" href={"https://x.com/" <> @partner.socials.x}>X -
          - <% end %> -
          - <% end %> +
          +
          +

          + {@partner.name} +

          + <%= if @has_permissions? do %> -
          - <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> - - -
          +
          + <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> + + +
          <% end %>
          +
          +
          + <%= if @partner.location do %> +
          + <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" /> + <.link class="text-sm text-blue-500" href={"https://www.google.com/maps/search/?api=1&query=#{@partner.location.name}"}>{@partner.location.name} +
          + <% end %> + <%= if @partner.socials do %> +
          + <%= if @partner.socials.website do %> +
          + <.icon name="hero-globe-alt" class="h-5 w-5 text-zinc-400" /> + <.link class="text-sm text-blue-500" href={@partner.socials.website}>Website +
          + <% end %> + <%= if @partner.socials.instagram do %> +
          + Instagram + <.link class="text-sm text-blue-500" href={"https://instagram.com/" <> @partner.socials.instagram}>Instagram +
          + <% end %> + <%= if @partner.socials.facebook do %> +
          + Facebook + <.link class="text-sm text-blue-500" href={"https://facebook.com/" <> @partner.socials.facebook}>Facebook +
          + <% end %> + <%= if @partner.socials.x do %> +
          + X + <.link class="text-sm text-blue-500" href={"https://x.com/" <> @partner.socials.x}>X +
          + <% end %> +
          + <% end %> +
          +
          +
          +
          <.tabs class="scrollbar-hide mt-2 flex overflow-auto px-4"> @@ -106,7 +113,7 @@
          <%= if @partners do %>
          -
          +
          <.icon name="hero-star" class="mb-2 h-5 w-5" />

          Related Partners

          From 296103d08c02f83eec28938a56c656e69d6c0373 Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Wed, 30 Apr 2025 21:03:07 +0100 Subject: [PATCH 17/20] fix: formating problems --- .../partner_live/components/partner_card.ex | 8 +++---- .../live/partner_live/show.html.heex | 24 +++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index 9a12b1b1a..a3feb7aa4 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -34,12 +34,12 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do <% end %>
          -
            - <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> +
              + <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %>
            • - <%= phrase %> + {phrase}
            • - <% end) %> + <% end) %>
          diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index 8fa86d11f..d598234e0 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -14,23 +14,23 @@
          <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
          -
          -
          -

          +

          +
          +

          {@partner.name}

          <%= if @has_permissions? do %> -
          - <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> - - -
          +
          + <.button navigate={~p"/organizations/#{@partner.organization_id}/partners/#{@partner.id}/edit"} icon="hero-pencil"> + + +
          <% end %>
          -
          +
          <%= if @partner.location do %>
          @@ -68,9 +68,7 @@ <% end %>
          -
          -
          <.tabs class="scrollbar-hide mt-2 flex overflow-auto px-4"> From 10857b099148cd94f38663f54b1a1df5ea502a14 Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Wed, 30 Apr 2025 22:21:43 +0100 Subject: [PATCH 18/20] fix: improve benefits list --- .../live/partner_live/components/partner_card.ex | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/atomic_web/live/partner_live/components/partner_card.ex b/lib/atomic_web/live/partner_live/components/partner_card.ex index a3feb7aa4..c02d22129 100644 --- a/lib/atomic_web/live/partner_live/components/partner_card.ex +++ b/lib/atomic_web/live/partner_live/components/partner_card.ex @@ -28,15 +28,16 @@ defmodule AtomicWeb.PartnerLive.Components.PartnerCard do
          <%= if @partner.location do %>
          - <.icon name="hero-map-pin" class="my-1 h-4 w-4 text-zinc-400" /> + <.icon name="hero-map-pin" class="h-6 w-6 text-zinc-400" />

          {@partner.location.name}

          <% end %>
          -
            +
              <%= Enum.map(String.split(@partner.benefits, "\n"), fn phrase -> %> -
            • +
            • + <.icon name="hero-check" class="h-4 w-4 shrink-0" /> {phrase}
            • <% end) %> From 3facebd7315461c926c614ea949b618ac7c741af Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Wed, 30 Apr 2025 22:51:44 +0100 Subject: [PATCH 19/20] fix: wrong module attribute --- lib/atomic_web/live/partner_live/index.html.heex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/atomic_web/live/partner_live/index.html.heex b/lib/atomic_web/live/partner_live/index.html.heex index b09bae6a1..8c87de074 100644 --- a/lib/atomic_web/live/partner_live/index.html.heex +++ b/lib/atomic_web/live/partner_live/index.html.heex @@ -1,4 +1,4 @@ -<.page title={"#{@current_organization.name} Partners"}> +<.page title={"#{@organization.name} Partners"}> <:actions> <%= if not @empty? and @has_permissions? do %> <.button navigate={~p"/organizations/#{@current_organization}/partners/new"} icon="hero-plus"> From 40f88c7a99363662fb0a736c7888aaba0f79b106 Mon Sep 17 00:00:00 2001 From: 11GG20 Date: Fri, 4 Jul 2025 18:46:27 +0100 Subject: [PATCH 20/20] fix: reviewed changes --- lib/atomic_web/live/partner_live/form_component.ex | 3 ++- lib/atomic_web/live/partner_live/show.html.heex | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/atomic_web/live/partner_live/form_component.ex b/lib/atomic_web/live/partner_live/form_component.ex index b2384695b..e9d2250cf 100644 --- a/lib/atomic_web/live/partner_live/form_component.ex +++ b/lib/atomic_web/live/partner_live/form_component.ex @@ -4,6 +4,7 @@ defmodule AtomicWeb.PartnerLive.FormComponent do alias Atomic.Partners alias AtomicWeb.Components.ImageUploader import AtomicWeb.Components.Forms + import ImageUploader @impl true def render(assigns) do @@ -38,7 +39,7 @@ defmodule AtomicWeb.PartnerLive.FormComponent do

              {gettext("The image of the partner (960x960px for best display)")}

          - <.live_component module={ImageUploader} id="uploader" uploads={@uploads} target={@myself} /> + <.image_uploader id="uploader" upload={@uploads.image} class="h-32 w-full border border-zinc-300 shadow-sm xl:h-64" image_class="h-32 w-full object-cover xl:h-64" />

          {gettext("Internal")}

          diff --git a/lib/atomic_web/live/partner_live/show.html.heex b/lib/atomic_web/live/partner_live/show.html.heex index d598234e0..0286e3f3e 100644 --- a/lib/atomic_web/live/partner_live/show.html.heex +++ b/lib/atomic_web/live/partner_live/show.html.heex @@ -14,7 +14,7 @@
          <.avatar class="size-28" color={:light_zinc} name={@partner.name} src={Uploaders.PartnerImage.url({@partner.image, @partner}, :original)} type={:company} size={:xl} />
          -
          +

          {@partner.name} @@ -31,7 +31,7 @@ <% end %>

          -
          +
          <%= if @partner.location do %>
          <.icon name="hero-map-pin" class="h-5 w-5 text-zinc-400" />