refactor login workflow, can now re-prompt for password if missing

This commit is contained in:
Drew Weymouth
2023-02-12 17:21:47 -08:00
parent 198b84b9c1
commit b5aa8e61f0
5 changed files with 91 additions and 41 deletions
+77
View File
@@ -0,0 +1,77 @@
package dialogs
import (
"supersonic/backend"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
)
type AddEditServerDialog struct {
widget.BaseWidget
Nickname string
Host string
Username string
Password string
OnSubmit func()
container *fyne.Container
}
var _ fyne.Widget = (*AddEditServerDialog)(nil)
func NewAddEditServerDialog(title string, prefillServer *backend.ServerConfig) *AddEditServerDialog {
a := &AddEditServerDialog{}
a.ExtendBaseWidget(a)
if prefillServer != nil {
a.Nickname = prefillServer.Nickname
a.Host = prefillServer.Hostname
a.Username = prefillServer.Username
}
titleLabel := widget.NewLabel(title)
titleLabel.TextStyle.Bold = true
nickField := widget.NewEntryWithData(binding.BindString(&a.Nickname))
nickField.SetPlaceHolder("My Server")
hostField := widget.NewEntryWithData(binding.BindString(&a.Host))
hostField.SetPlaceHolder("http://localhost:4533")
userField := widget.NewEntryWithData(binding.BindString(&a.Username))
passField := widget.NewPasswordEntry()
submit := widget.NewButton("Enter", func() {
a.Password = passField.Text
if a.OnSubmit != nil {
a.OnSubmit()
}
})
a.container = container.NewVBox(
container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()),
container.New(layout.NewFormLayout(),
widget.NewLabel("Nickname"),
nickField,
widget.NewLabel("Hostname"),
hostField,
widget.NewLabel("Username"),
userField,
widget.NewLabel("Password"),
passField,
),
widget.NewSeparator(),
container.NewHBox(
layout.NewSpacer(),
submit))
return a
}
func (a *AddEditServerDialog) MinSize() fyne.Size {
a.ExtendBaseWidget(a)
return fyne.NewSize(300, a.container.MinSize().Height)
}
func (a *AddEditServerDialog) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(a.container)
}
+11 -2
View File
@@ -6,13 +6,15 @@ import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
type LoginDialog struct {
widget.BaseWidget
OnSubmit func(server *backend.ServerConfig, password string)
OnSubmit func(server *backend.ServerConfig, password string)
OnEditServer func(server *backend.ServerConfig)
servers []*backend.ServerConfig
serverSelect *widget.Select
@@ -34,6 +36,7 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
}
l.serverSelect = widget.NewSelect(serverNames, func(_ string) {})
l.serverSelect.SetSelectedIndex(0)
editBtn := widget.NewButtonWithIcon("", theme.DocumentCreateIcon(), l.onEditServer)
l.passField = widget.NewPasswordEntry()
okBtn := widget.NewButton("OK", l.onSubmit)
@@ -41,7 +44,7 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()),
container.New(layout.NewFormLayout(),
widget.NewLabel("Server"),
l.serverSelect,
container.NewBorder(nil, nil, nil, editBtn, l.serverSelect),
widget.NewLabel("Password"),
l.passField),
widget.NewSeparator(),
@@ -64,3 +67,9 @@ func (l *LoginDialog) onSubmit() {
l.OnSubmit(l.servers[l.serverSelect.SelectedIndex()], l.passField.Text)
}
}
func (l *LoginDialog) onEditServer() {
if l.OnEditServer != nil {
l.OnEditServer(l.servers[l.serverSelect.SelectedIndex()])
}
}