seq-auth: - startAutoRefresh() -> startSSE(), stopAutoRefresh() -> stopSSE() - Cookie secure flag: 'secure (prod)' -> 'secure (if TRUST_PROXY)' component: - Fix typo creatApp -> createApp - Add GET /csrf, POST /logout to browser->auth arrow - Add GET /stream (SSE) to browser->dashboard arrow class-server: - Add subscribers Set, onPollComplete(), offPollComplete() to Poller class class-data: - Add SSE Event /stream shape alongside API Response /user-downloads - Add sser *-- dl relationship state-ui: - Fix invalid multi-line transition labels with raw Unicode arrows (broke PlantUML parser); replace with valid \n escapes on single line seq-dashboard, seq-polling, state-poller, activity-matching: - Whitespace touch to trigger render-diagrams CI workflow
69 lines
1.7 KiB
Plaintext
69 lines
1.7 KiB
Plaintext
@startuml state-ui
|
|
!theme plain
|
|
title sofarr — Frontend UI State Diagram
|
|
|
|
[*] --> SplashScreen : Page load
|
|
|
|
state SplashScreen {
|
|
state "Showing splash\n(min 1.2s)" as showing
|
|
}
|
|
|
|
SplashScreen --> CheckAuth : checkAuthentication()
|
|
|
|
state CheckAuth <<choice>>
|
|
CheckAuth --> LoginForm : No session cookie
|
|
CheckAuth --> Dashboard : Valid session
|
|
|
|
state LoginForm {
|
|
state "Idle" as lf_idle
|
|
state "Submitting" as lf_submit
|
|
state "Error" as lf_error
|
|
|
|
lf_idle --> lf_submit : Submit form
|
|
lf_submit --> lf_error : Auth failed
|
|
lf_error --> lf_submit : Re-submit
|
|
lf_submit --> FadeOutLogin : Auth success
|
|
}
|
|
|
|
state FadeOutLogin {
|
|
state "CSS transition\n(opacity → 0)" as fade
|
|
}
|
|
|
|
FadeOutLogin --> SplashScreen2 : Show splash\nwhile loading
|
|
|
|
state SplashScreen2 as "Splash (loading data)" {
|
|
state "startSSE() — awaiting\nfirst SSE message" as fetching
|
|
}
|
|
|
|
SplashScreen2 --> Dashboard : Data loaded\ndismissSplash()
|
|
|
|
state Dashboard {
|
|
state "Rendering Cards" as rendering
|
|
state "Status Panel Open" as status_open
|
|
state "Status Panel Closed" as status_closed
|
|
|
|
[*] --> rendering
|
|
rendering --> rendering : SSE message received\n-> renderDownloads()
|
|
rendering --> rendering : Theme change
|
|
|
|
status_closed --> status_open : Click "Status" btn\n(admin only)
|
|
status_open --> status_closed : Click close (x)
|
|
status_open --> status_open : 5s timer -> renderStatusPanel()
|
|
|
|
[*] --> status_closed
|
|
|
|
state "SSE Connection" as sse {
|
|
state "Connecting" as sc
|
|
state "Connected" as scon
|
|
state "Reconnecting" as srec
|
|
sc --> scon : First message received
|
|
scon --> srec : Connection lost
|
|
srec --> scon : Browser auto-reconnects
|
|
scon --> sc : showAll toggle changed
|
|
}
|
|
}
|
|
|
|
Dashboard --> LoginForm : Logout\n(stopSSE, clear state)
|
|
|
|
@enduml
|