Skip to content

Commit 2180cc7

Browse files
authored
Merge pull request #6 from Delta4AI/feat/ui-and-or-toggle
Feat/UI and or toggle
2 parents c4f75a9 + b9d765e commit 2180cc7

16 files changed

Lines changed: 2102 additions & 1134 deletions

API.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,9 +486,11 @@ an `active` flag plus slider thresholds or selected categories.
486486
> Grammar, for reference only: a property path `section::subGroup::property`
487487
> followed by exactly one condition — `BETWEEN <low> AND <high>`,
488488
> `LOWER THAN <a> OR GREATER THAN <b>` (always two-sided — there is **no**
489-
> standalone `LOWER THAN`), or `IN [value1, value2]` — with clauses combined by
490-
> `AND` / `OR` / `NOT` and grouped in parentheses. There are no `<`, `>`, or `=`
491-
> operators.
489+
> standalone `LOWER THAN`), `IN [value1, value2]`, or the unary `IS MISSING`
490+
> (true when the property is absent/empty or belongs to the other element type;
491+
> emitted automatically by the filter panel's non-strict AND join) — with
492+
> clauses combined by `AND` / `OR` / `NOT` and grouped in parentheses. There are
493+
> no `<`, `>`, or `=` operators.
492494
493495
---
494496

ARCHITECTURE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Business logic and UI:
5656
- `io.js``IOManager`: Excel/JSON loading, export (JSON / PNG / SVG), data
5757
preprocessing, Excel template generation
5858
- `ui.js` — loading overlays, UI enable/disable, notifications
59-
- `query.js` — query DSL with an AST (AND/OR/NOT, BETWEEN, IN, comparisons)
59+
- `query.js` — query DSL with an AST (AND/OR/NOT, BETWEEN, IN, IS MISSING, comparisons)
6060
- `ui_components.js` — filter UI (dropdown checklists, invertible range sliders), tooltips
6161
- `ui_style_div.js` — the styling panel (node/edge styles, badges, edge flow, density heatmap)
6262
- `metrics.js``NetworkMetrics`: degree/betweenness/closeness/eigenvector centrality, PageRank

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## 1.15.4 — 2026-07-01
4+
5+
Saved graph files load unchanged; older files default the two new per-view settings to the previous behavior (OR, non-strict).
6+
7+
### Features
8+
9+
* **OR / AND filter combination.** The filter panel (under ⚙ Details) can now combine active filters with **AND** as well as the default **OR**. AND counts only the filters you have actually narrowed, so switching modes while everything is at its default leaves the graph unchanged instead of emptying it. A **Complete cases only** option additionally hides elements that are missing any of those filters (evaluated per element type). The join mode and complete-cases flag are saved per workspace view in exported JSON.
10+
* Added an `IS MISSING` query-DSL operator — true when a property is absent/empty or belongs to the other element type — used to express the non-strict AND join. The query-editor help, guided tour, and API grammar reference now document it.
11+
312
## 1.15.1 — 2026-06-17
413

514
Saved graph files load unchanged — this release is bug fixes only.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "graph-lens-lite",
3-
"version": "1.15.3",
3+
"version": "1.15.4",
44
"main": "src/package/electron_app.js",
55
"description": "Visualise and explore property graphs in a lightweight desktop app.",
66
"homepage": "https://github.com/Delta4AI/GraphLensLite",

src/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Defaults for the graph, layouts and UI
33
*/
4-
const VERSION = "1.15.3";
4+
const VERSION = "1.15.4";
55

66
const DEFAULTS = {
77
NODE: {

src/graph/layout.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,10 @@ class GraphLayoutManager {
706706
filters: structuredClone(this.cache.data.filterDefaults),
707707
isCustom: true, // All layouts are position-based
708708
query: undefined,
709+
// How active filters combine (see updateQueryTextArea) and whether AND
710+
// requires complete cases. Persisted per view via the workspace JSON.
711+
filterJoinMode: 'OR',
712+
filterStrict: false,
709713
hideDisconnectedNodes: false,
710714
// Per-view styles
711715
nodeStyles: new Map(),

src/managers/io.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2417,6 +2417,10 @@ class IOManager {
24172417
filters: this.parseFiltersAsMap(layout.filters),
24182418
isCustom: layout.isCustom || false,
24192419
query: layout['query'] || undefined,
2420+
// Per-view filter-join settings; default for pre-1.15.4 files that
2421+
// predate them (OR / non-strict = the historical behavior).
2422+
filterJoinMode: layout.filterJoinMode === 'AND' ? 'AND' : 'OR',
2423+
filterStrict: layout.filterStrict === true,
24202424
// Per-view styles - check if already Maps
24212425
hideDisconnectedNodes: layout.hideDisconnectedNodes || false,
24222426
nodeStyles:

0 commit comments

Comments
 (0)