forked from Mirrors/bubbletea
doc: Add table example
This commit is contained in:
parent
6faba760c2
commit
8b7b7918d3
|
@ -3,7 +3,7 @@ module examples
|
|||
go 1.13
|
||||
|
||||
require (
|
||||
github.com/charmbracelet/bubbles v0.13.0
|
||||
github.com/charmbracelet/bubbles v0.13.1-0.20220815142520-649f78e1fd8b
|
||||
github.com/charmbracelet/bubbletea v0.22.0
|
||||
github.com/charmbracelet/glamour v0.5.0
|
||||
github.com/charmbracelet/lipgloss v0.5.0
|
||||
|
|
|
@ -6,8 +6,8 @@ github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZs
|
|||
github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4=
|
||||
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
|
||||
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
|
||||
github.com/charmbracelet/bubbles v0.13.0 h1:zP/ROH3wJEBqZWKIsD50ZKKlx3ydLInq3LdD/Nrlb8w=
|
||||
github.com/charmbracelet/bubbles v0.13.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc=
|
||||
github.com/charmbracelet/bubbles v0.13.1-0.20220815142520-649f78e1fd8b h1:ppafRlD8VXOEqnUPkMvO7et9rpSsKVjUX+K3QG7tAB0=
|
||||
github.com/charmbracelet/bubbles v0.13.1-0.20220815142520-649f78e1fd8b/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc=
|
||||
github.com/charmbracelet/glamour v0.5.0 h1:wu15ykPdB7X6chxugG/NNfDUbyyrCLV9XBalj5wdu3g=
|
||||
github.com/charmbracelet/glamour v0.5.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc=
|
||||
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
|
||||
|
|
|
@ -0,0 +1,184 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/charmbracelet/bubbles/table"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
)
|
||||
|
||||
var baseStyle = lipgloss.NewStyle().
|
||||
BorderStyle(lipgloss.NormalBorder()).
|
||||
BorderForeground(lipgloss.Color("240"))
|
||||
|
||||
type model struct {
|
||||
table table.Model
|
||||
}
|
||||
|
||||
func (m model) Init() tea.Cmd { return nil }
|
||||
|
||||
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
var cmd tea.Cmd
|
||||
switch msg := msg.(type) {
|
||||
case tea.KeyMsg:
|
||||
switch msg.String() {
|
||||
case "esc":
|
||||
if m.table.Focused() {
|
||||
m.table.Blur()
|
||||
} else {
|
||||
m.table.Focus()
|
||||
}
|
||||
case "q", "ctrl+c":
|
||||
return m, tea.Quit
|
||||
case "enter":
|
||||
return m, tea.Batch(
|
||||
tea.Printf("Let's go to %s!", m.table.SelectedRow()[1]),
|
||||
)
|
||||
}
|
||||
}
|
||||
m.table, cmd = m.table.Update(msg)
|
||||
return m, cmd
|
||||
}
|
||||
|
||||
func (m model) View() string {
|
||||
return baseStyle.Render(m.table.View()) + "\n"
|
||||
}
|
||||
|
||||
func main() {
|
||||
columns := []table.Column{
|
||||
{Title: "Rank", Width: 4},
|
||||
{Title: "City", Width: 10},
|
||||
{Title: "Country", Width: 10},
|
||||
{Title: "Population", Width: 10},
|
||||
}
|
||||
|
||||
rows := []table.Row{
|
||||
{"1", "Tokyo", "Japan", "37,274,000"},
|
||||
{"2", "Delhi", "India", "32,065,760"},
|
||||
{"3", "Shanghai", "China", "28,516,904"},
|
||||
{"4", "Dhaka", "Bangladesh", "22,478,116"},
|
||||
{"5", "São Paulo", "Brazil", "22,429,800"},
|
||||
{"6", "Mexico City", "Mexico", "22,085,140"},
|
||||
{"7", "Cairo", "Egypt", "21,750,020"},
|
||||
{"8", "Beijing", "China", "21,333,332"},
|
||||
{"9", "Mumbai", "India", "20,961,472"},
|
||||
{"10", "Osaka", "Japan", "19,059,856"},
|
||||
{"11", "Chongqing", "China", "16,874,740"},
|
||||
{"12", "Karachi", "Pakistan", "16,839,950"},
|
||||
{"13", "Istanbul", "Turkey", "15,636,243"},
|
||||
{"14", "Kinshasa", "DR Congo", "15,628,085"},
|
||||
{"15", "Lagos", "Nigeria", "15,387,639"},
|
||||
{"16", "Buenos Aires", "Argentina", "15,369,919"},
|
||||
{"17", "Kolkata", "India", "15,133,888"},
|
||||
{"18", "Manila", "Philippines", "14,406,059"},
|
||||
{"19", "Tianjin", "China", "14,011,828"},
|
||||
{"20", "Guangzhou", "China", "13,964,637"},
|
||||
{"21", "Rio De Janeiro", "Brazil", "13,634,274"},
|
||||
{"22", "Lahore", "Pakistan", "13,541,764"},
|
||||
{"23", "Bangalore", "India", "13,193,035"},
|
||||
{"24", "Shenzhen", "China", "12,831,330"},
|
||||
{"25", "Moscow", "Russia", "12,640,818"},
|
||||
{"26", "Chennai", "India", "11,503,293"},
|
||||
{"27", "Bogota", "Colombia", "11,344,312"},
|
||||
{"28", "Paris", "France", "11,142,303"},
|
||||
{"29", "Jakarta", "Indonesia", "11,074,811"},
|
||||
{"30", "Lima", "Peru", "11,044,607"},
|
||||
{"31", "Bangkok", "Thailand", "10,899,698"},
|
||||
{"32", "Hyderabad", "India", "10,534,418"},
|
||||
{"33", "Seoul", "South Korea", "9,975,709"},
|
||||
{"34", "Nagoya", "Japan", "9,571,596"},
|
||||
{"35", "London", "United Kingdom", "9,540,576"},
|
||||
{"36", "Chengdu", "China", "9,478,521"},
|
||||
{"37", "Nanjing", "China", "9,429,381"},
|
||||
{"38", "Tehran", "Iran", "9,381,546"},
|
||||
{"39", "Ho Chi Minh City", "Vietnam", "9,077,158"},
|
||||
{"40", "Luanda", "Angola", "8,952,496"},
|
||||
{"41", "Wuhan", "China", "8,591,611"},
|
||||
{"42", "Xi An Shaanxi", "China", "8,537,646"},
|
||||
{"43", "Ahmedabad", "India", "8,450,228"},
|
||||
{"44", "Kuala Lumpur", "Malaysia", "8,419,566"},
|
||||
{"45", "New York City", "United States", "8,177,020"},
|
||||
{"46", "Hangzhou", "China", "8,044,878"},
|
||||
{"47", "Surat", "India", "7,784,276"},
|
||||
{"48", "Suzhou", "China", "7,764,499"},
|
||||
{"49", "Hong Kong", "Hong Kong", "7,643,256"},
|
||||
{"50", "Riyadh", "Saudi Arabia", "7,538,200"},
|
||||
{"51", "Shenyang", "China", "7,527,975"},
|
||||
{"52", "Baghdad", "Iraq", "7,511,920"},
|
||||
{"53", "Dongguan", "China", "7,511,851"},
|
||||
{"54", "Foshan", "China", "7,497,263"},
|
||||
{"55", "Dar Es Salaam", "Tanzania", "7,404,689"},
|
||||
{"56", "Pune", "India", "6,987,077"},
|
||||
{"57", "Santiago", "Chile", "6,856,939"},
|
||||
{"58", "Madrid", "Spain", "6,713,557"},
|
||||
{"59", "Haerbin", "China", "6,665,951"},
|
||||
{"60", "Toronto", "Canada", "6,312,974"},
|
||||
{"61", "Belo Horizonte", "Brazil", "6,194,292"},
|
||||
{"62", "Khartoum", "Sudan", "6,160,327"},
|
||||
{"63", "Johannesburg", "South Africa", "6,065,354"},
|
||||
{"64", "Singapore", "Singapore", "6,039,577"},
|
||||
{"65", "Dalian", "China", "5,930,140"},
|
||||
{"66", "Qingdao", "China", "5,865,232"},
|
||||
{"67", "Zhengzhou", "China", "5,690,312"},
|
||||
{"68", "Ji Nan Shandong", "China", "5,663,015"},
|
||||
{"69", "Barcelona", "Spain", "5,658,472"},
|
||||
{"70", "Saint Petersburg", "Russia", "5,535,556"},
|
||||
{"71", "Abidjan", "Ivory Coast", "5,515,790"},
|
||||
{"72", "Yangon", "Myanmar", "5,514,454"},
|
||||
{"73", "Fukuoka", "Japan", "5,502,591"},
|
||||
{"74", "Alexandria", "Egypt", "5,483,605"},
|
||||
{"75", "Guadalajara", "Mexico", "5,339,583"},
|
||||
{"76", "Ankara", "Turkey", "5,309,690"},
|
||||
{"77", "Chittagong", "Bangladesh", "5,252,842"},
|
||||
{"78", "Addis Ababa", "Ethiopia", "5,227,794"},
|
||||
{"79", "Melbourne", "Australia", "5,150,766"},
|
||||
{"80", "Nairobi", "Kenya", "5,118,844"},
|
||||
{"81", "Hanoi", "Vietnam", "5,067,352"},
|
||||
{"82", "Sydney", "Australia", "5,056,571"},
|
||||
{"83", "Monterrey", "Mexico", "5,036,535"},
|
||||
{"84", "Changsha", "China", "4,809,887"},
|
||||
{"85", "Brasilia", "Brazil", "4,803,877"},
|
||||
{"86", "Cape Town", "South Africa", "4,800,954"},
|
||||
{"87", "Jiddah", "Saudi Arabia", "4,780,740"},
|
||||
{"88", "Urumqi", "China", "4,710,203"},
|
||||
{"89", "Kunming", "China", "4,657,381"},
|
||||
{"90", "Changchun", "China", "4,616,002"},
|
||||
{"91", "Hefei", "China", "4,496,456"},
|
||||
{"92", "Shantou", "China", "4,490,411"},
|
||||
{"93", "Xinbei", "Taiwan", "4,470,672"},
|
||||
{"94", "Kabul", "Afghanistan", "4,457,882"},
|
||||
{"95", "Ningbo", "China", "4,405,292"},
|
||||
{"96", "Tel Aviv", "Israel", "4,343,584"},
|
||||
{"97", "Yaounde", "Cameroon", "4,336,670"},
|
||||
{"98", "Rome", "Italy", "4,297,877"},
|
||||
{"99", "Shijiazhuang", "China", "4,285,135"},
|
||||
{"100", "Montreal", "Canada", "4,276,526"},
|
||||
}
|
||||
|
||||
t := table.New(
|
||||
table.WithColumns(columns),
|
||||
table.WithRows(rows),
|
||||
table.WithFocused(true),
|
||||
table.WithHeight(7),
|
||||
)
|
||||
|
||||
s := table.DefaultStyles()
|
||||
s.Header = s.Header.
|
||||
BorderStyle(lipgloss.NormalBorder()).
|
||||
BorderForeground(lipgloss.Color("240")).
|
||||
BorderBottom(true).
|
||||
Bold(false)
|
||||
s.Selected = s.Selected.
|
||||
Foreground(lipgloss.Color("229")).
|
||||
Background(lipgloss.Color("57")).
|
||||
Bold(false)
|
||||
t.SetStyles(s)
|
||||
|
||||
m := model{t}
|
||||
if err := tea.NewProgram(m).Start(); err != nil {
|
||||
fmt.Println("Error running program:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue