diff --git a/apps/obsidian/src/components/RelationshipSection.tsx b/apps/obsidian/src/components/RelationshipSection.tsx index 62c00f288..237f3e8be 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,13 +64,14 @@ const AddRelationship = ({ const relations = plugin.settings.discourseRelations.filter( (relation) => - relation.relationshipTypeId === selectedRelationType && - (relation.sourceId === activeNodeTypeId || - relation.destinationId === activeNodeTypeId), + relation.relationshipTypeId === selectedRelationType.id && + (selectedRelationType.isSource + ? relation.sourceId === activeNodeTypeId + : relation.destinationId === activeNodeTypeId), ); const compatibleNodeTypeIds = relations.map((relation) => - relation.sourceId === activeNodeTypeId + selectedRelationType.isSource ? relation.destinationId : relation.sourceId, ); @@ -131,7 +133,7 @@ const AddRelationship = ({ !selectedRelationType && availableRelationTypes[0] ) { - setSelectedRelationType(availableRelationTypes[0].id); + setSelectedRelationType(availableRelationTypes[0]); } }, [availableRelationTypes, selectedRelationType]); @@ -168,7 +170,7 @@ const AddRelationship = ({ query, compatibleNodeTypeIds: nodeTypeIdsToSearch, activeFile, - selectedRelationType, + selectedRelationType: selectedRelationType?.id || "", }); if (results.length === 0 && query.length >= 2) { @@ -206,22 +208,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 +265,7 @@ const AddRelationship = ({ const resetState = () => { setIsAddingRelation(false); - setSelectedRelationType(""); + setSelectedRelationType(null); setSelectedNode(null); setSearchError(null); }; @@ -276,7 +287,7 @@ const AddRelationship = ({ options={availableRelationTypes} - onSelect={(option) => option && setSelectedRelationType(option.id)} + onSelect={(option) => option && setSelectedRelationType(option)} placeholder="Select relation type" getItemText={(option) => option.label} />