Skip to content

Commit 31ffe9c

Browse files
authored
Merge pull request #1554 from naymspace/feature/improve-order-link-component
Enhance `order_link/1` component
2 parents 53a5c80 + dc2560e commit 31ffe9c

File tree

1 file changed

+20
-35
lines changed

1 file changed

+20
-35
lines changed

lib/backpex/html/resource.ex

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule Backpex.HTML.Resource do
55
use BackpexWeb, :html
66

77
import Phoenix.LiveView.TagEngine
8+
import Backpex.HTML.CoreComponents
89
import Backpex.HTML.Form
910
import Backpex.HTML.Layout
1011

@@ -47,51 +48,38 @@ defmodule Backpex.HTML.Resource do
4748
attr :name, :atom, required: true, doc: "name of the column the link should change order for"
4849

4950
def order_link(assigns) do
50-
order_direction =
51-
if assigns.name == assigns.query_options.order_by do
52-
toggle_order_direction(assigns.query_options.order_direction)
53-
else
54-
:asc
51+
next_order_direction =
52+
cond do
53+
assigns.name != assigns.query_options.order_by -> :asc
54+
assigns.query_options.order_direction == :asc -> :desc
55+
true -> :asc
5556
end
5657

58+
patch_link =
59+
Router.get_path(
60+
assigns.socket,
61+
assigns.live_resource,
62+
assigns.params,
63+
:index,
64+
Map.merge(assigns.query_options, %{order_direction: next_order_direction, order_by: assigns.name})
65+
)
66+
5767
assigns =
5868
assigns
59-
|> assign(:next_order_direction, order_direction)
69+
|> assign(:next_order_direction, next_order_direction)
70+
|> assign(:patch_link, patch_link)
6071

6172
~H"""
62-
<.link
63-
class="flex items-center space-x-1"
64-
patch={
65-
Router.get_path(
66-
@socket,
67-
@live_resource,
68-
@params,
69-
:index,
70-
Map.merge(@query_options, %{order_direction: @next_order_direction, order_by: @name})
71-
)
72-
}
73-
replace
74-
>
73+
<.link class="flex items-center space-x-1" patch={@patch_link} replace>
7574
<p>{@label}</p>
7675
<%= if @name == @query_options.order_by do %>
77-
{order_icon(assigns, @query_options.order_direction)}
76+
<.icon :if={@next_order_direction == :asc} name="hero-arrow-down-solid" class="size-4" />
77+
<.icon :if={@next_order_direction == :desc} name="hero-arrow-up-solid" class="size-4" />
7878
<% end %>
7979
</.link>
8080
"""
8181
end
8282

83-
defp order_icon(assigns, :asc) do
84-
~H"""
85-
<Backpex.HTML.CoreComponents.icon name="hero-arrow-up-solid" class="h-4 w-4" />
86-
"""
87-
end
88-
89-
defp order_icon(assigns, :desc) do
90-
~H"""
91-
<Backpex.HTML.CoreComponents.icon name="hero-arrow-down-solid" class="h-4 w-4" />
92-
"""
93-
end
94-
9583
@doc """
9684
Renders the field of the given resource.
9785
"""
@@ -1046,7 +1034,4 @@ defmodule Backpex.HTML.Resource do
10461034
defp align_class(:right), do: "justify-end text-right"
10471035
defp align_class(:center), do: "justify-center text-center"
10481036
defp align_class(_alignment), do: "justify-start text-left"
1049-
1050-
defp toggle_order_direction(:asc), do: :desc
1051-
defp toggle_order_direction(:desc), do: :asc
10521037
end

0 commit comments

Comments
 (0)