Files
vibe-kanban/frontend
Louis Knight-Webb 9bfaa6dde5 Add button to copy all process logs (vibe-kanban) (#1429)
* Done! I've implemented the "Copy all process logs" button for the `ViewProcessesDialog`. Here's a summary of the changes:

**Files modified:**

1. **`ProcessLogsViewer.tsx`** - Added `onLogsChange` callback prop and exported the `LogEntry` type

2. **`ProcessesTab.tsx`** - Added `onLogsChange` prop that passes through to ProcessLogsViewer, and clears logs when no process is selected

3. **`ViewProcessesDialog.tsx`** - Added the copy button with:
   - State management for logs and copied feedback
   - Copy button in the dialog header (right-aligned)
   - Tooltip showing "Copy logs" / "Copied!"
   - Button disabled when no logs are available
   - Uses `Copy`/`Check` icons from lucide-react

4. **i18n files** (en, es, ko, ja) - Added translation keys:
   - `copyLogs`: "Copy logs"
   - `logsCopied`: "Copied!"

**Behavior:**
- The copy button appears in the dialog header next to the title
- When clicked, it copies all log content (joined by newlines) to clipboard
- Shows a checkmark icon for 2 seconds after successful copy
- Button is disabled when viewing the process list (no logs selected)

* Cleanup script changes for task attempt 2060681f-e4c3-46a7-aca3-3e9705b53248

* Fixed! I wrapped the `Tooltip` component in `TooltipProvider` as required by shadcn/ui. The error should now be resolved - the copy button should work properly.

* Done! I've made the following changes:

1. Removed the `Tooltip`, `TooltipProvider`, `TooltipContent`, and `TooltipTrigger` components
2. Added `mr-8` margin to position the button left of the dialog's native close button
3. Added `text-green-500` to the `Check` icon for green success feedback

The button should now be properly positioned and show a green checkmark when logs are copied.

* Done! Changed `text-green-500` to `text-success` so the check icon uses the theme's success color instead of a hardcoded green.

* Done! I've fixed the vertical alignment by:

1. Moving the button outside the `DialogHeader` and positioning it absolutely
2. Using `absolute right-12 top-4` to place it exactly to the left of the close button (which is at `right-4 top-4`)
3. Using `h-4 w-4` to match the close button's icon size
4. Added `rounded-sm opacity-70 hover:opacity-100` to match the close button's styling

The copy button should now be perfectly aligned with the close button.

* Done! I've moved the copy button to `ProcessesTab` next to the "Back to list" button. The changes:

1. **Removed** the absolute-positioned icon button from `ViewProcessesDialog`
2. **Added** a text button "Copy logs" / "Copied!" in `ProcessesTab` next to "Back to list"
3. **Moved** the i18n keys from `viewProcessesDialog` to `processes` section
4. The button uses the same styling as the "Back to list" button for consistency
5. Shows green "Copied!" text for 2 seconds after successful copy

* Done! I've made the following changes to address the review comment:

1. **`ProcessLogsViewer.tsx`**: Removed the `export` keyword from `LogEntry` type - it's now internal to the file
2. **`ProcessesTab.tsx`**: Changed import from `LogEntry` to `PatchType` from `shared/types`, and updated the state and callback types accordingly

The type check passes successfully.

* Done! I've addressed the review comment by:

1. **Lifted `useLogStream` to `ProcessesTab`** - Now `ProcessesTab` calls `useLogStream(selectedProcess?.id ?? '')` directly, giving it direct access to the logs for the copy button

2. **Removed the hacky `onLogsChange` callback** - No more `useEffect` to propagate logs up via callback

3. **Using `ProcessLogsViewerContent` directly** - `ProcessesTab` now imports and uses `ProcessLogsViewerContent` with the logs from `useLogStream`

4. **Kept `ProcessLogsViewer` as a simpler component** - The default export still exists for other potential consumers, but it's now a simple wrapper without the callback prop

The data flow is now cleaner:
- `ProcessesTab` owns the log data via `useLogStream`
- `ProcessLogsViewerContent` is a pure presentation component
- No callback prop threading needed

* Done! I've added proper translations for the i18n keys:

- **Spanish (es):** "Copiar registros" / "¡Copiado!"
- **Korean (ko):** "로그 복사" / "복사됨!"
- **Japanese (ja):** "ログをコピー" / "コピーしました!"
2025-12-04 15:33:38 +00:00
..
2025-12-03 13:11:58 +00:00