diff --git a/elixir/apps/domain/lib/domain/clients/client/query.ex b/elixir/apps/domain/lib/domain/clients/client/query.ex index f9a5bb3fe..ba3d65f90 100644 --- a/elixir/apps/domain/lib/domain/clients/client/query.ex +++ b/elixir/apps/domain/lib/domain/clients/client/query.ex @@ -112,10 +112,31 @@ defmodule Domain.Clients.Client.Query do title: "Name", type: {:string, :websearch}, fun: &filter_by_name_fts/2 + }, + %Domain.Repo.Filter{ + name: :client_or_actor_name, + title: "Client Name or Actor Name", + type: {:string, :websearch}, + fun: &filter_by_client_or_actor_name/2 } ] def filter_by_name_fts(queryable, name) do {queryable, dynamic([clients: clients], fulltext_search(clients.name, ^name))} end + + def filter_by_client_or_actor_name(queryable, name) do + queryable = + with_named_binding(queryable, :actor, fn queryable, binding -> + join(queryable, :inner, [clients: clients], actor in assoc(clients, ^binding), + as: ^binding + ) + end) + + {queryable, + dynamic( + [clients: clients, actor: actor], + fulltext_search(clients.name, ^name) or fulltext_search(actor.name, ^name) + )} + end end diff --git a/elixir/apps/web/lib/web/live/actors/show.ex b/elixir/apps/web/lib/web/live/actors/show.ex index 5ab78a547..7113cae39 100644 --- a/elixir/apps/web/lib/web/live/actors/show.ex +++ b/elixir/apps/web/lib/web/live/actors/show.ex @@ -31,6 +31,7 @@ defmodule Web.Actors.Show do |> assign_live_table("clients", query_module: Clients.Client.Query, sortable_fields: [], + hide_filters: [:client_or_actor_name], callback: &handle_clients_update!/2 ) |> assign_live_table("flows", diff --git a/elixir/apps/web/lib/web/live/clients/index.ex b/elixir/apps/web/lib/web/live/clients/index.ex index 355181c88..f70fa2126 100644 --- a/elixir/apps/web/lib/web/live/clients/index.ex +++ b/elixir/apps/web/lib/web/live/clients/index.ex @@ -15,6 +15,9 @@ defmodule Web.Clients.Index do sortable_fields: [ {:clients, :name} ], + hide_filters: [ + :name + ], callback: &handle_clients_update!/2 )