mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-19 14:14:17 +00:00
feat: create works, just not ideal
This commit is contained in:
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user