diff --git a/src/components/settings/EdgeFieldSettings.svelte b/src/components/settings/EdgeFieldSettings.svelte index 89dd33e2..975e3928 100644 --- a/src/components/settings/EdgeFieldSettings.svelte +++ b/src/components/settings/EdgeFieldSettings.svelte @@ -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(); }, @@ -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: { @@ -460,6 +503,22 @@ {/each} + + {#each group_labels as group_label} 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)); +};