feat: deletion

This commit is contained in:
Ary
2024-02-24 11:47:30 -07:00
parent 9a2fa527c6
commit 6c86ece1ff
4 changed files with 46 additions and 10 deletions
+8
View File
@@ -88,6 +88,14 @@ export async function updateAliases(data: Partial<Alias>) {
return axios.put(`${ontimeURL}/aliases`, data); return axios.put(`${ontimeURL}/aliases`, data);
} }
/**
* @description HTTP request to delete alias
* @return {Promise}
*/
export async function deleteAlias(alias: string) {
return axios.delete(`${ontimeURL}/aliases/${alias}`);
}
/** /**
* @description HTTP request to retrieve user fields * @description HTTP request to retrieve user fields
* @return {Promise} * @return {Promise}
@@ -2,7 +2,7 @@ import { useCallback, useMemo, useState } from 'react';
import { IconButton, Menu, MenuButton, MenuItem, MenuList, Switch } from '@chakra-ui/react'; import { IconButton, Menu, MenuButton, MenuItem, MenuList, Switch } from '@chakra-ui/react';
import { IoEllipsisHorizontal } from '@react-icons/all-files/io5/IoEllipsisHorizontal'; import { IoEllipsisHorizontal } from '@react-icons/all-files/io5/IoEllipsisHorizontal';
import { updateAliases } from '../../../../common/api/ontimeApi'; import { deleteAlias, updateAliases } from '../../../../common/api/ontimeApi';
import UrlAliasForm, { UrlAliasFormValues } from './UrlAliasForm'; import UrlAliasForm, { UrlAliasFormValues } from './UrlAliasForm';
@@ -43,6 +43,11 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe
[onRefetch], [onRefetch],
); );
const handleDelete = useCallback(async () => {
await deleteAlias(alias);
await onRefetch();
}, [alias, onRefetch]);
const handleRenderAliases = useMemo(() => { const handleRenderAliases = useMemo(() => {
if (!isEditing) { if (!isEditing) {
return ( return (
@@ -65,7 +70,7 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe
<Switch variant='ontime-on-light' isChecked={enabled} onChange={handleToggle} /> <Switch variant='ontime-on-light' isChecked={enabled} onChange={handleToggle} />
</td> </td>
<td> <td>
<ActionMenu onChangeEditMode={handleToggleEditMode} /> <ActionMenu onDelete={handleDelete} onChangeEditMode={handleToggleEditMode} />
</td> </td>
</> </>
); );
@@ -83,21 +88,16 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe
</td> </td>
); );
} }
}, [alias, enabled, handleSubmitUpdate, handleToggle, handleToggleEditMode, isEditing, pathAndParams]); }, [alias, enabled, handleDelete, handleSubmitUpdate, handleToggle, handleToggleEditMode, isEditing, pathAndParams]);
return <tr key={alias}>{handleRenderAliases}</tr>; return <tr key={alias}>{handleRenderAliases}</tr>;
} }
function ActionMenu({ onChangeEditMode }: { onChangeEditMode: () => void }) { function ActionMenu({ onChangeEditMode, onDelete }: { onChangeEditMode: () => void; onDelete: () => Promise<void> }) {
const handleEdit = () => { const handleEdit = () => {
onChangeEditMode(); onChangeEditMode();
}; };
const handleDelete = async () => {
// await deleteProject();
// await onRefetch();
};
return ( return (
<Menu variant='ontime-on-dark' size='sm'> <Menu variant='ontime-on-dark' size='sm'>
<MenuButton <MenuButton
@@ -109,7 +109,7 @@ function ActionMenu({ onChangeEditMode }: { onChangeEditMode: () => void }) {
/> />
<MenuList> <MenuList>
<MenuItem onClick={handleEdit}>Edit</MenuItem> <MenuItem onClick={handleEdit}>Edit</MenuItem>
<MenuItem onClick={handleDelete}>Delete</MenuItem> <MenuItem onClick={onDelete}>Delete</MenuItem>
</MenuList> </MenuList>
</Menu> </Menu>
); );
@@ -217,6 +217,30 @@ export const updateAliases = async (req: Request, res: Response) => {
} }
}; };
// Delete controller for DELETE request to '/ontime/aliases/:alias'
// Returns ACK message
export const deleteAlias = async (req: Request, res: Response) => {
try {
const alias = req.params.alias;
const aliases = DataProvider.getAliases();
const index = aliases.findIndex((a) => a.alias === alias);
if (index === -1) {
return res.status(404).send({ message: `Alias ${alias} not found` });
}
aliases.splice(index, 1);
await DataProvider.setAliases(aliases);
res.status(200).send(aliases);
} catch (error) {
res.status(400).send({ message: String(error) });
}
};
// Create controller for GET request to '/ontime/userfields' // Create controller for GET request to '/ontime/userfields'
// Returns - // Returns -
export const getUserFields = async (_req: Request, res: Response) => { export const getUserFields = async (_req: Request, res: Response) => {
+4
View File
@@ -33,6 +33,7 @@ import {
getAuthentication, getAuthentication,
getClientSecrect as getClientSecret, getClientSecrect as getClientSecret,
updateAliases, updateAliases,
deleteAlias,
} from '../controllers/ontimeController.js'; } from '../controllers/ontimeController.js';
import { import {
@@ -92,6 +93,9 @@ router.post('/aliases', validateAliases, postAliases);
// create route between controller and /ontime/aliases' endpoint // create route between controller and /ontime/aliases' endpoint
router.put('/aliases', validateUpdateAlises, updateAliases); router.put('/aliases', validateUpdateAlises, updateAliases);
// create route between controller and '/ontime/aliases' endpoint
router.delete('/aliases/:alias', deleteAlias);
// create route between controller and '/ontime/aliases' endpoint // create route between controller and '/ontime/aliases' endpoint
router.get('/userfields', getUserFields); router.get('/userfields', getUserFields);