From 34ea352e4ee85e60937ee3c1db85fed583c6d16b Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 17 Dec 2024 11:26:35 +0530 Subject: [PATCH 01/13] add: document save button --- .../src/components/CollectionSettings/Docs/index.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index 18a1aca1dc..f1a66d063e 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -8,6 +8,7 @@ import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/acti import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; +import { IconDeviceFloppy } from '@tabler/icons'; const Docs = ({ collection }) => { const dispatch = useDispatch(); @@ -15,6 +16,7 @@ const Docs = ({ collection }) => { const [isEditing, setIsEditing] = useState(false); const docs = get(collection, 'root.docs', ''); const preferences = useSelector((state) => state.app.preferences); + const { theme, storedTheme } = useTheme(); const toggleViewMode = () => { setIsEditing((prev) => !prev); @@ -33,8 +35,13 @@ const Docs = ({ collection }) => { return ( -
+
{isEditing ? 'Preview' : 'Edit'} + {isEditing ? + + : null}
{isEditing ? ( From 96766b6e2fec3555c529a2de6ebc528b43f47e1a Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 24 Dec 2024 12:09:46 +0530 Subject: [PATCH 02/13] add: save btn in file and folder docs --- .../components/CollectionSettings/Docs/index.js | 11 ++++++++--- .../src/components/Documentation/index.js | 14 +++++++++++++- .../FolderSettings/Documentation/index.js | 15 ++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index f1a66d063e..2674b687bf 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -37,11 +37,16 @@ const Docs = ({ collection }) => {
{isEditing ? 'Preview' : 'Edit'} - {isEditing ? + {isEditing ? ( - : null} + ) : null}
{isEditing ? ( diff --git a/packages/bruno-app/src/components/Documentation/index.js b/packages/bruno-app/src/components/Documentation/index.js index 0af0d7588c..5f472ae1df 100644 --- a/packages/bruno-app/src/components/Documentation/index.js +++ b/packages/bruno-app/src/components/Documentation/index.js @@ -8,6 +8,7 @@ import { saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; +import { IconDeviceFloppy } from '@tabler/icons'; const Documentation = ({ item, collection }) => { const dispatch = useDispatch(); @@ -15,6 +16,7 @@ const Documentation = ({ item, collection }) => { const [isEditing, setIsEditing] = useState(false); const docs = item.draft ? get(item, 'draft.request.docs') : get(item, 'request.docs'); const preferences = useSelector((state) => state.app.preferences); + const { theme } = useTheme(); const toggleViewMode = () => { setIsEditing((prev) => !prev); @@ -38,8 +40,18 @@ const Documentation = ({ item, collection }) => { return ( -
+
{isEditing ? 'Preview' : 'Edit'} + {isEditing ? ( + + ) : null}
{isEditing ? ( diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 81a3ccd014..8183d0f453 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -8,6 +8,7 @@ import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions' import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; +import { IconDeviceFloppy } from '@tabler/icons'; const Documentation = ({ collection, folder }) => { const dispatch = useDispatch(); @@ -15,6 +16,8 @@ const Documentation = ({ collection, folder }) => { const preferences = useSelector((state) => state.app.preferences); const [isEditing, setIsEditing] = useState(false); const docs = get(folder, 'root.docs', ''); + const { theme } = useTheme(); + const toggleViewMode = () => { setIsEditing((prev) => !prev); @@ -38,8 +41,18 @@ const Documentation = ({ collection, folder }) => { return ( -
+
{isEditing ? 'Preview' : 'Edit'} + {isEditing ? ( + + ) : null}
{isEditing ? ( From d3fd0eb3c6927eab861f9c38f9a2101d2c63ba8f Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 31 Dec 2024 16:31:14 +0530 Subject: [PATCH 03/13] adding save button for folder and collection --- .../CollectionSettings/Docs/StyledWrapper.js | 3 -- .../CollectionSettings/Docs/index.js | 37 ++++++++----------- .../src/components/Documentation/index.js | 10 ----- .../FolderSettings/Documentation/index.js | 37 ++++++++----------- 4 files changed, 32 insertions(+), 55 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js b/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js index f0ffee808e..262f068e78 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js @@ -2,9 +2,6 @@ import styled from 'styled-components'; const StyledWrapper = styled.div` div.CodeMirror { - /* todo: find a better way */ - height: calc(100vh - 240px); - .CodeMirror-scroll { padding-bottom: 0px; } diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index 2674b687bf..a95ce6ba50 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -34,32 +34,27 @@ const Docs = ({ collection }) => { const onSave = () => dispatch(saveCollectionRoot(collection.uid)); return ( - +
{isEditing ? 'Preview' : 'Edit'} - {isEditing ? ( - - ) : null}
{isEditing ? ( - +
+ + +
) : ( )} diff --git a/packages/bruno-app/src/components/Documentation/index.js b/packages/bruno-app/src/components/Documentation/index.js index 5f472ae1df..fd7b6339b4 100644 --- a/packages/bruno-app/src/components/Documentation/index.js +++ b/packages/bruno-app/src/components/Documentation/index.js @@ -42,16 +42,6 @@ const Documentation = ({ item, collection }) => {
{isEditing ? 'Preview' : 'Edit'} - {isEditing ? ( - - ) : null}
{isEditing ? ( diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 8183d0f453..58b2106aef 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -40,32 +40,27 @@ const Documentation = ({ collection, folder }) => { } return ( - +
{isEditing ? 'Preview' : 'Edit'} - {isEditing ? ( - - ) : null}
{isEditing ? ( - +
+ + +
) : ( )} From f3a49cb58a3ea46e3d09954b689b1fc419df59bf Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Fri, 3 Jan 2025 14:05:42 +0530 Subject: [PATCH 04/13] adding: collection draft --- .../Auth/ApiKeyAuth/index.js | 2 +- .../CollectionSettings/Auth/AuthMode/index.js | 2 +- .../Auth/AwsV4Auth/index.js | 2 +- .../Auth/BasicAuth/index.js | 2 +- .../Auth/BearerAuth/index.js | 2 +- .../Auth/DigestAuth/index.js | 2 +- .../Auth/OAuth2/AuthorizationCode/index.js | 2 +- .../Auth/OAuth2/ClientCredentials/index.js | 2 +- .../Auth/OAuth2/GrantTypeSelector/index.js | 2 +- .../CollectionSettings/Auth/OAuth2/index.js | 2 +- .../CollectionSettings/Auth/WsseAuth/index.js | 2 +- .../CollectionSettings/Auth/index.js | 2 +- .../CollectionSettings/Docs/index.js | 2 +- .../CollectionSettings/Headers/index.js | 2 +- .../CollectionSettings/Script/index.js | 4 +- .../CollectionSettings/Tests/index.js | 2 +- .../CollectionSettings/Vars/index.js | 4 +- .../components/CollectionSettings/index.js | 10 +- .../ReduxStore/slices/collections/actions.js | 8 +- .../ReduxStore/slices/collections/index.js | 171 ++++++++++++------ .../bruno-app/src/utils/collections/index.js | 26 +++ 21 files changed, 172 insertions(+), 81 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/index.js index 74d348c648..7d365ae170 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/index.js @@ -16,7 +16,7 @@ const ApiKeyAuth = ({ collection }) => { const dropdownTippyRef = useRef(); const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); - const apikeyAuth = get(collection, 'root.request.auth.apikey', {}); + const apikeyAuth = collection.draft ? get(collection, 'draft.request.auth.apikey', {}) : get(collection, 'root.request.auth.apikey', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/index.js index 7dabb4c71a..dacd8950ac 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/index.js @@ -11,7 +11,7 @@ const AuthMode = ({ collection }) => { const dispatch = useDispatch(); const dropdownTippyRef = useRef(); const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); - const authMode = get(collection, 'root.request.auth.mode'); + const authMode = collection.draft ? get(collection, 'draft.request.auth.mode') : get(collection, 'root.request.auth.mode'); const Icon = forwardRef((props, ref) => { return ( diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js index 38fae3447e..da30225143 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js @@ -11,7 +11,7 @@ const AwsV4Auth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const awsv4Auth = get(collection, 'root.request.auth.awsv4', {}); + const awsv4Auth = collection.draft ? get(collection, 'draft..request.auth.awsv4', {}) : get(collection, 'root.request.auth.awsv4', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js index 3c29895edc..d8c07753ea 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js @@ -11,7 +11,7 @@ const BasicAuth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const basicAuth = get(collection, 'root.request.auth.basic', {}); + const basicAuth = collection.draft ? get(collection, 'draft.request.auth.basic', {}) : get(collection, 'root.request.auth.basic', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js index 82f8be12c8..a7a9638196 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js @@ -11,7 +11,7 @@ const BearerAuth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const bearerToken = get(collection, 'root.request.auth.bearer.token', ''); + const bearerToken = collection.draft ? get(collection, 'draft.request.auth.bearer.token', '') : get(collection, 'root.request.auth.bearer.token', ''); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js index 5ac6b1e263..18db037539 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js @@ -11,7 +11,7 @@ const DigestAuth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const digestAuth = get(collection, 'root.request.auth.digest', {}); + const digestAuth = collection.draft ? get(collection, 'draft..request.auth.digest', {}) : get(collection, 'root.request.auth.digest', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js index 8f3dc16018..3539d510e2 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js @@ -14,7 +14,7 @@ const OAuth2AuthorizationCode = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const oAuth = get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); const handleRun = async () => { dispatch(sendCollectionOauth2Request(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js index d69122b482..aaae3b5b22 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js @@ -12,7 +12,7 @@ const OAuth2ClientCredentials = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const oAuth = get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); const handleRun = async () => { dispatch(sendCollectionOauth2Request(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/GrantTypeSelector/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/GrantTypeSelector/index.js index 5d92893820..8b91e3a2a4 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/GrantTypeSelector/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/GrantTypeSelector/index.js @@ -14,7 +14,7 @@ const GrantTypeSelector = ({ collection }) => { const dropdownTippyRef = useRef(); const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); - const oAuth = get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, "draft.request.auth.oauth2", {}) : get(collection, 'root.request.auth.oauth2', {}); const Icon = forwardRef((props, ref) => { return ( diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js index 1aa674ab95..2bf906a120 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js @@ -24,7 +24,7 @@ const grantTypeComponentMap = (grantType, collection) => { }; const OAuth2 = ({ collection }) => { - const oAuth = get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); return ( diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js index 45efc7b1eb..a26319fbce 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js @@ -11,7 +11,7 @@ const WsseAuth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const wsseAuth = get(collection, 'root.request.auth.wsse', {}); + const wsseAuth = collection.draft ? get(collection, 'draft.request.auth.wsse', {}) : get(collection, 'root.request.auth.wsse', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/index.js index 05efc17b23..ee5e2def29 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/index.js @@ -13,7 +13,7 @@ import StyledWrapper from './StyledWrapper'; import OAuth2 from './OAuth2'; const Auth = ({ collection }) => { - const authMode = get(collection, 'root.request.auth.mode'); + const authMode = collection.draft ? get(collection, 'draft.request.auth.mode') : get(collection, 'root.request.auth.mode'); const dispatch = useDispatch(); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index a95ce6ba50..0c00c1927b 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -14,7 +14,7 @@ const Docs = ({ collection }) => { const dispatch = useDispatch(); const { displayedTheme } = useTheme(); const [isEditing, setIsEditing] = useState(false); - const docs = get(collection, 'root.docs', ''); + const docs = get(collection, 'draft.docs') || get(collection, 'root.docs', ''); const preferences = useSelector((state) => state.app.preferences); const { theme, storedTheme } = useTheme(); diff --git a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js index 9ae6e1e074..c1bc16ca20 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js @@ -19,7 +19,7 @@ const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); const Headers = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const headers = get(collection, 'root.request.headers', []); + const headers = collection.draft ? get(collection, 'draft.request.headers') : get(collection, 'root.request.headers', []); const addHeader = () => { dispatch( diff --git a/packages/bruno-app/src/components/CollectionSettings/Script/index.js b/packages/bruno-app/src/components/CollectionSettings/Script/index.js index 6fe979cbfa..839b79afe6 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Script/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Script/index.js @@ -9,8 +9,8 @@ import StyledWrapper from './StyledWrapper'; const Script = ({ collection }) => { const dispatch = useDispatch(); - const requestScript = get(collection, 'root.request.script.req', ''); - const responseScript = get(collection, 'root.request.script.res', ''); + const requestScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.req', ''); + const responseScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.res', ''); const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); diff --git a/packages/bruno-app/src/components/CollectionSettings/Tests/index.js b/packages/bruno-app/src/components/CollectionSettings/Tests/index.js index d87a1dea4f..2ceb96e6f3 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Tests/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Tests/index.js @@ -9,7 +9,7 @@ import StyledWrapper from './StyledWrapper'; const Tests = ({ collection }) => { const dispatch = useDispatch(); - const tests = get(collection, 'root.request.tests', ''); + const tests = collection.draft ? get(collection, 'draft.request.tests', '') : get(collection, 'root.request.tests', ''); const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); diff --git a/packages/bruno-app/src/components/CollectionSettings/Vars/index.js b/packages/bruno-app/src/components/CollectionSettings/Vars/index.js index fae3ed6132..06255d639b 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Vars/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Vars/index.js @@ -7,8 +7,8 @@ import { useDispatch } from 'react-redux'; const Vars = ({ collection }) => { const dispatch = useDispatch(); - const requestVars = get(collection, 'root.request.vars.req', []); - const responseVars = get(collection, 'root.request.vars.res', []); + const requestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); + const responseVars = collection.draft ? get(collection, 'draft.request.vars.res', []) : get(collection, 'root.request.vars.res', []); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); return ( diff --git a/packages/bruno-app/src/components/CollectionSettings/index.js b/packages/bruno-app/src/components/CollectionSettings/index.js index b849d6b185..e2d3dac1c7 100644 --- a/packages/bruno-app/src/components/CollectionSettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/index.js @@ -44,13 +44,13 @@ const CollectionSettings = ({ collection }) => { const hasTests = root?.request?.tests; const hasDocs = root?.docs; - const headers = get(collection, 'root.request.headers', []); + const headers = collection.draft ? get(collection, 'draft.request.headers') : get(collection, 'root.request.headers', []); const activeHeadersCount = headers.filter((header) => header.enabled).length; - const requestVars = get(collection, 'root.request.vars.req', []); - const responseVars = get(collection, 'root.request.vars.res', []); + const requestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); + const responseVars = collection.draft ? get(collection, 'draft.request.vars.res', []) : get(collection, 'root.request.vars.res', []); const activeVarsCount = requestVars.filter((v) => v.enabled).length + responseVars.filter((v) => v.enabled).length; - const auth = get(collection, 'root.request.auth', {}).mode; + const auth = collection.draft ? get(collection, 'draft.request,auth', {}).mode : get(collection, 'root.request.auth', {}).mode; const proxyConfig = get(collection, 'brunoConfig.proxy', {}); const clientCertConfig = get(collection, 'brunoConfig.clientCertificates.certs', []); @@ -142,7 +142,7 @@ const CollectionSettings = ({ collection }) => { active: tabName === tab }); }; - + return (
diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 75c6f2cb90..3f89e4e700 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -44,7 +44,7 @@ import { parsePathParams, parseQueryParams, splitOnFirst } from 'utils/url/index import { sendCollectionOauth2Request as _sendCollectionOauth2Request } from 'utils/network/index'; import { name } from 'file-loader'; import slash from 'utils/common/slash'; -import { getGlobalEnvironmentVariables } from 'utils/collections/index'; +import { getGlobalEnvironmentVariables, transformCollectionRootToSave } from 'utils/collections/index'; import { findCollectionByPathname, findEnvironmentInCollectionByName } from 'utils/collections/index'; export const renameCollection = (newName, collectionUid) => (dispatch, getState) => { @@ -130,6 +130,10 @@ export const saveCollectionRoot = (collectionUid) => (dispatch, getState) => { const state = getState(); const collection = findCollectionByUid(state.collections.collections, collectionUid); + const transformRoot = transformCollectionRootToSave(collection); + + console.log({ transformRoot }); + return new Promise((resolve, reject) => { if (!collection) { return reject(new Error('Collection not found')); @@ -138,7 +142,7 @@ export const saveCollectionRoot = (collectionUid) => (dispatch, getState) => { const { ipcRenderer } = window; ipcRenderer - .invoke('renderer:save-collection-root', collection.pathname, collection.root) + .invoke('renderer:save-collection-root', collection.pathname, transformRoot) .then(() => toast.success('Collection Settings saved successfully')) .then(resolve) .catch((err) => { diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index 2b5a532c33..9604c985ec 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -34,7 +34,19 @@ export const collectionsSlice = createSlice({ collection.settingsSelectedTab = 'headers'; collection.folderLevelSettingsSelectedTab = {}; - + collection.root = collection.root || { + docs: "", + request: { + auth: { + mode: "none" + }, + headers: [], + script: { req: null, res: null }, + tests: null, + } + } + collection.draft = null; + // TODO: move this to use the nextAction approach // last action is used to track the last action performed on the collection // this is optional @@ -1119,39 +1131,49 @@ export const collectionsSlice = createSlice({ }, updateCollectionAuthMode: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const collectionRoot = collection.root || {}; if (collection) { - set(collection, 'root.request.auth', {}); - set(collection, 'root.request.auth.mode', action.payload.mode); + if (!collection.draft) { + collection.draft = cloneDeep(collectionRoot); + } + + collection.draft.request.auth = {}; + collection.draft.request.auth.mode = action.payload.mode; } }, updateCollectionAuth: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const collectionRoot = collection.root || {}; if (collection) { - set(collection, 'root.request.auth', {}); - set(collection, 'root.request.auth.mode', action.payload.mode); + if (!collection.draft) { + collection.draft = cloneDeep(collectionRoot); + } + + collection.draft.request.auth = {}; + collection.draft.request.auth.mode = action.payload.mode; switch (action.payload.mode) { case 'awsv4': - set(collection, 'root.request.auth.awsv4', action.payload.content); + collection.draft.request.auth.awsv4 = action.payload.content; break; case 'bearer': - set(collection, 'root.request.auth.bearer', action.payload.content); + collection.draft.request.auth.bearer = action.payload.content; break; case 'basic': - set(collection, 'root.request.auth.basic', action.payload.content); + collection.draft.request.auth.basic = action.payload.content; break; case 'digest': - set(collection, 'root.request.auth.digest', action.payload.content); + collection.draft.request.auth.digest = action.payload.content; break; case 'oauth2': - set(collection, 'root.request.auth.oauth2', action.payload.content); + collection.draft.request.auth.oauth2 = action.payload.content; break; case 'wsse': - set(collection, 'root.request.auth.wsse', action.payload.content); + collection.draft.request.auth.wsse = action.payload.content; break; case 'apikey': - set(collection, 'root.request.auth.apikey', action.payload.content); + collection.draft.request.auth.apikey = action.payload.content; break; } } @@ -1160,28 +1182,41 @@ export const collectionsSlice = createSlice({ const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - set(collection, 'root.request.script.req', action.payload.script); + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + collection.draft.request.script.req = action.payload.script; } }, updateCollectionResponseScript: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - set(collection, 'root.request.script.res', action.payload.script); + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + collection.draft.request.script.res = action.payload.script; } }, updateCollectionTests: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - set(collection, 'root.request.tests', action.payload.tests); + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + collection.draft.request.tests = action.payload.tests; } }, updateCollectionDocs: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const collectionRoot = collection.root || {}; if (collection) { - set(collection, 'root.docs', action.payload.docs); + if (!collection.draft) { + collection.draft = cloneDeep(collectionRoot); + } + collection.draft.docs = action.payload.docs; } }, addFolderHeader: (state, action) => { @@ -1317,22 +1352,28 @@ export const collectionsSlice = createSlice({ const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - const headers = get(collection, 'root.request.headers', []); - headers.push({ + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + collection.draft.request.headers = collection.draft.request.headers || []; + collection.draft.request.headers.push({ uid: uuid(), name: '', value: '', description: '', enabled: true }); - set(collection, 'root.request.headers', headers); } }, updateCollectionHeader: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - const headers = get(collection, 'root.request.headers', []); + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + + const headers = collection.draft.request.headers; const header = find(headers, (h) => h.uid === action.payload.header.uid); if (header) { header.name = action.payload.header.name; @@ -1346,73 +1387,93 @@ export const collectionsSlice = createSlice({ const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { - let headers = get(collection, 'root.request.headers', []); - headers = filter(headers, (h) => h.uid !== action.payload.headerUid); - set(collection, 'root.request.headers', headers); + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + collection.draft.request.headers = filter(collection.draft.request.headers, (h) => h.uid !== action.payload.headerUid); } }, addCollectionVar: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const type = action.payload.type; if (collection) { + + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + if (type === 'request') { - const vars = get(collection, 'root.request.vars.req', []); - vars.push({ + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.req = collection.draft.request.vars.req || []; + collection.draft.request.vars.req.push({ uid: uuid(), name: '', value: '', enabled: true }); - set(collection, 'root.request.vars.req', vars); } else if (type === 'response') { - const vars = get(collection, 'root.request.vars.res', []); - vars.push({ + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.res = collection.draft.request.vars.res || []; + collection.draft.request.vars.res.push({ uid: uuid(), name: '', value: '', enabled: true }); - set(collection, 'root.request.vars.res', vars); } } }, updateCollectionVar: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const type = action.payload.type; - if (type === 'request') { - let vars = get(collection, 'root.request.vars.req', []); - const _var = find(vars, (h) => h.uid === action.payload.var.uid); - if (_var) { - _var.name = action.payload.var.name; - _var.value = action.payload.var.value; - _var.description = action.payload.var.description; - _var.enabled = action.payload.var.enabled; - } - set(collection, 'root.request.vars.req', vars); - } else if (type === 'response') { - let vars = get(collection, 'root.request.vars.res', []); - const _var = find(vars, (h) => h.uid === action.payload.var.uid); - if (_var) { - _var.name = action.payload.var.name; - _var.value = action.payload.var.value; - _var.description = action.payload.var.description; - _var.enabled = action.payload.var.enabled; - } - set(collection, 'root.request.vars.res', vars); + + if (collection) { + + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + + if (type === 'request') { + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.req = collection.draft.request.vars.req || []; + const reqVar = find(collection.draft.request.vars.req, (v) => v.uid === action.payload.var.uid); + if (reqVar) { + reqVar.name = action.payload.var.name; + reqVar.value = action.payload.var.value; + reqVar.description = action.payload.var.description; + reqVar.enabled = action.payload.var.enabled; + } + } else if (type === 'response') { + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.res = collection.draft.request.vars.res || []; + const resVar = find(collection.draft.request.vars.res, (v) => v.uid === action.payload.var.uid); + if (resVar) { + resVar.name = action.payload.var.name; + resVar.value = action.payload.var.value; + resVar.description = action.payload.var.description; + resVar.enabled = action.payload.var.enabled; + } + } } }, deleteCollectionVar: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const type = action.payload.type; + if (collection) { + + if(!collection.draft) { + collection.draft = cloneDeep(collection.root); + } + if (type === 'request') { - let vars = get(collection, 'root.request.vars.req', []); - vars = filter(vars, (h) => h.uid !== action.payload.varUid); - set(collection, 'root.request.vars.req', vars); + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.req = collection.draft.request.vars.req || []; + collection.draft.request.vars.req = collection.draft.request.vars.req.filter((v) => v.uid !== action.payload.varUid); } else if (type === 'response') { - let vars = get(collection, 'root.request.vars.res', []); - vars = filter(vars, (h) => h.uid !== action.payload.varUid); - set(collection, 'root.request.vars.res', vars); + collection.draft.request.vars = collection.draft.request.vars || {}; + collection.draft.request.vars.res = collection.draft.request.vars.res || []; + collection.draft.request.vars.res = collection.draft.request.vars.res.filter((v) => v.uid !== action.payload.varUid); } } }, diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index 3a691e53f7..012e3e2657 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -594,6 +594,32 @@ export const transformRequestToSaveToFilesystem = (item) => { return itemToSave; }; +export const transformCollectionRootToSave = (collection) => { + const _collection = collection.draft ? collection.draft : collection.root; + const collectionRootToSave = { + docs: _collection.docs, + request: { + auth: _collection?.request?.auth, + headers: [], + script: _collection?.request?.script, + vars: _collection?.request?.vars, + tests: _collection?.request?.tests + } + } + + each(_collection.request.headers, (header) => { + collectionRootToSave.request.headers.push({ + uid: header.uid, + name: header.name, + value: header.value, + description: header.description, + enabled: header.enabled + }); + }); + + return collectionRootToSave; +} + // todo: optimize this export const deleteItemInCollection = (itemUid, collection) => { collection.items = filter(collection.items, (i) => i.uid !== itemUid); From 10757acde7f4e06d3e288ef067703960c81a60c3 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Fri, 3 Jan 2025 15:41:46 +0530 Subject: [PATCH 05/13] add: collection closing modal --- .../ConfirmCollectionClose/index.js | 71 +++++++++++++++++++ .../RequestTabs/RequestTab/SpecialTab.js | 8 ++- .../RequestTabs/RequestTab/index.js | 29 +++++++- .../ReduxStore/slices/collections/actions.js | 2 - .../ReduxStore/slices/collections/index.js | 8 +++ 5 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmCollectionClose/index.js diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmCollectionClose/index.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmCollectionClose/index.js new file mode 100644 index 0000000000..d568bd0529 --- /dev/null +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmCollectionClose/index.js @@ -0,0 +1,71 @@ +import React from 'react'; +import { IconAlertTriangle } from '@tabler/icons'; +import Modal from 'components/Modal'; +import { useDispatch } from 'react-redux'; +import { deleteCollectionDraft } from 'providers/ReduxStore/slices/collections/index'; +import { closeTabs } from 'providers/ReduxStore/slices/tabs'; +import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/actions'; + +const ConfirmCollectionClose = ({ onCancel, collection, tab }) => { + + const dispatch = useDispatch(); + + return ( + { + e.stopPropagation(); + e.preventDefault(); + }} + hideFooter={true} + > +
+ +

Hold on..

+
+
+ You have unsaved changes in request Collection. +
+ +
+
+ +
+
+ + +
+
+
+ ); +}; + +export default ConfirmCollectionClose; diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js index c5d09faa8d..c9168f67c8 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js @@ -1,8 +1,9 @@ import React from 'react'; import CloseTabIcon from './CloseTabIcon'; import { IconVariable, IconSettings, IconRun, IconFolder, IconShieldLock } from '@tabler/icons'; +import DraftTabIcon from './DraftTabIcon'; -const SpecialTab = ({ handleCloseClick, type, tabName }) => { +const SpecialTab = ({ handleCloseClick, type, tabName, collection }) => { const getTabInfo = (type, tabName) => { switch (type) { case 'collection-settings': { @@ -52,7 +53,10 @@ const SpecialTab = ({ handleCloseClick, type, tabName }) => { <>
{getTabInfo(type, tabName)}
handleCloseClick(e)}> - + {type === 'collection-settings' && collection?.draft !== null ? + + : + }
); diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js index e73313c139..e4f1b84513 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js @@ -18,11 +18,13 @@ import NewRequest from 'components/Sidebar/NewRequest/index'; import CloseTabIcon from './CloseTabIcon'; import DraftTabIcon from './DraftTabIcon'; import { flattenItems } from 'utils/collections/index'; +import ConfirmCollectionClose from './ConfirmCollectionClose/index'; const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUid }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); const [showConfirmClose, setShowConfirmClose] = useState(false); + const [showConfirmCloseCollection, setShowConfirmCloseCollection] = useState(false); const dropdownTippyRef = useRef(); const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); @@ -37,6 +39,16 @@ const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUi ); }; + const handleCloseCollectionSettings = (event) => { + if(!collection.draft) { + return handleCloseClick(event); + } + + event.stopPropagation(); + event.preventDefault(); + setShowConfirmCloseCollection(true); + } + const handleRightClick = (_event) => { const menuDropdown = dropdownTippyRef.current; if (!menuDropdown) { @@ -70,7 +82,22 @@ const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUi }; const folder = folderUid ? findItemInCollection(collection, folderUid) : null; - if (['collection-settings', 'folder-settings', 'variables', 'collection-runner', 'security-settings'].includes(tab.type)) { + + if(tab.type === 'collection-settings') { + return ( + + {showConfirmCloseCollection && ( + setShowConfirmCloseCollection(false)} collection={collection} tab={tab} /> + )} + + + ); + } + + if (['folder-settings', 'variables', 'collection-runner', 'security-settings'].includes(tab.type)) { return ( (dispatch, getState) => { const transformRoot = transformCollectionRootToSave(collection); - console.log({ transformRoot }); - return new Promise((resolve, reject) => { if (!collection) { return reject(new Error('Collection not found')); diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index 9604c985ec..e5e63ffab4 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -62,6 +62,13 @@ export const collectionsSlice = createSlice({ state.collections.push(collection); } }, + deleteCollectionDraft: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + + if (collection) { + collection.draft = null; + } + }, setCollectionSecurityConfig: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); if (collection) { @@ -1811,6 +1818,7 @@ export const collectionsSlice = createSlice({ export const { createCollection, + deleteCollectionDraft, setCollectionSecurityConfig, brunoConfigUpdateEvent, renameCollection, From 872223fd1b6ad10d18db8f0a5dd86ca66bd44861 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Fri, 3 Jan 2025 17:49:12 +0530 Subject: [PATCH 06/13] add: folder draft --- .../FolderSettings/Documentation/index.js | 2 +- .../FolderSettings/Headers/index.js | 2 +- .../components/FolderSettings/Script/index.js | 4 +- .../components/FolderSettings/Tests/index.js | 2 +- .../components/FolderSettings/Vars/index.js | 4 +- .../RequestTab/ConfirmFolderClose/index.js | 70 +++++++++++ .../RequestTabs/RequestTab/SpecialTab.js | 7 +- .../RequestTabs/RequestTab/index.js | 34 +++++- .../ReduxStore/slices/collections/actions.js | 8 +- .../ReduxStore/slices/collections/index.js | 111 +++++++++++++----- .../bruno-app/src/utils/collections/index.js | 26 ++++ 11 files changed, 220 insertions(+), 50 deletions(-) create mode 100644 packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmFolderClose/index.js diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 58b2106aef..9253bb6967 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -15,7 +15,7 @@ const Documentation = ({ collection, folder }) => { const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); const [isEditing, setIsEditing] = useState(false); - const docs = get(folder, 'root.docs', ''); + const docs = folder.draft ? get(folder, 'draft.docs', '') : get(folder, 'root.docs', ''); const { theme } = useTheme(); diff --git a/packages/bruno-app/src/components/FolderSettings/Headers/index.js b/packages/bruno-app/src/components/FolderSettings/Headers/index.js index 0f6e05f1fa..098a0fc622 100644 --- a/packages/bruno-app/src/components/FolderSettings/Headers/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Headers/index.js @@ -14,7 +14,7 @@ const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); const Headers = ({ collection, folder }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const headers = get(folder, 'root.request.headers', []); + const headers = folder.draft ? get(folder, 'draft.request.headers', []) : get(folder, 'root.request.headers', []); const addHeader = () => { dispatch( diff --git a/packages/bruno-app/src/components/FolderSettings/Script/index.js b/packages/bruno-app/src/components/FolderSettings/Script/index.js index 628fa5cb51..81c6e0dd1a 100644 --- a/packages/bruno-app/src/components/FolderSettings/Script/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Script/index.js @@ -9,8 +9,8 @@ import StyledWrapper from './StyledWrapper'; const Script = ({ collection, folder }) => { const dispatch = useDispatch(); - const requestScript = get(folder, 'root.request.script.req', ''); - const responseScript = get(folder, 'root.request.script.res', ''); + const requestScript = folder.draft ? get(folder, 'draft.request.script.req', '') : get(folder, 'root.request.script.req', ''); + const responseScript = folder.draft ? get(folder, 'draft.request.script.res', '') : get(folder, 'root.request.script.res', ''); const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); diff --git a/packages/bruno-app/src/components/FolderSettings/Tests/index.js b/packages/bruno-app/src/components/FolderSettings/Tests/index.js index 8854b06cd9..6a6cc7f74c 100644 --- a/packages/bruno-app/src/components/FolderSettings/Tests/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Tests/index.js @@ -9,7 +9,7 @@ import StyledWrapper from './StyledWrapper'; const Tests = ({ collection, folder }) => { const dispatch = useDispatch(); - const tests = get(folder, 'root.request.tests', ''); + const tests = folder.draft ? get(folder, 'draft.request.tests', '') : get(folder, 'root.request.tests', ''); const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); diff --git a/packages/bruno-app/src/components/FolderSettings/Vars/index.js b/packages/bruno-app/src/components/FolderSettings/Vars/index.js index 8f9cab4d23..a9f4584fc0 100644 --- a/packages/bruno-app/src/components/FolderSettings/Vars/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Vars/index.js @@ -7,8 +7,8 @@ import { useDispatch } from 'react-redux'; const Vars = ({ collection, folder }) => { const dispatch = useDispatch(); - const requestVars = get(folder, 'root.request.vars.req', []); - const responseVars = get(folder, 'root.request.vars.res', []); + const requestVars = folder.draft ? get(folder, 'draft.request.vars.req', []) : get(folder, 'root.request.vars.req', []); + const responseVars = folder.draft ? get(folder, 'draft.request.vars.res', []) : get(folder, 'root.request.vars.res', []); const handleSave = () => dispatch(saveFolderRoot(collection.uid, folder.uid)); return ( diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmFolderClose/index.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmFolderClose/index.js new file mode 100644 index 0000000000..584a26fa78 --- /dev/null +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmFolderClose/index.js @@ -0,0 +1,70 @@ +import React from 'react'; +import { IconAlertTriangle } from '@tabler/icons'; +import Modal from 'components/Modal'; +import { closeTabs } from 'providers/ReduxStore/slices/tabs'; +import { useDispatch } from 'react-redux'; +import { deleteFolderDraft } from 'providers/ReduxStore/slices/collections/index'; +import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions'; + +const ConfirmFolderClose = ({ onCancel, collection, folder, tab }) => { + const dispatch = useDispatch(); + + return ( + { + e.stopPropagation(); + e.preventDefault(); + }} + hideFooter={true} + > +
+ +

Hold on..

+
+
+ You have unsaved changes in folder {folder.name}. +
+ +
+
+ +
+
+ + +
+
+
+ ); +}; + +export default ConfirmFolderClose; diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js index c9168f67c8..ac16a8c9f5 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/SpecialTab.js @@ -3,7 +3,7 @@ import CloseTabIcon from './CloseTabIcon'; import { IconVariable, IconSettings, IconRun, IconFolder, IconShieldLock } from '@tabler/icons'; import DraftTabIcon from './DraftTabIcon'; -const SpecialTab = ({ handleCloseClick, type, tabName, collection }) => { +const SpecialTab = ({ handleCloseClick, type, tabName, collection, folder }) => { const getTabInfo = (type, tabName) => { switch (type) { case 'collection-settings': { @@ -53,10 +53,11 @@ const SpecialTab = ({ handleCloseClick, type, tabName, collection }) => { <>
{getTabInfo(type, tabName)}
handleCloseClick(e)}> - {type === 'collection-settings' && collection?.draft !== null ? + {(type === 'folder-settings' && folder.draft !== null) || + (type === 'collection-settings' && collection.draft !== null) ? : - } + }
); diff --git a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js index e4f1b84513..429175a26e 100644 --- a/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js +++ b/packages/bruno-app/src/components/RequestTabs/RequestTab/index.js @@ -19,12 +19,14 @@ import CloseTabIcon from './CloseTabIcon'; import DraftTabIcon from './DraftTabIcon'; import { flattenItems } from 'utils/collections/index'; import ConfirmCollectionClose from './ConfirmCollectionClose/index'; +import ConfirmFolderClose from './ConfirmFolderClose/index'; const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUid }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); const [showConfirmClose, setShowConfirmClose] = useState(false); const [showConfirmCloseCollection, setShowConfirmCloseCollection] = useState(false); + const [showConfirmCloseFolder, setShowConfirmCloseFolder] = useState(false); const dropdownTippyRef = useRef(); const onDropdownCreate = (ref) => (dropdownTippyRef.current = ref); @@ -49,6 +51,16 @@ const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUi setShowConfirmCloseCollection(true); } + const handleCloseFolderSettings = (event) => { + if(!folder.draft) { + return handleCloseClick(event); + } + + event.stopPropagation(); + event.preventDefault(); + setShowConfirmCloseFolder(true); + } + const handleRightClick = (_event) => { const menuDropdown = dropdownTippyRef.current; if (!menuDropdown) { @@ -97,17 +109,27 @@ const RequestTab = ({ tab, collection, tabIndex, collectionRequestTabs, folderUi ); } - if (['folder-settings', 'variables', 'collection-runner', 'security-settings'].includes(tab.type)) { + if(tab.type === 'folder-settings') { return ( - {tab.type === 'folder-settings' ? ( - - ) : ( - + {showConfirmCloseFolder && ( + setShowConfirmCloseFolder(false)} collection={collection} folder={folder} tab={tab} /> )} + + + ); + } + + if (['variables', 'collection-runner', 'security-settings'].includes(tab.type)) { + return ( + + ); } diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 2063eacfe5..a368086f1f 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -44,7 +44,7 @@ import { parsePathParams, parseQueryParams, splitOnFirst } from 'utils/url/index import { sendCollectionOauth2Request as _sendCollectionOauth2Request } from 'utils/network/index'; import { name } from 'file-loader'; import slash from 'utils/common/slash'; -import { getGlobalEnvironmentVariables, transformCollectionRootToSave } from 'utils/collections/index'; +import { getGlobalEnvironmentVariables, transformCollectionRootToSave, transformFolderRootToSave } from 'utils/collections/index'; import { findCollectionByPathname, findEnvironmentInCollectionByName } from 'utils/collections/index'; export const renameCollection = (newName, collectionUid) => (dispatch, getState) => { @@ -167,10 +167,14 @@ export const saveFolderRoot = (collectionUid, folderUid) => (dispatch, getState) const { ipcRenderer } = window; + const transformFolderRoot = transformFolderRootToSave(folder); + + console.log({ transformFolderRoot }) + const folderData = { name: folder.name, pathname: folder.pathname, - root: folder.root + root: transformFolderRoot }; console.log(folderData); diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index e5e63ffab4..b59f8ca8de 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -1226,27 +1226,41 @@ export const collectionsSlice = createSlice({ collection.draft.docs = action.payload.docs; } }, + deleteFolderDraft: (state, action) => { + const collection = findCollectionByUid(state.collections, action.payload.collectionUid); + const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; + + if (folder) { + folder.draft = null; + } + }, addFolderHeader: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; + if (folder) { - const headers = get(folder, 'root.request.headers', []); - headers.push({ + if (!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.request.headers = folder.draft.request.headers || []; + folder.draft.request.headers.push({ uid: uuid(), name: '', value: '', description: '', enabled: true }); - set(folder, 'root.request.headers', headers); } }, updateFolderHeader: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; + if (folder) { - const headers = get(folder, 'root.request.headers', []); - const header = find(headers, (h) => h.uid === action.payload.header.uid); + if (!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + const header = find(folder.draft.request.headers, (h) => h.uid === action.payload.header.uid); if (header) { header.name = action.payload.header.name; header.value = action.payload.header.value; @@ -1259,9 +1273,10 @@ export const collectionsSlice = createSlice({ const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; if (folder) { - let headers = get(folder, 'root.request.headers', []); - headers = filter(headers, (h) => h.uid !== action.payload.headerUid); - set(folder, 'root.request.headers', headers); + if (!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.request.headers = filter(folder.draft.request.headers, (h) => h.uid !== action.payload.headerUid); } }, addFolderVar: (state, action) => { @@ -1269,24 +1284,27 @@ export const collectionsSlice = createSlice({ const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; const type = action.payload.type; if (folder) { + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } if (type === 'request') { - const vars = get(folder, 'root.request.vars.req', []); - vars.push({ + folder.draft.request.vars = folder.draft.request.vars || {}; + folder.draft.request.vars.req = folder.draft.request.vars.req || []; + folder.draft.request.vars.req.push({ uid: uuid(), name: '', value: '', enabled: true }); - set(folder, 'root.request.vars.req', vars); } else if (type === 'response') { - const vars = get(folder, 'root.request.vars.res', []); - vars.push({ + folder.draft.request.vars = folder.draft.request.vars || {}; + folder.draft.request.vars.res = folder.draft.request.vars.res || []; + folder.draft.request.vars.res.push({ uid: uuid(), name: '', value: '', enabled: true }); - set(folder, 'root.request.vars.res', vars); } } }, @@ -1295,26 +1313,29 @@ export const collectionsSlice = createSlice({ const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; const type = action.payload.type; if (folder) { + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } if (type === 'request') { - let vars = get(folder, 'root.request.vars.req', []); - const _var = find(vars, (h) => h.uid === action.payload.var.uid); + folder.draft.request.vars = folder.draft.request.vars || {}; + folder.draft.request.vars.req = folder.draft.request.vars.req || []; + const _var = find(folder.draft.request.vars.req, (h) => h.uid === action.payload.var.uid); if (_var) { _var.name = action.payload.var.name; _var.value = action.payload.var.value; _var.description = action.payload.var.description; _var.enabled = action.payload.var.enabled; } - set(folder, 'root.request.vars.req', vars); } else if (type === 'response') { - let vars = get(folder, 'root.request.vars.res', []); - const _var = find(vars, (h) => h.uid === action.payload.var.uid); + folder.draft.request.vars = folder.draft.request.vars || {}; + folder.draft.request.vars.res = folder.draft.request.vars.res || []; + const _var = find(folder.draft.request.vars.res, (h) => h.uid === action.payload.var.uid); if (_var) { _var.name = action.payload.var.name; _var.value = action.payload.var.value; _var.description = action.payload.var.description; _var.enabled = action.payload.var.enabled; } - set(folder, 'root.request.vars.res', vars); } } }, @@ -1323,14 +1344,15 @@ export const collectionsSlice = createSlice({ const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; const type = action.payload.type; if (folder) { + + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + if (type === 'request') { - let vars = get(folder, 'root.request.vars.req', []); - vars = filter(vars, (h) => h.uid !== action.payload.varUid); - set(folder, 'root.request.vars.req', vars); + folder.draft.request.vars.req = filter(folder.draft.request.vars.req, (h) => h.uid !== action.payload.varUid); } else if (type === 'response') { - let vars = get(folder, 'root.request.vars.res', []); - vars = filter(vars, (h) => h.uid !== action.payload.varUid); - set(folder, 'root.request.vars.res', vars); + folder.draft.request.vars.res = filter(folder.draft.request.vars.res, (h) => h.uid !== action.payload.varUid); } } }, @@ -1338,21 +1360,30 @@ export const collectionsSlice = createSlice({ const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; if (folder) { - set(folder, 'root.request.script.req', action.payload.script); + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.request.script.req = action.payload.script; } }, updateFolderResponseScript: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; if (folder) { - set(folder, 'root.request.script.res', action.payload.script); + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.request.script.res = action.payload.script; } }, updateFolderTests: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid); const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; if (folder) { - set(folder, 'root.request.tests', action.payload.tests); + if(!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.request.tests = action.payload.tests; } }, addCollectionHeader: (state, action) => { @@ -1574,7 +1605,19 @@ export const collectionsSlice = createSlice({ name: directoryName, collapsed: true, type: 'folder', - items: [] + items: [], + draft: null, + root: { + docs: "", + request: { + auth: { + mode: "none" + }, + headers: [], + script: { req: null, res: null }, + tests: null, + } + } }; currentSubItems.push(childItem); } @@ -1809,7 +1852,10 @@ export const collectionsSlice = createSlice({ const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null; if (folder) { if (isItemAFolder(folder)) { - set(folder, 'root.docs', action.payload.docs); + if (!folder.draft) { + folder.draft = cloneDeep(folder.root); + } + folder.draft.docs = action.payload.docs; } } } @@ -1908,7 +1954,8 @@ export const { runFolderEvent, resetCollectionRunner, updateRequestDocs, - updateFolderDocs + updateFolderDocs, + deleteFolderDraft } = collectionsSlice.actions; export default collectionsSlice.reducer; diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index 012e3e2657..9613d565f8 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -620,6 +620,32 @@ export const transformCollectionRootToSave = (collection) => { return collectionRootToSave; } +export const transformFolderRootToSave = (folder) => { + const _folder = folder.draft ? folder.draft : folder.root; + const folderRootToSave = { + docs: _folder.docs, + request: { + auth: _folder?.request?.auth, + headers: [], + script: _folder?.request?.script, + vars: _folder?.request?.vars, + tests: _folder?.request?.tests + } + } + + each(_folder.request.headers, (header) => { + folderRootToSave.request.headers.push({ + uid: header.uid, + name: header.name, + value: header.value, + description: header.description, + enabled: header.enabled + }); + }); + + return folderRootToSave; +} + // todo: optimize this export const deleteItemInCollection = (itemUid, collection) => { collection.items = filter(collection.items, (i) => i.uid !== itemUid); From ee08fca51a996c4f38da22a2a31cdaff43f72e62 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Mon, 6 Jan 2025 17:48:15 +0530 Subject: [PATCH 07/13] add folder condition in collectionChangeFileEvent and some fixes --- .../Auth/AwsV4Auth/index.js | 2 +- .../Auth/DigestAuth/index.js | 2 +- .../Auth/OAuth2/PasswordCredentials/index.js | 2 +- .../CollectionSettings/Docs/index.js | 2 +- .../components/CollectionSettings/index.js | 4 +-- .../ReduxStore/slices/collections/actions.js | 2 -- .../ReduxStore/slices/collections/index.js | 13 +++++++ .../bruno-app/src/utils/collections/index.js | 2 +- .../bruno-cli/src/runner/prepare-request.js | 2 +- packages/bruno-cli/src/utils/collection.js | 14 ++++---- packages/bruno-electron/src/app/watcher.js | 34 +++++++++++++++++-- .../bruno-electron/src/utils/collection.js | 12 +++---- 12 files changed, 66 insertions(+), 25 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js index da30225143..d2b644e2c2 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js @@ -11,7 +11,7 @@ const AwsV4Auth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const awsv4Auth = collection.draft ? get(collection, 'draft..request.auth.awsv4', {}) : get(collection, 'root.request.auth.awsv4', {}); + const awsv4Auth = collection.draft ? get(collection, 'draft.request.auth.awsv4', {}) : get(collection, 'root.request.auth.awsv4', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js index 18db037539..382ddc08d9 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js @@ -11,7 +11,7 @@ const DigestAuth = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const digestAuth = collection.draft ? get(collection, 'draft..request.auth.digest', {}) : get(collection, 'root.request.auth.digest', {}); + const digestAuth = collection.draft ? get(collection, 'draft.request.auth.digest', {}) : get(collection, 'root.request.auth.digest', {}); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js index d2d9eed1f2..491af25ccf 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/PasswordCredentials/index.js @@ -12,7 +12,7 @@ const OAuth2AuthorizationCode = ({ item, collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const oAuth = get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth2', {}) : get(collection, 'root.request.auth.oauth2', {}); const handleRun = async () => { dispatch(sendCollectionOauth2Request(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index 0c00c1927b..a5ccbc6986 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -14,7 +14,7 @@ const Docs = ({ collection }) => { const dispatch = useDispatch(); const { displayedTheme } = useTheme(); const [isEditing, setIsEditing] = useState(false); - const docs = get(collection, 'draft.docs') || get(collection, 'root.docs', ''); + const docs = collection.draft ? get(collection, 'draft.docs', '') : get(collection, 'root.docs', ''); const preferences = useSelector((state) => state.app.preferences); const { theme, storedTheme } = useTheme(); diff --git a/packages/bruno-app/src/components/CollectionSettings/index.js b/packages/bruno-app/src/components/CollectionSettings/index.js index e2d3dac1c7..2985084e9c 100644 --- a/packages/bruno-app/src/components/CollectionSettings/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/index.js @@ -44,13 +44,13 @@ const CollectionSettings = ({ collection }) => { const hasTests = root?.request?.tests; const hasDocs = root?.docs; - const headers = collection.draft ? get(collection, 'draft.request.headers') : get(collection, 'root.request.headers', []); + const headers = collection.draft ? get(collection, 'draft.request.headers', []) : get(collection, 'root.request.headers', []); const activeHeadersCount = headers.filter((header) => header.enabled).length; const requestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); const responseVars = collection.draft ? get(collection, 'draft.request.vars.res', []) : get(collection, 'root.request.vars.res', []); const activeVarsCount = requestVars.filter((v) => v.enabled).length + responseVars.filter((v) => v.enabled).length; - const auth = collection.draft ? get(collection, 'draft.request,auth', {}).mode : get(collection, 'root.request.auth', {}).mode; + const auth = collection.draft ? get(collection, 'draft.request.auth', {}).mode : get(collection, 'root.request.auth', {}).mode; const proxyConfig = get(collection, 'brunoConfig.proxy', {}); const clientCertConfig = get(collection, 'brunoConfig.clientCertificates.certs', []); diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index a368086f1f..53cc380d95 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -169,8 +169,6 @@ export const saveFolderRoot = (collectionUid, folderUid) => (dispatch, getState) const transformFolderRoot = transformFolderRootToSave(folder); - console.log({ transformFolderRoot }) - const folderData = { name: folder.name, pathname: folder.pathname, diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index 1215f69bd7..c0722e38c0 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -1635,11 +1635,24 @@ export const collectionsSlice = createSlice({ // check and update collection root if (collection && file.meta.collectionRoot) { collection.root = file.data; + collection.draft = null; return; } if (collection) { const item = findItemInCollection(collection, file.data.uid); + const isFolderRoot = file.meta.folderRoot ? true : false; + + + if (isFolderRoot) { + const folderPath = getDirectoryName(file.meta.pathname); + const folderItem = findItemInCollectionByPathname(collection, folderPath); + if (folderItem) { + folderItem.root = file.data; + folderItem.draft = null; + } + return; + } if (item) { // whenever a user attempts to sort a req within the same folder diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index 009e1bcdbf..c1c7b9283a 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -1004,7 +1004,7 @@ const mergeVars = (collection, requestTreePath = []) => { let collectionVariables = {}; let folderVariables = {}; let requestVariables = {}; - let collectionRequestVars = get(collection, 'root.request.vars.req', []); + let collectionRequestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); collectionRequestVars.forEach((_var) => { if (_var.enabled) { collectionVariables[_var.name] = _var.value; diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index 0ed8667609..a26691c573 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -35,7 +35,7 @@ const prepareRequest = (item = {}, collection = {}) => { responseType: 'arraybuffer' }; - const collectionAuth = get(collection, 'root.request.auth'); + const collectionAuth = collection.draft ? get(collection, 'draft.request.auth') : get(collection, 'root.request.auth'); if (collectionAuth && request.auth.mode === 'inherit') { if (collectionAuth.mode === 'basic') { axiosRequest.auth = { diff --git a/packages/bruno-cli/src/utils/collection.js b/packages/bruno-cli/src/utils/collection.js index 365732c488..a8b97df64b 100644 --- a/packages/bruno-cli/src/utils/collection.js +++ b/packages/bruno-cli/src/utils/collection.js @@ -4,7 +4,7 @@ const os = require('os'); const mergeHeaders = (collection, request, requestTreePath) => { let headers = new Map(); - let collectionHeaders = get(collection, 'root.request.headers', []); + let collectionHeaders = collection.draft ? get(collection, 'draft.request.headers', []) : get(collection, 'root.request.headers', []); collectionHeaders.forEach((header) => { if (header.enabled) { headers.set(header.name, header.value); @@ -34,7 +34,7 @@ const mergeHeaders = (collection, request, requestTreePath) => { const mergeVars = (collection, request, requestTreePath) => { let reqVars = new Map(); - let collectionRequestVars = get(collection, 'root.request.vars.req', []); + let collectionRequestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); let collectionVariables = {}; collectionRequestVars.forEach((_var) => { if (_var.enabled) { @@ -78,7 +78,7 @@ const mergeVars = (collection, request, requestTreePath) => { } let resVars = new Map(); - let collectionResponseVars = get(collection, 'root.request.vars.res', []); + let collectionResponseVars = collection.draft ? get(collection, 'draft.request.vars.res', []) : get(collection, 'root.request.vars.res', []); collectionResponseVars.forEach((_var) => { if (_var.enabled) { resVars.set(_var.name, _var.value); @@ -113,9 +113,9 @@ const mergeVars = (collection, request, requestTreePath) => { }; const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { - let collectionPreReqScript = get(collection, 'root.request.script.req', ''); - let collectionPostResScript = get(collection, 'root.request.script.res', ''); - let collectionTests = get(collection, 'root.request.tests', ''); + let collectionPreReqScript = collection.draft ? get(collection, 'draft.request.script.req') : get(collection, 'root.request.script.req', ''); + let collectionPostResScript = collection.draft ? get(collection, 'draft.request.script.res') : get(collection, 'root.request.script.res', ''); + let collectionTests = collection.draft ? get(collection, 'draft.request.tests', '') : get(collection, 'root.request.tests', ''); let combinedPreReqScript = []; let combinedPostResScript = []; @@ -137,7 +137,7 @@ const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { combinedTests.push(tests); } } - } + }s request.script.req = compact([collectionPreReqScript, ...combinedPreReqScript, request?.script?.req || '']).join(os.EOL); diff --git a/packages/bruno-electron/src/app/watcher.js b/packages/bruno-electron/src/app/watcher.js index 43d01153d1..56bd68701f 100644 --- a/packages/bruno-electron/src/app/watcher.js +++ b/packages/bruno-electron/src/app/watcher.js @@ -66,7 +66,10 @@ const hydrateRequestWithUuid = (request, pathname) => { return request; }; -const hydrateBruCollectionFileWithUuid = (collectionRoot) => { +const hydrateBruCollectionFileWithUuid = (collectionRoot, pathname) => { + if(pathname) { + collectionRoot.uid = getRequestUid(pathname); + } const params = _.get(collectionRoot, 'request.params', []); const headers = _.get(collectionRoot, 'request.headers', []); const requestVars = _.get(collectionRoot, 'request.vars.req', []); @@ -256,7 +259,7 @@ const add = async (win, pathname, collectionUid, collectionPath) => { file.data = collectionBruToJson(bruContent); - hydrateBruCollectionFileWithUuid(file.data); + hydrateBruCollectionFileWithUuid(file.data, pathname); win.webContents.send('main:collection-tree-updated', 'addFile', file); return; } catch (err) { @@ -367,6 +370,33 @@ const change = async (win, pathname, collectionUid, collectionPath) => { } } + if (path.basename(pathname) === 'folder.bru') { + const file = { + meta: { + collectionUid, + pathname, + name: path.basename(pathname), + folderRoot: true + } + }; + + try { + let bruContent = fs.readFileSync(pathname, 'utf8'); + file.data = collectionBruToJson(bruContent); + + // Preserve the existing UID + const existingUid = getRequestUid(pathname); + file.data.uid = existingUid; + + hydrateBruCollectionFileWithUuid(file.data, pathname); + win.webContents.send('main:collection-tree-updated', 'change', file); + return; + } catch (err) { + console.error('Error handling folder.bru change:', err); + return; + } + } + if (hasBruExtension(pathname)) { try { const file = { diff --git a/packages/bruno-electron/src/utils/collection.js b/packages/bruno-electron/src/utils/collection.js index 15d5574e22..3a98ef57b5 100644 --- a/packages/bruno-electron/src/utils/collection.js +++ b/packages/bruno-electron/src/utils/collection.js @@ -4,7 +4,7 @@ const os = require('os'); const mergeHeaders = (collection, request, requestTreePath) => { let headers = new Map(); - let collectionHeaders = get(collection, 'root.request.headers', []); + let collectionHeaders = collection.draft ? get(collection, 'draft.request.headers', []) : get(collection, 'root.request.headers', []); collectionHeaders.forEach((header) => { if (header.enabled) { headers.set(header.name, header.value); @@ -37,7 +37,7 @@ const mergeHeaders = (collection, request, requestTreePath) => { const mergeVars = (collection, request, requestTreePath) => { let reqVars = new Map(); - let collectionRequestVars = get(collection, 'root.request.vars.req', []); + let collectionRequestVars = collection.draft ? get(collection, 'draft.request.vars.req', []) : get(collection, 'root.request.vars.req', []); let collectionVariables = {}; collectionRequestVars.forEach((_var) => { if (_var.enabled) { @@ -81,7 +81,7 @@ const mergeVars = (collection, request, requestTreePath) => { } let resVars = new Map(); - let collectionResponseVars = get(collection, 'root.request.vars.res', []); + let collectionResponseVars = collection.draft ? get(collection, 'draft.request.vars.res') : get(collection, 'root.request.vars.res', []); collectionResponseVars.forEach((_var) => { if (_var.enabled) { resVars.set(_var.name, _var.value); @@ -116,9 +116,9 @@ const mergeVars = (collection, request, requestTreePath) => { }; const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { - let collectionPreReqScript = get(collection, 'root.request.script.req', ''); - let collectionPostResScript = get(collection, 'root.request.script.res', ''); - let collectionTests = get(collection, 'root.request.tests', ''); + let collectionPreReqScript = collection.draft ? get(collection, 'draft.request.script.req', '') : get(collection, 'root.request.script.req', ''); + let collectionPostResScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.res', ''); + let collectionTests = collection.draft ? get(collection, 'draft.request.tests') : get(collection, 'root.request.tests', ''); let combinedPreReqScript = []; let combinedPostResScript = []; From 5cf12aec7efc1926909d4fbaaee81361f1caac23 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Mon, 6 Jan 2025 18:14:17 +0530 Subject: [PATCH 08/13] fixes --- .../CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js | 2 +- .../CollectionSettings/Auth/OAuth2/ClientCredentials/index.js | 2 +- .../src/components/CollectionSettings/Auth/OAuth2/index.js | 2 +- .../src/components/CollectionSettings/Headers/index.js | 2 +- .../src/components/CollectionSettings/Script/index.js | 2 +- packages/bruno-cli/src/utils/collection.js | 4 ++-- packages/bruno-electron/src/utils/collection.js | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js index 3539d510e2..5dbea5e4bd 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/AuthorizationCode/index.js @@ -14,7 +14,7 @@ const OAuth2AuthorizationCode = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth2', {}) : get(collection, 'root.request.auth.oauth2', {}); const handleRun = async () => { dispatch(sendCollectionOauth2Request(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js index aaae3b5b22..9447a6dd05 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/ClientCredentials/index.js @@ -12,7 +12,7 @@ const OAuth2ClientCredentials = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth2', {}) : get(collection, 'root.request.auth.oauth2', {}); const handleRun = async () => { dispatch(sendCollectionOauth2Request(collection.uid)); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js index 2bf906a120..ee01d41a04 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js @@ -24,7 +24,7 @@ const grantTypeComponentMap = (grantType, collection) => { }; const OAuth2 = ({ collection }) => { - const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth', {}) : get(collection, 'root.request.auth.oauth2', {}); + const oAuth = collection.draft ? get(collection, 'draft.request.auth.oauth2', {}) : get(collection, 'root.request.auth.oauth2', {}); return ( diff --git a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js index c1bc16ca20..63c3a4fafe 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js @@ -19,7 +19,7 @@ const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); const Headers = ({ collection }) => { const dispatch = useDispatch(); const { storedTheme } = useTheme(); - const headers = collection.draft ? get(collection, 'draft.request.headers') : get(collection, 'root.request.headers', []); + const headers = collection.draft ? get(collection, 'draft.request.headers', []) : get(collection, 'root.request.headers', []); const addHeader = () => { dispatch( diff --git a/packages/bruno-app/src/components/CollectionSettings/Script/index.js b/packages/bruno-app/src/components/CollectionSettings/Script/index.js index 839b79afe6..8a69aacdf8 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Script/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Script/index.js @@ -9,7 +9,7 @@ import StyledWrapper from './StyledWrapper'; const Script = ({ collection }) => { const dispatch = useDispatch(); - const requestScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.req', ''); + const requestScript = collection.draft ? get(collection, 'draft.request.script.req', '') : get(collection, 'root.request.script.req', ''); const responseScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.res', ''); const { displayedTheme } = useTheme(); diff --git a/packages/bruno-cli/src/utils/collection.js b/packages/bruno-cli/src/utils/collection.js index a8b97df64b..1e0eed2193 100644 --- a/packages/bruno-cli/src/utils/collection.js +++ b/packages/bruno-cli/src/utils/collection.js @@ -113,8 +113,8 @@ const mergeVars = (collection, request, requestTreePath) => { }; const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { - let collectionPreReqScript = collection.draft ? get(collection, 'draft.request.script.req') : get(collection, 'root.request.script.req', ''); - let collectionPostResScript = collection.draft ? get(collection, 'draft.request.script.res') : get(collection, 'root.request.script.res', ''); + let collectionPreReqScript = collection.draft ? get(collection, 'draft.request.script.req', '') : get(collection, 'root.request.script.req', ''); + let collectionPostResScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.res', ''); let collectionTests = collection.draft ? get(collection, 'draft.request.tests', '') : get(collection, 'root.request.tests', ''); let combinedPreReqScript = []; diff --git a/packages/bruno-electron/src/utils/collection.js b/packages/bruno-electron/src/utils/collection.js index 3a98ef57b5..881c7e90ea 100644 --- a/packages/bruno-electron/src/utils/collection.js +++ b/packages/bruno-electron/src/utils/collection.js @@ -81,7 +81,7 @@ const mergeVars = (collection, request, requestTreePath) => { } let resVars = new Map(); - let collectionResponseVars = collection.draft ? get(collection, 'draft.request.vars.res') : get(collection, 'root.request.vars.res', []); + let collectionResponseVars = collection.draft ? get(collection, 'draft.request.vars.res', []) : get(collection, 'root.request.vars.res', []); collectionResponseVars.forEach((_var) => { if (_var.enabled) { resVars.set(_var.name, _var.value); @@ -118,7 +118,7 @@ const mergeVars = (collection, request, requestTreePath) => { const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { let collectionPreReqScript = collection.draft ? get(collection, 'draft.request.script.req', '') : get(collection, 'root.request.script.req', ''); let collectionPostResScript = collection.draft ? get(collection, 'draft.request.script.res', '') : get(collection, 'root.request.script.res', ''); - let collectionTests = collection.draft ? get(collection, 'draft.request.tests') : get(collection, 'root.request.tests', ''); + let collectionTests = collection.draft ? get(collection, 'draft.request.tests', '') : get(collection, 'root.request.tests', ''); let combinedPreReqScript = []; let combinedPostResScript = []; From 84b565f44957de0c093e1ea4bb5737319eb01361 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 7 Jan 2025 11:08:07 +0530 Subject: [PATCH 09/13] rm: document button changes --- .../CollectionSettings/Docs/StyledWrapper.js | 3 +++ .../CollectionSettings/Docs/index.js | 27 ++++++++----------- .../FolderSettings/Documentation/index.js | 27 ++++++++----------- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js b/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js index 262f068e78..f0ffee808e 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js @@ -2,6 +2,9 @@ import styled from 'styled-components'; const StyledWrapper = styled.div` div.CodeMirror { + /* todo: find a better way */ + height: calc(100vh - 240px); + .CodeMirror-scroll { padding-bottom: 0px; } diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index a5ccbc6986..76572f5297 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -35,26 +35,21 @@ const Docs = ({ collection }) => { return ( -
+
{isEditing ? 'Preview' : 'Edit'}
{isEditing ? ( -
- - -
+ ) : ( )} diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 9253bb6967..827ea3c93a 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -41,26 +41,21 @@ const Documentation = ({ collection, folder }) => { return ( -
+
{isEditing ? 'Preview' : 'Edit'}
{isEditing ? ( -
- - -
+ ) : ( )} From 2dfc7e94427d23be303726cbef9ebcacaa0a2531 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 7 Jan 2025 11:32:51 +0530 Subject: [PATCH 10/13] fix --- .../src/components/CollectionSettings/Docs/index.js | 2 +- .../src/components/FolderSettings/Documentation/index.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index 76572f5297..74c64b9511 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -34,7 +34,7 @@ const Docs = ({ collection }) => { const onSave = () => dispatch(saveCollectionRoot(collection.uid)); return ( - +
{isEditing ? 'Preview' : 'Edit'}
diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 827ea3c93a..11cf316e5d 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -40,8 +40,8 @@ const Documentation = ({ collection, folder }) => { } return ( - -
+ +
{isEditing ? 'Preview' : 'Edit'}
@@ -49,12 +49,12 @@ const Documentation = ({ collection, folder }) => { ) : ( From bdf9b1513e4cb3f7d385e9887675e0652ebf7b0f Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 7 Jan 2025 13:15:30 +0530 Subject: [PATCH 11/13] small fixes --- .../CollectionSettings/Docs/index.js | 1 - .../src/components/Documentation/index.js | 2 -- .../FolderSettings/Documentation/index.js | 3 --- .../ReduxStore/slices/collections/actions.js | 18 +++++++++--------- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js index 74c64b9511..66931cdf6f 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Docs/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Docs/index.js @@ -8,7 +8,6 @@ import { saveCollectionRoot } from 'providers/ReduxStore/slices/collections/acti import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; -import { IconDeviceFloppy } from '@tabler/icons'; const Docs = ({ collection }) => { const dispatch = useDispatch(); diff --git a/packages/bruno-app/src/components/Documentation/index.js b/packages/bruno-app/src/components/Documentation/index.js index fd7b6339b4..bbce1bd9b1 100644 --- a/packages/bruno-app/src/components/Documentation/index.js +++ b/packages/bruno-app/src/components/Documentation/index.js @@ -8,7 +8,6 @@ import { saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; -import { IconDeviceFloppy } from '@tabler/icons'; const Documentation = ({ item, collection }) => { const dispatch = useDispatch(); @@ -16,7 +15,6 @@ const Documentation = ({ item, collection }) => { const [isEditing, setIsEditing] = useState(false); const docs = item.draft ? get(item, 'draft.request.docs') : get(item, 'request.docs'); const preferences = useSelector((state) => state.app.preferences); - const { theme } = useTheme(); const toggleViewMode = () => { setIsEditing((prev) => !prev); diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js index 11cf316e5d..275e8c8f3a 100644 --- a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js @@ -8,7 +8,6 @@ import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions' import Markdown from 'components/MarkDown'; import CodeEditor from 'components/CodeEditor'; import StyledWrapper from './StyledWrapper'; -import { IconDeviceFloppy } from '@tabler/icons'; const Documentation = ({ collection, folder }) => { const dispatch = useDispatch(); @@ -16,8 +15,6 @@ const Documentation = ({ collection, folder }) => { const preferences = useSelector((state) => state.app.preferences); const [isEditing, setIsEditing] = useState(false); const docs = folder.draft ? get(folder, 'draft.docs', '') : get(folder, 'root.docs', ''); - const { theme } = useTheme(); - const toggleViewMode = () => { setIsEditing((prev) => !prev); diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 53cc380d95..6d0e2f5857 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -128,19 +128,19 @@ export const saveMultipleRequests = (items) => (dispatch, getState) => { export const saveCollectionRoot = (collectionUid) => (dispatch, getState) => { const state = getState(); - const collection = findCollectionByUid(state.collections.collections, collectionUid); + const collectionRoot = findCollectionByUid(state.collections.collections, collectionUid); - const transformRoot = transformCollectionRootToSave(collection); + const transformRoot = transformCollectionRootToSave(collectionRoot); return new Promise((resolve, reject) => { - if (!collection) { + if (!collectionRoot) { return reject(new Error('Collection not found')); } const { ipcRenderer } = window; ipcRenderer - .invoke('renderer:save-collection-root', collection.pathname, transformRoot) + .invoke('renderer:save-collection-root', collectionRoot.pathname, transformRoot) .then(() => toast.success('Collection Settings saved successfully')) .then(resolve) .catch((err) => { @@ -153,25 +153,25 @@ export const saveCollectionRoot = (collectionUid) => (dispatch, getState) => { export const saveFolderRoot = (collectionUid, folderUid) => (dispatch, getState) => { const state = getState(); const collection = findCollectionByUid(state.collections.collections, collectionUid); - const folder = findItemInCollection(collection, folderUid); + const folderRoot = findItemInCollection(collection, folderUid); return new Promise((resolve, reject) => { if (!collection) { return reject(new Error('Collection not found')); } - if (!folder) { + if (!folderRoot) { return reject(new Error('Folder not found')); } console.log(collection); const { ipcRenderer } = window; - const transformFolderRoot = transformFolderRootToSave(folder); + const transformFolderRoot = transformFolderRootToSave(folderRoot); const folderData = { - name: folder.name, - pathname: folder.pathname, + name: folderRoot.name, + pathname: folderRoot.pathname, root: transformFolderRoot }; console.log(folderData); From 94f155af76719789f71956491bb675af0164afe6 Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Tue, 7 Jan 2025 17:34:49 +0530 Subject: [PATCH 12/13] rm --- packages/bruno-cli/src/utils/collection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bruno-cli/src/utils/collection.js b/packages/bruno-cli/src/utils/collection.js index 1e0eed2193..eec4626841 100644 --- a/packages/bruno-cli/src/utils/collection.js +++ b/packages/bruno-cli/src/utils/collection.js @@ -137,7 +137,7 @@ const mergeScripts = (collection, request, requestTreePath, scriptFlow) => { combinedTests.push(tests); } } - }s + } request.script.req = compact([collectionPreReqScript, ...combinedPreReqScript, request?.script?.req || '']).join(os.EOL); From 41acf1eec8485e193a28e657b77d945b10e218aa Mon Sep 17 00:00:00 2001 From: Pooja Belaramani Date: Thu, 23 Jan 2025 12:33:43 +0530 Subject: [PATCH 13/13] rm: console --- .../src/providers/ReduxStore/slices/collections/actions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 6d0e2f5857..6327078156 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -174,7 +174,6 @@ export const saveFolderRoot = (collectionUid, folderUid) => (dispatch, getState) pathname: folderRoot.pathname, root: transformFolderRoot }; - console.log(folderData); ipcRenderer .invoke('renderer:save-folder-root', folderData)