diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/StyledWrapper.js b/packages/bruno-app/src/components/FolderSettings/Documentation/StyledWrapper.js
new file mode 100644
index 000000000..f159d94dc
--- /dev/null
+++ b/packages/bruno-app/src/components/FolderSettings/Documentation/StyledWrapper.js
@@ -0,0 +1,10 @@
+import styled from 'styled-components';
+
+const StyledWrapper = styled.div`
+ .editing-mode {
+ cursor: pointer;
+ color: ${(props) => props.theme.colors.text.yellow};
+ }
+`;
+
+export default StyledWrapper;
diff --git a/packages/bruno-app/src/components/FolderSettings/Documentation/index.js b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js
new file mode 100644
index 000000000..81a3ccd01
--- /dev/null
+++ b/packages/bruno-app/src/components/FolderSettings/Documentation/index.js
@@ -0,0 +1,63 @@
+import 'github-markdown-css/github-markdown.css';
+import get from 'lodash/get';
+import { updateFolderDocs } from 'providers/ReduxStore/slices/collections';
+import { useTheme } from 'providers/Theme';
+import { useState } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions';
+import Markdown from 'components/MarkDown';
+import CodeEditor from 'components/CodeEditor';
+import StyledWrapper from './StyledWrapper';
+
+const Documentation = ({ collection, folder }) => {
+ const dispatch = useDispatch();
+ const { displayedTheme } = useTheme();
+ const preferences = useSelector((state) => state.app.preferences);
+ const [isEditing, setIsEditing] = useState(false);
+ const docs = get(folder, 'root.docs', '');
+
+ const toggleViewMode = () => {
+ setIsEditing((prev) => !prev);
+ };
+
+ const onEdit = (value) => {
+ dispatch(
+ updateFolderDocs({
+ folderUid: folder.uid,
+ collectionUid: collection.uid,
+ docs: value
+ })
+ );
+ };
+
+ const onSave = () => dispatch(saveFolderRoot(collection.uid, folder.uid));
+
+ if (!folder) {
+ return null;
+ }
+
+ return (
+
+
+ {isEditing ? 'Preview' : 'Edit'}
+
+
+ {isEditing ? (
+
+ ) : (
+
+ )}
+
+ );
+};
+
+export default Documentation;
diff --git a/packages/bruno-app/src/components/FolderSettings/index.js b/packages/bruno-app/src/components/FolderSettings/index.js
index 9c7dc087d..4e1eba753 100644
--- a/packages/bruno-app/src/components/FolderSettings/index.js
+++ b/packages/bruno-app/src/components/FolderSettings/index.js
@@ -7,6 +7,7 @@ import Script from './Script';
import Tests from './Tests';
import StyledWrapper from './StyledWrapper';
import Vars from './Vars';
+import Documentation from './Documentation';
import DotIcon from 'components/Icons/Dot';
const ContentIndicator = () => {
@@ -60,6 +61,9 @@ const FolderSettings = ({ collection, folder }) => {
case 'vars': {
return ;
}
+ case 'docs': {
+ return ;
+ }
}
};
@@ -89,6 +93,9 @@ const FolderSettings = ({ collection, folder }) => {
Vars
{activeVarsCount > 0 && {activeVarsCount}}
+
setTab('docs')}>
+ Docs
+
diff --git a/packages/bruno-app/src/providers/Hotkeys/index.js b/packages/bruno-app/src/providers/Hotkeys/index.js
index 87d187ddd..f9316eb94 100644
--- a/packages/bruno-app/src/providers/Hotkeys/index.js
+++ b/packages/bruno-app/src/providers/Hotkeys/index.js
@@ -6,7 +6,12 @@ import { useSelector, useDispatch } from 'react-redux';
import EnvironmentSettings from 'components/Environments/EnvironmentSettings';
import NetworkError from 'components/ResponsePane/NetworkError';
import NewRequest from 'components/Sidebar/NewRequest';
-import { sendRequest, saveRequest, saveCollectionRoot } from 'providers/ReduxStore/slices/collections/actions';
+import {
+ sendRequest,
+ saveRequest,
+ saveCollectionRoot,
+ saveFolderRoot
+} from 'providers/ReduxStore/slices/collections/actions';
import { findCollectionByUid, findItemInCollection } from 'utils/collections';
import { closeTabs, switchTab } from 'providers/ReduxStore/slices/tabs';
import { getKeyBindingsForActionAllOS } from './keyMappings';
@@ -43,7 +48,11 @@ export const HotkeysProvider = (props) => {
if (collection) {
const item = findItemInCollection(collection, activeTab.uid);
if (item && item.uid) {
- dispatch(saveRequest(activeTab.uid, activeTab.collectionUid));
+ if (activeTab.type === 'folder-settings') {
+ dispatch(saveFolderRoot(collection.uid, item.uid));
+ } else {
+ dispatch(saveRequest(activeTab.uid, activeTab.collectionUid));
+ }
} else if (activeTab.type === 'collection-settings') {
dispatch(saveCollectionRoot(collection.uid));
}
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 b7ef2f86e..8e936fb68 100644
--- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
+++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
@@ -1,6 +1,5 @@
import { uuid } from 'utils/common';
-import path from 'path';
-import { find, map, forOwn, concat, filter, each, cloneDeep, get, set, debounce } from 'lodash';
+import { find, map, forOwn, concat, filter, each, cloneDeep, get, set } from 'lodash';
import { createSlice } from '@reduxjs/toolkit';
import {
addDepth,
@@ -13,6 +12,7 @@ import {
findEnvironmentInCollection,
findItemInCollection,
findItemInCollectionByPathname,
+ isItemAFolder,
isItemARequest
} from 'utils/collections';
import { parsePathParams, parseQueryParams, splitOnFirst, stringifyQueryParams } from 'utils/url';
@@ -1733,6 +1733,15 @@ export const collectionsSlice = createSlice({
item.draft.request.docs = action.payload.docs;
}
}
+ },
+ updateFolderDocs: (state, action) => {
+ const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
+ const folder = collection ? findItemInCollection(collection, action.payload.folderUid) : null;
+ if (folder) {
+ if (isItemAFolder(folder)) {
+ set(folder, 'root.docs', action.payload.docs);
+ }
+ }
}
}
});
@@ -1827,7 +1836,8 @@ export const {
runRequestEvent,
runFolderEvent,
resetCollectionRunner,
- updateRequestDocs
+ updateRequestDocs,
+ updateFolderDocs
} = 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 dcbb948e5..a88346a08 100644
--- a/packages/bruno-app/src/utils/collections/index.js
+++ b/packages/bruno-app/src/utils/collections/index.js
@@ -404,7 +404,7 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {}
request: {}
};
- let { request, meta } = si?.root || {};
+ let { request, meta, docs } = si?.root || {};
let { headers, script = {}, vars = {}, tests } = request || {};
// folder level headers
@@ -436,6 +436,11 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {}
di.root.request.tests = tests;
}
+ // folder level docs
+ if (docs?.length) {
+ di.root.docs = docs;
+ }
+
if (meta?.name) {
di.root.meta = {};
di.root.meta.name = meta?.name;