diff --git a/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js b/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js
index c77749cb8..4d47186c0 100644
--- a/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js
+++ b/packages/bruno-app/src/components/CodeEditor/StyledWrapper.js
@@ -10,6 +10,12 @@ const StyledWrapper = styled.div`
flex: 1 1 0;
}
+ /* Removes the glow outline around the folded json */
+ .CodeMirror-foldmarker {
+ text-shadow: none;
+ color: ${(props) => props.theme.textLink};
+ }
+
.CodeMirror-overlayscroll-horizontal div,
.CodeMirror-overlayscroll-vertical div {
background: #d2d7db;
diff --git a/packages/bruno-app/src/components/CodeEditor/index.js b/packages/bruno-app/src/components/CodeEditor/index.js
index df9103891..ea63602df 100644
--- a/packages/bruno-app/src/components/CodeEditor/index.js
+++ b/packages/bruno-app/src/components/CodeEditor/index.js
@@ -55,6 +55,7 @@ if (!SERVER_RENDERED) {
'req.setMaxRedirects(maxRedirects)',
'req.getTimeout()',
'req.setTimeout(timeout)',
+ 'req.getExecutionMode()',
'bru',
'bru.cwd()',
'bru.getEnvName(key)',
@@ -68,6 +69,7 @@ if (!SERVER_RENDERED) {
'bru.getVar(key)',
'bru.setVar(key,value)',
'bru.deleteVar(key)',
+ 'bru.deleteAllVars()',
'bru.setNextRequest(requestName)',
'req.disableParsingResponseJson()',
'bru.getRequestVar(key)',
diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js
index 950076b60..ebc6a2fe7 100644
--- a/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js
+++ b/packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js
@@ -83,7 +83,6 @@ const VarsTable = ({ collection, vars, varType }) => {
Value
-
|
) : (
diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/RenameEnvironment/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/RenameEnvironment/index.js
index ac2d2623a..3ebcadca1 100644
--- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/RenameEnvironment/index.js
+++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/RenameEnvironment/index.js
@@ -22,6 +22,9 @@ const RenameEnvironment = ({ onClose, environment, collection }) => {
.required('name is required')
}),
onSubmit: (values) => {
+ if (values.name === environment.name) {
+ return;
+ }
dispatch(renameEnvironment(values.name, environment.uid, collection.uid))
.then(() => {
toast.success('Environment renamed successfully');
diff --git a/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js b/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js
index d0a77de44..17d79629e 100644
--- a/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js
+++ b/packages/bruno-app/src/components/FolderSettings/Vars/VarsTable/index.js
@@ -82,7 +82,6 @@ const VarsTable = ({ folder, collection, vars, varType }) => {
Value
-
|
) : (
diff --git a/packages/bruno-app/src/components/Preferences/Keybindings/StyledWrapper.js b/packages/bruno-app/src/components/Preferences/Keybindings/StyledWrapper.js
new file mode 100644
index 000000000..e12969388
--- /dev/null
+++ b/packages/bruno-app/src/components/Preferences/Keybindings/StyledWrapper.js
@@ -0,0 +1,46 @@
+import styled from 'styled-components';
+
+const StyledWrapper = styled.div`
+ table {
+ width: 100%;
+ border-collapse: collapse;
+
+ thead,
+ td {
+ border: 2px solid ${(props) => props.theme.table.border};
+ }
+
+ thead {
+ color: ${(props) => props.theme.table.thead.color};
+ font-size: 1rem;
+ user-select: none;
+ }
+
+ td {
+ padding: 4px 8px;
+ }
+
+ thead th {
+ font-weight: 600;
+ padding: 10px;
+ text-align: left;
+ }
+ }
+
+ .table-container {
+ max-height: 400px;
+ overflow-y: scroll;
+ }
+
+ .key-button {
+ display: inline-block;
+ color: ${(props) => props.theme.colors.text.white};
+ border-radius: 4px;
+ padding: 1px 5px;
+ font-family: monospace;
+ margin-right: 8px;
+ border: 1px solid #ccc;
+ }
+`;
+
+export default StyledWrapper;
diff --git a/packages/bruno-app/src/components/Preferences/Keybindings/index.js b/packages/bruno-app/src/components/Preferences/Keybindings/index.js
new file mode 100644
index 000000000..d2bc918aa
--- /dev/null
+++ b/packages/bruno-app/src/components/Preferences/Keybindings/index.js
@@ -0,0 +1,45 @@
+import StyledWrapper from './StyledWrapper';
+import React from 'react';
+import { getKeyBindingsForOS } from 'providers/Hotkeys/keyMappings';
+import { isMacOS } from 'utils/common/platform';
+
+const Keybindings = ({ close }) => {
+ const keyMapping = getKeyBindingsForOS(isMacOS() ? 'mac' : 'windows');
+
+ return (
+
+
+
+
+
+ Command |
+ Keybinding |
+
+
+
+ {keyMapping ? (
+ Object.entries(keyMapping).map(([action, { name, keys }], index) => (
+
+ {name} |
+
+ {keys.split('+').map((key, i) => (
+
+ {key}
+
+ ))}
+ |
+
+ ))
+ ) : (
+
+ No key bindings available |
+
+ )}
+
+
+
+
+ );
+};
+
+export default Keybindings;
diff --git a/packages/bruno-app/src/components/Preferences/index.js b/packages/bruno-app/src/components/Preferences/index.js
index 03b1d9ef8..3635ca5a9 100644
--- a/packages/bruno-app/src/components/Preferences/index.js
+++ b/packages/bruno-app/src/components/Preferences/index.js
@@ -1,11 +1,14 @@
import Modal from 'components/Modal/index';
import classnames from 'classnames';
import React, { useState } from 'react';
+
import Support from './Support';
import General from './General';
import Proxy from './ProxySettings';
+import Display from './Display';
+import Keybindings from './Keybindings';
+
import StyledWrapper from './StyledWrapper';
-import Display from './Display/index';
const Preferences = ({ onClose }) => {
const [tab, setTab] = useState('general');
@@ -30,6 +33,10 @@ const Preferences = ({ onClose }) => {
return ;
}
+ case 'keybindings': {
+ return ;
+ }
+
case 'support': {
return ;
}
@@ -50,6 +57,9 @@ const Preferences = ({ onClose }) => {
setTab('proxy')}>
Proxy
+ setTab('keybindings')}>
+ Keybindings
+
setTab('support')}>
Support
diff --git a/packages/bruno-app/src/components/ReorderTable/index.js b/packages/bruno-app/src/components/ReorderTable/index.js
index 9d8c11088..b5ea369a2 100644
--- a/packages/bruno-app/src/components/ReorderTable/index.js
+++ b/packages/bruno-app/src/components/ReorderTable/index.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useRef, useState, useCallback } from 'react';
+import React, { useEffect, useRef, useState, useMemo } from 'react';
import { IconGripVertical, IconMinusVertical } from '@tabler/icons';
/**
@@ -13,17 +13,17 @@ import { IconGripVertical, IconMinusVertical } from '@tabler/icons';
const ReorderTable = ({ children, updateReorderedItem }) => {
const tbodyRef = useRef();
- const [rowsOrder, setRowsOrder] = useState(React.Children.toArray(children));
const [hoveredRow, setHoveredRow] = useState(null);
const [dragStart, setDragStart] = useState(null);
+ const rowsOrder = useMemo(() => React.Children.toArray(children), [children]);
+
/**
- * useEffect hook to update the rows order and handle row hover states
+ * useEffect hook to handle row hover states
*/
useEffect(() => {
- setRowsOrder(React.Children.toArray(children));
handleRowHover(null, false);
- }, [children, dragStart]);
+ }, [children]);
const handleRowHover = (index, hoverstatus = true) => {
setHoveredRow(hoverstatus ? index : null);
@@ -48,7 +48,6 @@ const ReorderTable = ({ children, updateReorderedItem }) => {
const updatedRowsOrder = [...rowsOrder];
const [movedRow] = updatedRowsOrder.splice(fromIndex, 1);
updatedRowsOrder.splice(toIndex, 0, movedRow);
- setRowsOrder(updatedRowsOrder);
updateReorderedItem({
updateReorderedItem: updatedRowsOrder.map((row) => row.props['data-uid'])
diff --git a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
index 84f040c6e..0f94f35bb 100644
--- a/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
+++ b/packages/bruno-app/src/components/RequestPane/Vars/VarsTable/index.js
@@ -83,7 +83,6 @@ const VarsTable = ({ item, collection, vars, varType }) => {
Value
-
|
) : (
diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js
index 78977cabb..9d5648907 100644
--- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js
+++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView/index.js
@@ -32,7 +32,10 @@ const CodeView = ({ language, item }) => {
let snippet = '';
try {
- snippet = new HTTPSnippet(buildHarRequest({ request: item.request, headers })).convert(target, client);
+ snippet = new HTTPSnippet(buildHarRequest({ request: item.request, headers, type: item.type })).convert(
+ target,
+ client
+ );
} catch (e) {
console.error(e);
snippet = 'Error generating code snippet';
diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js
index 5711cdbcd..6cf8cb21a 100644
--- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js
+++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js
@@ -28,9 +28,12 @@ const RenameCollectionItem = ({ collection, item, onClose }) => {
if (!isFolder && item.draft) {
await dispatch(saveRequest(item.uid, collection.uid, true));
}
+ if (item.name === values.name) {
+ return;
+ }
dispatch(renameItem(values.name, item.uid, collection.uid))
.then(() => {
- toast.success('Request renamed!');
+ toast.success('Request renamed');
onClose();
})
.catch((err) => {
@@ -55,7 +58,7 @@ const RenameCollectionItem = ({ collection, item, onClose }) => {
handleConfirm={onSubmit}
handleCancel={onClose}
>
-