refactor(components): extract data models into shared models package

This commit is contained in:
2026-01-07 12:38:31 -05:00
parent cb580b48fd
commit c551a08641
13 changed files with 233 additions and 680 deletions

View File

@@ -4,6 +4,7 @@ import (
"net/http"
"strconv"
"nebula/models"
"nebula/views"
)
@@ -26,6 +27,8 @@ func RegisterRoutes(mux *http.ServeMux) {
mux.HandleFunc("POST /authorize/deny", handleAuthorizeDeny)
mux.HandleFunc("GET /dashboard", handleDashboard)
mux.HandleFunc("GET /settings", handleSettings)
}
// handleWelcome renders the full welcome page at step 1
@@ -52,7 +55,7 @@ func handleWelcomeStep(w http.ResponseWriter, r *http.Request) {
}
func handleRegister(w http.ResponseWriter, r *http.Request) {
state := views.RegisterState{Step: 1}
state := models.RegisterState{Step: 1}
views.RegisterPage(state).Render(r.Context(), w)
}
@@ -68,7 +71,7 @@ func handleRegisterStep(w http.ResponseWriter, r *http.Request) {
method = "passkey"
}
state := views.RegisterState{Step: step, Method: method}
state := models.RegisterState{Step: step, Method: method}
if r.Header.Get("HX-Request") == "true" {
views.RegisterStepWithStepper(state).Render(r.Context(), w)
@@ -79,7 +82,7 @@ func handleRegisterStep(w http.ResponseWriter, r *http.Request) {
}
func handleRegisterCapabilities(w http.ResponseWriter, r *http.Request) {
caps := views.DeviceCapabilities{
caps := models.DeviceCapabilities{
Platform: true,
CrossPlatform: true,
Conditional: true,
@@ -88,7 +91,7 @@ func handleRegisterCapabilities(w http.ResponseWriter, r *http.Request) {
}
func handleRegisterVerifyCode(w http.ResponseWriter, r *http.Request) {
state := views.RegisterState{Step: 3}
state := models.RegisterState{Step: 3}
if r.Header.Get("HX-Request") == "true" {
views.RegisterStepWithStepper(state).Render(r.Context(), w)
return
@@ -97,7 +100,7 @@ func handleRegisterVerifyCode(w http.ResponseWriter, r *http.Request) {
}
func handleLogin(w http.ResponseWriter, r *http.Request) {
state := views.LoginState{Step: "1"}
state := models.LoginState{Step: "1"}
views.LoginPage(state).Render(r.Context(), w)
}
@@ -107,7 +110,7 @@ func handleLoginStep(w http.ResponseWriter, r *http.Request) {
step = "1"
}
state := views.LoginState{Step: step}
state := models.LoginState{Step: step}
if r.Header.Get("HX-Request") == "true" {
views.LoginStepWithOOB(state).Render(r.Context(), w)
@@ -131,58 +134,7 @@ func handleLoginQRStatus(w http.ResponseWriter, r *http.Request) {
func handleAuthorize(w http.ResponseWriter, r *http.Request) {
reqType := r.URL.Query().Get("type")
if reqType == "" {
reqType = "connect"
}
req := views.AuthRequest{
Type: reqType,
App: views.AppInfo{
Name: "Uniswap",
Domain: "app.uniswap.org",
LogoIcon: "cube",
Verified: true,
},
Wallet: views.WalletInfo{
Name: "Main Wallet",
Address: "sonr1x9f...7k2m",
Balance: "1,234.56 SNR",
},
Message: `Welcome to Uniswap!
Click to sign in and accept the Uniswap Terms of Service.
This request will not trigger a blockchain transaction or cost any gas fees.
Wallet address:
sonr1x9f4h2k8m3n5p7q2r4s6t8v0w3x5y7z9a1b3c5d7k2m
Nonce: 8f4a2b1c`,
MessageHex: "0x57656c636f6d6520746f20556e697377617021...",
Transaction: &views.TxDetails{
Type: "Swap",
FromToken: views.TokenAmount{
Symbol: "ETH",
Amount: "100.00",
USD: "$234,567.00",
Initials: "E",
},
ToToken: views.TokenAmount{
Symbol: "USDC",
Amount: "125,000",
USD: "$125,000.00",
Initials: "U",
},
Network: "Sonr Mainnet",
NetworkFee: "~$0.12",
MaxFee: "$0.26",
Slippage: "0.5%",
Contract: "0x7a25...3f8b",
Function: "swapExactTokensForTokens()",
RawData: "0x38ed1739\n0000000000000000000000000000000000000056bc75e2d63100000...",
},
}
req := models.DefaultAuthRequest(reqType)
views.AuthorizePage(req).Render(r.Context(), w)
}
@@ -204,7 +156,7 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) {
if tab == "" {
tab = "overview"
}
data := views.DefaultDashboardData()
data := models.DefaultDashboardData()
if r.Header.Get("HX-Request") == "true" {
views.DashboardContent(data, tab).Render(r.Context(), w)
@@ -213,3 +165,12 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) {
views.DashboardPage(data, tab).Render(r.Context(), w)
}
func handleSettings(w http.ResponseWriter, r *http.Request) {
tab := r.URL.Query().Get("tab")
if tab == "" {
tab = "profile"
}
data := models.DefaultSettingsData()
views.SettingsPage(data, tab).Render(r.Context(), w)
}