lib/event_store_dashboard/components/data_field.ex

defmodule EventStoreDashboard.Components.DataField do
  @moduledoc false

  use Phoenix.Component

  attr(:label, :string, required: true)
  attr(:value, :any, required: true)
  attr(:inspect_opts, :list, required: true)

  def row(%{value: {:deserialization_error, exception, raw}} = assigns) do
    assigns = assign(assigns, exception: exception, raw: raw)

    ~H"""
    <tr>
      <td>
        <div class="d-flex align-items-center">
          <span>{@label}</span>
          <span class="badge badge-danger ml-2" title={Exception.message(@exception)}>
            Failed
          </span>
        </div>
      </td>
      <td><pre>{inspect(@raw, @inspect_opts)}</pre></td>
    </tr>
    """
  end

  def row(assigns) do
    ~H"""
    <tr>
      <td>{@label}</td>
      <td><pre>{inspect(@value, @inspect_opts)}</pre></td>
    </tr>
    """
  end
end