mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-18 05:34:09 +00:00
feat: deleteall
This commit is contained in:
@@ -37,3 +37,8 @@ export const requestDelete = async (eventId) => {
|
|||||||
const res = await axios.delete(eventsURL + '/' + eventId);
|
const res = await axios.delete(eventsURL + '/' + eventId);
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const requestDeleteAll = async () => {
|
||||||
|
const res = await axios.delete(eventsURL + '/all');
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
requestPost,
|
requestPost,
|
||||||
requestPut,
|
requestPut,
|
||||||
requestDelete,
|
requestDelete,
|
||||||
|
requestDeleteAll,
|
||||||
requestReorder,
|
requestReorder,
|
||||||
requestApplyDelay,
|
requestApplyDelay,
|
||||||
} from 'app/api/eventsApi.js';
|
} from 'app/api/eventsApi.js';
|
||||||
@@ -160,6 +161,35 @@ export default function EventListWrapper() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const deleteAllEvents = useMutation(requestDeleteAll, {
|
||||||
|
// we optimistically update here
|
||||||
|
onMutate: async () => {
|
||||||
|
// cancel ongoing queries
|
||||||
|
queryClient.cancelQueries(EVENTS_TABLE, { exact: true });
|
||||||
|
|
||||||
|
// Snapshot the previous value
|
||||||
|
const previousEvents = queryClient.getQueryData(EVENTS_TABLE);
|
||||||
|
|
||||||
|
let clear = [];
|
||||||
|
|
||||||
|
// optimistically update object
|
||||||
|
queryClient.setQueryData(EVENTS_TABLE, clear);
|
||||||
|
|
||||||
|
// Return a context with the previous and new todo
|
||||||
|
return { previousEvents };
|
||||||
|
},
|
||||||
|
|
||||||
|
// Mutation fails, rollback undos optimist update
|
||||||
|
onError: (error, eventId, context) => {
|
||||||
|
queryClient.setQueryData(EVENTS_TABLE, context.previousEvents);
|
||||||
|
},
|
||||||
|
// Mutation finished, failed or successful
|
||||||
|
// Fetch anyway, just to be sure
|
||||||
|
onSettled: () => {
|
||||||
|
queryClient.invalidateQueries(EVENTS_TABLE);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const applyDelay = useMutation(requestApplyDelay, {
|
const applyDelay = useMutation(requestApplyDelay, {
|
||||||
// Mutation finished, failed or successful
|
// Mutation finished, failed or successful
|
||||||
onSettled: () => {
|
onSettled: () => {
|
||||||
@@ -298,6 +328,15 @@ export default function EventListWrapper() {
|
|||||||
setCollapsed({ clear: true, items: data, isCollapsed: false });
|
setCollapsed({ clear: true, items: data, isCollapsed: false });
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'deleteall':
|
||||||
|
try {
|
||||||
|
let t = Date.now();
|
||||||
|
await deleteAllEvents.mutateAsync();
|
||||||
|
console.log('debug m deleteall', Date.now() - t);
|
||||||
|
} catch (error) {
|
||||||
|
showErrorToast('Error deleting events', error.message);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
showErrorToast('Unrecognised request', action);
|
showErrorToast('Unrecognised request', action);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ const EventListMenu = ({ eventsHandler }) => {
|
|||||||
}
|
}
|
||||||
SetOption({ cursor: newSet });
|
SetOption({ cursor: newSet });
|
||||||
break;
|
break;
|
||||||
|
case 'deleteall':
|
||||||
|
eventsHandler('deleteall');
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
import { Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/menu';
|
import { Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/menu';
|
||||||
import { IconButton } from '@chakra-ui/button';
|
import { IconButton } from '@chakra-ui/button';
|
||||||
import { FiZap, FiPlus, FiClock, FiMinusCircle } from 'react-icons/fi';
|
import {
|
||||||
|
FiTrash2,
|
||||||
|
FiZap,
|
||||||
|
FiPlus,
|
||||||
|
FiClock,
|
||||||
|
FiMinusCircle,
|
||||||
|
} from 'react-icons/fi';
|
||||||
|
import { Divider } from '@chakra-ui/layout';
|
||||||
|
|
||||||
export default function MenuActionButtons(props) {
|
export default function MenuActionButtons(props) {
|
||||||
const { actionHandler } = props;
|
const { actionHandler } = props;
|
||||||
@@ -22,9 +29,6 @@ export default function MenuActionButtons(props) {
|
|||||||
color={'orange.500'}
|
color={'orange.500'}
|
||||||
/>
|
/>
|
||||||
<MenuList style={menuStyle}>
|
<MenuList style={menuStyle}>
|
||||||
{/* <MenuItem icon={<FiTrash2 />} onClick={props.deleteAllHandler}>
|
|
||||||
Delete All
|
|
||||||
</MenuItem> */}
|
|
||||||
<MenuItem icon={<FiPlus />} onClick={() => actionHandler('event')}>
|
<MenuItem icon={<FiPlus />} onClick={() => actionHandler('event')}>
|
||||||
Event first
|
Event first
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
@@ -37,6 +41,14 @@ export default function MenuActionButtons(props) {
|
|||||||
>
|
>
|
||||||
Block first
|
Block first
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<Divider />
|
||||||
|
<MenuItem
|
||||||
|
icon={<FiTrash2 />}
|
||||||
|
onClick={() => actionHandler('deleteall')}
|
||||||
|
color='red.500'
|
||||||
|
>
|
||||||
|
Delete All
|
||||||
|
</MenuItem>
|
||||||
</MenuList>
|
</MenuList>
|
||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -295,3 +295,20 @@ exports.eventsDelete = async (req, res) => {
|
|||||||
res.status(400).send(error);
|
res.status(400).send(error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Create controller for DELETE request to '/events/:eventId'
|
||||||
|
// Returns -
|
||||||
|
exports.eventsDeleteAll = async (req, res) => {
|
||||||
|
try {
|
||||||
|
// set with nothing
|
||||||
|
db.set('events', []).write();
|
||||||
|
|
||||||
|
// update timer object
|
||||||
|
_updateTimersSingle();
|
||||||
|
|
||||||
|
res.sendStatus(201);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('debug:', error);
|
||||||
|
res.status(400).send(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ router.patch('/reorder/', eventsController.eventsReorder);
|
|||||||
// create route between controller and '/events/applydelay/:eventId' endpoint
|
// create route between controller and '/events/applydelay/:eventId' endpoint
|
||||||
router.patch('/applydelay/:eventId', eventsController.eventsApplyDelay);
|
router.patch('/applydelay/:eventId', eventsController.eventsApplyDelay);
|
||||||
|
|
||||||
|
// create route between controller and '/events/all' endpoint
|
||||||
|
router.delete('/all', eventsController.eventsDeleteAll);
|
||||||
|
|
||||||
// create route between controller and '/events/:eventId' endpoint
|
// create route between controller and '/events/:eventId' endpoint
|
||||||
router.delete('/:eventId', eventsController.eventsDelete);
|
router.delete('/:eventId', eventsController.eventsDelete);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user