@@ -4,12 +4,15 @@ import (
44 "github.com/charmbracelet/bubbles/list"
55 tea "github.com/charmbracelet/bubbletea"
66 "github.com/charmbracelet/lipgloss"
7+ "github.com/opentdf/otdfctl/pkg/handlers"
78 "github.com/opentdf/otdfctl/tui/constants"
9+ "github.com/opentdf/platform/protocol/go/common"
810)
911
1012type AttributeList struct {
1113 list list.Model
1214 width int
15+ sdk handlers.Handler
1316}
1417
1518type AttributeItem struct {
@@ -19,6 +22,7 @@ type AttributeItem struct {
1922 description string
2023 rule string
2124 values []string
25+ title string
2226}
2327
2428func (m AttributeItem ) FilterValue () string {
@@ -33,16 +37,35 @@ func (m AttributeItem) Description() string {
3337 return m .description
3438}
3539
36- func InitAttributeList (items []list.Item , selectIdx int ) (tea.Model , tea.Cmd ) {
37- // TODO: fetch items from API
38-
39- m := AttributeList {}
40+ func InitAttributeList (id string , sdk handlers.Handler ) (tea.Model , tea.Cmd ) {
41+ m := AttributeList {sdk : sdk }
4042 m .list = list .New ([]list.Item {}, list .NewDefaultDelegate (), constants .WindowSize .Width , constants .WindowSize .Height )
41- if selectIdx > 0 {
42- m .list .Select (selectIdx )
43+ res , err := sdk .ListAttributes (common .ActiveStateEnum_ACTIVE_STATE_ENUM_ANY )
44+ if err != nil {
45+ return m , nil
46+ }
47+ var attrs []list.Item
48+ selectIdx := 0
49+ for i , attr := range res {
50+ var vals []string
51+ for _ , val := range attr .Values {
52+ vals = append (vals , val .Value )
53+ }
54+ if attr .Id == id {
55+ selectIdx = i
56+ }
57+ item := AttributeItem {
58+ id : attr .Id ,
59+ namespace : attr .Namespace .Name ,
60+ name : attr .Name ,
61+ rule : attr .Rule .String (),
62+ values : vals ,
63+ }
64+ attrs = append (attrs , item )
4365 }
4466 m .list .Title = "Attributes"
45- m .list .SetItems (items )
67+ m .list .SetItems (attrs )
68+ m .list .Select (selectIdx )
4669 return m .Update (WindowMsg ())
4770}
4871
@@ -76,8 +99,9 @@ func (m AttributeList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
7699 case "ctrl+c" , "q" :
77100 return m , tea .Quit
78101 case "ctrl+[" , "backspace" :
79- am , _ := InitAppMenu ()
80- am .list .Select (1 )
102+ am , _ := InitAppMenu (m .sdk )
103+ // make enum for Attributes idx in AppMenu
104+ am .list .Select (0 )
81105 return am .Update (WindowMsg ())
82106 case "down" , "j" :
83107 if m .list .Index () < len (m .list .Items ())- 1 {
@@ -87,10 +111,11 @@ func (m AttributeList) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
87111 if m .list .Index () > 0 {
88112 m .list .Select (m .list .Index () - 1 )
89113 }
90- case "c" :
91- return InitAttributeView (m .list .Items (), len (m .list .Items ()))
114+ // case "c":
115+ // create new attribute
116+ // return InitAttributeView(m.list.Items(), len(m.list.Items()))
92117 case "enter" , "e" :
93- return InitAttributeView (m .list .Items (), m .list .Index ())
118+ return InitAttributeView (m .list .Items ()[ m .list .Index ()].( AttributeItem ). id , m . sdk )
94119 case "ctrl+d" :
95120 m .list .RemoveItem (m .list .Index ())
96121 newIndex := m .list .Index () - 1
0 commit comments