From d5cb051f194d679c600f5ddfb96f8808fe8b5c78 Mon Sep 17 00:00:00 2001 From: lohit Date: Thu, 17 Jul 2025 14:21:00 +0530 Subject: [PATCH] enable/disable collection/folder run buttons based on the filtered requests (#5131) --- .../RunnerResults/RunnerTags/index.jsx | 4 +- .../src/components/RunnerResults/index.jsx | 11 +- .../CollectionItem/RunCollectionItem/index.js | 102 +++++++++--------- .../bruno-app/src/components/TagList/index.js | 2 +- .../bruno-app/src/utils/collections/index.js | 29 +++++ 5 files changed, 89 insertions(+), 59 deletions(-) diff --git a/packages/bruno-app/src/components/RunnerResults/RunnerTags/index.jsx b/packages/bruno-app/src/components/RunnerResults/RunnerTags/index.jsx index c24b5a233..984452d78 100644 --- a/packages/bruno-app/src/components/RunnerResults/RunnerTags/index.jsx +++ b/packages/bruno-app/src/components/RunnerResults/RunnerTags/index.jsx @@ -4,7 +4,7 @@ import { get, cloneDeep, find } from 'lodash'; import { updateCollectionTagsList, updateRunnerTagsDetails } from 'providers/ReduxStore/slices/collections'; import TagList from 'components/TagList'; -const RunnerTags = ({ collectionUid }) => { +const RunnerTags = ({ collectionUid, className = '' }) => { const dispatch = useDispatch(); const collections = useSelector((state) => state.collections.collections); const collection = cloneDeep(find(collections, (c) => c.uid === collectionUid)); @@ -87,7 +87,7 @@ const RunnerTags = ({ collectionUid }) => { }; return ( -
+
{ let relativePath = path.relative(fullPath, pathname); @@ -73,6 +74,10 @@ export default function RunnerResults({ collection }) { // have tags been added for the collection run const areTagsAdded = tags.include.length > 0 || tags.exclude.length > 0; + const requestItemsForCollectionRun = getRequestItemsForCollectionRun({ recursive: true, tags, items: collection.items }); + const totalRequestItemsCountForCollectionRun = requestItemsForCollectionRun.length; + const shouldDisableCollectionRun = totalRequestItemsCountForCollectionRun <= 0; + const items = cloneDeep(get(collection, 'runnerResult.items', [])) .map((item) => { const info = findItemInCollection(collectionCopy, item.uid); @@ -161,9 +166,9 @@ export default function RunnerResults({ collection }) {
{/* Tags for the collection run */} - + - @@ -346,7 +351,7 @@ export default function RunnerResults({ collection }) { - - - { - isCollectionRunInProgress ? +
+ + + + { + isCollectionRunInProgress ? + + + + : + <> - - : - <> - - - - - - - - } -
+ + + + + }
- )} +
); diff --git a/packages/bruno-app/src/components/TagList/index.js b/packages/bruno-app/src/components/TagList/index.js index 3e13637f3..e683a0a41 100644 --- a/packages/bruno-app/src/components/TagList/index.js +++ b/packages/bruno-app/src/components/TagList/index.js @@ -41,7 +41,7 @@ const TagList = ({ tagsHintList = [], handleAddTag, tags, handleRemoveTag, onSav { if (!str || !str.length || !isString(str)) { @@ -1125,3 +1126,31 @@ export const getUniqueTagsFromItems = (items = []) => { getTags(items); return Array.from(allTags).sort(); }; + + +export const getRequestItemsForCollectionRun = ({ recursive, items = [], tags }) => { + let requestItems = []; + + if (recursive) { + requestItems = flattenItems(items); + } else { + each(items, (item) => { + if (item.request) { + requestItems.push(item); + } + }); + } + + const requestTypes = ['http-request', 'graphql-request']; + requestItems = requestItems.filter(request => requestTypes.includes(request.type)); + + if (tags && tags.include && tags.exclude) { + const includeTags = tags.include ? tags.include : []; + const excludeTags = tags.exclude ? tags.exclude : []; + requestItems = requestItems.filter(({ tags = [] }) => { + return isRequestTagsIncluded(tags, includeTags, excludeTags); + }); + } + + return requestItems; +}; \ No newline at end of file