@@ -34,7 +34,8 @@ const AddRelationship = ({
3434} : AddRelationshipProps ) => {
3535 const plugin = usePlugin ( ) ;
3636
37- const [ selectedRelationType , setSelectedRelationType ] = useState < string > ( "" ) ;
37+ const [ selectedRelationType , setSelectedRelationType ] =
38+ useState < RelationTypeOption | null > ( null ) ;
3839 const [ selectedNode , setSelectedNode ] = useState < TFile | null > ( null ) ;
3940 const [ isAddingRelation , setIsAddingRelation ] = useState ( false ) ;
4041 const [ searchError , setSearchError ] = useState < string | null > ( null ) ;
@@ -63,13 +64,14 @@ const AddRelationship = ({
6364
6465 const relations = plugin . settings . discourseRelations . filter (
6566 ( relation ) =>
66- relation . relationshipTypeId === selectedRelationType &&
67- ( relation . sourceId === activeNodeTypeId ||
68- relation . destinationId === activeNodeTypeId ) ,
67+ relation . relationshipTypeId === selectedRelationType . id &&
68+ ( selectedRelationType . isSource
69+ ? relation . sourceId === activeNodeTypeId
70+ : relation . destinationId === activeNodeTypeId ) ,
6971 ) ;
7072
7173 const compatibleNodeTypeIds = relations . map ( ( relation ) =>
72- relation . sourceId === activeNodeTypeId
74+ selectedRelationType . isSource
7375 ? relation . destinationId
7476 : relation . sourceId ,
7577 ) ;
@@ -131,7 +133,7 @@ const AddRelationship = ({
131133 ! selectedRelationType &&
132134 availableRelationTypes [ 0 ]
133135 ) {
134- setSelectedRelationType ( availableRelationTypes [ 0 ] . id ) ;
136+ setSelectedRelationType ( availableRelationTypes [ 0 ] ) ;
135137 }
136138 } , [ availableRelationTypes , selectedRelationType ] ) ;
137139
@@ -168,7 +170,7 @@ const AddRelationship = ({
168170 query,
169171 compatibleNodeTypeIds : nodeTypeIdsToSearch ,
170172 activeFile,
171- selectedRelationType,
173+ selectedRelationType : selectedRelationType ?. id || "" ,
172174 } ) ;
173175
174176 if ( results . length === 0 && query . length >= 2 ) {
@@ -206,22 +208,31 @@ const AddRelationship = ({
206208 if ( ! selectedRelationType || ! selectedNode ) return ;
207209
208210 const relationType = plugin . settings . relationTypes . find (
209- ( r ) => r . id === selectedRelationType ,
211+ ( r ) => r . id === selectedRelationType . id ,
210212 ) ;
211213 if ( ! relationType ) return ;
212214
213215 try {
214- const sourceId = await getNodeInstanceIdForFile ( plugin , activeFile ) ;
215- const destId = await getNodeInstanceIdForFile ( plugin , selectedNode ) ;
216- if ( ! sourceId || ! destId ) {
216+ const activeNodeId = await getNodeInstanceIdForFile ( plugin , activeFile ) ;
217+ const selectedNodeId = await getNodeInstanceIdForFile (
218+ plugin ,
219+ selectedNode ,
220+ ) ;
221+ if ( ! activeNodeId || ! selectedNodeId ) {
217222 new Notice (
218223 "Could not resolve node instance IDs for the selected files." ,
219224 ) ;
220225 return ;
221226 }
227+ const sourceId = selectedRelationType . isSource
228+ ? activeNodeId
229+ : selectedNodeId ;
230+ const destId = selectedRelationType . isSource
231+ ? selectedNodeId
232+ : activeNodeId ;
222233
223234 const { alreadyExisted } = await addRelation ( plugin , {
224- type : selectedRelationType ,
235+ type : selectedRelationType . id ,
225236 source : sourceId ,
226237 destination : destId ,
227238 } ) ;
@@ -254,7 +265,7 @@ const AddRelationship = ({
254265
255266 const resetState = ( ) => {
256267 setIsAddingRelation ( false ) ;
257- setSelectedRelationType ( "" ) ;
268+ setSelectedRelationType ( null ) ;
258269 setSelectedNode ( null ) ;
259270 setSearchError ( null ) ;
260271 } ;
@@ -276,7 +287,7 @@ const AddRelationship = ({
276287 < label className = "mb-2 block" > Relationship Type:</ label >
277288 < DropdownSelect < RelationTypeOption >
278289 options = { availableRelationTypes }
279- onSelect = { ( option ) => option && setSelectedRelationType ( option . id ) }
290+ onSelect = { ( option ) => option && setSelectedRelationType ( option ) }
280291 placeholder = "Select relation type"
281292 getItemText = { ( option ) => option . label }
282293 />
0 commit comments