Skip to content

Commit

Permalink
feat: show project list
Browse files Browse the repository at this point in the history
  • Loading branch information
bashbunni committed Mar 28, 2022
1 parent e6a27f3 commit dece9ba
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 48 deletions.
16 changes: 0 additions & 16 deletions cmd/project-management/main.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package main

import (
"fmt"
"log"

"github.com/bashbunni/project-management/entry"
Expand All @@ -10,21 +9,6 @@ import (
"gorm.io/gorm"
)

// projectPrompt: input validation to create new projects or edit existing
func projectPrompt(pr project.Repository) project.Project {
var input int
pr.PrintProjects()
fmt.Println("Project ID: ")
fmt.Scanf("%d", &input)
// read in input + assign to project
fmt.Printf("selection is %d \n", input)
newproject, err := pr.CreateProject("")
if err != nil {
log.Fatal(err)
}
return newproject
}

func openSqlite() *gorm.DB {
db, err := gorm.Open(sqlite.Open("new.db"), &gorm.Config{})
if err != nil {
Expand Down
Binary file removed cmd/project-management/project-management
Binary file not shown.
21 changes: 13 additions & 8 deletions frontend/entryui/entry_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,23 @@ var (
cmds []tea.Cmd
)

type BackMsg bool

type Model struct {
state string
viewport viewport.Model
er *entry.GormRepository
activeProjectID uint
cmds []tea.Cmd
p *tea.Program
error string
}

func New(er *entry.GormRepository, activeProjectID uint, p *tea.Program) *Model {
return &Model{}
func (m Model) Init() tea.Cmd {
return nil
}

func (m Model) Init() tea.Cmd {
func New(er *entry.GormRepository, activeProjectID uint, p *tea.Program) *Model {
m := Model{er: er, activeProjectID: activeProjectID}
vp := viewport.New(8, 8)
m.viewport = vp
m.viewport.Style = lipgloss.NewStyle().
Expand All @@ -40,14 +43,14 @@ func (m Model) Init() tea.Cmd {
content = "There are no entries for this project :)"
}
if err != nil {
return err
m.error = "cannot get entry messages as single string"
}
str, err := glamour.Render(content, "dark")
if err != nil {
return err
m.error = "could not render content with glamour"
}
m.viewport.SetContent(str)
return nil
return &m
}

func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
Expand All @@ -62,7 +65,9 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case key.Matches(msg, constants.Keymap.Create):
cmds = append(cmds, m.createEntryCmd(m.activeProjectID, m.er))
case key.Matches(msg, constants.Keymap.Back):
m.state = "projects"
return m, func() tea.Msg {
return BackMsg(true)
}
case msg.String() == "ctrl+c":
return m, tea.Quit
case msg.String() == "q":
Expand Down
16 changes: 10 additions & 6 deletions frontend/projectui/project_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,20 @@ var (
cmds []tea.Cmd
)

type SelectMsg struct {
ActiveProjectID uint
}

type Model struct {
mode string
list list.Model
input textinput.Model
pr *project.GormRepository
state string
}

func New(input textinput.Model, pr *project.GormRepository, er *entry.GormRepository, state string) *Model {
func New(input textinput.Model, pr *project.GormRepository, er *entry.GormRepository, state string) tea.Model {
items := newProjectList(pr)
m := Model{mode: "", list: list.NewModel(items, list.NewDefaultDelegate(), 0, 0), input: input, pr: pr, state: state}
m := Model{mode: "", list: list.NewModel(items, list.NewDefaultDelegate(), 0, 0), input: input, pr: pr}
m.list.Title = "projects"
m.list.AdditionalShortHelpKeys = func() []key.Binding {
return []key.Binding{
Expand All @@ -39,7 +42,7 @@ func New(input textinput.Model, pr *project.GormRepository, er *entry.GormReposi
constants.Keymap.Back,
}
}
return &m
return m
}

func newProjectList(pr *project.GormRepository) []list.Item {
Expand Down Expand Up @@ -106,8 +109,9 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case msg.String() == "ctrl+c":
return m, tea.Quit
case key.Matches(msg, constants.Keymap.Enter):
m.state = "entries"
// TODO: do I need to return m?
return m, func() tea.Msg {
return SelectMsg{ActiveProjectID: m.getActiveProjectID()}
}
case key.Matches(msg, constants.Keymap.Rename):
m.mode = "edit"
m.input.Focus()
Expand Down
42 changes: 24 additions & 18 deletions frontend/tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,13 @@ const (

// implements tea.Model (Init, Update, View)
type mainModel struct {
state sessionState
project projectui.Model
entry entryui.Model
pr *project.GormRepository
er *entry.GormRepository
mode string
state sessionState
project tea.Model
entry tea.Model
pr *project.GormRepository
er *entry.GormRepository
mode string
activeProjectID uint
}

// StartTea the entry point for the UI. Initializes the model.
Expand All @@ -52,8 +53,7 @@ func StartTea(pr project.GormRepository, er entry.GormRepository) {
input.CharLimit = 250
input.Width = 50

m := mainModel{}
m.project = *projectui.New(input, &pr, &er, "projects")
m := projectui.New(input, &pr, &er, "projects")
p = tea.NewProgram(m)
p.EnterAltScreen()
if err := p.Start(); err != nil {
Expand All @@ -63,28 +63,34 @@ func StartTea(pr project.GormRepository, er entry.GormRepository) {
}

func (m mainModel) Init() tea.Cmd {
m.state = projectView
return nil
}

func (m mainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmds []tea.Cmd
switch msg := msg.(type) {
case entryui.BackMsg:
m.state = projectView
case projectui.SelectMsg:
m.activeProjectID = msg.ActiveProjectID
m.state = entryView
}

switch m.state {
case projectView:
// update View
newModel, newCmd := m.project.Update(msg)
projectModel, ok := newModel.(projectui.Model)
newProject, newCmd := m.project.Update(msg)
projectModel, ok := newProject.(projectui.Model)
if !ok {
panic("could not perform assertion on project model")
panic("could not perform assertion on projectui model")
}
m.project = projectModel
cmd = newCmd
case entryView:
// init entry view
// TODO: add getActiveProjectID
newModel, newCmd := m.entry.Update(msg)
entryModel, ok := newModel.(entryui.Model)
m.entry = *entryui.New(m.er, m.activeProjectID, p)
newEntry, newCmd := m.entry.Update(msg)
entryModel, ok := newEntry.(entryui.Model)
if !ok {
panic("could not perform assertion on entry model")
panic("could not perform assertion on projectui model")
}
m.entry = entryModel
cmd = newCmd
Expand Down

0 comments on commit dece9ba

Please sign in to comment.