Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 25 additions & 14 deletions apps/obsidian/src/components/RelationshipSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ const AddRelationship = ({
}: AddRelationshipProps) => {
const plugin = usePlugin();

const [selectedRelationType, setSelectedRelationType] = useState<string>("");
const [selectedRelationType, setSelectedRelationType] =
useState<RelationTypeOption | null>(null);
const [selectedNode, setSelectedNode] = useState<TFile | null>(null);
const [isAddingRelation, setIsAddingRelation] = useState(false);
const [searchError, setSearchError] = useState<string | null>(null);
Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -131,7 +133,7 @@ const AddRelationship = ({
!selectedRelationType &&
availableRelationTypes[0]
) {
setSelectedRelationType(availableRelationTypes[0].id);
setSelectedRelationType(availableRelationTypes[0]);
}
}, [availableRelationTypes, selectedRelationType]);

Expand Down Expand Up @@ -168,7 +170,7 @@ const AddRelationship = ({
query,
compatibleNodeTypeIds: nodeTypeIdsToSearch,
activeFile,
selectedRelationType,
selectedRelationType: selectedRelationType?.id || "",
});

if (results.length === 0 && query.length >= 2) {
Expand Down Expand Up @@ -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,
});
Expand Down Expand Up @@ -254,7 +265,7 @@ const AddRelationship = ({

const resetState = () => {
setIsAddingRelation(false);
setSelectedRelationType("");
setSelectedRelationType(null);
setSelectedNode(null);
setSearchError(null);
};
Expand All @@ -276,7 +287,7 @@ const AddRelationship = ({
<label className="mb-2 block">Relationship Type:</label>
<DropdownSelect<RelationTypeOption>
options={availableRelationTypes}
onSelect={(option) => option && setSelectedRelationType(option.id)}
onSelect={(option) => option && setSelectedRelationType(option)}
placeholder="Select relation type"
getItemText={(option) => option.label}
/>
Expand Down