Skip to content

Commit 05d3707

Browse files
emilwojtaszekclaude
andcommitted
fix: review feedback — preview loading state, YAML indent, supervised task
- Add preview_loading assign to distinguish "loading" from "no preview" in invoice show; skip async task for invoices without XML content - Fix mis-indented startup-cpu-boost annotation in service.yaml - Replace unsupervised Task.start with Task.Supervisor.start_child for sidecar warm-up in upload LiveView - Add timer.sleep in async preview test to avoid race condition Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 281cc5a commit 05d3707

4 files changed

Lines changed: 22 additions & 8 deletions

File tree

cloud-run/service.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ spec:
1313
autoscaling.knative.dev/minScale: "0"
1414
autoscaling.knative.dev/maxScale: "2"
1515
run.googleapis.com/execution-environment: gen2
16-
run.googleapis.com/startup-cpu-boost: "true"
16+
run.googleapis.com/startup-cpu-boost: "true"
1717
spec:
1818
containerConcurrency: 80
1919
serviceAccountName: ksef-hub-runner@au-ksef-ex.iam.gserviceaccount.com

lib/ksef_hub_web/live/invoice_live/show.ex

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ defmodule KsefHubWeb.InvoiceLive.Show do
108108
invoice_payment_requests: invoice_payment_requests,
109109
html_preview: nil,
110110
preview_ref: nil,
111+
preview_loading: false,
111112
categories: Invoices.list_categories(company.id),
112113
editing: auto_edit && can_mutate,
113114
edit_form: build_edit_form(invoice),
@@ -136,17 +137,20 @@ defmodule KsefHubWeb.InvoiceLive.Show do
136137

137138
@spec start_preview_task(Phoenix.LiveView.Socket.t(), Invoice.t()) ::
138139
Phoenix.LiveView.Socket.t()
139-
defp start_preview_task(socket, invoice) do
140+
defp start_preview_task(socket, %{xml_file: %{content: content}} = invoice)
141+
when is_binary(content) and content != "" do
140142
if connected?(socket) do
141143
task =
142144
Task.Supervisor.async_nolink(KsefHub.TaskSupervisor, fn -> generate_preview(invoice) end)
143145

144-
assign(socket, preview_ref: task.ref)
146+
assign(socket, preview_ref: task.ref, preview_loading: true)
145147
else
146148
socket
147149
end
148150
end
149151

152+
defp start_preview_task(socket, _invoice), do: socket
153+
150154
@spec refresh_tabs(Phoenix.LiveView.Socket.t()) :: Phoenix.LiveView.Socket.t()
151155
defp refresh_tabs(socket), do: assign(socket, :visible_tabs, visible_tabs(socket.assigns))
152156

@@ -862,12 +866,12 @@ defmodule KsefHubWeb.InvoiceLive.Show do
862866

863867
def handle_info({ref, html}, %{assigns: %{preview_ref: ref}} = socket) when is_reference(ref) do
864868
Process.demonitor(ref, [:flush])
865-
{:noreply, assign(socket, html_preview: html, preview_ref: nil)}
869+
{:noreply, assign(socket, html_preview: html, preview_ref: nil, preview_loading: false)}
866870
end
867871

868872
def handle_info({:DOWN, ref, :process, _pid, _reason}, %{assigns: %{preview_ref: ref}} = socket)
869873
when is_reference(ref) do
870-
{:noreply, assign(socket, preview_ref: nil)}
874+
{:noreply, assign(socket, preview_ref: nil, preview_loading: false)}
871875
end
872876

873877
def handle_info({:new_activity, audit_log}, socket) do
@@ -1295,6 +1299,12 @@ defmodule KsefHubWeb.InvoiceLive.Show do
12951299
<h2 class="mb-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground">
12961300
Preview
12971301
</h2>
1302+
<div
1303+
:if={@preview_loading}
1304+
class="flex items-center justify-center flex-1 min-h-[600px] text-muted-foreground text-sm"
1305+
>
1306+
Loading preview&hellip;
1307+
</div>
12981308
<div
12991309
:if={@html_preview}
13001310
class="border border-border rounded-lg overflow-hidden flex-1 min-h-[600px]"
@@ -1308,7 +1318,7 @@ defmodule KsefHubWeb.InvoiceLive.Show do
13081318
</iframe>
13091319
</div>
13101320
<div
1311-
:if={!@html_preview && @invoice.pdf_file}
1321+
:if={!@preview_loading && !@html_preview && @invoice.pdf_file}
13121322
class="border border-border rounded-lg overflow-hidden flex-1 min-h-[600px]"
13131323
>
13141324
<iframe
@@ -1319,7 +1329,7 @@ defmodule KsefHubWeb.InvoiceLive.Show do
13191329
</iframe>
13201330
</div>
13211331
<p
1322-
:if={!@html_preview && !@invoice.pdf_file}
1332+
:if={!@preview_loading && !@html_preview && !@invoice.pdf_file}
13231333
class="text-muted-foreground text-sm"
13241334
>
13251335
No preview available. XML content may be missing.

lib/ksef_hub_web/live/invoice_live/upload.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ defmodule KsefHubWeb.InvoiceLive.Upload do
2222
{:ok, Phoenix.LiveView.Socket.t()}
2323
def mount(_params, _session, socket) do
2424
if connected?(socket) do
25-
Task.start(fn -> ServiceHealth.warm_upload_sidecars() end)
25+
Task.Supervisor.start_child(KsefHub.TaskSupervisor, fn ->
26+
ServiceHealth.warm_upload_sidecars()
27+
end)
2628
end
2729

2830
{:ok,

test/ksef_hub_web/live/invoice_live/show_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ defmodule KsefHubWeb.InvoiceLive.ShowTest do
7777
end)
7878

7979
{:ok, view, _html} = live(conn, ~p"/c/#{company.id}/invoices/#{invoice.id}")
80+
# Allow the async preview task to complete
81+
:timer.sleep(100)
8082
assert render(view) =~ "preview"
8183
end
8284
end

0 commit comments

Comments
 (0)