Skip to content

Commit ea75ec2

Browse files
committed
Make ctrl+s hotkey work for environment modal
1 parent 79f4e69 commit ea75ec2

File tree

7 files changed

+73
-22
lines changed

7 files changed

+73
-22
lines changed

packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import EnvironmentSettings from '../EnvironmentSettings';
88
import toast from 'react-hot-toast';
99
import { useDispatch } from 'react-redux';
1010
import StyledWrapper from './StyledWrapper';
11+
import { updateEnvironmentSettingsSelectedTab } from 'providers/ReduxStore/slices/collections/index';
1112

1213
const EnvironmentSelector = ({ collection }) => {
1314
const dispatch = useDispatch();
@@ -28,6 +29,12 @@ const EnvironmentSelector = ({ collection }) => {
2829
const handleSettingsIconClick = () => {
2930
setOpenSettingsModal(true);
3031
dispatch(updateEnvironmentSettingsModalVisibility(true));
32+
dispatch(
33+
updateEnvironmentSettingsSelectedTab({
34+
environmentUid: collection.activeEnvironmentUid,
35+
collectionUid: collection.uid
36+
})
37+
)
3138
};
3239

3340
const handleModalClose = () => {

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ import { saveEnvironment } from 'providers/ReduxStore/slices/collections/actions
1414
import toast from 'react-hot-toast';
1515
import { Tooltip } from 'react-tooltip';
1616
import { getGlobalEnvironmentVariables } from 'utils/collections';
17+
import { updateEnvironment } from 'providers/ReduxStore/slices/collections/index';
1718

18-
const EnvironmentVariables = ({ environment, collection, setIsModified, originalEnvironmentVariables, onClose }) => {
19+
const EnvironmentVariables = ({ environment, collection, isModified, setIsModified, originalEnvironmentVariables, onClose }) => {
1920
const dispatch = useDispatch();
2021
const { storedTheme } = useTheme();
2122
const addButtonRef = useRef(null);
@@ -46,24 +47,24 @@ const EnvironmentVariables = ({ environment, collection, setIsModified, original
4647
})
4748
),
4849
onSubmit: (values) => {
49-
if (!formik.dirty) {
50+
if (!isModified) {
5051
toast.error('Nothing to save');
5152
return;
5253
}
5354

54-
dispatch(saveEnvironment(cloneDeep(values), environment.uid, collection.uid))
55+
dispatch(saveEnvironment(environment.uid, collection.uid))
5556
.then(() => {
56-
toast.success('Changes saved successfully');
57-
formik.resetForm({ values });
5857
setIsModified(false);
5958
})
60-
.catch(() => toast.error('An error occurred while saving the changes'));
59+
.catch((err) => console.err(err));
6160
}
6261
});
6362

6463
// Effect to track modifications.
6564
React.useEffect(() => {
66-
setIsModified(formik.dirty);
65+
if(formik.dirty){
66+
setIsModified(formik.dirty);
67+
}
6768
}, [formik.dirty]);
6869

6970
const ErrorMessage = ({ name }) => {
@@ -110,6 +111,13 @@ const EnvironmentVariables = ({ environment, collection, setIsModified, original
110111
};
111112

112113
useEffect(() => {
114+
dispatch(
115+
updateEnvironment({
116+
variables: formik.values,
117+
environmentUid: environment.uid,
118+
collectionUid: collection.uid
119+
})
120+
)
113121
if (formik.dirty) {
114122
// Smooth scrolling to the changed parameter is temporarily disabled
115123
// due to UX issues when editing the first row in a long list of environment variables.

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import DeleteEnvironment from '../../DeleteEnvironment';
55
import RenameEnvironment from '../../RenameEnvironment';
66
import EnvironmentVariables from './EnvironmentVariables';
77

8-
const EnvironmentDetails = ({ environment, collection, setIsModified, onClose }) => {
8+
const EnvironmentDetails = ({ environment, collection, isModified, setIsModified, onClose }) => {
99
const [openEditModal, setOpenEditModal] = useState(false);
1010
const [openDeleteModal, setOpenDeleteModal] = useState(false);
1111
const [openCopyModal, setOpenCopyModal] = useState(false);
@@ -38,7 +38,7 @@ const EnvironmentDetails = ({ environment, collection, setIsModified, onClose })
3838
</div>
3939

4040
<div>
41-
<EnvironmentVariables environment={environment} collection={collection} setIsModified={setIsModified} onClose={onClose} />
41+
<EnvironmentVariables environment={environment} collection={collection} isModified={isModified} setIsModified={setIsModified} onClose={onClose} />
4242
</div>
4343
</div>
4444
);

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import StyledWrapper from './StyledWrapper';
1010
import ConfirmSwitchEnv from './ConfirmSwitchEnv';
1111
import ToolHint from 'components/ToolHint';
1212
import { isEqual } from 'lodash';
13+
import { updateEnvironmentSettingsSelectedTab } from 'providers/ReduxStore/slices/collections/index';
14+
import { useDispatch } from 'react-redux';
1315

1416
const EnvironmentList = ({ selectedEnvironment, setSelectedEnvironment, collection, isModified, setIsModified, onClose }) => {
1517
const { environments } = collection;
@@ -22,6 +24,8 @@ const EnvironmentList = ({ selectedEnvironment, setSelectedEnvironment, collecti
2224

2325
const envUids = environments ? environments.map((env) => env.uid) : [];
2426
const prevEnvUids = usePrevious(envUids);
27+
28+
const dispatch = useDispatch();
2529

2630
useEffect(() => {
2731
if (selectedEnvironment) {
@@ -57,6 +61,12 @@ const EnvironmentList = ({ selectedEnvironment, setSelectedEnvironment, collecti
5761

5862
const handleEnvironmentClick = (env) => {
5963
if (!isModified) {
64+
dispatch(
65+
updateEnvironmentSettingsSelectedTab({
66+
environmentUid: env.uid,
67+
collectionUid: collection.uid
68+
})
69+
)
6070
setSelectedEnvironment(env);
6171
} else {
6272
setSwitchEnvConfirmClose(true);
@@ -139,6 +149,7 @@ const EnvironmentList = ({ selectedEnvironment, setSelectedEnvironment, collecti
139149
<EnvironmentDetails
140150
environment={selectedEnvironment}
141151
collection={collection}
152+
isModified={isModified}
142153
setIsModified={setIsModified}
143154
originalEnvironmentVariables={originalEnvironmentVariables}
144155
onClose={onClose}

packages/bruno-app/src/providers/Hotkeys/index.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import {
1515
import { findCollectionByUid, findItemInCollection } from 'utils/collections';
1616
import { closeTabs, switchTab } from 'providers/ReduxStore/slices/tabs';
1717
import { getKeyBindingsForActionAllOS } from './keyMappings';
18+
import { saveEnvironment } from 'providers/ReduxStore/slices/collections/actions';
19+
import { updateEnvironmentSettingsSelectedTab } from 'providers/ReduxStore/slices/collections/index';
1820

1921
export const HotkeysContext = React.createContext();
2022

@@ -39,13 +41,18 @@ export const HotkeysProvider = (props) => {
3941
// save hotkey
4042
useEffect(() => {
4143
Mousetrap.bind([...getKeyBindingsForActionAllOS('save')], (e) => {
42-
if (isEnvironmentSettingsModalOpen) {
43-
console.log('todo: save environment settings');
44-
} else {
45-
const activeTab = find(tabs, (t) => t.uid === activeTabUid);
46-
if (activeTab) {
47-
const collection = findCollectionByUid(collections, activeTab.collectionUid);
48-
if (collection) {
44+
const activeTab = find(tabs, (t) => t.uid === activeTabUid);
45+
if (activeTab) {
46+
const collection = findCollectionByUid(collections, activeTab.collectionUid);
47+
if(collection){
48+
if (isEnvironmentSettingsModalOpen) {
49+
dispatch(
50+
saveEnvironment(
51+
collection.environmentSettingsSelectedTab,
52+
collection.uid
53+
)
54+
)
55+
} else {
4956
const item = findItemInCollection(collection, activeTab.uid);
5057
if (item && item.uid) {
5158
if (activeTab.type === 'folder-settings') {
@@ -103,6 +110,12 @@ export const HotkeysProvider = (props) => {
103110
const collection = findCollectionByUid(collections, activeTab.collectionUid);
104111

105112
if (collection) {
113+
dispatch(
114+
updateEnvironmentSettingsSelectedTab({
115+
environmentUid: collection.activeEnvironmentUid,
116+
collectionUid: collection.uid
117+
})
118+
)
106119
setShowEnvSettingsModal(true);
107120
}
108121
}

packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ export const deleteEnvironment = (environmentUid, collectionUid) => (dispatch, g
992992
});
993993
};
994994

995-
export const saveEnvironment = (variables, environmentUid, collectionUid) => (dispatch, getState) => {
995+
export const saveEnvironment = (environmentUid, collectionUid) => (dispatch, getState) => {
996996
return new Promise((resolve, reject) => {
997997
const state = getState();
998998
const collection = findCollectionByUid(state.collections.collections, collectionUid);
@@ -1006,14 +1006,16 @@ export const saveEnvironment = (variables, environmentUid, collectionUid) => (di
10061006
return reject(new Error('Environment not found'));
10071007
}
10081008

1009-
environment.variables = variables;
1010-
10111009
const { ipcRenderer } = window;
10121010
environmentSchema
10131011
.validate(environment)
10141012
.then(() => ipcRenderer.invoke('renderer:save-environment', collection.pathname, environment))
1013+
.then(toast.success('Environment saved successfully'))
10151014
.then(resolve)
1016-
.catch(reject);
1015+
.catch((err) => {
1016+
toast.error('Failed to save environment!');
1017+
reject(err);
1018+
});
10171019
});
10181020
};
10191021

packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export const collectionsSlice = createSlice({
147147
collection.environments = filter(collection.environments, (e) => e.uid !== environment.uid);
148148
}
149149
},
150-
saveEnvironment: (state, action) => {
150+
updateEnvironment: (state, action) => {
151151
const { variables, environmentUid, collectionUid } = action.payload;
152152
const collection = findCollectionByUid(state.collections, collectionUid);
153153

@@ -175,6 +175,15 @@ export const collectionsSlice = createSlice({
175175
}
176176
}
177177
},
178+
updateEnvironmentSettingsSelectedTab: (state, action) => {
179+
const { environmentUid, collectionUid } = action.payload;
180+
181+
const collection = findCollectionByUid(state.collections, collectionUid);
182+
183+
if (collection) {
184+
collection.environmentSettingsSelectedTab = environmentUid;
185+
}
186+
},
178187
newItem: (state, action) => {
179188
const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
180189

@@ -2189,8 +2198,9 @@ export const {
21892198
updateSettingsSelectedTab,
21902199
updatedFolderSettingsSelectedTab,
21912200
collectionUnlinkEnvFileEvent,
2192-
saveEnvironment,
2201+
updateEnvironment,
21932202
selectEnvironment,
2203+
updateEnvironmentSettingsSelectedTab,
21942204
newItem,
21952205
deleteItem,
21962206
renameItem,

0 commit comments

Comments
 (0)