Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions src/components/settings/EdgeFieldSettings.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,38 @@
);
});

// Drop transitive rules that reference the removed field —
// unlike rename, there's no replacement label to substitute.
settings.implied_relations.transitive =
settings.implied_relations.transitive.filter(
(rule) =>
rule.close_field !== edge_field.label &&
!rule.chain.some(
(attr) => attr.field === edge_field.label,
),
);

// Clear any edge source default pointing at the removed field.
const sources = settings.explicit_edge_sources;
if (sources.tag_note.default_field === edge_field.label)
sources.tag_note.default_field = "";
if (
sources.list_note.default_neighbour_field ===
edge_field.label
)
sources.list_note.default_neighbour_field = "";
if (sources.dendron_note.default_field === edge_field.label)
sources.dendron_note.default_field = "";
if (
sources.johnny_decimal_note.default_field ===
edge_field.label
)
sources.johnny_decimal_note.default_field = "";
if (sources.date_note.default_field === edge_field.label)
sources.date_note.default_field = "";
if (sources.regex_note.default_field === edge_field.label)
sources.regex_note.default_field = "";

autosave();
},

Expand Down Expand Up @@ -186,6 +218,17 @@

autosave();
},

set_hidden: (edge_field: EdgeField, hidden: boolean) => {
const target = settings.edge_fields.find(
(f) => f.label === edge_field.label,
);
if (!target) return;

target.hide_in_views = hidden || undefined;

autosave();
},
},

groups: {
Expand Down Expand Up @@ -460,6 +503,22 @@
{/each}
</select>

<label
class="flex items-center gap-1"
title="Hide this field from the Matrix and Tree side views"
>
<input
type="checkbox"
checked={field.hide_in_views ?? false}
onchange={(e) =>
actions.fields.set_hidden(
field,
e.currentTarget.checked,
)}
/>
Hide in views
</label>

{#each group_labels as group_label}
<Tag
tag={group_label}
Expand Down
14 changes: 10 additions & 4 deletions src/components/side_views/Matrix.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
import type { BreadcrumbsSettings } from "src/interfaces/settings";
import type BreadcrumbsPlugin from "src/main";
import { active_file_store } from "src/stores/active_file";
import { resolve_field_group_labels } from "src/utils/edge_fields";
import {
omit_hidden_view_fields,
resolve_field_group_labels,
} from "src/utils/edge_fields";
import { create_edge_sorter } from "wasm/pkg/breadcrumbs_graph_wasm";
import ChevronCollapseButton from "../button/ChevronCollapseButton.svelte";
import LockViewButton from "../button/LockViewButton.svelte";
Expand Down Expand Up @@ -62,9 +65,12 @@
});

let edge_field_labels = $derived(
resolve_field_group_labels(
plugin.settings.edge_field_groups,
settings.field_group_labels,
omit_hidden_view_fields(
plugin.settings.edge_fields,
resolve_field_group_labels(
plugin.settings.edge_field_groups,
settings.field_group_labels,
),
),
);

Expand Down
14 changes: 10 additions & 4 deletions src/components/side_views/TreeView.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
import type { BreadcrumbsSettings } from "src/interfaces/settings";
import type BreadcrumbsPlugin from "src/main";
import { active_file_store } from "src/stores/active_file";
import { resolve_field_group_labels } from "src/utils/edge_fields";
import {
omit_hidden_view_fields,
resolve_field_group_labels,
} from "src/utils/edge_fields";
import NestedEdgeList from "../NestedEdgeList.svelte";
import ChevronCollapseButton from "../button/ChevronCollapseButton.svelte";
import ChevronOpener from "../button/ChevronOpener.svelte";
Expand Down Expand Up @@ -98,9 +101,12 @@
});

let edge_field_labels = $derived(
resolve_field_group_labels(
plugin.settings.edge_field_groups,
settings.field_group_labels,
omit_hidden_view_fields(
plugin.settings.edge_fields,
resolve_field_group_labels(
plugin.settings.edge_field_groups,
settings.field_group_labels,
),
),
);

Expand Down
1 change: 1 addition & 0 deletions src/interfaces/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export type MermaidArrowType = (typeof MERMAID_ARROW_TYPES)[number];
export interface EdgeField {
label: string;
mermaid_arrow?: MermaidArrowType;
hide_in_views?: boolean;
}
export interface EdgeFieldGroup {
label: string;
Expand Down
10 changes: 10 additions & 0 deletions src/utils/edge_fields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,13 @@ export const resolve_field_group_labels = (
.filter((group) => field_group_labels.includes(group.label))
.flatMap((group) => group.fields),
);

export const omit_hidden_view_fields = (
edge_fields: BreadcrumbsSettings["edge_fields"],
labels: string[],
) => {
const hidden = new Set(
edge_fields.filter((f) => f.hide_in_views).map((f) => f.label),
);
return labels.filter((l) => !hidden.has(l));
};