@@ -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…
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.
0 commit comments