package ui import ( "fmt" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) // showExitConfirmation shows a confirmation dialog when trying to exit without saving func (se *SchemaEditor) showExitConfirmation(pageToRemove, pageToSwitchTo string) { modal := tview.NewModal(). SetText("Exit without saving changes?"). AddButtons([]string{"Cancel", "No, exit without saving"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "No, exit without saving" { se.pages.RemovePage(pageToRemove) se.pages.SwitchToPage(pageToSwitchTo) } se.pages.RemovePage("exit-confirm") }) modal.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.pages.RemovePage("exit-confirm") return nil } return event }) se.pages.AddPage("exit-confirm", modal, true, true) } // showExitEditorConfirm shows confirmation dialog when trying to exit the entire editor func (se *SchemaEditor) showExitEditorConfirm() { modal := tview.NewModal(). SetText("Exit RelSpec Editor? Press ESC again to confirm."). AddButtons([]string{"Cancel", "Exit"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "Exit" { se.app.Stop() } se.pages.RemovePage("exit-editor-confirm") }) modal.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.app.Stop() return nil } return event }) se.pages.AddPage("exit-editor-confirm", modal, true, true) } // showDeleteSchemaConfirm shows confirmation dialog for schema deletion func (se *SchemaEditor) showDeleteSchemaConfirm(schemaIndex int) { modal := tview.NewModal(). SetText(fmt.Sprintf("Delete schema '%s'? This will delete all tables in this schema.", se.db.Schemas[schemaIndex].Name)). AddButtons([]string{"Cancel", "Delete"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "Delete" { se.DeleteSchema(schemaIndex) se.pages.RemovePage("schema-editor") se.pages.RemovePage("schemas") se.showSchemaList() } se.pages.RemovePage("confirm-delete-schema") }) modal.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.pages.RemovePage("confirm-delete-schema") return nil } return event }) se.pages.AddPage("confirm-delete-schema", modal, true, true) } // showDeleteTableConfirm shows confirmation dialog for table deletion func (se *SchemaEditor) showDeleteTableConfirm(schemaIndex, tableIndex int) { table := se.db.Schemas[schemaIndex].Tables[tableIndex] modal := tview.NewModal(). SetText(fmt.Sprintf("Delete table '%s'? This action cannot be undone.", table.Name)). AddButtons([]string{"Cancel", "Delete"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "Delete" { se.DeleteTable(schemaIndex, tableIndex) schema := se.db.Schemas[schemaIndex] se.pages.RemovePage("table-editor") se.pages.RemovePage("schema-editor") se.showSchemaEditor(schemaIndex, schema) } se.pages.RemovePage("confirm-delete-table") }) modal.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.pages.RemovePage("confirm-delete-table") return nil } return event }) se.pages.AddPage("confirm-delete-table", modal, true, true) } // showDeleteColumnConfirm shows confirmation dialog for column deletion func (se *SchemaEditor) showDeleteColumnConfirm(schemaIndex, tableIndex int, columnName string) { modal := tview.NewModal(). SetText(fmt.Sprintf("Delete column '%s'? This action cannot be undone.", columnName)). AddButtons([]string{"Cancel", "Delete"}). SetDoneFunc(func(buttonIndex int, buttonLabel string) { if buttonLabel == "Delete" { se.DeleteColumn(schemaIndex, tableIndex, columnName) se.pages.RemovePage("column-editor") se.pages.RemovePage("confirm-delete-column") se.pages.SwitchToPage("table-editor") } else { se.pages.RemovePage("confirm-delete-column") } }) modal.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { if event.Key() == tcell.KeyEscape { se.pages.RemovePage("confirm-delete-column") return nil } return event }) se.pages.AddPage("confirm-delete-column", modal, true, true) }