mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-10 09:53:48 +00:00
ac0d5832b6
* install sass * refact: integration settings - OSC in its own HTTP endpoint - OSC settings have own object in db * refact: simplify event cycle * refact: restructure external triggers http * refact: restructure external triggers osc+socket * refact: restructure data updates * feat: osc integration class * IO improvements - timer uses osc integration - create trigger handler to manage external triggers * refact: refract state machine update * Integration: simple HTTP Client * Integration: http options in datamodel * Integration: call http send on life cycle * feat/62-logging: fix issue #71
183 lines
6.0 KiB
React
183 lines
6.0 KiB
React
import { ModalBody } from '@chakra-ui/modal';
|
|
import { FormLabel, FormControl, Input, Button } from '@chakra-ui/react';
|
|
import { getOSC, oscPlaceholderSettings, postOSC } from 'app/api/ontimeApi';
|
|
import { useEffect, useState } from 'react';
|
|
import { useFetch } from 'app/hooks/useFetch';
|
|
import { OSC_SETTINGS } from 'app/api/apiConstants';
|
|
import { showErrorToast } from 'common/helpers/toastManager';
|
|
import style from './Modals.module.scss';
|
|
|
|
export default function AppSettingsModal() {
|
|
const { data, status } = useFetch(OSC_SETTINGS, getOSC);
|
|
const [formData, setFormData] = useState(oscPlaceholderSettings);
|
|
const [changed, setChanged] = useState(false);
|
|
const [submitting, setSubmitting] = useState(false);
|
|
|
|
useEffect(() => {
|
|
if (data == null) return;
|
|
setFormData({ ...data });
|
|
}, [data]);
|
|
|
|
const submitHandler = async (event) => {
|
|
event.preventDefault();
|
|
|
|
const f = formData;
|
|
let e = { status: false, message: '' };
|
|
|
|
// Validate fields
|
|
if (f.port < 1024 || f.port > 65535) {
|
|
// Port in incorrect range
|
|
e.status = true;
|
|
e.message += 'OSC IN Port in incorrect range (1024 - 65535)';
|
|
} else if (f.portOut < 1024 || f.portOut > 65535) {
|
|
// Port in incorrect range
|
|
e.status = true;
|
|
e.message += 'OSC OUT Port in incorrect range (1024 - 65535)';
|
|
} else if (f.port === f.portOut) {
|
|
// Cant use the same port
|
|
e.status = true;
|
|
e.message += 'OSC IN and OUT Ports cant be the same';
|
|
}
|
|
|
|
// set fields with error
|
|
if (e.status) {
|
|
showErrorToast('Invalid Input', e.message);
|
|
return;
|
|
}
|
|
|
|
// Post here
|
|
postOSC(formData);
|
|
|
|
setChanged(false);
|
|
setSubmitting(false);
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<form onSubmit={submitHandler}>
|
|
<ModalBody className={style.modalBody}>
|
|
{status === 'success' && (
|
|
<>
|
|
<p className={style.notes}>
|
|
Options related to the application
|
|
<br />
|
|
🔥 Changes take effect after app restart 🔥
|
|
</p>
|
|
|
|
<FormControl id='serverPort'>
|
|
<FormLabel htmlFor='serverPort'>
|
|
Viewer Port
|
|
<span className={style.notes}>Port to access viewers</span>
|
|
</FormLabel>
|
|
<Input
|
|
size='sm'
|
|
name='title'
|
|
placeholder='4001'
|
|
autoComplete='off'
|
|
value={4001}
|
|
readOnly
|
|
style={{ width: '6em', textAlign: 'center' }}
|
|
/>
|
|
<span className={style.notes}>(Read Only Value)</span>
|
|
</FormControl>
|
|
<FormControl id='port'>
|
|
<FormLabel htmlFor='port'>
|
|
OSC In Port
|
|
<span className={style.notes}>
|
|
<br />
|
|
App Control - Default 8888
|
|
</span>
|
|
</FormLabel>
|
|
<Input
|
|
size='sm'
|
|
name='port'
|
|
placeholder='8888'
|
|
autoComplete='off'
|
|
type='number'
|
|
value={formData.port}
|
|
min='1024'
|
|
max='65535'
|
|
onChange={(event) => {
|
|
setChanged(true);
|
|
setFormData({
|
|
...formData,
|
|
port: parseInt(event.target.value),
|
|
});
|
|
}}
|
|
isDisabled={submitting}
|
|
style={{ width: '6em', textAlign: 'center' }}
|
|
/>
|
|
</FormControl>
|
|
<div className={style.modalInline}>
|
|
<FormControl id='targetIP' width='auto'>
|
|
<FormLabel htmlFor='targetIP'>
|
|
OSC Out Target IP
|
|
<span className={style.notes}>
|
|
<br />
|
|
App Feedback - Default 127.0.0.1
|
|
</span>
|
|
</FormLabel>
|
|
<Input
|
|
size='sm'
|
|
name='targetIP'
|
|
placeholder='127.0.0.1'
|
|
autoComplete='off'
|
|
value={formData.targetIP}
|
|
onChange={(event) => {
|
|
setChanged(true);
|
|
setFormData({
|
|
...formData,
|
|
targetIP: event.target.value,
|
|
});
|
|
}}
|
|
isDisabled={submitting}
|
|
style={{ width: '12em', textAlign: 'right' }}
|
|
/>
|
|
</FormControl>
|
|
<FormControl id='portOut' width='auto'>
|
|
<FormLabel htmlFor='portOut'>
|
|
OSC Out Port
|
|
<span className={style.notes}>
|
|
<br />
|
|
Default 9999
|
|
</span>
|
|
</FormLabel>
|
|
<Input
|
|
size='sm'
|
|
name='portOut'
|
|
placeholder='9999'
|
|
autoComplete='off'
|
|
type='number'
|
|
value={formData.portOut}
|
|
min='1024'
|
|
max='65535'
|
|
onChange={(event) => {
|
|
setChanged(true);
|
|
setFormData({
|
|
...formData,
|
|
portOut: parseInt(event.target.value),
|
|
});
|
|
}}
|
|
isDisabled={submitting}
|
|
style={{ width: '6em', textAlign: 'left' }}
|
|
/>
|
|
</FormControl>
|
|
</div>
|
|
</>
|
|
)}
|
|
<div className={style.submitContainer}>
|
|
<Button
|
|
colorScheme='blue'
|
|
type='submit'
|
|
isLoading={submitting}
|
|
disabled={!changed}
|
|
>
|
|
Save
|
|
</Button>
|
|
</div>
|
|
</ModalBody>
|
|
</form>
|
|
</>
|
|
);
|
|
}
|