Skip to content

Commit cd19c5f

Browse files
author
Aliaksandr.Shpak
committed
Fixed consumer infos tab + refresh data menu
1 parent fa5f20a commit cd19c5f

File tree

4 files changed

+55
-30
lines changed

4 files changed

+55
-30
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
version = 0.1.6
1+
version = 0.1.7
22
url = https://api.github.com/repos/alshpak/kafka_data_viewer/releases/latest
3-
update_url = https://github.com/alshpak/kafka_data_viewer/releases
3+
update_url = https://github.com/alshpak/kafka_data_viewer/releases

src/main/scala/devtools/kafka_data_viewer/ui/KafkaConsumersInfoPanes.scala

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ package devtools.kafka_data_viewer.ui
33
import devtools.kafka_data_viewer.KafkaDataViewer.ConnectionDefinition
44
import devtools.kafka_data_viewer.kafkaconn.KafkaGroupsInfo
55
import devtools.kafka_data_viewer.kafkaconn.KafkaGroupsInfo.PartitionAssignmentState
6-
import devtools.lib.rxext.Observable
76
import devtools.lib.rxext.Subject.behaviorSubject
7+
import devtools.lib.rxext.{Observable, Subject}
88
import devtools.lib.rxui.UiImplicits._
99
import devtools.lib.rxui._
10-
import Observable.just
1110

1211
class ConsumersInfoPane(val layoutData: String = "", condef: ConnectionDefinition) extends UiComponent {
1312

@@ -57,7 +56,7 @@ class ConsumersInfoPane(val layoutData: String = "", condef: ConnectionDefinitio
5756
.map(state => PartitionInfo(state)).sortBy(x => (x.name, x.partition))))
5857
.sortBy(_.name),
5958
))
60-
)/*,
59+
) /*,
6160
Option(condef.zoo).filter(!_.isEmpty).map(zoo =>
6261
Root("ZooGroups",
6362
queryGroups = () => KafkaGroupsInfo.getZooGroups(zoo).map(
@@ -66,6 +65,19 @@ class ConsumersInfoPane(val layoutData: String = "", condef: ConnectionDefinitio
6665
)))*/
6766
.filter(_.isDefined).map(_.get)
6867

68+
private val selection = Subject.publishSubject[Seq[Elem]]()
69+
70+
private val menu =
71+
selection
72+
.map(_.headOption)
73+
.map(_.map {
74+
case x: Root => Seq(UiMenuItem("Refresh", () => x.refresh()))
75+
case x: Group => Seq(UiMenuItem("Refresh", () => x.refresh()))
76+
case _ => Seq()
77+
})
78+
.map(_.getOrElse(Seq()))
79+
80+
6981
override def content(): UiWidget = UiPanel(layoutData, Grid(), items = Seq(
7082
UiTree[Elem]("grow", items = items,
7183
columns = Seq[UiColumn[Elem]](
@@ -78,19 +90,16 @@ class ConsumersInfoPane(val layoutData: String = "", condef: ConnectionDefinitio
7890
UiColumn("Host", _.host),
7991
UiColumn("Client ID", _.clientId)
8092
),
93+
selection = selection,
8194
subitems = _.subitems(),
8295
expanded = _ => false,
8396
hasChildren = {
8497
case Root(_, _) => true
8598
case Group(_, _) => true
8699
case _ => false
87100
}
88-
// ,
89-
// menu = Some {
90-
// case x: Root => Seq(UiMenuItem("Refresh", () => x.refresh()))
91-
// case x: Group => Seq(UiMenuItem("Refresh", () => x.refresh()))
92-
// case _ => Seq()
93-
// }
101+
,
102+
menu = menu
94103
)
95104
))
96105
}

