| 416 | } |
| 417 | |
| 418 | func (m *model) initConfigView() { |
| 419 | if m.cfg == nil { |
| 420 | store, err := config.OpenStore(m.ctx, "grpc://") |
| 421 | if err != nil { |
| 422 | m.metaView.SetTitle("| Error |") |
| 423 | m.metaView.SetText("Cannot connect to config store: " + err.Error()) |
| 424 | return |
| 425 | } |
| 426 | m.cfg = store.Val() |
| 427 | m.configsView.SetSelectedFunc(func(node *tview.TreeNode) { |
| 428 | node.SetExpanded(!node.IsExpanded()) |
| 429 | }) |
| 430 | m.configsView.SetChangedFunc(func(node *tview.TreeNode) { |
| 431 | defer func() { |
| 432 | recover() |
| 433 | }() |
| 434 | js, _ := json.MarshalIndent(node.GetReference(), "", " ") |
| 435 | m.metaView.SetText(string(js)) |
| 436 | }) |
| 437 | } |
| 438 | m.metaView.SetTitle("| JSON |") |
| 439 | m.metaView.SetText("") |
| 440 | root := tview.NewTreeNode("Configs") |
| 441 | m.configsView.SetRoot(root).SetCurrentNode(root) |
| 442 | root.SetExpanded(true).SetSelectable(true).SetReference(m.cfg.Interface()) |
| 443 | m.populateTreeNode(root, []string{}, m.cfg) |
| 444 | } |
| 445 | |
| 446 | func (m *model) populateTreeNode(node *tview.TreeNode, pa []string, val kv.Values) { |
| 447 | defer func() { |