192 lines
5.9 KiB
Elixir
192 lines
5.9 KiB
Elixir
defmodule BDS.Desktop.ShellLive.SidebarEvents do
|
|
@moduledoc false
|
|
|
|
alias BDS.Desktop.ShellLive.SidebarState, as: ShellSidebarState
|
|
|
|
@spec handle(Phoenix.LiveView.Socket.t(), String.t(), map(), (Phoenix.LiveView.Socket.t(),
|
|
term() ->
|
|
Phoenix.LiveView.Socket.t())) ::
|
|
{:noreply, Phoenix.LiveView.Socket.t()}
|
|
def handle(socket, event, params, reload)
|
|
|
|
def handle(socket, "toggle_sidebar_filters", _params, reload) do
|
|
socket =
|
|
ShellSidebarState.put_filter_panel_state(socket, fn state ->
|
|
if state.visible do
|
|
%{state | visible: false}
|
|
else
|
|
%{
|
|
visible: true,
|
|
archive_collapsed: true,
|
|
tags_collapsed: true,
|
|
categories_collapsed: true,
|
|
expanded_year: nil
|
|
}
|
|
end
|
|
end)
|
|
|
|
{:noreply, reload.(socket, socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "toggle_sidebar_archive", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{state | archive_collapsed: not state.archive_collapsed}
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "toggle_sidebar_tags", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{state | tags_collapsed: not state.tags_collapsed}
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "toggle_sidebar_categories", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{state | categories_collapsed: not state.categories_collapsed}
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "update_sidebar_search", %{"sidebar_filters" => params}, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
Map.put(
|
|
filters,
|
|
:search,
|
|
ShellSidebarState.normalize_filter_string(Map.get(params, "search"))
|
|
)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "clear_sidebar_search", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters -> Map.put(filters, :search, nil) end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "clear_sidebar_tags", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters -> Map.put(filters, :tags, []) end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "clear_sidebar_categories", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters -> Map.put(filters, :categories, []) end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "toggle_sidebar_tag", %{"tag" => tag}, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
ShellSidebarState.toggle_filter_value(filters, :tags, tag)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "toggle_sidebar_category", %{"category" => category}, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
ShellSidebarState.toggle_filter_value(filters, :categories, category)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "select_sidebar_year", %{"year" => year}, reload) do
|
|
parsed_year = ShellSidebarState.parse_optional_integer(year)
|
|
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{
|
|
state
|
|
| archive_collapsed: false,
|
|
expanded_year: if(state.expanded_year == parsed_year, do: nil, else: parsed_year)
|
|
}
|
|
end)
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
filters
|
|
|> Map.put(:year, parsed_year)
|
|
|> Map.put(:month, nil)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "select_sidebar_month", %{"year" => year, "month" => month}, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{
|
|
state
|
|
| archive_collapsed: false,
|
|
expanded_year: ShellSidebarState.parse_optional_integer(year)
|
|
}
|
|
end)
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
filters
|
|
|> Map.put(:year, ShellSidebarState.parse_optional_integer(year))
|
|
|> Map.put(:month, ShellSidebarState.parse_optional_integer(month))
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "clear_sidebar_month", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filter_panel_state(fn state ->
|
|
%{state | archive_collapsed: false}
|
|
end)
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
filters |> Map.put(:year, nil) |> Map.put(:month, nil)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "clear_sidebar_filters", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
filters
|
|
|> Map.put(:search, nil)
|
|
|> Map.put(:year, nil)
|
|
|> Map.put(:month, nil)
|
|
|> Map.put(:tags, [])
|
|
|> Map.put(:categories, [])
|
|
|> Map.put(
|
|
:display_limit,
|
|
ShellSidebarState.sidebar_page_size(socket.assigns.sidebar_data)
|
|
)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
|
|
def handle(socket, "load_more_sidebar", _params, reload) do
|
|
{:noreply,
|
|
socket
|
|
|> ShellSidebarState.put_filters(fn filters ->
|
|
Map.update(
|
|
filters,
|
|
:display_limit,
|
|
ShellSidebarState.sidebar_page_size(socket.assigns.sidebar_data),
|
|
&(&1 + ShellSidebarState.sidebar_page_size(socket.assigns.sidebar_data))
|
|
)
|
|
end)
|
|
|> reload.(socket.assigns.workbench)}
|
|
end
|
|
end
|