src/main/scala/devtools/lib/rxui/FxRender.scala

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -346,16 +346,16 @@ object FxRender {
346346
val rootItem = new TreeItem[T]()
347347
treeTable.setRoot(rootItem)
348348

349-
for (menuItems <- $(treeModel.menu)) // TODO MENU MUST BE CHANGED AS IN TABLE
350-
treeTable.setOnContextMenuRequested((event: ContextMenuEvent) =>
351-
for (selection <- Option(treeTable.getSelectionModel.getSelectedItem).flatMap(x => Option(x.getValue))) {
352-
val ctxMenuRoot = applying(new ContextMenu()) { cm =>
353-
cm.getItems.addAll(menuItems.map(itemModel =>
354-
applying(new MenuItem(itemModel.text)) { item => }).asJavaCollection)
355-
}
356-
treeTable.setContextMenu(ctxMenuRoot)
357-
ctxMenuRoot.show(treeTable, event.getScreenX, event.getScreenY)
358-
})
349+
def menuToItems(parent: ContextMenu)(itemModel: UiMenuItem): MenuItem =
350+
if (itemModel.subitems.isEmpty) applying(new MenuItem(itemModel.text)) { item => item.setOnAction { evt => parent.hide(); evt.consume(); itemModel.onSelect(); } }
351+
else applying(new Menu(itemModel.text)) { item => item.getItems.addAll(itemModel.subitems.map(menuToItems(parent)).asJavaCollection) }
352+
353+
for (menuItems: Seq[UiMenuItem] <- $(treeModel.menu); if menuItems.nonEmpty) {
354+
val ctxMenuRoot = applying(new ContextMenu()) { cm =>
355+
cm.getItems.addAll(menuItems.map(menuToItems(cm)).asJavaCollection)
356+
}
357+
treeTable.setContextMenu(ctxMenuRoot)
358+
}
359359

360360
class LazyTreeItem(val itemModel: T) extends TreeItem(itemModel) {
361361

@@ -367,8 +367,10 @@ object FxRender {
367367

368368
override def getChildren: ObservableList[TreeItem[T]] = {
369369
if (!loaded) {
370-
for (items <- $(treeModel.subitems(itemModel))) super.getChildren.setAll(items.map(new LazyTreeItem(_)).asJavaCollection) /// TODO INCORRECT YET
371370
loaded = true
371+
for (items <- $(treeModel.subitems(itemModel))) {
372+
super.getChildren.setAll(items.map(new LazyTreeItem(_)).asJavaCollection)
373+
} /// TODO INCORRECT YET
372374
}
373375
super.getChildren
374376
}

src/test/TestWidgetsSetApp.scala

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,30 @@ object TestWidgetsSetApp {
171171
override val layoutData: String = "grow"
172172

173173
trait TreeItem {
174-
val label:String
175-
val value:String = ""
176-
def subitems(): Seq[TreeItem] = Seq()
174+
val label: String
175+
val value: String = ""
176+
177+
def query(): Seq[TreeItem] = Seq()
178+
179+
private lazy val items = behaviorSubject[Seq[TreeItem]](query())
180+
181+
def subitems(): Observable[Seq[TreeItem]] = items
182+
177183
}
178-
case class RootItem(label:String = "Root") extends TreeItem {
179-
override def subitems(): Seq[TreeItem] = {
180-
Thread.sleep(10000)
184+
185+
case class RootItem(label: String = "Root") extends TreeItem {
186+
override def query(): Seq[TreeItem] = {
187+
Thread.sleep(2000)
181188
Seq(SubItem())
182189
}
183190
}
184-
case class SubItem(label: String = "SubItem", override val value: String = "SomeValue") extends TreeItem
191+
192+
case class SubItem(label: String = "SubItem", override val value: String = "SomeValue") extends TreeItem {
193+
override def query(): Seq[TreeItem] = Seq(LeafItem())
194+
}
195+
196+
197+
case class LeafItem(label: String = "LeafItem", override val value: String = "Leaf Value") extends TreeItem
185198

186199
override def content(): UiWidget =
187200
UiTree[TreeItem](layoutData,
@@ -193,7 +206,8 @@ object TestWidgetsSetApp {
193206
expanded = _ => false,
194207
subitems = _.subitems(),
195208
hasChildren = {
196-
case RootItem(_) => true
209+
case _: RootItem => true
210+
case _: SubItem => true
197211
case _ => false
198212
}
199213
)

0 commit comments

Comments
 (0)