defmodule MicrowavepropWeb.SubmitLive.PreviewComponent do @moduledoc false use MicrowavepropWeb, :html alias Phoenix.LiveView.Rendered @doc false @spec csv_preview(map()) :: Rendered.t() def csv_preview(assigns) do assigns = assign(assigns, valid_count: length(assigns.preview.valid), invalid_count: length(assigns.preview.invalid), duplicate_count: length(assigns.preview.duplicates), refinement_count: length(assigns.preview.refinements || []), valid_sample: Enum.take(assigns.preview.valid, 20), refinement_sample: Enum.take(assigns.preview.refinements || [], 50) ) ~H"""
Processed {@preview.total_rows} {if @preview.total_rows == 1, do: "row", else: "rows"}. Nothing has been inserted yet — confirm below to import.
| Row | Errors |
|---|---|
| Row {row.row_num} |
{msg}
|
100} class="text-xs opacity-60 mt-1"> Showing first 100 of {@invalid_count} invalid rows.
These rows match an existing contact but add more precise data. Confirming will update the existing contact in place.
| Row | Station 1 | Station 2 | Band | Changes |
|---|---|---|---|---|
| Row {row.row_num} | {row.attrs["station1"]} {row.attrs["grid1"]} | {row.attrs["station2"]} {row.attrs["grid2"]} | {row.attrs["band"]} |
{field}:
{value}
|
length(@refinement_sample)} class="text-xs opacity-60 mt-1"> Showing first {length(@refinement_sample)} of {@refinement_count} refinements.
Same two callsigns at the same grids on the same band within an hour.
| Row | Station 1 | Station 2 | Band | Timestamp | Source |
|---|---|---|---|---|---|
| Row {row.row_num} | {row.attrs["station1"]} {row.attrs["grid1"]} | {row.attrs["station2"]} {row.attrs["grid2"]} | {row.attrs["band"]} | {Calendar.strftime(row.timestamp, "%Y-%m-%d %H:%M UTC")} | {duplicate_source(row.reason)} |
100} class="text-xs opacity-60 mt-1"> Showing first 100 of {@duplicate_count} duplicates.
| Row | Station 1 | Station 2 | Band | Mode | Timestamp |
|---|---|---|---|---|---|
| Row {row.row_num} | {row.attrs["station1"]} {row.attrs["grid1"]} | {row.attrs["station2"]} {row.attrs["grid2"]} | {row.attrs["band"]} | {row.attrs["mode"]} | {Calendar.strftime(row.timestamp, "%Y-%m-%d %H:%M UTC")} |
length(@valid_sample)} class="text-xs opacity-60 mt-1"> Showing first {length(@valid_sample)} of {@valid_count} valid rows.