dreamnode-service.ts
1 import { useInterBrainStore } from '../store/interbrain-store'; 2 import { DreamNode } from '../types/dreamnode'; 3 4 export class DreamNodeService { 5 private selectedNodes: Set<string> = new Set(); 6 private currentNode: DreamNode | null = null; 7 8 getCurrentNode(): DreamNode | null { 9 return this.currentNode; 10 } 11 12 setCurrentNode(node: DreamNode | null): void { 13 this.currentNode = node; 14 // Sync with Zustand store 15 useInterBrainStore.getState().setSelectedNode(node); 16 } 17 18 getSelectedNodes(): DreamNode[] { 19 // TODO: Implement fetching actual nodes by IDs 20 console.log('Selected node IDs:', Array.from(this.selectedNodes)); 21 return []; 22 } 23 24 toggleNodeSelection(nodeId: string): void { 25 if (this.selectedNodes.has(nodeId)) { 26 this.selectedNodes.delete(nodeId); 27 } else { 28 this.selectedNodes.add(nodeId); 29 } 30 } 31 32 clearSelection(): void { 33 this.selectedNodes.clear(); 34 } 35 36 isSelected(nodeId: string): boolean { 37 return this.selectedNodes.has(nodeId); 38 } 39 40 // Layout management methods 41 setLayout(layout: 'constellation' | 'search' | 'liminal-web' | 'edit' | 'edit-search' | 'copilot'): void { 42 const store = useInterBrainStore.getState(); 43 store.setSpatialLayout(layout); 44 } 45 46 getCurrentLayout(): 'constellation' | 'creation' | 'search' | 'liminal-web' | 'edit' | 'edit-search' | 'copilot' { 47 return useInterBrainStore.getState().spatialLayout; 48 } 49 50 // Camera management methods 51 resetCamera(): void { 52 const store = useInterBrainStore.getState(); 53 // Reset to origin for proper Dynamic View Scaling geometry 54 store.setCameraPosition([0, 0, 0]); 55 store.setCameraTarget([0, 0, 0]); 56 store.setCameraTransition(false); 57 } 58 59 setCameraPosition(position: [number, number, number]): void { 60 const store = useInterBrainStore.getState(); 61 store.setCameraPosition(position); 62 } 63 64 setCameraTarget(target: [number, number, number]): void { 65 const store = useInterBrainStore.getState(); 66 store.setCameraTarget(target); 67 } 68 69 startCameraTransition(duration: number = 1000): void { 70 const store = useInterBrainStore.getState(); 71 store.setCameraTransition(true, duration); 72 } 73 74 endCameraTransition(): void { 75 const store = useInterBrainStore.getState(); 76 store.setCameraTransition(false); 77 } 78 79 // Relationship management methods 80 async updateRelationships(_nodeId: string, _relationshipIds: string[]): Promise<void> { 81 // This will be implemented by concrete service classes 82 throw new Error('updateRelationships must be implemented by concrete service classes'); 83 } 84 85 async getRelationships(_nodeId: string): Promise<string[]> { 86 // This will be implemented by concrete service classes 87 throw new Error('getRelationships must be implemented by concrete service classes'); 88 } 89 90 async addRelationship(_nodeId: string, _relatedNodeId: string): Promise<void> { 91 // This will be implemented by concrete service classes 92 throw new Error('addRelationship must be implemented by concrete service classes'); 93 } 94 95 async removeRelationship(_nodeId: string, _relatedNodeId: string): Promise<void> { 96 // This will be implemented by concrete service classes 97 throw new Error('removeRelationship must be implemented by concrete service classes'); 98 } 99 }