From 3e5b67cb0ebab737ac3d77489b94b76067fd9c18 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Fri, 27 Feb 2026 22:32:22 -0500 Subject: [PATCH 1/2] eng-1487 reverse relation in discourse context --- .../src/components/RelationshipSection.tsx | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/apps/obsidian/src/components/RelationshipSection.tsx b/apps/obsidian/src/components/RelationshipSection.tsx index 62c00f288..8086d44ff 100644 --- a/apps/obsidian/src/components/RelationshipSection.tsx +++ b/apps/obsidian/src/components/RelationshipSection.tsx @@ -34,7 +34,8 @@ const AddRelationship = ({ }: AddRelationshipProps) => { const plugin = usePlugin(); - const [selectedRelationType, setSelectedRelationType] = useState(""); + const [selectedRelationType, setSelectedRelationType] = + useState(null); const [selectedNode, setSelectedNode] = useState(null); const [isAddingRelation, setIsAddingRelation] = useState(false); const [searchError, setSearchError] = useState(null); @@ -63,7 +64,7 @@ const AddRelationship = ({ const relations = plugin.settings.discourseRelations.filter( (relation) => - relation.relationshipTypeId === selectedRelationType && + relation.relationshipTypeId === selectedRelationType.id && (relation.sourceId === activeNodeTypeId || relation.destinationId === activeNodeTypeId), ); @@ -131,7 +132,7 @@ const AddRelationship = ({ !selectedRelationType && availableRelationTypes[0] ) { - setSelectedRelationType(availableRelationTypes[0].id); + setSelectedRelationType(availableRelationTypes[0]); } }, [availableRelationTypes, selectedRelationType]); @@ -168,7 +169,7 @@ const AddRelationship = ({ query, compatibleNodeTypeIds: nodeTypeIdsToSearch, activeFile, - selectedRelationType, + selectedRelationType: selectedRelationType?.id || "", }); if (results.length === 0 && query.length >= 2) { @@ -206,22 +207,31 @@ const AddRelationship = ({ if (!selectedRelationType || !selectedNode) return; const relationType = plugin.settings.relationTypes.find( - (r) => r.id === selectedRelationType, + (r) => r.id === selectedRelationType.id, ); if (!relationType) return; try { - const sourceId = await getNodeInstanceIdForFile(plugin, activeFile); - const destId = await getNodeInstanceIdForFile(plugin, selectedNode); - if (!sourceId || !destId) { + const activeNodeId = await getNodeInstanceIdForFile(plugin, activeFile); + const selectedNodeId = await getNodeInstanceIdForFile( + plugin, + selectedNode, + ); + if (!activeNodeId || !selectedNodeId) { new Notice( "Could not resolve node instance IDs for the selected files.", ); return; } + const sourceId = selectedRelationType.isSource + ? activeNodeId + : selectedNodeId; + const destId = selectedRelationType.isSource + ? selectedNodeId + : activeNodeId; const { alreadyExisted } = await addRelation(plugin, { - type: selectedRelationType, + type: selectedRelationType.id, source: sourceId, destination: destId, }); @@ -254,7 +264,7 @@ const AddRelationship = ({ const resetState = () => { setIsAddingRelation(false); - setSelectedRelationType(""); + setSelectedRelationType(null); setSelectedNode(null); setSearchError(null); }; @@ -276,7 +286,7 @@ const AddRelationship = ({ options={availableRelationTypes} - onSelect={(option) => option && setSelectedRelationType(option.id)} + onSelect={(option) => option && setSelectedRelationType(option)} placeholder="Select relation type" getItemText={(option) => option.label} /> From 83880b1dab82b274efb70366163a33f51e4105dd Mon Sep 17 00:00:00 2001 From: Marc-Antoine Parent Date: Fri, 27 Feb 2026 22:46:29 -0500 Subject: [PATCH 2/2] use direction in selection --- apps/obsidian/src/components/RelationshipSection.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/obsidian/src/components/RelationshipSection.tsx b/apps/obsidian/src/components/RelationshipSection.tsx index 8086d44ff..237f3e8be 100644 --- a/apps/obsidian/src/components/RelationshipSection.tsx +++ b/apps/obsidian/src/components/RelationshipSection.tsx @@ -65,12 +65,13 @@ const AddRelationship = ({ const relations = plugin.settings.discourseRelations.filter( (relation) => relation.relationshipTypeId === selectedRelationType.id && - (relation.sourceId === activeNodeTypeId || - relation.destinationId === activeNodeTypeId), + (selectedRelationType.isSource + ? relation.sourceId === activeNodeTypeId + : relation.destinationId === activeNodeTypeId), ); const compatibleNodeTypeIds = relations.map((relation) => - relation.sourceId === activeNodeTypeId + selectedRelationType.isSource ? relation.destinationId : relation.sourceId, );