From 8ae3bb2df03d589852d51262219087e567b0ab4f Mon Sep 17 00:00:00 2001 From: Ary Date: Sun, 25 Feb 2024 11:19:27 -0700 Subject: [PATCH] feat: create works, just not ideal --- apps/client/src/common/api/ontimeApi.ts | 8 +++++ .../panel/url-preset-panel/UrlPresetList.tsx | 31 ++++++++++++++++++- .../panel/url-preset-panel/UrlPresetPanel.tsx | 17 ++++++++-- .../src/classes/data-provider/DataProvider.ts | 5 +++ .../src/controllers/ontimeController.ts | 17 ++++++++++ .../controllers/ontimeController.validate.ts | 15 +++++++++ apps/server/src/routes/ontimeRouter.ts | 9 ++++-- 7 files changed, 96 insertions(+), 6 deletions(-) diff --git a/apps/client/src/common/api/ontimeApi.ts b/apps/client/src/common/api/ontimeApi.ts index aa06c89a7..f430b076e 100644 --- a/apps/client/src/common/api/ontimeApi.ts +++ b/apps/client/src/common/api/ontimeApi.ts @@ -80,6 +80,14 @@ export async function postAliases(data: Alias[]) { return axios.post(`${ontimeURL}/aliases`, data); } +/** + * @description HTTP request to create an alias + * @return {Promise} + */ +export async function postAlias(data: Alias) { + return axios.post(`${ontimeURL}/aliases`, data); +} + /** * @description HTTP request to update aliases * @return {Promise} diff --git a/apps/client/src/features/app-settings/panel/url-preset-panel/UrlPresetList.tsx b/apps/client/src/features/app-settings/panel/url-preset-panel/UrlPresetList.tsx index 3bec71796..4f9d6002c 100644 --- a/apps/client/src/features/app-settings/panel/url-preset-panel/UrlPresetList.tsx +++ b/apps/client/src/features/app-settings/panel/url-preset-panel/UrlPresetList.tsx @@ -1,16 +1,37 @@ +import { postAlias } from '../../../../common/api/ontimeApi'; import useAliases from '../../../../common/hooks-query/useAliases'; import ModalLoader from '../../../modals/modal-loader/ModalLoader'; import * as Panel from '../PanelUtils'; +import UrlPresetForm, { UrlPresetFormValues } from './UrlPresetForm'; import UrlPresetListItem from './UrlPresetListItem'; -export default function UrlPresetList() { +interface UrlPresetListProps { + isCreatingPresetURL: boolean; + onToggleCreate: () => void; +} + +export default function UrlPresetList({ isCreatingPresetURL, onToggleCreate }: UrlPresetListProps) { const { data, isFetching, refetch } = useAliases(); const handleRefetch = async () => { await refetch(); }; + const handleSubmitCreate = async (values: UrlPresetFormValues) => { + try { + // TODO: fix this + // @ts-ignore + await postAlias({ + ...values, + enabled: true, + }); + await refetch(); + } catch (error) { + // some error handling here + } + }; + if (isFetching) { return ; } @@ -26,6 +47,14 @@ export default function UrlPresetList() { + {isCreatingPresetURL ? ( + + + + {/* {submitError && {submitError}} */} + + + ) : null} {(data || []).map((alias) => { return ( { + setIsCreatingPresetURL((prev) => !prev); + }; + return ( <> URL Presets @@ -33,8 +40,14 @@ export default function UrlPresetPanel() { marginTop: '1rem', }} > - + + Manage URL presets + + + diff --git a/apps/server/src/classes/data-provider/DataProvider.ts b/apps/server/src/classes/data-provider/DataProvider.ts index 866daeb5c..55f67fabe 100644 --- a/apps/server/src/classes/data-provider/DataProvider.ts +++ b/apps/server/src/classes/data-provider/DataProvider.ts @@ -76,6 +76,11 @@ export class DataProvider { await this.persist(); } + static async addAlias(newData: Alias) { + data.aliases.push(newData); + await this.persist(); + } + static getUserFields() { return { ...data.userFields }; } diff --git a/apps/server/src/controllers/ontimeController.ts b/apps/server/src/controllers/ontimeController.ts index 5735d5036..547e3ef70 100644 --- a/apps/server/src/controllers/ontimeController.ts +++ b/apps/server/src/controllers/ontimeController.ts @@ -189,6 +189,23 @@ export const postAliases = async (req: Request, res: Response) => { } }; +// Create controller for POST request to '/ontime/aliases' +// Returns ACK message +export const postAlias = async (req: Request, res: Response) => { + try { + const newAlias = { + enabled: req.body.enabled, + alias: req.body.alias, + pathAndParams: req.body.pathAndParams, + }; + + await DataProvider.addAlias(newAlias); + res.status(200).send(newAlias); + } catch (error) { + res.status(400).send({ message: String(error) }); + } +}; + // Update controller for PUT request to '/ontime/aliases' // Returns ACK message export const updateAliases = async (req: Request, res: Response) => { diff --git a/apps/server/src/controllers/ontimeController.validate.ts b/apps/server/src/controllers/ontimeController.validate.ts index 38e13669b..45a1c9e38 100644 --- a/apps/server/src/controllers/ontimeController.validate.ts +++ b/apps/server/src/controllers/ontimeController.validate.ts @@ -39,6 +39,21 @@ export const validateAliases = [ }, ]; +/** + * @description Validates object for POST /ontime/aliases + */ +export const validateCreateAlias = [ + body('alias').isString().trim(), + body('pathAndParams').isString().trim(), + body('enabled').isBoolean(), + + (req: Request, res: Response, next: NextFunction) => { + const errors = validationResult(req); + if (!errors.isEmpty()) return res.status(422).json({ errors: errors.array() }); + next(); + }, +]; + /** * @description Validates object for PUT /ontime/aliases */ diff --git a/apps/server/src/routes/ontimeRouter.ts b/apps/server/src/routes/ontimeRouter.ts index 4f9b7b8e7..cc3a7e58b 100644 --- a/apps/server/src/routes/ontimeRouter.ts +++ b/apps/server/src/routes/ontimeRouter.ts @@ -12,7 +12,6 @@ import { getViewSettings, patchPartialProjectFile, poll, - postAliases, postOSC, postSettings, postUserFields, @@ -34,10 +33,10 @@ import { getClientSecrect as getClientSecret, updateAliases, deleteAlias, + postAlias, } from '../controllers/ontimeController.js'; import { - validateAliases, validateOSC, validatePatchProjectFile, validateSettings, @@ -51,6 +50,7 @@ import { validateWorksheet, validateSheetOptions, validateUpdateAlises, + validateCreateAlias, } from '../controllers/ontimeController.validate.js'; import { projectSanitiser } from '../controllers/projectController.validate.js'; import { sanitizeProjectFilename } from '../utils/sanitizeProjectFilename.js'; @@ -87,8 +87,11 @@ router.post('/views', viewValidator, postViewSettings); // create route between controller and '/ontime/aliases' endpoint router.get('/aliases', getAliases); +// // create route between controller and '/ontime/aliases' endpoint +// router.post('/aliases', validateAliases, postAliases); + // create route between controller and '/ontime/aliases' endpoint -router.post('/aliases', validateAliases, postAliases); +router.post('/aliases', validateCreateAlias, postAlias); // create route between controller and /ontime/aliases' endpoint router.put('/aliases', validateUpdateAlises, updateAliases);