feat: create works, just not ideal

This commit is contained in:
Ary
2024-02-25 11:19:27 -07:00
parent ff1496d29f
commit 8ae3bb2df0
7 changed files with 96 additions and 6 deletions
+8
View File
@@ -80,6 +80,14 @@ export async function postAliases(data: Alias[]) {
return axios.post(`${ontimeURL}/aliases`, data); 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 * @description HTTP request to update aliases
* @return {Promise} * @return {Promise}
@@ -1,16 +1,37 @@
import { postAlias } from '../../../../common/api/ontimeApi';
import useAliases from '../../../../common/hooks-query/useAliases'; import useAliases from '../../../../common/hooks-query/useAliases';
import ModalLoader from '../../../modals/modal-loader/ModalLoader'; import ModalLoader from '../../../modals/modal-loader/ModalLoader';
import * as Panel from '../PanelUtils'; import * as Panel from '../PanelUtils';
import UrlPresetForm, { UrlPresetFormValues } from './UrlPresetForm';
import UrlPresetListItem from './UrlPresetListItem'; 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 { data, isFetching, refetch } = useAliases();
const handleRefetch = async () => { const handleRefetch = async () => {
await refetch(); 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) { if (isFetching) {
return <ModalLoader />; return <ModalLoader />;
} }
@@ -26,6 +47,14 @@ export default function UrlPresetList() {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{isCreatingPresetURL ? (
<tr>
<td colSpan={99}>
<UrlPresetForm onCancel={onToggleCreate} onSubmit={handleSubmitCreate} submitError='' />
{/* {submitError && <span className={style.createSubmitError}>{submitError}</span>} */}
</td>
</tr>
) : null}
{(data || []).map((alias) => { {(data || []).map((alias) => {
return ( return (
<UrlPresetListItem <UrlPresetListItem
@@ -1,4 +1,5 @@
import { Alert, AlertDescription, AlertIcon, AlertTitle } from '@chakra-ui/react'; import { useState } from 'react';
import { Alert, AlertDescription, AlertIcon, AlertTitle, Button } from '@chakra-ui/react';
import ModalLink from '../../../modals/ModalLink'; import ModalLink from '../../../modals/ModalLink';
import * as Panel from '../PanelUtils'; import * as Panel from '../PanelUtils';
@@ -10,6 +11,12 @@ import style from './UrlPresetPanel.module.scss';
const aliasesDocsUrl = 'https://ontime.gitbook.io/v2/features/url-aliases'; const aliasesDocsUrl = 'https://ontime.gitbook.io/v2/features/url-aliases';
export default function UrlPresetPanel() { export default function UrlPresetPanel() {
const [isCreatingPresetURL, setIsCreatingPresetURL] = useState(false);
const handleToggleCreate = () => {
setIsCreatingPresetURL((prev) => !prev);
};
return ( return (
<> <>
<Panel.Header>URL Presets</Panel.Header> <Panel.Header>URL Presets</Panel.Header>
@@ -33,8 +40,14 @@ export default function UrlPresetPanel() {
marginTop: '1rem', marginTop: '1rem',
}} }}
> >
<UrlPresetList /> <Panel.SubHeader>
Manage URL presets
<Button variant='ontime-filled' onClick={handleToggleCreate}>
New
</Button>
</Panel.SubHeader>
</div> </div>
<UrlPresetList isCreatingPresetURL={isCreatingPresetURL} onToggleCreate={handleToggleCreate} />
</main> </main>
</Panel.Card> </Panel.Card>
</Panel.Section> </Panel.Section>
@@ -76,6 +76,11 @@ export class DataProvider {
await this.persist(); await this.persist();
} }
static async addAlias(newData: Alias) {
data.aliases.push(newData);
await this.persist();
}
static getUserFields() { static getUserFields() {
return { ...data.userFields }; return { ...data.userFields };
} }
@@ -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' // Update controller for PUT request to '/ontime/aliases'
// Returns ACK message // Returns ACK message
export const updateAliases = async (req: Request, res: Response) => { export const updateAliases = async (req: Request, res: Response) => {
@@ -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 * @description Validates object for PUT /ontime/aliases
*/ */
+6 -3
View File
@@ -12,7 +12,6 @@ import {
getViewSettings, getViewSettings,
patchPartialProjectFile, patchPartialProjectFile,
poll, poll,
postAliases,
postOSC, postOSC,
postSettings, postSettings,
postUserFields, postUserFields,
@@ -34,10 +33,10 @@ import {
getClientSecrect as getClientSecret, getClientSecrect as getClientSecret,
updateAliases, updateAliases,
deleteAlias, deleteAlias,
postAlias,
} from '../controllers/ontimeController.js'; } from '../controllers/ontimeController.js';
import { import {
validateAliases,
validateOSC, validateOSC,
validatePatchProjectFile, validatePatchProjectFile,
validateSettings, validateSettings,
@@ -51,6 +50,7 @@ import {
validateWorksheet, validateWorksheet,
validateSheetOptions, validateSheetOptions,
validateUpdateAlises, validateUpdateAlises,
validateCreateAlias,
} from '../controllers/ontimeController.validate.js'; } from '../controllers/ontimeController.validate.js';
import { projectSanitiser } from '../controllers/projectController.validate.js'; import { projectSanitiser } from '../controllers/projectController.validate.js';
import { sanitizeProjectFilename } from '../utils/sanitizeProjectFilename.js'; import { sanitizeProjectFilename } from '../utils/sanitizeProjectFilename.js';
@@ -87,8 +87,11 @@ router.post('/views', viewValidator, postViewSettings);
// create route between controller and '/ontime/aliases' endpoint // create route between controller and '/ontime/aliases' endpoint
router.get('/aliases', getAliases); 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 // 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 // create route between controller and /ontime/aliases' endpoint
router.put('/aliases', validateUpdateAlises, updateAliases); router.put('/aliases', validateUpdateAlises, updateAliases);