Skip to content

Commit c6c4d8f

Browse files
committed
minor improvements and additions
Add text based filtering to showcase vs ID filtering Design is still a WIP
1 parent abaf1f1 commit c6c4d8f

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

src/Gom/main.blp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,21 @@ Adw.ToastOverlay overlay {
1212
spacing: 18;
1313

1414
Box {
15-
spacing: 12;
15+
styles [
16+
"linked"
17+
]
18+
19+
Entry filter_entry {
20+
placeholder-text: "Enter Text";
21+
width-request: 250;
22+
}
1623

24+
Button filter_button {
25+
label: _("Filter");
26+
}
27+
}
28+
29+
Box {
1730
styles [
1831
"linked"
1932
]
@@ -29,8 +42,6 @@ Adw.ToastOverlay overlay {
2942
}
3043

3144
Box {
32-
spacing: 12;
33-
3445
styles [
3546
"linked"
3647
]

src/Gom/main.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ let adapter, repository;
2727

2828
function initDatabase() {
2929
adapter = new Gom.Adapter();
30-
adapter.open_sync(`${GLib.get_home_dir()}/gom-js-workbench.db`);
30+
adapter.open_sync(':memory:',);
3131
repository = new Gom.Repository({ adapter: adapter });
3232

3333
ItemClass.set_table('items');
@@ -56,6 +56,8 @@ const url_entry = workbench.builder.get_object("url_entry");
5656
const id_entry = workbench.builder.get_object("id_entry");
5757
const insert_button = workbench.builder.get_object("insert_button");
5858
const find_button = workbench.builder.get_object("find_button");
59+
const filter_entry = workbench.builder.get_object("filter_entry");
60+
const filter_button = workbench.builder.get_object("filter_button");
5961
const result_label = workbench.builder.get_object("result_label");
6062
const overlay = workbench.builder.get_object("overlay");
6163

@@ -90,6 +92,38 @@ find_button.connect("clicked", () => {
9092

9193
});
9294

95+
filter_button.connect("clicked", () => {
96+
data_model.remove_all();
97+
const filter_text = filter_entry.text.trim();
98+
if (filter_text === "") {
99+
result_label.label = "Enter a value";
100+
return;
101+
}
102+
103+
const filter = Gom.Filter.new_glob(ItemClass, 'url', `*${filter_text}*`);
104+
const filtered_items = repository.find_sync(ItemClass, filter);
105+
106+
if (filtered_items) {
107+
const count = filtered_items.get_count();
108+
if (count > 0) {
109+
filtered_items.fetch_async(0, count, () => {
110+
for (let i = 0; i < count; i++) {
111+
const item = filtered_items.get_index(i);
112+
if (item) {
113+
data_model.append(item);
114+
}
115+
}
116+
result_label.label = "Loaded successfully";
117+
});
118+
} else {
119+
result_label.label = "No matching items found";
120+
}
121+
} else {
122+
result_label.label = "No matching items found";
123+
}
124+
});
125+
126+
93127
const factory_col1 = col1.factory;
94128
factory_col1.connect("setup", (_self, list_item) => {
95129
const label = new Gtk.Label({

0 commit comments

Comments
 (0)