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 24443f68b..5e8984823 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -1014,6 +1014,16 @@ export const browseFiles = }); }; + export const browseFile = + (filters = []) => + (dispatch, getState) => { + const { ipcRenderer } = window; + + return new Promise((resolve, reject) => { + ipcRenderer.invoke('renderer:browse-file', filters).then(resolve).catch(reject); + }); + }; + export const updateBrunoConfig = (brunoConfig, collectionUid) => (dispatch, getState) => { const state = getState(); diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index abbef438c..908c19b4c 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -698,7 +698,6 @@ export const refreshUidsInItem = (item) => { each(get(item, 'request.params'), (param) => (param.uid = uuid())); each(get(item, 'request.body.multipartForm'), (param) => (param.uid = uuid())); each(get(item, 'request.body.formUrlEncoded'), (param) => (param.uid = uuid())); - each(get(item, 'request.body.rawFile'), (param) => (param.uid = uuid())); return item; }; diff --git a/packages/bruno-electron/src/ipc/collection.js b/packages/bruno-electron/src/ipc/collection.js index 2233f81bc..0ea64c0a2 100644 --- a/packages/bruno-electron/src/ipc/collection.js +++ b/packages/bruno-electron/src/ipc/collection.js @@ -11,6 +11,7 @@ const { isDirectory, browseDirectory, browseFiles, + browseFile, createDirectory, searchForBruFiles, sanitizeDirectoryName @@ -50,6 +51,17 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection } }); + // browse directory for one file + ipcMain.handle('renderer:browse-file', async (event, pathname, request, filters) => { + try { + const filePath = await browseFile(mainWindow, filters); + + return filePath; + } catch (error) { + return Promise.reject(error); + } + }); + // create collection ipcMain.handle( 'renderer:create-collection', diff --git a/packages/bruno-electron/src/utils/filesystem.js b/packages/bruno-electron/src/utils/filesystem.js index 8216bd9c9..95cc70a46 100644 --- a/packages/bruno-electron/src/utils/filesystem.js +++ b/packages/bruno-electron/src/utils/filesystem.js @@ -116,6 +116,17 @@ const browseFiles = async (win, filters) => { return filePaths.map((path) => normalizeAndResolvePath(path)).filter((path) => isFile(path)); }; +const browseFile = async (win, filters) => { + const { filePath } = await dialog.showOpenDialog(win, { + properties: ['openFile'], + filters + }); + + if(!filePath) { + return null; + } +} + const chooseFileToSave = async (win, preferredFileName = '') => { const { filePath } = await dialog.showSaveDialog(win, { defaultPath: preferredFileName @@ -161,6 +172,7 @@ module.exports = { createDirectory, browseDirectory, browseFiles, + browseFile, chooseFileToSave, searchForFiles, searchForBruFiles,