Skip to content

Commit 9996b49

Browse files
authored
ENG-1487 Reverse relationships are not created properly in discourse context (#833)
1 parent ba1c98e commit 9996b49

1 file changed

Lines changed: 25 additions & 14 deletions

File tree

apps/obsidian/src/components/RelationshipSection.tsx

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)