Files
bruno/packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/index.js
2025-12-03 14:04:58 +05:30

64 lines
2.4 KiB
JavaScript

import React, { useMemo } from 'react';
import toast from 'react-hot-toast';
import Modal from 'components/Modal';
import { useDispatch, useSelector } from 'react-redux';
import { IconFiles } from '@tabler/icons';
import { removeCollection } from 'providers/ReduxStore/slices/collections/actions';
import { findCollectionByUid, flattenItems, isItemARequest, hasRequestChanges } from 'utils/collections/index';
import filter from 'lodash/filter';
import ConfirmCollectionCloseDrafts from './ConfirmCollectionCloseDrafts';
const RemoveCollection = ({ onClose, collectionUid }) => {
const dispatch = useDispatch();
const collection = useSelector(state => findCollectionByUid(state.collections.collections, collectionUid));
// Detect drafts in the collection
const drafts = useMemo(() => {
if (!collection) return [];
const items = flattenItems(collection.items);
return filter(items, (item) => isItemARequest(item) && hasRequestChanges(item));
}, [collection]);
const onConfirm = () => {
if (!collection) {
toast.error('Collection not found');
onClose();
return;
}
dispatch(removeCollection(collection.uid))
.then(() => {
toast.success('Collection removed from workspace');
onClose();
})
.catch(() => toast.error('An error occurred while removing the collection'));
};
if (!collection) {
return <div>Collection not found</div>;
}
// If there are drafts, show the draft confirmation modal
if (drafts.length > 0) {
return <ConfirmCollectionCloseDrafts onClose={onClose} collection={collection} collectionUid={collectionUid} />;
}
// Otherwise, show the standard remove confirmation modal
return (
<Modal size="sm" title="Remove Collection" confirmText="Remove" handleConfirm={onConfirm} handleCancel={onClose}>
<div className="flex items-center">
<IconFiles size={18} strokeWidth={1.5} />
<span className="ml-2 mr-4 font-medium">{collection.name}</span>
</div>
<div className="break-words text-xs mt-1">{collection.pathname}</div>
<div className="mt-4">
Are you sure you want to remove collection <span className="font-medium">{collection.name}</span> from this workspace?
</div>
<div className="mt-4 text-muted">
The collection files will remain on disk and can be re-added to this or another workspace later.
</div>
</Modal>
);
};
export default RemoveCollection;