feat: filtering in sidebars
This commit is contained in:
@@ -42,6 +42,15 @@ defmodule BDS.Desktop.Router do
|
||||
|> Plug.Conn.send_resp(200, BDS.Desktop.ShellController.projects_json())
|
||||
end
|
||||
|
||||
post "/api/sidebar" do
|
||||
{:ok, body, conn} = Plug.Conn.read_body(conn)
|
||||
payload = if body == "", do: %{}, else: Jason.decode!(body)
|
||||
|
||||
conn
|
||||
|> Plug.Conn.put_resp_content_type("application/json")
|
||||
|> Plug.Conn.send_resp(200, BDS.Desktop.ShellController.sidebar_json(payload))
|
||||
end
|
||||
|
||||
post "/api/projects" do
|
||||
{:ok, body, conn} = Plug.Conn.read_body(conn)
|
||||
payload = if body == "", do: %{}, else: Jason.decode!(body)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
defmodule BDS.Desktop.ShellController do
|
||||
@moduledoc false
|
||||
|
||||
alias BDS.UI.Sidebar
|
||||
|
||||
def index_html do
|
||||
BDS.UI.ShellPage.render()
|
||||
end
|
||||
@@ -48,6 +50,28 @@ defmodule BDS.Desktop.ShellController do
|
||||
end
|
||||
end
|
||||
|
||||
def sidebar_json(payload) when is_map(payload) do
|
||||
view = Map.get(payload, "view") || Map.get(payload, :view)
|
||||
filters = Map.get(payload, "filters") || Map.get(payload, :filters) || %{}
|
||||
|
||||
data =
|
||||
try do
|
||||
case active_project_id() do
|
||||
nil -> Sidebar.view(nil, view, filters)
|
||||
project_id -> Sidebar.view(project_id, view, filters)
|
||||
end
|
||||
rescue
|
||||
error in [Exqlite.Error, DBConnection.OwnershipError] ->
|
||||
if match?(%Exqlite.Error{}, error) and not String.contains?(Exception.message(error), "no such table") do
|
||||
reraise error, __STACKTRACE__
|
||||
end
|
||||
|
||||
Sidebar.view(nil, view, filters)
|
||||
end
|
||||
|
||||
Jason.encode!(%{status: "ok", view: view, data: data})
|
||||
end
|
||||
|
||||
defp normalize_error(error) when is_map(error), do: error
|
||||
defp normalize_error(error), do: %{message: inspect(error)}
|
||||
|
||||
@@ -149,6 +173,17 @@ defmodule BDS.Desktop.ShellController do
|
||||
}
|
||||
end
|
||||
|
||||
defp active_project_id do
|
||||
BDS.Projects.shell_snapshot().active_project_id
|
||||
rescue
|
||||
error in [Exqlite.Error, DBConnection.OwnershipError] ->
|
||||
if match?(%Exqlite.Error{}, error) and not String.contains?(Exception.message(error), "no such table") do
|
||||
reraise error, __STACKTRACE__
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
defp present?(value) when is_binary(value), do: String.trim(value) != ""
|
||||
defp present?(_value), do: false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user