defmodule GustWeb.DagRunComponents do
@moduledoc false
use Phoenix.Component
use Gettext, backend: GustWeb.Gettext
attr :status, :atom, required: true
attr :rest, :global, doc: "data-testid, etc."
def status_badge(assigns) do
~H"""
"badge-success"
:failed -> "badge-error"
:skipped -> "badge-warning"
:retrying -> "badge-warning"
:waiting -> "badge-warning"
:upstream_failed -> "badge-warning"
_ -> "badge-info"
end
]}
>
{@status}
"""
end
attr :level, :string, required: true
def log_badge(assigns) do
~H"""
"badge-info"
"info" -> "badge-info"
"warn" -> "badge-warning"
"error" -> "badge-error"
end
]}>
{@level}
"""
end
attr :id, :string, required: true
attr :selected, :boolean, default: false
attr :status, :atom
def task_cell(assigns) do
assigns =
assign_new(assigns, :classes, fn ->
base_classes =
if assigns[:status], do: ["status-#{assigns[:status]}", "active"], else: ["status-none"]
classes = base_classes ++ if assigns[:selected], do: ["selected"], else: []
Enum.join(classes, " ")
end)
~H"""
"""
end
attr :run_id, :integer, required: true
attr :name, :string, required: true
attr :navigate, :string, required: true
attr :rest, :global
attr :task_data, :map, default: nil
def interactive_task_cell(assigns) do
if assigns[:task_data] do
~H"""
<.link navigate={@navigate} {@rest}>
<.task_cell
selected={@task_data[:selected]}
status={@task_data[:status]}
id={"#{@name}-at-run-#{@run_id}"}
/>
"""
else
~H"""
<.task_cell id={"#{@name}-at-run-#{@run_id}"} />
"""
end
end
attr :id, :string, required: true
attr :value, :any, required: true
attr :rest, :global, doc: "data-testid, etc."
def json_viewer(assigns) do
assigns =
assign(
assigns,
:json,
Jason.encode_to_iodata!(assigns.value, pretty: true, escape_html: true)
)
~H"""
{@json}
"""
end
end