This commit is contained in:
naman-bruno
2025-12-15 18:17:11 +05:30
committed by GitHub
parent c11266a96f
commit 6cc114100f
4 changed files with 44 additions and 30 deletions

View File

@@ -1,7 +1,8 @@
import React, { useRef, useEffect, useState, forwardRef } from 'react';
import { useDispatch } from 'react-redux';
import { useDispatch, useSelector } from 'react-redux';
import { useFormik } from 'formik';
import * as Yup from 'yup';
import get from 'lodash/get';
import { IconCaretDown } from '@tabler/icons';
import { browseDirectory } from 'providers/ReduxStore/slices/collections/actions';
import { postmanToBruno } from 'utils/importers/postman-collection';
@@ -88,12 +89,21 @@ const ImportCollectionLocation = ({ onClose, handleSubmit, rawData, format }) =>
const dropdownTippyRef = useRef();
const isOpenApi = format === 'openapi';
const { workspaces, activeWorkspaceUid } = useSelector((state) => state.workspaces);
const preferences = useSelector((state) => state.app.preferences);
const activeWorkspace = workspaces.find((w) => w.uid === activeWorkspaceUid);
const isDefaultWorkspace = !activeWorkspace || activeWorkspace.type === 'default';
const defaultLocation = isDefaultWorkspace
? get(preferences, 'general.defaultCollectionLocation', '')
: (activeWorkspace?.pathname ? `${activeWorkspace.pathname}/collections` : '');
const collectionName = getCollectionName(format, rawData);
const formik = useFormik({
enableReinitialize: true,
initialValues: {
collectionLocation: ''
collectionLocation: defaultLocation
},
validationSchema: Yup.object({
collectionLocation: Yup.string()

View File

@@ -15,7 +15,6 @@ import {
import { importCollection, openCollection } from 'providers/ReduxStore/slices/collections/actions';
import { sortCollections } from 'providers/ReduxStore/slices/collections/index';
import { importCollectionInWorkspace } from 'providers/ReduxStore/slices/workspaces/actions';
import MenuDropdown from 'ui/MenuDropdown';
import ActionIcon from 'ui/ActionIcon';
@@ -45,16 +44,8 @@ const CollectionsSection = () => {
const handleImportCollection = ({ rawData, type }) => {
setImportCollectionModalOpen(false);
if (activeWorkspace && activeWorkspace.type !== 'default') {
dispatch(importCollectionInWorkspace(rawData, activeWorkspace.uid, undefined, type))
.catch((err) => {
toast.error('An error occurred while importing the collection');
});
} else {
setImportData({ rawData, type });
setImportCollectionLocationModalOpen(true);
}
setImportData({ rawData, type });
setImportCollectionLocationModalOpen(true);
};
const handleImportCollectionLocation = (convertedCollection, collectionLocation) => {

View File

@@ -19,7 +19,6 @@ import { useDispatch, useSelector } from 'react-redux';
import { importCollection, openCollection } from 'providers/ReduxStore/slices/collections/actions';
import { sortCollections } from 'providers/ReduxStore/slices/collections/index';
import { importCollectionInWorkspace } from 'providers/ReduxStore/slices/workspaces/actions';
import { openApiSpec } from 'providers/ReduxStore/slices/apiSpec';
import MenuDropdown from 'ui/MenuDropdown';
@@ -51,16 +50,8 @@ const SidebarHeader = ({ setShowSearch }) => {
const handleImportCollection = ({ rawData, type }) => {
setImportCollectionModalOpen(false);
if (activeWorkspace && activeWorkspace.type !== 'default') {
dispatch(importCollectionInWorkspace(rawData, activeWorkspace.uid, undefined, type))
.catch((err) => {
toast.error('An error occurred while importing the collection');
});
} else {
setImportData({ rawData, type });
setImportCollectionLocationModalOpen(true);
}
setImportData({ rawData, type });
setImportCollectionLocationModalOpen(true);
};
const handleImportCollectionLocation = (convertedCollection, collectionLocation) => {

View File

@@ -1,11 +1,11 @@
import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { IconPlus, IconFolder, IconFileImport } from '@tabler/icons';
import { importCollectionInWorkspace } from 'providers/ReduxStore/slices/workspaces/actions';
import { openCollection } from 'providers/ReduxStore/slices/collections/actions';
import { importCollection, openCollection } from 'providers/ReduxStore/slices/collections/actions';
import toast from 'react-hot-toast';
import CreateCollection from 'components/Sidebar/CreateCollection';
import ImportCollection from 'components/Sidebar/ImportCollection';
import ImportCollectionLocation from 'components/Sidebar/ImportCollectionLocation';
import CollectionsList from './CollectionsList';
import WorkspaceDocs from '../WorkspaceDocs';
import StyledWrapper from './StyledWrapper';
@@ -16,6 +16,8 @@ const WorkspaceOverview = ({ workspace }) => {
const [createCollectionModalOpen, setCreateCollectionModalOpen] = useState(false);
const [importCollectionModalOpen, setImportCollectionModalOpen] = useState(false);
const [importCollectionLocationModalOpen, setImportCollectionLocationModalOpen] = useState(false);
const [importData, setImportData] = useState(null);
const workspaceCollectionsCount = workspace?.collections?.length || 0;
@@ -50,10 +52,21 @@ const WorkspaceOverview = ({ workspace }) => {
const handleImportCollectionSubmit = ({ rawData, type }) => {
setImportCollectionModalOpen(false);
dispatch(importCollectionInWorkspace(rawData, workspace.uid, undefined, type)).catch((err) => {
console.error(err);
toast.error('An error occurred while importing the collection');
});
setImportData({ rawData, type });
setImportCollectionLocationModalOpen(true);
};
const handleImportCollectionLocation = (convertedCollection, collectionLocation) => {
dispatch(importCollection(convertedCollection, collectionLocation))
.then(() => {
setImportCollectionLocationModalOpen(false);
setImportData(null);
toast.success('Collection imported successfully');
})
.catch((err) => {
console.error(err);
toast.error(err.message);
});
};
return (
@@ -69,6 +82,15 @@ const WorkspaceOverview = ({ workspace }) => {
/>
)}
{importCollectionLocationModalOpen && importData && (
<ImportCollectionLocation
rawData={importData.rawData}
format={importData.type}
onClose={() => setImportCollectionLocationModalOpen(false)}
handleSubmit={handleImportCollectionLocation}
/>
)}
<div className="overview-layout">
<div className="overview-main">
<div className="stats-row">