diff --git a/languages/de.json b/languages/de.json
index f8b93c0..fbb6e08 100644
--- a/languages/de.json
+++ b/languages/de.json
@@ -11,6 +11,7 @@
"general.close": "Schließen",
"general.retry": "Erneut versuchen",
"general.copy": "Kopieren",
+ "general.copyAll": "Alles kopieren",
"general.cut": "Ausschneiden",
"general.paste": "Einfügen",
"general.selectAll": "Alles auswählen",
diff --git a/src/main/shared/config/DefaultLanguage.config.ts b/src/main/shared/config/DefaultLanguage.config.ts
index eaaa816..298e5f4 100644
--- a/src/main/shared/config/DefaultLanguage.config.ts
+++ b/src/main/shared/config/DefaultLanguage.config.ts
@@ -9,6 +9,7 @@ const ENGLISH_STRINGS = {
'general.close': 'Close',
'general.retry': 'Retry',
'general.copy': 'Copy',
+ 'general.copyAll': 'Copy All',
'general.cut': 'Cut',
'general.paste': 'Paste',
'general.selectAll': 'Select All',
diff --git a/src/renderer/components/console/ConsoleTab.tsx b/src/renderer/components/console/ConsoleTab.tsx
index c2a3c26..51038bf 100644
--- a/src/renderer/components/console/ConsoleTab.tsx
+++ b/src/renderer/components/console/ConsoleTab.tsx
@@ -11,6 +11,7 @@ import {
VscClose,
VscFolderOpened,
VscClearAll,
+ VscCopy,
} from 'react-icons/vsc';
import { ConsoleLine } from '../../../main/shared/types/Process.types';
import { hasJarConfigured } from '../../../main/shared/types/Profile.types';
@@ -237,10 +238,12 @@ export function ConsoleTab() {
? [
{
label: t('console.copyLine'),
+ icon: ,
onClick: () => navigator.clipboard.writeText(lineCtxMenu.text),
},
{
label: t('console.copyAll'),
+ icon: ,
onClick: () => navigator.clipboard.writeText(lines.map((l) => l.text).join('\n')),
},
]
diff --git a/src/renderer/components/developer/DevApiExplorer.tsx b/src/renderer/components/developer/DevApiExplorer.tsx
index e1de830..1a7f22f 100644
--- a/src/renderer/components/developer/DevApiExplorer.tsx
+++ b/src/renderer/components/developer/DevApiExplorer.tsx
@@ -2,6 +2,7 @@ import React, { useState, useCallback } from 'react';
import { VscCheck, VscCopy, VscPlay, VscEdit, VscCode } from 'react-icons/vsc';
import { routeConfig, REST_API_CONFIG } from '../../../main/shared/config/API.config';
import { useApp } from '../../AppProvider';
+import { useTranslation } from '../../i18n/I18nProvider';
import { Button } from '../common/Button';
import { ContextMenu, ContextMenuItem } from '../common/ContextMenu';
import { RouteDefinition } from '../../..//main/shared/types/RestAPI.types';
@@ -104,6 +105,7 @@ function JsonHighlight({ text }: { text: string }) {
export function DevApiExplorer() {
const { state } = useApp();
+ const { t } = useTranslation();
const [selected, setSelected] = useState(null);
const [pathParams, setPathParams] = useState>({});
const [body, setBody] = useState('');
@@ -182,7 +184,7 @@ export function DevApiExplorer() {
y: e.clientY,
items: [
{
- label: 'Copy',
+ label: t('general.copy'),
icon: ,
disabled: !sel,
onClick: () => navigator.clipboard.writeText(sel),
@@ -198,7 +200,7 @@ export function DevApiExplorer() {
? [
{ type: 'separator' },
{
- label: 'Copy all',
+ label: t('general.copyAll'),
icon: ,
onClick: () => navigator.clipboard.writeText(response),
},
diff --git a/src/renderer/components/profiles/LogsTab.tsx b/src/renderer/components/profiles/LogsTab.tsx
index c054efa..142e870 100644
--- a/src/renderer/components/profiles/LogsTab.tsx
+++ b/src/renderer/components/profiles/LogsTab.tsx
@@ -215,14 +215,14 @@ export function LogsTab() {
onClose={() => setLogCtxMenu(null)}
items={[
{
- label: 'Copy',
+ label: t('general.copy'),
icon: ,
disabled: !logCtxMenu.sel,
onClick: () => navigator.clipboard.writeText(logCtxMenu.sel),
},
{ type: 'separator' },
{
- label: 'Copy all',
+ label: t('general.copyAll'),
icon: ,
onClick: () => navigator.clipboard.writeText(logContent),
},
diff --git a/src/renderer/components/profiles/jar/StaticJarPicker.tsx b/src/renderer/components/profiles/jar/StaticJarPicker.tsx
index e32c07e..e079780 100644
--- a/src/renderer/components/profiles/jar/StaticJarPicker.tsx
+++ b/src/renderer/components/profiles/jar/StaticJarPicker.tsx
@@ -2,6 +2,7 @@ import React from 'react';
import { Input } from '../../common/Input';
import { FolderBtn } from './FolderBtn';
import { useTranslation } from '../../../i18n/I18nProvider';
+import { useInputContextMenu } from '../../../hooks/useInputContextMenu';
interface Props {
jarPath: string;
@@ -11,15 +12,20 @@ interface Props {
export function StaticJarPicker({ jarPath, onChange, onPick }: Props) {
const { t } = useTranslation();
+ const { onContextMenu, contextMenu } = useInputContextMenu();
return (
- onChange(e.target.value)}
- placeholder={t('config.jarFilePlaceholder')}
- hint={t('config.jarFileHint')}
- rightElement={}
- />
+ <>
+ onChange(e.target.value)}
+ onContextMenu={onContextMenu}
+ placeholder={t('config.jarFilePlaceholder')}
+ hint={t('config.jarFileHint')}
+ rightElement={}
+ />
+ {contextMenu}
+ >
);
}