-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathform_toggle.go
More file actions
76 lines (55 loc) · 1.37 KB
/
form_toggle.go
File metadata and controls
76 lines (55 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* Copyright (c) 2025, Geert JM Vanderkelen
*/
package console
type ToggleProps struct {
Options []string
Values []any
Selected func(value any) bool
DefaultValue any
}
func NewFormToggle(name, label string, dest any, props ToggleProps) *FormToggle {
return &FormToggle{
formElement: &formElement{
name: name,
label: label,
dest: dest,
},
props: props,
}
}
func NewFormToggleBool(name, label string, dest *bool, defaultValue any) *FormToggle {
return NewFormToggle(name, label, dest, ToggleProps{
Options: []string{"Yes", "No"},
Values: []any{true, false},
DefaultValue: defaultValue,
})
}
type FormToggle struct {
*formElement
props ToggleProps
}
var _ FormElementer = (*FormToggle)(nil)
func (ft *FormToggle) do() error {
toggle, err := NewToggle(ft.label, ft.props.Options, ft.props.Values)
if err != nil {
return err
}
toggle.SetSelected(ft.props.DefaultValue)
if err := toggle.Render(); err != nil {
return err
}
ft.value = toggle.Selected()
if ft.form.scanner != nil {
return ft.form.scanner(ft.value.(bool), ft.dest)
}
return nil
}
func (ft *FormToggle) AddValidator(f func(value any) error) FormElementer {
ft.validators = append(ft.validators, f)
return ft
}
func (ft *FormToggle) DefaultValue(f func(props *DefaultValueProps) DefaultValue) FormElementer {
ft.defaultValue = f
return ft
}