Skip to content

Commit 6a596d3

Browse files
committed
#259 Add environment variable management functionality
1 parent 7f96839 commit 6a596d3

File tree

8 files changed

+65
-10
lines changed

8 files changed

+65
-10
lines changed

src/main/environment/service/environment-service.ts

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Collection } from 'shim/objects/collection';
77
import { VariableMap } from 'shim/objects/variables';
88
import { getSystemVariable, getSystemVariables } from './system-variable';
99
import { SettingsService } from 'main/persistence/service/settings-service';
10+
import { EnvironmentMap } from 'shim/objects/environment';
1011

1112
const persistenceService = PersistenceService.instance;
1213
const settingsService = SettingsService.instance;
@@ -60,6 +61,10 @@ export class EnvironmentService implements Initializable {
6061
this.currentCollection.variables = variables;
6162
}
6263

64+
public setEnvironmentVariables(environmentVariables: EnvironmentMap) {
65+
this.currentCollection.environments = environmentVariables;
66+
}
67+
6368
/**
6469
* Loads the collection at the specified path and sets it as the current collection.
6570
*

src/main/event/main-event-service.ts

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { TrufosObject } from 'shim/objects';
88
import { EnvironmentService } from 'main/environment/service/environment-service';
99
import { VariableMap } from 'shim/objects/variables';
1010
import { Folder } from 'shim/objects/folder';
11+
import { EnvironmentMap } from 'shim/objects/environment';
1112

1213
const persistenceService = PersistenceService.instance;
1314
const environmentService = EnvironmentService.instance;
@@ -113,6 +114,11 @@ export class MainEventService implements IEventService {
113114
await persistenceService.saveCollection(environmentService.currentCollection);
114115
}
115116

117+
async setEnvironmentVariables(environmentVariables: EnvironmentMap) {
118+
environmentService.setEnvironmentVariables(environmentVariables);
119+
await persistenceService.saveCollection(environmentService.currentCollection);
120+
}
121+
116122
async selectEnvironment(key: string) {
117123
environmentService.currentEnvironmentKey = key;
118124
}

src/renderer/components/shared/settings/SettingsModal.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,19 @@ export const SettingsModal = () => {
3737
const [isOpen, setOpen] = useState(true);
3838

3939
const save = async () => {
40-
await actions.setCollectionVariables(variableArrayToMap(collectionVariables));
40+
apply();
4141
await setEnvironmentVariables(environmentVariables);
4242
setOpen(false);
4343
};
4444

4545
const apply = async () => {
46-
await actions.setCollectionVariables(variableArrayToMap(v));
47-
await setEnvironmentVariables(environmentVariables);
46+
await actions.setCollectionVariables(variableArrayToMap(collectionVariables));
47+
await actions.setEnvironmentVariables(environmentVariables);
4848
};
4949

5050
const cancel = () => {
5151
setCollectionVariables(variableMapToArray(collectionStoreVariables));
52+
setEnvironmentVariables(environmentStoreVariables);
5253
setOpen(false);
5354
};
5455

@@ -77,7 +78,7 @@ export const SettingsModal = () => {
7778
<EnvironmentVariableTab
7879
environments={environmentVariables}
7980
onValidChange={setValid}
80-
onVariablesChange={setCollectionVariables} // TODO is wrong
81+
onEnvironmentChange={setEnvironmentVariables}
8182
/>
8283
</TabsContent>
8384
</Tabs>

src/renderer/components/shared/settings/variableTabs/EnvironmentVariableTab.tsx

+32-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { VariableObjectWithKey } from 'shim/objects/variables';
21
import { useEffect, useState } from 'react';
32
import {
43
Sidebar,
@@ -7,19 +6,23 @@ import {
76
SidebarProvider,
87
} from '@/components/ui/sidebar';
98
import { EnvironmentMap } from 'shim/objects/environment';
10-
import { variableMapToArray } from '@/components/shared/settings/variableTabs/helper/EditVariableHelper';
9+
import {
10+
variableArrayToMap,
11+
variableMapToArray,
12+
} from '@/components/shared/settings/variableTabs/helper/EditVariableHelper';
1113
import { VariableEditor } from '@/components/shared/settings/variableTabs/table/VariableEditor';
14+
import { VariableObjectWithKey } from '../../../../../shim/objects/variables';
1215

1316
export interface EnvironmentVariableEditorProps {
1417
environments: EnvironmentMap;
1518
onValidChange?: (valid: boolean) => void;
16-
onVariablesChange?: (variables: VariableObjectWithKey[]) => void;
19+
onEnvironmentChange?: (variables: EnvironmentMap) => void;
1720
}
1821

1922
/** A component that allows adding, editing and removing variables */
2023
export const EnvironmentVariableTab = ({
2124
environments,
22-
onVariablesChange,
25+
onEnvironmentChange,
2326
onValidChange,
2427
}: EnvironmentVariableEditorProps) => {
2528
const environmentList = Object.keys(environments);
@@ -30,6 +33,29 @@ export const EnvironmentVariableTab = ({
3033
);
3134
const [selectedEnvironment, setSelectedEnvironment] = useState(environmentList[0]);
3235

36+
const onVariableChange = (variables: VariableObjectWithKey[]) => {
37+
const selectedEnvironmentKey = selectedEnvironment as keyof EnvironmentMap;
38+
const variableMap = variableArrayToMap(variables);
39+
const updatedEnvironment = {
40+
...environments,
41+
[selectedEnvironmentKey]: variableMap,
42+
} as EnvironmentMap;
43+
console.log('onVariableChange', updatedEnvironment);
44+
setEditorEnvironmentVariables(variables);
45+
onEnvironmentChange(updatedEnvironment);
46+
};
47+
48+
const newEnvironment = () => {
49+
console.log('newEnvironment');
50+
const newEnvironmentName = (Math.random() + 1).toString(36).substring(7);
51+
const updatedEnvironment = {
52+
...environments,
53+
[newEnvironmentName]: {},
54+
} as EnvironmentMap;
55+
onEnvironmentChange(updatedEnvironment);
56+
setSelectedEnvironment(newEnvironmentName);
57+
};
58+
3359
useEffect(() => {
3460
const selectedEnvironmentKey = selectedEnvironment as keyof EnvironmentMap;
3561
const selectedEnvironmentVariables = environments[selectedEnvironmentKey] ?? {};
@@ -51,12 +77,12 @@ export const EnvironmentVariableTab = ({
5177
{environment}
5278
</SidebarMenuButton>
5379
))}
54-
<SidebarMenuButton> + Add Environment</SidebarMenuButton>
80+
<SidebarMenuButton onClick={newEnvironment}> + Add Environment</SidebarMenuButton>
5581
</Sidebar>
5682
<VariableEditor
5783
className={'p-4 m-1 flex-1'}
5884
variables={editorEnvironmentVariables}
59-
onVariablesChange={onVariablesChange}
85+
onVariablesChange={onVariableChange}
6086
onValidChange={onValidChange}
6187
/>
6288
</SidebarProvider>

src/renderer/services/event/renderer-event-service.ts

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export class RendererEventService implements IEventService {
5252
getActiveEnvironmentVariables = createEventMethod('getActiveEnvironmentVariables');
5353
getVariable = createEventMethod('getVariable');
5454
setCollectionVariables = createEventMethod('setCollectionVariables');
55+
setEnvironmentVariables = createEventMethod('setEnvironmentVariables');
5556
saveFolder = createEventMethod('saveFolder');
5657
selectEnvironment = createEventMethod('selectEnvironment');
5758
openCollection = createEventMethod('openCollection');

src/renderer/state/interface/VariableStateAction.ts

+2
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ export interface VariableStateActions {
1414
* @param variables The new variables to set
1515
*/
1616
setCollectionVariables(variables: VariableMap): Promise<void>;
17+
18+
setEnvironmentVariables(environmentVariables: EnvironmentMap): Promise<void>;
1719
}

src/renderer/state/variableStore.ts

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ export const useVariableStore = create<VariableState & VariableStateActions>()(
3232
state.collectionVariables = variables;
3333
});
3434
},
35+
36+
setEnvironmentVariables: async (environmentVariables) => {
37+
await eventService.setEnvironmentVariables(environmentVariables);
38+
set((state) => {
39+
state.environmentVariables = environmentVariables;
40+
});
41+
},
3542
}))
3643
);
3744

src/shim/event-service.ts

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Collection } from './objects/collection';
44
import { TrufosObject } from './objects';
55
import { VariableMap, VariableObject } from './objects/variables';
66
import { Folder } from 'shim/objects/folder';
7+
import { EnvironmentMap } from './objects/environment';
78

89
export interface IEventService {
910
/**
@@ -71,6 +72,12 @@ export interface IEventService {
7172
*/
7273
setCollectionVariables(variables: VariableMap): void;
7374

75+
/**
76+
* Replace all existing environment variables with the given ones.
77+
* @param environmentVariables
78+
*/
79+
setEnvironmentVariables(environmentVariables: EnvironmentMap): void;
80+
7481
/**
7582
* Select an environment by its key.
7683
* @param key The key of the environment to select.

0 commit comments

Comments
 (0)