mirror of
https://github.com/tiennm99/ccs.git
synced 2026-09-03 06:18:55 +00:00
feat(ui): add value input for new environment variables
- Add newEnvValue state to profile editor - Update add variable section to include key + value inputs - Apply to both OpenRouter and standard profile editors - Clear both key and value after adding variable
This commit is contained in:
@@ -16,7 +16,9 @@ import type { Settings } from './types';
|
|||||||
interface EnvEditorSectionProps {
|
interface EnvEditorSectionProps {
|
||||||
currentSettings: Settings | undefined;
|
currentSettings: Settings | undefined;
|
||||||
newEnvKey: string;
|
newEnvKey: string;
|
||||||
|
newEnvValue: string;
|
||||||
onNewEnvKeyChange: (value: string) => void;
|
onNewEnvKeyChange: (value: string) => void;
|
||||||
|
onNewEnvValueChange: (value: string) => void;
|
||||||
onEnvValueChange: (key: string, value: string) => void;
|
onEnvValueChange: (key: string, value: string) => void;
|
||||||
onAddEnvVar: () => void;
|
onAddEnvVar: () => void;
|
||||||
}
|
}
|
||||||
@@ -24,7 +26,9 @@ interface EnvEditorSectionProps {
|
|||||||
export function EnvEditorSection({
|
export function EnvEditorSection({
|
||||||
currentSettings,
|
currentSettings,
|
||||||
newEnvKey,
|
newEnvKey,
|
||||||
|
newEnvValue,
|
||||||
onNewEnvKeyChange,
|
onNewEnvKeyChange,
|
||||||
|
onNewEnvValueChange,
|
||||||
onEnvValueChange,
|
onEnvValueChange,
|
||||||
onAddEnvVar,
|
onAddEnvVar,
|
||||||
}: EnvEditorSectionProps) {
|
}: EnvEditorSectionProps) {
|
||||||
@@ -82,8 +86,15 @@ export function EnvEditorSection({
|
|||||||
placeholder="VARIABLE_NAME"
|
placeholder="VARIABLE_NAME"
|
||||||
value={newEnvKey}
|
value={newEnvKey}
|
||||||
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
|
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
|
||||||
className="font-mono text-sm h-8"
|
className="font-mono text-sm h-8 w-2/5"
|
||||||
onKeyDown={(e) => e.key === 'Enter' && onAddEnvVar()}
|
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
|
||||||
|
/>
|
||||||
|
<Input
|
||||||
|
placeholder="value"
|
||||||
|
value={newEnvValue}
|
||||||
|
onChange={(e) => onNewEnvValueChange(e.target.value)}
|
||||||
|
className="font-mono text-sm h-8 flex-1"
|
||||||
|
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ interface FriendlyUISectionProps {
|
|||||||
data: SettingsResponse | undefined;
|
data: SettingsResponse | undefined;
|
||||||
currentSettings: Settings | undefined;
|
currentSettings: Settings | undefined;
|
||||||
newEnvKey: string;
|
newEnvKey: string;
|
||||||
|
newEnvValue: string;
|
||||||
onNewEnvKeyChange: (key: string) => void;
|
onNewEnvKeyChange: (key: string) => void;
|
||||||
|
onNewEnvValueChange: (value: string) => void;
|
||||||
onEnvValueChange: (key: string, value: string) => void;
|
onEnvValueChange: (key: string, value: string) => void;
|
||||||
onAddEnvVar: () => void;
|
onAddEnvVar: () => void;
|
||||||
onEnvBulkChange?: (env: Record<string, string>) => void;
|
onEnvBulkChange?: (env: Record<string, string>) => void;
|
||||||
@@ -37,7 +39,9 @@ export function FriendlyUISection({
|
|||||||
data,
|
data,
|
||||||
currentSettings,
|
currentSettings,
|
||||||
newEnvKey,
|
newEnvKey,
|
||||||
|
newEnvValue,
|
||||||
onNewEnvKeyChange,
|
onNewEnvKeyChange,
|
||||||
|
onNewEnvValueChange,
|
||||||
onEnvValueChange,
|
onEnvValueChange,
|
||||||
onAddEnvVar,
|
onAddEnvVar,
|
||||||
onEnvBulkChange,
|
onEnvBulkChange,
|
||||||
@@ -222,8 +226,15 @@ export function FriendlyUISection({
|
|||||||
placeholder="VARIABLE_NAME"
|
placeholder="VARIABLE_NAME"
|
||||||
value={newEnvKey}
|
value={newEnvKey}
|
||||||
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
|
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
|
||||||
className="font-mono text-sm h-8"
|
className="font-mono text-sm h-8 w-2/5"
|
||||||
onKeyDown={(e) => e.key === 'Enter' && onAddEnvVar()}
|
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
|
||||||
|
/>
|
||||||
|
<Input
|
||||||
|
placeholder="value"
|
||||||
|
value={newEnvValue}
|
||||||
|
onChange={(e) => onNewEnvValueChange(e.target.value)}
|
||||||
|
className="font-mono text-sm h-8 flex-1"
|
||||||
|
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
@@ -242,7 +253,9 @@ export function FriendlyUISection({
|
|||||||
<EnvEditorSection
|
<EnvEditorSection
|
||||||
currentSettings={currentSettings}
|
currentSettings={currentSettings}
|
||||||
newEnvKey={newEnvKey}
|
newEnvKey={newEnvKey}
|
||||||
|
newEnvValue={newEnvValue}
|
||||||
onNewEnvKeyChange={onNewEnvKeyChange}
|
onNewEnvKeyChange={onNewEnvKeyChange}
|
||||||
|
onNewEnvValueChange={onNewEnvValueChange}
|
||||||
onEnvValueChange={onEnvValueChange}
|
onEnvValueChange={onEnvValueChange}
|
||||||
onAddEnvVar={onAddEnvVar}
|
onAddEnvVar={onAddEnvVar}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
|
|||||||
const [conflictDialog, setConflictDialog] = useState(false);
|
const [conflictDialog, setConflictDialog] = useState(false);
|
||||||
const [rawJsonEdits, setRawJsonEdits] = useState<string | null>(null);
|
const [rawJsonEdits, setRawJsonEdits] = useState<string | null>(null);
|
||||||
const [newEnvKey, setNewEnvKey] = useState('');
|
const [newEnvKey, setNewEnvKey] = useState('');
|
||||||
|
const [newEnvValue, setNewEnvValue] = useState('');
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
// Fetch settings for selected profile
|
// Fetch settings for selected profile
|
||||||
@@ -69,10 +70,12 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
|
|||||||
const addNewEnvVar = () => {
|
const addNewEnvVar = () => {
|
||||||
if (!newEnvKey.trim()) return;
|
if (!newEnvKey.trim()) return;
|
||||||
const key = newEnvKey.trim();
|
const key = newEnvKey.trim();
|
||||||
const newEnv = { ...(currentSettings?.env || {}), [key]: '' };
|
const value = newEnvValue;
|
||||||
setLocalEdits((prev) => ({ ...prev, [key]: '' }));
|
const newEnv = { ...(currentSettings?.env || {}), [key]: value };
|
||||||
|
setLocalEdits((prev) => ({ ...prev, [key]: value }));
|
||||||
setRawJsonEdits(JSON.stringify({ ...currentSettings, env: newEnv }, null, 2));
|
setRawJsonEdits(JSON.stringify({ ...currentSettings, env: newEnv }, null, 2));
|
||||||
setNewEnvKey('');
|
setNewEnvKey('');
|
||||||
|
setNewEnvValue('');
|
||||||
};
|
};
|
||||||
|
|
||||||
// Computed validity and changes check
|
// Computed validity and changes check
|
||||||
@@ -172,7 +175,9 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
|
|||||||
data={data}
|
data={data}
|
||||||
currentSettings={currentSettings}
|
currentSettings={currentSettings}
|
||||||
newEnvKey={newEnvKey}
|
newEnvKey={newEnvKey}
|
||||||
|
newEnvValue={newEnvValue}
|
||||||
onNewEnvKeyChange={setNewEnvKey}
|
onNewEnvKeyChange={setNewEnvKey}
|
||||||
|
onNewEnvValueChange={setNewEnvValue}
|
||||||
onEnvValueChange={updateEnvValue}
|
onEnvValueChange={updateEnvValue}
|
||||||
onAddEnvVar={addNewEnvVar}
|
onAddEnvVar={addNewEnvVar}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user