mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-27 22:54:07 +00:00
64 lines
2.4 KiB
JavaScript
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;
|