439 lines
10 KiB
Markdown
439 lines
10 KiB
Markdown
# Graph Settings Installation Guide
|
|
|
|
## 🚀 Getting Started
|
|
|
|
This guide helps you verify and test the Graph Settings feature.
|
|
|
|
## ✅ Pre-Installation Checklist
|
|
|
|
Before testing, ensure you have:
|
|
|
|
- [x] Node.js installed (v16+)
|
|
- [x] npm or yarn
|
|
- [x] ObsiViewer source code
|
|
- [x] A test vault with some markdown files
|
|
|
|
## 📦 Files Verification
|
|
|
|
Ensure these files exist in your project:
|
|
|
|
### Core Files
|
|
```
|
|
src/app/graph/
|
|
├── graph-settings.types.ts
|
|
├── graph-settings.service.ts
|
|
├── graph-runtime-adapter.ts
|
|
└── ui/
|
|
├── settings-button.component.ts
|
|
├── settings-panel.component.ts
|
|
└── sections/
|
|
├── filters-section.component.ts
|
|
├── groups-section.component.ts
|
|
├── display-section.component.ts
|
|
└── forces-section.component.ts
|
|
```
|
|
|
|
### Updated Files
|
|
```
|
|
src/components/graph-view-container/graph-view-container.component.ts
|
|
src/components/graph-view/graph-view.component.ts
|
|
server/index.mjs
|
|
```
|
|
|
|
### Documentation
|
|
```
|
|
docs/
|
|
├── GRAPH_SETTINGS.md
|
|
├── GRAPH_SETTINGS_QUICK_START.md
|
|
└── GRAPH_SETTINGS_INSTALLATION.md
|
|
GRAPH_SETTINGS_IMPLEMENTATION.md
|
|
```
|
|
|
|
## 🏗️ Installation Steps
|
|
|
|
### 1. Install Dependencies
|
|
|
|
No new dependencies needed! The feature uses existing Angular and D3 libraries.
|
|
|
|
```bash
|
|
# If starting fresh
|
|
npm install
|
|
```
|
|
|
|
### 2. Build the Application
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
### 3. Start the Server
|
|
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
The server will start on `http://localhost:4000` (or your configured port).
|
|
|
|
### 4. Open in Browser
|
|
|
|
Navigate to `http://localhost:4000` and open the graph view.
|
|
|
|
## 🧪 Testing the Feature
|
|
|
|
### Quick Smoke Test (5 minutes)
|
|
|
|
1. **Open Graph View**
|
|
- Navigate to the graph view in ObsiViewer
|
|
- You should see a gear icon (⚙️) in the top-right corner
|
|
|
|
2. **Open Settings Panel**
|
|
- Click the gear icon
|
|
- Panel should slide in from the right
|
|
- Four sections should be visible: Filters, Groups, Display, Forces
|
|
|
|
3. **Test Filters**
|
|
- Type in the search box → graph should filter
|
|
- Toggle "Tags" → tag nodes should disappear/appear
|
|
- Toggle "Orphans" → orphan nodes should disappear/appear
|
|
|
|
4. **Test Groups**
|
|
- Click "New group"
|
|
- Change the color
|
|
- Enter query: `tag:#yourtag` (use a tag from your vault)
|
|
- Nodes with that tag should change color
|
|
|
|
5. **Test Display**
|
|
- Toggle "Arrows" → arrows should appear/disappear on links
|
|
- Move "Node size" slider → nodes should grow/shrink
|
|
- Move "Link thickness" slider → links should thicken/thin
|
|
- Click "Animate" → graph should restart simulation
|
|
|
|
6. **Test Forces**
|
|
- Move any force slider → graph layout should change
|
|
- Nodes should move to new positions
|
|
|
|
7. **Test Persistence**
|
|
- Make some changes
|
|
- Reload the page
|
|
- Settings should be preserved
|
|
|
|
8. **Test File Creation**
|
|
- Check your vault directory
|
|
- Confirm `.obsidian/graph.json` exists
|
|
- Open it → should contain your settings
|
|
|
|
### Detailed Testing (30 minutes)
|
|
|
|
#### Test Filters Section
|
|
|
|
```typescript
|
|
// Expected behavior for each filter:
|
|
|
|
// Search
|
|
1. Type "test" → only nodes with "test" in title appear
|
|
2. Clear search → all nodes reappear
|
|
|
|
// Tags
|
|
1. Uncheck "Tags" → nodes starting with # disappear
|
|
2. Check "Tags" → tag nodes reappear
|
|
|
|
// Attachments
|
|
1. Uncheck "Attachments" → .pdf, .png, etc. disappear
|
|
2. Check "Attachments" → attachments reappear
|
|
|
|
// Existing files only
|
|
1. Check "Existing files only" → broken links (unresolved) disappear
|
|
2. Uncheck → unresolved links reappear
|
|
|
|
// Orphans
|
|
1. Uncheck "Orphans" → nodes with no connections disappear
|
|
2. Check "Orphans" → orphan nodes reappear
|
|
```
|
|
|
|
#### Test Groups Section
|
|
|
|
```typescript
|
|
// Color group testing:
|
|
|
|
1. Add 3 groups with different colors
|
|
2. Set queries:
|
|
- Group 1: "tag:#work" → red
|
|
- Group 2: "tag:#personal" → blue
|
|
- Group 3: "file:test" → green
|
|
3. Verify nodes match colors
|
|
4. Duplicate a group → should create copy
|
|
5. Delete a group → nodes should revert to default color
|
|
6. Change query → matching nodes should update color immediately
|
|
```
|
|
|
|
#### Test Display Section
|
|
|
|
```typescript
|
|
// Display testing:
|
|
|
|
1. Arrows:
|
|
- Toggle OFF → no arrows on links
|
|
- Toggle ON → arrows point in link direction
|
|
|
|
2. Text fade threshold:
|
|
- Move to -3 → text fades earlier
|
|
- Move to 0 → default fade
|
|
- Move to 3 → text fades later
|
|
|
|
3. Node size:
|
|
- Move to 0.25 → tiny nodes
|
|
- Move to 1.0 → default size
|
|
- Move to 3.0 → large nodes
|
|
|
|
4. Link thickness:
|
|
- Move to 0.25 → thin links
|
|
- Move to 1.0 → default thickness
|
|
- Move to 3.0 → thick links
|
|
|
|
5. Animate:
|
|
- Click → simulation should restart
|
|
- Nodes should rearrange
|
|
```
|
|
|
|
#### Test Forces Section
|
|
|
|
```typescript
|
|
// Forces testing:
|
|
|
|
1. Center force (0-2):
|
|
- 0 → nodes spread out
|
|
- 1 → moderate centering
|
|
- 2 → strong pull to center
|
|
|
|
2. Repel force (0-20):
|
|
- 0 → nodes can overlap
|
|
- 10 → default repulsion
|
|
- 20 → strong push apart
|
|
|
|
3. Link force (0-2):
|
|
- 0 → links don't constrain
|
|
- 1 → default spring force
|
|
- 2 → strong pull together
|
|
|
|
4. Link distance (20-300):
|
|
- 20 → very tight spacing
|
|
- 250 → default distance
|
|
- 300 → wide spacing
|
|
```
|
|
|
|
#### Test Persistence
|
|
|
|
```typescript
|
|
// Persistence testing:
|
|
|
|
1. Make changes in UI
|
|
2. Wait 300ms (debounce)
|
|
3. Check vault/.obsidian/graph.json → changes saved
|
|
4. Edit file manually → UI updates in ~2 seconds
|
|
5. Reload page → settings preserved
|
|
6. Check .obsidian/graph.json.bak → backup exists
|
|
```
|
|
|
|
## 🔍 Verification Checklist
|
|
|
|
### UI Verification
|
|
- [ ] Gear icon visible in graph view
|
|
- [ ] Gear icon rotates on hover
|
|
- [ ] Panel slides in smoothly
|
|
- [ ] All sections visible and collapsible
|
|
- [ ] All controls functional
|
|
- [ ] Close button works
|
|
- [ ] Esc key closes panel
|
|
- [ ] Backdrop click closes (mobile)
|
|
|
|
### Functionality Verification
|
|
- [ ] Search filters nodes
|
|
- [ ] All toggles work
|
|
- [ ] Color groups apply colors
|
|
- [ ] Sliders update in real-time
|
|
- [ ] Animate restarts simulation
|
|
- [ ] Force sliders affect layout
|
|
- [ ] Reset section works
|
|
- [ ] Reset all works
|
|
|
|
### Persistence Verification
|
|
- [ ] graph.json created in .obsidian/
|
|
- [ ] Settings save within 250ms
|
|
- [ ] Settings persist after reload
|
|
- [ ] External edits reload in UI
|
|
- [ ] Backup file (.bak) created
|
|
- [ ] Invalid JSON handled gracefully
|
|
|
|
### Integration Verification
|
|
- [ ] GET /api/vault/graph returns config
|
|
- [ ] PUT /api/vault/graph saves config
|
|
- [ ] Conflict detection works (409)
|
|
- [ ] Atomic writes prevent corruption
|
|
- [ ] Server logs no errors
|
|
|
|
### Responsive Verification
|
|
- [ ] Desktop: 400px panel width
|
|
- [ ] Mobile: full-screen panel
|
|
- [ ] Panel scrolls if content overflows
|
|
- [ ] Touch events work on mobile
|
|
- [ ] Keyboard navigation works
|
|
|
|
### Accessibility Verification
|
|
- [ ] Tab navigation works
|
|
- [ ] Enter/Space activate controls
|
|
- [ ] Esc closes panel
|
|
- [ ] ARIA labels present
|
|
- [ ] Focus visible on controls
|
|
- [ ] Screen reader friendly
|
|
|
|
## 🐛 Common Issues & Solutions
|
|
|
|
### Issue: Gear Icon Not Appearing
|
|
|
|
**Solution:**
|
|
```typescript
|
|
// Check if components are imported in graph-view-container
|
|
import { GraphSettingsButtonComponent } from '../../app/graph/ui/settings-button.component';
|
|
|
|
// Verify it's in imports array
|
|
imports: [
|
|
// ...
|
|
GraphSettingsButtonComponent
|
|
]
|
|
```
|
|
|
|
### Issue: Settings Not Saving
|
|
|
|
**Solution:**
|
|
1. Check browser console for errors
|
|
2. Verify `.obsidian` directory exists
|
|
3. Check file permissions
|
|
4. Verify server is running
|
|
5. Check server logs for errors
|
|
|
|
### Issue: Panel Not Opening
|
|
|
|
**Solution:**
|
|
```typescript
|
|
// Check if panel component is imported
|
|
import { GraphSettingsPanelComponent } from '../../app/graph/ui/settings-panel.component';
|
|
|
|
// Check signal is defined
|
|
settingsPanelOpen = signal(false);
|
|
|
|
// Check template has panel
|
|
<app-graph-settings-panel
|
|
[isOpen]="settingsPanelOpen()"
|
|
(close)="closeSettingsPanel()">
|
|
</app-graph-settings-panel>
|
|
```
|
|
|
|
### Issue: Colors Not Applying
|
|
|
|
**Solution:**
|
|
1. Check GraphRuntimeAdapter is imported
|
|
2. Verify nodeColors is passed to GraphDisplayOptions
|
|
3. Check getNodeColor() method exists in graph-view component
|
|
4. Verify SVG uses [attr.fill]="getNodeColor(node)"
|
|
|
|
### Issue: External Changes Not Detected
|
|
|
|
**Solution:**
|
|
1. Check polling interval (default 2 seconds)
|
|
2. Verify server is watching vault directory
|
|
3. Check file watcher is enabled
|
|
4. Review server logs for file system events
|
|
|
|
## 📝 Development Tips
|
|
|
|
### Debugging
|
|
|
|
```typescript
|
|
// Enable service logging
|
|
constructor() {
|
|
this.saveQueue.pipe(
|
|
tap(patch => console.log('Saving:', patch)),
|
|
debounceTime(250)
|
|
).subscribe(/* ... */);
|
|
}
|
|
|
|
// Log config changes
|
|
effect(() => {
|
|
console.log('Config updated:', this.config());
|
|
});
|
|
|
|
// Log API calls
|
|
console.log('Loading config from API...');
|
|
```
|
|
|
|
### Testing Locally
|
|
|
|
```bash
|
|
# Start with watch mode
|
|
npm run dev
|
|
|
|
# View server logs
|
|
npm start 2>&1 | tee server.log
|
|
|
|
# Test API directly
|
|
curl http://localhost:4000/api/vault/graph
|
|
|
|
# Test write
|
|
curl -X PUT http://localhost:4000/api/vault/graph \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"showArrow": true}'
|
|
```
|
|
|
|
### Performance Monitoring
|
|
|
|
```typescript
|
|
// Monitor debounce
|
|
console.time('save-debounce');
|
|
this.settingsService.save({ showArrow: true });
|
|
// Wait 250ms
|
|
console.timeEnd('save-debounce'); // Should show ~250ms
|
|
|
|
// Monitor render
|
|
effect(() => {
|
|
console.time('graph-render');
|
|
const data = this.filteredGraphData();
|
|
console.timeEnd('graph-render');
|
|
console.log('Nodes:', data.nodes.length);
|
|
});
|
|
```
|
|
|
|
## 🎯 Next Steps
|
|
|
|
After verifying everything works:
|
|
|
|
1. **Test with Real Data**: Use your actual vault
|
|
2. **Customize**: Adjust colors, filters, forces to your liking
|
|
3. **Share**: Create presets for your team
|
|
4. **Extend**: Add new features (see Future Enhancements in main docs)
|
|
|
|
## 📚 Additional Resources
|
|
|
|
- [Full Documentation](./GRAPH_SETTINGS.md)
|
|
- [Quick Start Guide](./GRAPH_SETTINGS_QUICK_START.md)
|
|
- [Implementation Summary](../GRAPH_SETTINGS_IMPLEMENTATION.md)
|
|
|
|
## 💬 Support
|
|
|
|
If you encounter issues:
|
|
|
|
1. Check browser console for errors
|
|
2. Check server logs
|
|
3. Review this installation guide
|
|
4. Check the troubleshooting section in main docs
|
|
5. Create an issue with:
|
|
- Browser version
|
|
- Node version
|
|
- Error messages
|
|
- Steps to reproduce
|
|
|
|
## ✅ Installation Complete!
|
|
|
|
Once all tests pass, you're ready to use the Graph Settings feature! 🎉
|
|
|
|
Enjoy customizing your graph view! 📊🎨
|