Skip to content
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ const Neurons = ({ children }) => {
}
};
const handleDeleteNeuron = (neuronId: string) => {
currentWorkspace.deactivateNeuron(neuronId);
const workspace = currentWorkspace.deactivateSynapsesOfNeuron(neuronId);
workspace.deactivateNeuron(neuronId);
};

const onSearchNeurons = (nameFragment) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ export default function BasicRichTreeView() {
itemVisibilityStates,
itemColorStates,
openColorPicker,
currentWorkspace.activeSynapses,
]);

// Update tree items when dependencies change
Expand Down Expand Up @@ -254,7 +255,7 @@ export default function BasicRichTreeView() {
}
}
},
[currentWorkspace, treeItems],
[currentWorkspace, treeItems, currentWorkspace.visibilities.synapses, currentWorkspace.activeSynapses],
);

useEffect(() => {
Expand Down Expand Up @@ -346,7 +347,7 @@ export default function BasicRichTreeView() {
);
},
}),
[handleColorClick, currentWorkspace, handleSynapseVisibilityToggle, treeItems],
[handleColorClick, currentWorkspace, handleSynapseVisibilityToggle, treeItems, currentWorkspace.visibilities.synapses, currentWorkspace.activeSynapses],
);

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ export const transformSynapsesToTree = (synapses: any, availableNeurons: any, cu
// Helper function to get synapse visibility
const getSynapseVisibility = (synapseId: number): boolean => {
const synapseVisibility = currentWorkspace.getSynapseVisibility(synapseId);
if (!synapseVisibility) {
return false;
}
return Object.values(synapseVisibility).every((e: any) => e === undefined || e.visibility === Visibility.Visible);
};

Expand Down
44 changes: 44 additions & 0 deletions applications/visualizer/frontend/src/models/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,25 @@ export class Workspace {
return this;
}

@triggerUpdate
deactivateSynapsesOfNeuron(neuronId: string) {
const neuronClass = this.availableNeurons?.[neuronId]?.nclass;
if (!neuronClass) {
return this;
}
const relatedSynapses = this.synapsesData?.synapses[neuronClass];
if (!relatedSynapses) {
return this;
}
for (const synapseId of collectLeafProps(relatedSynapses, "id")) {
Comment thread
aranega marked this conversation as resolved.
delete this.visibilities.synapses[synapseId];
this.activeSynapses.delete(synapseId);
}
delete this.synapsesData.synapses[neuronClass];

return this;
}

@triggerUpdate
hideNeuron(neuronId: string) {
if (!(neuronId in this.visibilities.neurons)) {
Expand Down Expand Up @@ -538,3 +557,28 @@ export class Workspace {
return allSynapses;
}
}

function collectLeafProps<T>(obj: unknown, targetProp: keyof T): T[keyof T][] {
const results: T[keyof T][] = [];

function recurse(node: unknown) {
if (node == null || typeof node !== "object") return;

// We collect the target property
if (targetProp in (node as object)) {
Comment thread
aranega marked this conversation as resolved.
results.push((node as T)[targetProp]);
Comment thread
aranega marked this conversation as resolved.
}

// Traverse every property
for (const value of Object.values(node)) {
if (Array.isArray(value)) {
for (const child of value) recurse(child);
} else if (typeof value === "object") {
recurse(value);
}
}
}

recurse(obj);
return results;
}