Переглянути джерело

Implemented reset on escape in create widget

arianagiroux 2 тижнів тому
батько
коміт
f306b0095a
2 змінених файлів з 29 додано та 16 видалено
  1. 0 1
      Readme.md
  2. 29 15
      tui.go

+ 0 - 1
Readme.md

@@ -20,7 +20,6 @@ go install cmd/issues.go
 - `io.go:func DeleteIssue(issue Issue) (success bool, err error) { return false, nil } // TODO: implement`
 - `tui.go:// TODO enable collection recursing (i.e, embedded collections)`
 - `tui.go:// TODO enable scroll/viewport logic`
-- `tui.go:// TODO(create widget) handle reset on esc`
 - `tui.go:// TODO(create widget) implement description field in create.create`
 
 ## See also

+ 29 - 15
tui.go

@@ -134,9 +134,17 @@ type widget interface {
 
 // -------- create widget definitions -----------------------------------------
 // ----------------------------------------------------------------------------
-// TODO(create widget) handle reset on esc
 // TODO(create widget) implement description field in create.create
 
+type ( // Type definitions for use in tea.Msg life cycle for create widget.
+	createResult Issue    // type wrapper for create.create() result
+	writeResult  any      // type wrapper for create.write() result
+	editorResult struct { // type wrapper for create.editor() result
+		err   error // any error returned by InvokeEditor
+		issue Issue // the data in the template file
+	}
+)
+
 // data struct for create widget
 type inputField struct {
 	input textinput.Model
@@ -197,15 +205,6 @@ func initialCreateWidget(path string, placeholder string) create {
 // init cmd for create widget
 func (c create) init() tea.Cmd { return textinput.Blink }
 
-type ( // Type definitions for use in tea.Msg life cycle for create widget.
-	createResult Issue    // type wrapper for create.create() result
-	writeResult  any      // type wrapper for create.write() result
-	editorResult struct { // type wrapper for create.editor() result
-		err   error // any error returned by InvokeEditor
-		issue Issue // the data in the template file
-	}
-)
-
 // update cmd for create widget
 func (c create) update(msg tea.Msg) (widget, tea.Cmd) {
 	var cmds []tea.Cmd
@@ -261,11 +260,26 @@ func (c create) update(msg tea.Msg) (widget, tea.Cmd) {
 			} else {
 				incrementSelected()
 			}
-		case "esc": // cancel
-			cmds = append(cmds, tea.Quit)
+		case "esc": // reset
+			for i, field := range c.inputFields {
+				field.input.Reset()
+				switch field.title {
+				case "title":
+					parsed := parsePathToHuman(c.Path)
+
+					if parsed == "." {
+						parsed = ""
+					}
+
+					field.input.SetValue(parsed)
+				case "status":
+					field.input.SetValue("open")
+				}
+				c.inputFields[i] = field
+			}
 		}
 	case createResult:
-		cmds = append(cmds, c.editDescription(Issue(msg)))
+		cmds = append(cmds, c.editBlankDescription(Issue(msg)))
 	case editorResult:
 		if msg.err != nil {
 			c.err = msg.err
@@ -362,7 +376,7 @@ func (c create) write(issue Issue) tea.Cmd {
 // and errors
 //
 // WARNING! THIS METHOD HANGS UNTIL THE USER KILLS THE EDITOR!
-func (c create) editDescription(issue Issue) tea.Cmd {
+func (c create) editBlankDescription(issue Issue) tea.Cmd {
 	data, err := EditTemplate(DescriptionTemplate, InvokeEditor)
 	var output string
 	for _, line := range data {
@@ -419,7 +433,7 @@ func (c create) render() tea.Msg {
 // keyhelp cmd for create widget
 func (c create) keyhelp() string {
 	var output string
-	output = output + "\ntab/shift+tab: down/up\t\tenter: input value\t\tctrl+c: quit"
+	output = output + "\ntab/shift+tab: down/up\t\tenter: input value\t\tesc: reset\t\tctrl+c: quit"
 	return output
 }