mirror of
https://github.com/usebruno/bruno.git
synced 2025-06-26 06:51:54 +02:00
draftRequests parameter
This commit is contained in:
parent
273f3e19ab
commit
a4043779ca
@ -1,42 +1,19 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import each from 'lodash/each';
|
|
||||||
import filter from 'lodash/filter';
|
|
||||||
import groupBy from 'lodash/groupBy';
|
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
import { findCollectionByUid, flattenItems, isItemARequest } from 'utils/collections';
|
|
||||||
import { pluralizeWord } from 'utils/common';
|
import { pluralizeWord } from 'utils/common';
|
||||||
import { saveMultipleRequests } from 'providers/ReduxStore/slices/collections/actions';
|
import { saveMultipleRequests } from 'providers/ReduxStore/slices/collections/actions';
|
||||||
import { IconAlertTriangle } from '@tabler/icons';
|
import { IconAlertTriangle } from '@tabler/icons';
|
||||||
import Modal from 'components/Modal';
|
import Modal from 'components/Modal';
|
||||||
|
|
||||||
const SaveRequestsModal = ({ onConfirm, onClose }) => {
|
const SaveRequestsModal = ({ onConfirm, onClose, draftRequests = [] }) => {
|
||||||
const MAX_UNSAVED_REQUESTS_TO_SHOW = 5;
|
const MAX_UNSAVED_REQUESTS_TO_SHOW = 5;
|
||||||
const currentDrafts = [];
|
|
||||||
const collections = useSelector((state) => state.collections.collections);
|
|
||||||
const tabs = useSelector((state) => state.tabs.tabs);
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
const tabsByCollection = groupBy(tabs, (t) => t.collectionUid);
|
|
||||||
Object.keys(tabsByCollection).forEach((collectionUid) => {
|
|
||||||
const collection = findCollectionByUid(collections, collectionUid);
|
|
||||||
if (collection) {
|
|
||||||
const items = flattenItems(collection.items);
|
|
||||||
const drafts = filter(items, (item) => isItemARequest(item) && item.draft);
|
|
||||||
each(drafts, (draft) => {
|
|
||||||
currentDrafts.push({
|
|
||||||
...draft,
|
|
||||||
collectionUid: collectionUid
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (currentDrafts.length === 0) {
|
if (draftRequests.length === 0) {
|
||||||
return dispatch(onConfirm());
|
return dispatch(onConfirm());
|
||||||
}
|
}
|
||||||
}, [currentDrafts, dispatch]);
|
}, [draftRequests, dispatch]);
|
||||||
|
|
||||||
const closeWithoutSave = () => {
|
const closeWithoutSave = () => {
|
||||||
dispatch(onConfirm());
|
dispatch(onConfirm());
|
||||||
@ -44,12 +21,12 @@ const SaveRequestsModal = ({ onConfirm, onClose }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const closeWithSave = () => {
|
const closeWithSave = () => {
|
||||||
dispatch(saveMultipleRequests(currentDrafts))
|
dispatch(saveMultipleRequests(draftRequests))
|
||||||
.then(() => dispatch(onConfirm()))
|
.then(() => dispatch(onConfirm()))
|
||||||
.then(() => onClose());
|
.then(() => onClose());
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!currentDrafts.length) {
|
if (!draftRequests.length) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,11 +48,11 @@ const SaveRequestsModal = ({ onConfirm, onClose }) => {
|
|||||||
</div>
|
</div>
|
||||||
<p className="mt-4">
|
<p className="mt-4">
|
||||||
Do you want to save the changes you made to the following{' '}
|
Do you want to save the changes you made to the following{' '}
|
||||||
<span className="font-medium">{currentDrafts.length}</span> {pluralizeWord('request', currentDrafts.length)}?
|
<span className="font-medium">{draftRequests.length}</span> {pluralizeWord('request', draftRequests.length)}?
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul className="mt-4">
|
<ul className="mt-4">
|
||||||
{currentDrafts.slice(0, MAX_UNSAVED_REQUESTS_TO_SHOW).map((item) => {
|
{draftRequests.slice(0, MAX_UNSAVED_REQUESTS_TO_SHOW).map((item) => {
|
||||||
return (
|
return (
|
||||||
<li key={item.uid} className="mt-1 text-xs">
|
<li key={item.uid} className="mt-1 text-xs">
|
||||||
{item.filename}
|
{item.filename}
|
||||||
@ -84,10 +61,10 @@ const SaveRequestsModal = ({ onConfirm, onClose }) => {
|
|||||||
})}
|
})}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{currentDrafts.length > MAX_UNSAVED_REQUESTS_TO_SHOW && (
|
{draftRequests.length > MAX_UNSAVED_REQUESTS_TO_SHOW && (
|
||||||
<p className="mt-1 text-xs">
|
<p className="mt-1 text-xs">
|
||||||
...{currentDrafts.length - MAX_UNSAVED_REQUESTS_TO_SHOW} additional{' '}
|
...{draftRequests.length - MAX_UNSAVED_REQUESTS_TO_SHOW} additional{' '}
|
||||||
{pluralizeWord('request', currentDrafts.length - MAX_UNSAVED_REQUESTS_TO_SHOW)} not shown
|
{pluralizeWord('request', draftRequests.length - MAX_UNSAVED_REQUESTS_TO_SHOW)} not shown
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -102,7 +79,7 @@ const SaveRequestsModal = ({ onConfirm, onClose }) => {
|
|||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
<button className="btn btn-secondary btn-sm" onClick={closeWithSave}>
|
<button className="btn btn-secondary btn-sm" onClick={closeWithSave}>
|
||||||
{currentDrafts.length > 1 ? 'Save All' : 'Save'}
|
{draftRequests.length > 1 ? 'Save All' : 'Save'}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
import { findCollectionByUid, flattenItems, isItemARequest } from 'utils/collections';
|
||||||
|
import each from 'lodash/each';
|
||||||
|
import filter from 'lodash/filter';
|
||||||
|
import groupBy from 'lodash/groupBy';
|
||||||
import SaveRequestsModal from './SaveRequestsModal';
|
import SaveRequestsModal from './SaveRequestsModal';
|
||||||
import { isElectron } from 'utils/common/platform';
|
import { isElectron } from 'utils/common/platform';
|
||||||
import { completeQuitFlow } from 'providers/ReduxStore/slices/app';
|
import { completeQuitFlow } from 'providers/ReduxStore/slices/app';
|
||||||
@ -8,6 +13,8 @@ const ConfirmAppClose = () => {
|
|||||||
const { ipcRenderer } = window;
|
const { ipcRenderer } = window;
|
||||||
const [showConfirmClose, setShowConfirmClose] = useState(false);
|
const [showConfirmClose, setShowConfirmClose] = useState(false);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const collections = useSelector((state) => state.collections.collections);
|
||||||
|
const tabs = useSelector((state) => state.tabs.tabs);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isElectron()) {
|
if (!isElectron()) {
|
||||||
@ -27,7 +34,26 @@ const ConfirmAppClose = () => {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <SaveRequestsModal onConfirm={completeQuitFlow} onClose={() => setShowConfirmClose(false)} />;
|
const getAllDraftRequests = () => {
|
||||||
|
const draftRequests = [];
|
||||||
|
const tabsByCollection = groupBy(tabs, (t) => t.collectionUid);
|
||||||
|
Object.keys(tabsByCollection).forEach((collectionUid) => {
|
||||||
|
const collection = findCollectionByUid(collections, collectionUid);
|
||||||
|
if (collection) {
|
||||||
|
const items = flattenItems(collection.items);
|
||||||
|
const drafts = filter(items, (item) => isItemARequest(item) && item.draft);
|
||||||
|
each(drafts, (draft) => {
|
||||||
|
draftRequests.push({
|
||||||
|
...draft,
|
||||||
|
collectionUid: collectionUid
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return draftRequests
|
||||||
|
}
|
||||||
|
|
||||||
|
return <SaveRequestsModal draftRequests={getAllDraftRequests()} onConfirm={completeQuitFlow} onClose={() => setShowConfirmClose(false)} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ConfirmAppClose;
|
export default ConfirmAppClose;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user