screen info context

This commit is contained in:
cv
2021-03-25 14:43:06 +01:00
parent fce88846da
commit f1da6be9c8
7 changed files with 79 additions and 24 deletions
+15 -8
View File
@@ -2,19 +2,26 @@ import { Route } from 'react-router';
import './App.css'; import './App.css';
import { EventProvider } from './app/context/eventContext'; import { EventProvider } from './app/context/eventContext';
import { EventListProvider } from './app/context/eventListContext'; import { EventListProvider } from './app/context/eventListContext';
import { PresenterMessageProvider } from './app/context/presenterMessageContext';
import Editor from './features/editors/Editor'; import Editor from './features/editors/Editor';
import DefaultPresenter from './features/viewers/DefaultPresenter'; import DefaultPresenter from './features/viewers/DefaultPresenter';
function App() { function App() {
return ( return (
<EventProvider> <PresenterMessageProvider>
<div className='App'> <EventProvider>
{/* <Route path='/' exact component={DefaultPresenter} /> */}
<EventListProvider> <div className='App'>
<Route path='/editor' exact component={Editor} /> <Route path='/' exact component={DefaultPresenter} />
</EventListProvider>
</div> <EventListProvider>
</EventProvider> <Route path='/editor' exact component={Editor} />
</EventListProvider>
</div>
</EventProvider>
</PresenterMessageProvider>
); );
} }
+1 -1
View File
@@ -1,6 +1,6 @@
import { createContext, useState } from 'react'; import { createContext, useState } from 'react';
export const EventContext = createContext(); export const EventContext = createContext([[], () => {}]);
export function EventProvider(props) { export function EventProvider(props) {
const [event, setEvent] = useState(null); const [event, setEvent] = useState(null);
+1 -1
View File
@@ -1,7 +1,7 @@
import { createContext, useState } from 'react'; import { createContext, useState } from 'react';
import { sampleData } from '../sampleData'; import { sampleData } from '../sampleData';
export const EventListContext = createContext(); export const EventListContext = createContext([[], () => {}]);
export function EventListProvider(props) { export function EventListProvider(props) {
const [events, setEvents] = useState(sampleData.events); const [events, setEvents] = useState(sampleData.events);
@@ -0,0 +1,16 @@
import { createContext, useState } from 'react';
export const PresenterMessagesContext = createContext([[], () => {}]);
export function PresenterMessageProvider(props) {
const [presMessage, setPresMessage] = useState({
text: '',
show: '',
});
return (
<PresenterMessagesContext.Provider value={[presMessage, setPresMessage]}>
{props.children}
</PresenterMessagesContext.Provider>
);
}
+5 -1
View File
@@ -9,6 +9,9 @@ import ChakraInput from '../../common/input/ChakraInput';
import ChakraNumberInput from '../../common/input/ChakraNumberInput'; import ChakraNumberInput from '../../common/input/ChakraNumberInput';
import TimeInput from '../../common/input/TimeInput'; import TimeInput from '../../common/input/TimeInput';
import styles from './EventForm.module.css'; import styles from './EventForm.module.css';
import 'react-datepicker/dist/react-datepicker-cssmodules.css';
import ReactDatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';
const sampleInitialValues = { const sampleInitialValues = {
title: '', title: '',
@@ -80,7 +83,7 @@ export default function EventForm(props) {
return ( return (
<div> <div>
<Formik <Formik
enableReinitialize={true} // enableReinitialize={true}
initialValues={initialValues} initialValues={initialValues}
validationSchema={validationSchema} validationSchema={validationSchema}
onSubmit={(values, actions) => { onSubmit={(values, actions) => {
@@ -120,6 +123,7 @@ export default function EventForm(props) {
maxW={24} maxW={24}
/> />
<DatePicker />
<div className={styles.buttons}> <div className={styles.buttons}>
<Button <Button
variant='outline' variant='outline'
+17 -3
View File
@@ -2,26 +2,39 @@ import { IconButton } from '@chakra-ui/button';
import { FormControl, FormLabel } from '@chakra-ui/form-control'; import { FormControl, FormLabel } from '@chakra-ui/form-control';
import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons'; import { ViewIcon, ViewOffIcon } from '@chakra-ui/icons';
import { Input } from '@chakra-ui/input'; import { Input } from '@chakra-ui/input';
import { useContext } from 'react';
import { useState } from 'react'; import { useState } from 'react';
import { PresenterMessagesContext } from '../../app/context/presenterMessageContext';
export default function MessageForm(props) { export default function MessageForm(props) {
const [presenterShow, setPresenterShow] = useState(false); const [presenterShow, setPresenterShow] = useState(false);
const [publicShow, setPublicShow] = useState(false); const [publicShow, setPublicShow] = useState(false);
const [presMessage, setPresMessage] = useContext(PresenterMessagesContext);
const handleSetPresenter = () => { const handleSetPresenter = () => {
setPresenterShow(!presenterShow); setPresenterShow(!presenterShow);
} setPresMessage((prev) => ({ ...prev, show: !presMessage.show }));
};
const handlePresenterChange = (val) => {
setPresMessage((prev) => ({ ...prev, text: val }));
};
const handleSetPublic = () => { const handleSetPublic = () => {
setPublicShow(!publicShow); setPublicShow(!publicShow);
} };
const handlePublicChange = () => {};
return ( return (
<> <>
<form style={{ display: 'flex', gap: '1em' }}> <form style={{ display: 'flex', gap: '1em' }}>
<FormControl id='presenterMessage'> <FormControl id='presenterMessage'>
<FormLabel>Presenter screen message</FormLabel> <FormLabel>Presenter screen message</FormLabel>
<Input placeholder='only the presenter screens see this' /> <Input
placeholder='only the presenter screens see this'
onChange={(event) => handlePresenterChange(event.target.value)}
/>
</FormControl> </FormControl>
<IconButton <IconButton
style={{ alignSelf: 'flex-end' }} style={{ alignSelf: 'flex-end' }}
@@ -31,6 +44,7 @@ export default function MessageForm(props) {
icon={presenterShow ? <ViewOffIcon /> : <ViewIcon />} icon={presenterShow ? <ViewOffIcon /> : <ViewIcon />}
/> />
</form> </form>
<form style={{ display: 'flex', gap: '1em', paddingTop: '1em' }}> <form style={{ display: 'flex', gap: '1em', paddingTop: '1em' }}>
<FormControl id='generalMessage'> <FormControl id='generalMessage'>
<FormLabel>Public screen message</FormLabel> <FormLabel>Public screen message</FormLabel>
+24 -10
View File
@@ -1,15 +1,21 @@
import { differenceInSeconds, format, subMinutes } from 'date-fns'; import { differenceInSeconds, format, subMinutes } from 'date-fns';
import addMinutes from 'date-fns/addMinutes'; import addMinutes from 'date-fns/addMinutes';
import { useContext, useEffect, useState } from 'react';
import { EventContext } from '../../app/context/eventContext';
import { PresenterMessagesContext } from '../../app/context/presenterMessageContext';
import { sampleData } from '../../app/sampleData'; import { sampleData } from '../../app/sampleData';
import Countdown from '../../common/components/countdown/Countdown'; import Countdown from '../../common/components/countdown/Countdown';
import MyProgressBar from '../../common/components/myProgressBar/MyProgressBar'; import MyProgressBar from '../../common/components/myProgressBar/MyProgressBar';
import SmallTimer from '../../common/components/smallTimer/SmallTimer'; import SmallTimer from '../../common/components/smallTimer/SmallTimer';
import './viewers.css'; import './viewers.css';
export default function DefaultPresenter(props) { export default function DefaultPresenter() {
const data = sampleData; const [event, setEvent] = useContext(EventContext);
const [presMessage] = useContext(PresenterMessagesContext);
const [initialValues, setInitialValues] = useState(null);
const now = new Date(); const now = new Date();
const values = props.data ?? { let values = event ?? {
title: 'Presentation Title', title: 'Presentation Title',
subtitle: 'Presentation Subtitle', subtitle: 'Presentation Subtitle',
presenter: 'Presenter Name', presenter: 'Presenter Name',
@@ -18,6 +24,18 @@ export default function DefaultPresenter(props) {
timeEnd: now, timeEnd: now,
}; };
useEffect(() => {
values = event;
}, [event]);
useEffect(() => {
setInitialValues(event);
}, [event]);
console.log('local event event', event);
console.log('local event values', values);
console.log('local event initialv', initialValues);
// NITE: test only // NITE: test only
const clockStarted = addMinutes(now, 6); const clockStarted = addMinutes(now, 6);
@@ -33,18 +51,14 @@ export default function DefaultPresenter(props) {
console.log('timers', timer, timeStart, currentTime, timeEnd, elapsed); console.log('timers', timer, timeStart, currentTime, timeEnd, elapsed);
if (props?.preview) return <div>Preview</div>;
return ( return (
<div className='presenter'> <div className='presenter'>
<div className='presentationTitle'>{values.title}</div> <div className='presentationTitle'>{values.title}</div>
<div className='presentationSub'>{values.subtitle}</div> <div className='presentationSub'>{values.subtitle}</div>
<Countdown time={timer} /> <Countdown time={timer} />
{!data.message.active && <MyProgressBar normalisedComplete={elapsed} />} {!presMessage.show && <MyProgressBar normalisedComplete={elapsed} />}
<div <div className={presMessage.show ? 'userMessage' : 'userMessage hidden'}>
className={data.message.active ? 'userMessage' : 'userMessage hidden'} {presMessage.text}
>
{data.message.text}
</div> </div>
<div className='extra'> <div className='extra'>
<SmallTimer label='Scheduled Start' time={timeStart} /> <SmallTimer label='Scheduled Start' time={timeStart} />