mirror of
https://github.com/aljazceru/notedeck.git
synced 2025-12-17 08:44:20 +01:00
Update SLACK.md documentation
- Remove Quick Channel Switcher feature documentation (removed per user request) - Document virtualization attempt and why it was reverted - Update keyboard shortcuts (removed Cmd+K) - Update state management (removed channel_switcher field) - Update code organization (removed channel_switcher.rs) - Update manual testing checklist - Renumber feature sections after removal The documentation now accurately reflects the current state of the branch, including the decision to defer virtualization as future work.
This commit is contained in:
40
SLACK.md
40
SLACK.md
@@ -65,28 +65,14 @@ Transform Notedeck from a TweetDeck-style multi-column interface to a modern Sla
|
|||||||
- Immediately subscribes to timeline and saves to disk
|
- Immediately subscribes to timeline and saves to disk
|
||||||
|
|
||||||
#### 5. **Keyboard Shortcuts** (`d70f3d2`)
|
#### 5. **Keyboard Shortcuts** (`d70f3d2`)
|
||||||
- **Escape**: Close dialogs/panels (priority: thread panel → dialogs → switcher)
|
- **Escape**: Close dialogs/panels (priority: thread panel → dialogs)
|
||||||
- **Cmd/Ctrl+N**: Open channel creation dialog
|
- **Cmd/Ctrl+N**: Open channel creation dialog
|
||||||
- **Cmd/Ctrl+K**: Open quick channel switcher
|
|
||||||
|
|
||||||
**Implementation:**
|
**Implementation:**
|
||||||
- Handled in `update_damus()` via `ctx.input()`
|
- Handled in `update_damus()` via `ctx.input()`
|
||||||
- Priority system prevents conflicts (check `is_open` flags)
|
- Priority system prevents conflicts (check `is_open` flags)
|
||||||
|
|
||||||
#### 6. **Quick Channel Switcher** (`5c4ecb5`)
|
#### 6. **Thread Side Panel** (`a9ce1b0`, `835b0ed`)
|
||||||
- **`channel_switcher.rs`**: Cmd+K modal for fast navigation
|
|
||||||
- Search/filter by channel name
|
|
||||||
- Arrow key navigation (↑/↓)
|
|
||||||
- Enter to select, Escape to close
|
|
||||||
- Shows unread badges and highlights current channel
|
|
||||||
|
|
||||||
**Why this way:**
|
|
||||||
- Matches Slack's Cmd+K switcher UX pattern
|
|
||||||
- Dark overlay focuses attention (semi-transparent background)
|
|
||||||
- Keyboard-first navigation for power users
|
|
||||||
- Search is simple string matching (could be enhanced with fuzzy search)
|
|
||||||
|
|
||||||
#### 7. **Thread Side Panel** (`a9ce1b0`, `835b0ed`)
|
|
||||||
- **`thread_panel.rs`**: 420px sliding panel from right
|
- **`thread_panel.rs`**: 420px sliding panel from right
|
||||||
- Wraps existing `ThreadView` component
|
- Wraps existing `ThreadView` component
|
||||||
- Semi-transparent overlay on main content
|
- Semi-transparent overlay on main content
|
||||||
@@ -98,7 +84,7 @@ Transform Notedeck from a TweetDeck-style multi-column interface to a modern Sla
|
|||||||
- **Event handling**: Thread opening triggers from ChatView actions
|
- **Event handling**: Thread opening triggers from ChatView actions
|
||||||
- **No navigation**: Panel is overlay, doesn't change route (keeps channel visible)
|
- **No navigation**: Panel is overlay, doesn't change route (keeps channel visible)
|
||||||
|
|
||||||
#### 8. **Action Handling** (`6cf9490`)
|
#### 7. **Action Handling** (`6cf9490`)
|
||||||
- **Reply**: Opens thread panel (compose reply in thread)
|
- **Reply**: Opens thread panel (compose reply in thread)
|
||||||
- **Like/React**: Sends reaction event to relays via `send_reaction_event()`
|
- **Like/React**: Sends reaction event to relays via `send_reaction_event()`
|
||||||
- **Repost**: Opens thread panel (could show repost dialog in future)
|
- **Repost**: Opens thread panel (could show repost dialog in future)
|
||||||
@@ -108,7 +94,7 @@ Transform Notedeck from a TweetDeck-style multi-column interface to a modern Sla
|
|||||||
- **Thread panel for replies**: Slack-style (reply in thread context)
|
- **Thread panel for replies**: Slack-style (reply in thread context)
|
||||||
- **Immediate UI feedback**: Mark reaction as sent before relay confirmation
|
- **Immediate UI feedback**: Mark reaction as sent before relay confirmation
|
||||||
|
|
||||||
#### 9. **ChatView Integration** (`a198391`, `352293b`)
|
#### 8. **ChatView Integration** (`a198391`, `352293b`)
|
||||||
- Conditional rendering in `timelines_view()`
|
- Conditional rendering in `timelines_view()`
|
||||||
- When channel selected: render ChatView instead of columns
|
- When channel selected: render ChatView instead of columns
|
||||||
- StripBuilder cell count adjustment (1 cell vs N columns)
|
- StripBuilder cell count adjustment (1 cell vs N columns)
|
||||||
@@ -168,7 +154,6 @@ User interacts or closes panel
|
|||||||
- `channels_cache: ChannelsCache` - All channels for all users
|
- `channels_cache: ChannelsCache` - All channels for all users
|
||||||
- `relay_config: RelayConfig` - Global relay URLs
|
- `relay_config: RelayConfig` - Global relay URLs
|
||||||
- `channel_dialog: ChannelDialog` - Channel creation modal state
|
- `channel_dialog: ChannelDialog` - Channel creation modal state
|
||||||
- `channel_switcher: ChannelSwitcher` - Cmd+K switcher state
|
|
||||||
- `thread_panel: ThreadPanel` - Thread side panel state
|
- `thread_panel: ThreadPanel` - Thread side panel state
|
||||||
|
|
||||||
**Persistence:**
|
**Persistence:**
|
||||||
@@ -266,7 +251,6 @@ crates/notedeck_columns/src/
|
|||||||
└── ui/
|
└── ui/
|
||||||
├── channel_sidebar.rs # Left sidebar with channels
|
├── channel_sidebar.rs # Left sidebar with channels
|
||||||
├── channel_dialog.rs # Channel creation modal
|
├── channel_dialog.rs # Channel creation modal
|
||||||
├── channel_switcher.rs # Cmd+K quick switcher
|
|
||||||
├── chat_view.rs # Message bubble rendering
|
├── chat_view.rs # Message bubble rendering
|
||||||
└── thread_panel.rs # Thread side panel
|
└── thread_panel.rs # Thread side panel
|
||||||
```
|
```
|
||||||
@@ -361,13 +345,12 @@ if note.created_at() > channel.last_read {
|
|||||||
- Unsubscribe from timeline
|
- Unsubscribe from timeline
|
||||||
- Remove from storage
|
- Remove from storage
|
||||||
|
|
||||||
#### 6. **Improved Search in Channel Switcher**
|
#### 6. **Quick Channel Switcher** (REMOVED)
|
||||||
**Current state:** Simple case-insensitive substring matching
|
**Note:** The Cmd+K quick channel switcher was removed per user request. If re-added in the future:
|
||||||
|
- Implement with fuzzy search (e.g., "btc" matches "bitcoin")
|
||||||
**Potential improvements:**
|
|
||||||
- Fuzzy search (e.g., "btc" matches "bitcoin")
|
|
||||||
- Search in hashtags too, not just name
|
- Search in hashtags too, not just name
|
||||||
- Recently used channels at top
|
- Recently used channels at top
|
||||||
|
- Arrow key navigation
|
||||||
|
|
||||||
#### 7. **Profile Clicking in ChatView**
|
#### 7. **Profile Clicking in ChatView**
|
||||||
**Current state:** Clicking avatar/name does nothing
|
**Current state:** Clicking avatar/name does nothing
|
||||||
@@ -455,7 +438,6 @@ Track which messages have been seen by scrolling into view
|
|||||||
- [ ] Send like reaction on message (check relays receive it)
|
- [ ] Send like reaction on message (check relays receive it)
|
||||||
- [ ] Open thread by clicking message
|
- [ ] Open thread by clicking message
|
||||||
- [ ] Close thread with X, Escape, overlay click
|
- [ ] Close thread with X, Escape, overlay click
|
||||||
- [ ] Use Cmd+K switcher to navigate channels
|
|
||||||
- [ ] Use Cmd+N to create channel
|
- [ ] Use Cmd+N to create channel
|
||||||
- [ ] Verify channels persist after app restart
|
- [ ] Verify channels persist after app restart
|
||||||
- [ ] Verify relays persist after app restart
|
- [ ] Verify relays persist after app restart
|
||||||
@@ -511,8 +493,10 @@ None - existing test suite unchanged.
|
|||||||
|
|
||||||
### Memory
|
### Memory
|
||||||
- **ChannelsCache**: O(users * channels) - typically small (1 user, 5-10 channels)
|
- **ChannelsCache**: O(users * channels) - typically small (1 user, 5-10 channels)
|
||||||
- **ChatView**: Renders all messages in timeline (no virtualization yet)
|
- **ChatView**: Renders all messages in timeline (no virtualization)
|
||||||
- **Future**: Add virtual scrolling for large channels (1000+ messages)
|
- **Virtualization Attempt (Reverted)**: Tried `egui_virtual_list::VirtualList` but oversimplified the rendering callback, which broke all Slack-like features (bubbles, avatars, names, timestamps, interaction buttons)
|
||||||
|
- **Current Implementation**: Full rendering loop works correctly but may have performance issues with 1000+ messages
|
||||||
|
- **Future Work**: Implement virtualization properly by calling `render_message()` inside VirtualList callback to preserve all features while gaining performance benefits
|
||||||
|
|
||||||
### Network
|
### Network
|
||||||
- **Relay connections**: Shared across channels (efficient)
|
- **Relay connections**: Shared across channels (efficient)
|
||||||
|
|||||||
Reference in New Issue
Block a user