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:
Claude
2025-11-13 20:22:13 +00:00
parent 5ec5ceace3
commit bef34ba18e

View File

@@ -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)