diff --git a/apps/client/src/common/api/ontimeApi.ts b/apps/client/src/common/api/ontimeApi.ts index 9794a1c03..aa06c89a7 100644 --- a/apps/client/src/common/api/ontimeApi.ts +++ b/apps/client/src/common/api/ontimeApi.ts @@ -88,6 +88,14 @@ export async function updateAliases(data: Partial) { 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 * @return {Promise} diff --git a/apps/client/src/features/app-settings/panel/url-alias-panel/UrlAliasListItem.tsx b/apps/client/src/features/app-settings/panel/url-alias-panel/UrlAliasListItem.tsx index e137e5625..4cbb7e9ab 100644 --- a/apps/client/src/features/app-settings/panel/url-alias-panel/UrlAliasListItem.tsx +++ b/apps/client/src/features/app-settings/panel/url-alias-panel/UrlAliasListItem.tsx @@ -2,7 +2,7 @@ import { useCallback, useMemo, useState } from 'react'; import { IconButton, Menu, MenuButton, MenuItem, MenuList, Switch } from '@chakra-ui/react'; 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'; @@ -43,6 +43,11 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe [onRefetch], ); + const handleDelete = useCallback(async () => { + await deleteAlias(alias); + await onRefetch(); + }, [alias, onRefetch]); + const handleRenderAliases = useMemo(() => { if (!isEditing) { return ( @@ -65,7 +70,7 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe - + ); @@ -83,21 +88,16 @@ export default function UrlAliasListItem({ alias, enabled, pathAndParams, onRefe ); } - }, [alias, enabled, handleSubmitUpdate, handleToggle, handleToggleEditMode, isEditing, pathAndParams]); + }, [alias, enabled, handleDelete, handleSubmitUpdate, handleToggle, handleToggleEditMode, isEditing, pathAndParams]); return {handleRenderAliases}; } -function ActionMenu({ onChangeEditMode }: { onChangeEditMode: () => void }) { +function ActionMenu({ onChangeEditMode, onDelete }: { onChangeEditMode: () => void; onDelete: () => Promise }) { const handleEdit = () => { onChangeEditMode(); }; - const handleDelete = async () => { - // await deleteProject(); - // await onRefetch(); - }; - return ( void }) { /> Edit - Delete + Delete ); diff --git a/apps/server/src/controllers/ontimeController.ts b/apps/server/src/controllers/ontimeController.ts index b182f50fb..5735d5036 100644 --- a/apps/server/src/controllers/ontimeController.ts +++ b/apps/server/src/controllers/ontimeController.ts @@ -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' // Returns - export const getUserFields = async (_req: Request, res: Response) => { diff --git a/apps/server/src/routes/ontimeRouter.ts b/apps/server/src/routes/ontimeRouter.ts index ef8389ceb..4f9b7b8e7 100644 --- a/apps/server/src/routes/ontimeRouter.ts +++ b/apps/server/src/routes/ontimeRouter.ts @@ -33,6 +33,7 @@ import { getAuthentication, getClientSecrect as getClientSecret, updateAliases, + deleteAlias, } from '../controllers/ontimeController.js'; import { @@ -92,6 +93,9 @@ router.post('/aliases', validateAliases, postAliases); // create route between controller and /ontime/aliases' endpoint 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 router.get('/userfields', getUserFields);