diff --git a/lib/atomic/organizations.ex b/lib/atomic/organizations.ex index e2c58e8ae..511c906aa 100644 --- a/lib/atomic/organizations.ex +++ b/lib/atomic/organizations.ex @@ -19,7 +19,9 @@ defmodule Atomic.Organizations do [%Organization{}, ...] """ - def list_organizations(params \\ %{}) + def list_organizations do + Organization |> Repo.all() + end def list_organizations(opts) when is_list(opts) do Organization diff --git a/lib/atomic_web/components/accordion.ex b/lib/atomic_web/components/accordion.ex new file mode 100644 index 000000000..ae63c761a --- /dev/null +++ b/lib/atomic_web/components/accordion.ex @@ -0,0 +1,86 @@ +defmodule AtomicWeb.Components.Accordion do + @moduledoc """ + Provides accordion-related components and helper functions. + """ + use AtomicWeb, :component + + alias Phoenix.LiveView.JS + import AtomicWeb.Components.Icon + + @doc """ + Accordion components allows users to show and hide sections of related panel on a page. + + ## Examples + + ```heex + <.accordion> + <:trigger>Accordion + <:panel>Content + + ``` + """ + + attr :class, :any, doc: "Extend existing component styles" + attr :controlled, :boolean, default: false + attr :id, :string, required: true + attr :rest, :global + + slot :trigger, validate_attrs: false + slot :panel, validate_attrs: false + + @spec accordion(Socket.assigns()) :: Rendered.t() + def accordion(assigns) do + ~H""" +
+ <%= for {{trigger, panel}, idx} <- @trigger |> Enum.zip(@panel) |> Enum.with_index() do %> +

+ +

+
+
+
+ {render_slot(panel)} +
+
+
+ <% end %> +
+ """ + end + + defp trigger_id(id, idx), do: "#{id}_trigger#{idx}" + defp panel_id(id, idx), do: "#{id}_panel#{idx}" + + defp handle_click(%{controlled: controlled, id: id}, idx) do + op = + {"aria-expanded", "true", "false"} + |> JS.toggle_attribute(to: "##{trigger_id(id, idx)}") + |> JS.toggle_attribute({"data-expanded", ""}, to: "##{panel_id(id, idx)}") + + if controlled do + op + |> JS.set_attribute({"aria-expanded", "false"}, + to: "##{id} .accordion-trigger:not(##{trigger_id(id, idx)})" + ) + |> JS.remove_attribute("data-expanded", + to: "##{id} .accordion-panel:not(##{panel_id(id, idx)})" + ) + else + op + end + end +end diff --git a/lib/atomic_web/components/dropdown.ex b/lib/atomic_web/components/dropdown.ex index 449ecbf25..f04544d0f 100644 --- a/lib/atomic_web/components/dropdown.ex +++ b/lib/atomic_web/components/dropdown.ex @@ -26,8 +26,8 @@ defmodule AtomicWeb.Components.Dropdown do
{render_slot(@wrapper)}
-