diff --git a/client/src/features/control/playback/PlaybackControl.tsx b/client/src/features/control/playback/PlaybackControl.tsx
index 082975ede..a341b98bb 100644
--- a/client/src/features/control/playback/PlaybackControl.tsx
+++ b/client/src/features/control/playback/PlaybackControl.tsx
@@ -1,4 +1,4 @@
-import { usePlaybackControlProvider } from '../../../common/hooks/useSocketProvider';
+import { usePlaybackControl } from '../../../common/hooks/useSocket';
import { Playstate } from '../../../common/models/OntimeTypes';
import PlaybackButtons from './PlaybackButtons';
@@ -7,7 +7,7 @@ import PlaybackTimer from './PlaybackTimer';
import style from './PlaybackControl.module.scss';
export default function PlaybackControl() {
- const { data } = usePlaybackControlProvider();
+ const { data } = usePlaybackControl();
return (
diff --git a/client/src/features/control/playback/PlaybackTimer.tsx b/client/src/features/control/playback/PlaybackTimer.tsx
index 776b6c70f..738afed5a 100644
--- a/client/src/features/control/playback/PlaybackTimer.tsx
+++ b/client/src/features/control/playback/PlaybackTimer.tsx
@@ -1,10 +1,7 @@
import { Tooltip } from '@chakra-ui/react';
import TimerDisplay from 'common/components/countdown/TimerDisplay';
-import {
- usePlaybackControlProvider,
- useTimerProvider,
-} from '../../../common/hooks/useSocketProvider';
+import { setPlayback, useTimer } from '../../../common/hooks/useSocket';
import { Playstate } from '../../../common/models/OntimeTypes';
import { millisToSeconds } from '../../../common/utils/dateConfig';
import { stringFromMillis } from '../../../common/utils/time';
@@ -21,8 +18,7 @@ interface PlaybackTimerProps {
export default function PlaybackTimer(props: PlaybackTimerProps) {
const { playback, selectedId } = props;
- const { setPlayback } = usePlaybackControlProvider();
- const timerData = useTimerProvider();
+ const { data: timerData } = useTimer();
const started = stringFromMillis(timerData.startedAt, true);
const finish = stringFromMillis(timerData.expectedFinish, true);
const isRolling = playback === 'roll';
diff --git a/client/src/features/control/playback/Transport.tsx b/client/src/features/control/playback/Transport.tsx
index c4944b174..7fb19a5e8 100644
--- a/client/src/features/control/playback/Transport.tsx
+++ b/client/src/features/control/playback/Transport.tsx
@@ -4,7 +4,7 @@ import { IoPlaySkipBack } from '@react-icons/all-files/io5/IoPlaySkipBack';
import { IoPlaySkipForward } from '@react-icons/all-files/io5/IoPlaySkipForward';
import { IoStop } from '@react-icons/all-files/io5/IoStop';
-import { usePlaybackControlProvider } from '../../../common/hooks/useSocketProvider';
+import { setPlayback } from '../../../common/hooks/useSocket';
import { Playstate } from '../../../common/models/OntimeTypes';
import { tooltipDelayMid } from '../../../ontimeConfig';
@@ -20,7 +20,6 @@ interface TransportProps {
export default function Transport(props: TransportProps) {
const { playback, selectedId, noEvents } = props;
- const { setPlayback } = usePlaybackControlProvider();
const isRolling = playback === 'roll';
return (
diff --git a/client/src/features/info/Info.jsx b/client/src/features/info/Info.jsx
index 8adced29f..6f442baa2 100644
--- a/client/src/features/info/Info.jsx
+++ b/client/src/features/info/Info.jsx
@@ -1,4 +1,4 @@
-import { useInfoProvider } from '../../common/hooks/useSocketProvider';
+import { useInfoPanel } from '../../common/hooks/useSocket';
import InfoLogger from './InfoLogger';
import InfoNif from './InfoNif';
@@ -7,7 +7,7 @@ import InfoTitle from './InfoTitle';
import style from './Info.module.scss';
export default function Info() {
- const data = useInfoProvider();
+ const { data } = useInfoPanel();
const titlesNow = {
title: data.titles.titleNow,
diff --git a/client/src/features/info/__tests__/Info.test.jsx b/client/src/features/info/__tests__/Info.test.jsx
index 8b3430bbe..72aa4dd4f 100644
--- a/client/src/features/info/__tests__/Info.test.jsx
+++ b/client/src/features/info/__tests__/Info.test.jsx
@@ -1,6 +1,5 @@
import { QueryClientProvider } from '@tanstack/react-query';
import { render, screen } from '@testing-library/react';
-import SocketProvider from 'common/context/socketContext';
import { queryClientMock } from '../../../__mocks__/QueryClient.mock';
import Info from '../Info';
@@ -10,10 +9,8 @@ test('check static info render', async () => {
// render without failing
render(
-
-
-
-
+
+ ,
);
// Info titles
diff --git a/client/src/features/rundown/Rundown.jsx b/client/src/features/rundown/Rundown.jsx
index b54349f80..59dbb10ce 100644
--- a/client/src/features/rundown/Rundown.jsx
+++ b/client/src/features/rundown/Rundown.jsx
@@ -9,7 +9,7 @@ import {
import Empty from 'common/components/state/Empty';
import { CursorContext } from 'common/context/CursorContext';
import { useEventAction } from 'common/hooks/useEventAction';
-import { useRundownProvider } from 'common/hooks/useSocketProvider';
+import { useRundownEditor } from 'common/hooks/useSocket';
import { duplicateEvent } from 'common/utils/eventsManager';
import { useAtomValue } from 'jotai';
import PropTypes from 'prop-types';
@@ -23,6 +23,8 @@ import style from './Rundown.module.scss';
export default function Rundown(props) {
const { entries } = props;
+ // Todo: add selectedId and nextId to rundown editor hook
+ const { data } = useRundownEditor();
const { cursor, moveCursorUp, moveCursorDown, moveCursorTo, isCursorLocked } =
useContext(CursorContext);
const startTimeIsLastEnd = useAtomValue(startTimeIsLastEndAtom);
@@ -30,7 +32,6 @@ export default function Rundown(props) {
const { addEvent, reorderEvent } = useEventAction();
const cursorRef = createRef();
const showQuickEntry = useAtomValue(showQuickEntryAtom);
- const data = useRundownProvider();
const [selectedId] = useSubscription('selected-id', null);
const [nextId] = useSubscription('next-id', null);
diff --git a/client/src/features/rundown/event-block/EventBlock.tsx b/client/src/features/rundown/event-block/EventBlock.tsx
index 6aecb8a67..3d1ae52d7 100644
--- a/client/src/features/rundown/event-block/EventBlock.tsx
+++ b/client/src/features/rundown/event-block/EventBlock.tsx
@@ -17,7 +17,7 @@ import TooltipActionBtn from 'common/components/buttons/TooltipActionBtn';
import { getAccessibleColour } from 'common/utils/styleUtils';
import { useAtom } from 'jotai';
-import { useEventProvider } from '../../../common/hooks/useSocketProvider';
+import { setEventPlayback } from '../../../common/hooks/useSocket';
import { Playstate } from '../../../common/models/OntimeTypes';
import { tooltipDelayMid } from '../../../ontimeConfig';
import { EventItemActions } from '../RundownEntry';
@@ -80,7 +80,6 @@ export default function EventBlock(props: EventBlockProps) {
} = props;
const [openId, setOpenId] = useAtom(editorEventId);
- const { setPlayback } = useEventProvider(eventId);
const [blockTitle, setBlockTitle] = useState(title || '');
const binderColours = colour && getAccessibleColour(colour);
@@ -157,7 +156,7 @@ export default function EventBlock(props: EventBlockProps) {
icon={selected ? : }
disabled={skip}
{...blockBtnStyle}
- clickHandler={() => setPlayback.loadEvent()}
+ clickHandler={() => setEventPlayback.loadEvent(eventId)}
tabIndex={-1}
/>
setPlayback.startEvent()}
+ clickHandler={() => setEventPlayback.startEvent(eventId)}
backgroundColor={eventIsPlaying ? '#58A151' : undefined}
tabIndex={-1}
/>
diff --git a/client/src/features/table/TableHeader.jsx b/client/src/features/table/TableHeader.jsx
index c98421681..771f6a5f2 100644
--- a/client/src/features/table/TableHeader.jsx
+++ b/client/src/features/table/TableHeader.jsx
@@ -9,7 +9,7 @@ import PropTypes from 'prop-types';
import { TableSettingsContext } from '../../common/context/TableSettingsContext';
import useFullscreen from '../../common/hooks/useFullscreen';
-import { useTimerProvider } from '../../common/hooks/useSocketProvider';
+import { useTimer } from '../../common/hooks/useSocket';
import useEvent from '../../common/hooks-query/useEvent';
import { formatDisplay, millisToSeconds } from '../../common/utils/dateConfig';
import { formatTime } from '../../common/utils/time';
@@ -22,7 +22,7 @@ import style from './Table.module.scss';
export default function TableHeader({ handleCSVExport, featureData }) {
const { followSelected, showSettings, toggleTheme, toggleSettings, toggleFollow } =
useContext(TableSettingsContext);
- const timer = useTimerProvider();
+ const { data: timer } = useTimer();
const { isFullScreen, toggleFullScreen } = useFullscreen();
const { data: event } = useEvent();
diff --git a/client/src/features/table/TableWrapper.jsx b/client/src/features/table/TableWrapper.jsx
index 6e16abef2..cd9f83c77 100644
--- a/client/src/features/table/TableWrapper.jsx
+++ b/client/src/features/table/TableWrapper.jsx
@@ -3,7 +3,7 @@ import { useCallback, useContext, useEffect } from 'react';
import { requestPatchEvent } from '../../common/api/eventsApi';
import { TableSettingsContext } from '../../common/context/TableSettingsContext';
import useMutateEvents from '../../common/hooks/useMutateEvents';
-import { useCuesheetProvider } from '../../common/hooks/useSocketProvider';
+import { useCuesheet } from '../../common/hooks/useSocket';
import useRundown from '../../common/hooks-query/useRundown';
import useUserFields from '../../common/hooks-query/useUserFields';
@@ -16,10 +16,10 @@ import style from './Table.module.scss';
export default function TableWrapper() {
const { data: events } = useRundown();
const { data: userFields } = useUserFields();
+ const { data: featureData } = useCuesheet();
+
const mutation = useMutateEvents(requestPatchEvent);
const { theme } = useContext(TableSettingsContext);
- const featureData = useCuesheetProvider();
-
// Set window title
useEffect(() => {
document.title = 'ontime - Cuesheet';
diff --git a/client/src/features/viewers/ViewWrapper.jsx b/client/src/features/viewers/ViewWrapper.jsx
index ac9208f59..ddbcc68bf 100644
--- a/client/src/features/viewers/ViewWrapper.jsx
+++ b/client/src/features/viewers/ViewWrapper.jsx
@@ -1,21 +1,20 @@
/* eslint-disable react/display-name */
import { useEffect, useMemo, useState } from 'react';
-import { useSocket } from '../../common/context/socketContext';
-import { useMessageControlProvider } from '../../common/hooks/useSocketProvider';
+import { useMessageControl } from '../../common/hooks/useSocket';
import useSubscription from '../../common/hooks/useSubscription';
import useEvent from '../../common/hooks-query/useEvent';
import useRundown from '../../common/hooks-query/useRundown';
import useViewSettings from '../../common/hooks-query/useViewSettings';
+import socket from '../../common/utils/socket';
const withSocket = (Component) => {
return (props) => {
const { data: eventsData } = useRundown();
const { data: genData } = useEvent();
const { data: viewSettings } = useViewSettings();
- const { data: messages } = useMessageControlProvider();
+ const { data: messages } = useMessageControl();
- const socket = useSocket();
const [publicSelectedId, setPublicSelectedId] = useState(null);
const [timer] = useSubscription('timer', {
@@ -44,13 +43,9 @@ const withSocket = (Component) => {
const [selectedId] = useSubscription('selected-id', null);
const [nextId] = useSubscription('next-id', null);
const [playback] = useSubscription('playstate', null);
- const [onAir] = useSubscription('onAir', false);
// Ask for update on load
useEffect(() => {
- if (!socket) {
- return;
- }
// todo: remove
socket.on('publicselected-id', (data) => {
setPublicSelectedId(data);
diff --git a/server/src/classes/timer/EventTimer.js b/server/src/classes/timer/EventTimer.js
index 32fe44182..cffe3eb55 100644
--- a/server/src/classes/timer/EventTimer.js
+++ b/server/src/classes/timer/EventTimer.js
@@ -136,7 +136,7 @@ export class EventTimer extends Timer {
nextEventId: this.nextEventId,
playback: this.state,
};
- this.socket.send('ontime-feat-rundown', featureData);
+ this.socket.send('feat-rundown', featureData);
}
/**
@@ -149,7 +149,7 @@ export class EventTimer extends Timer {
selectedEventId: this.selectedEventId,
numEvents: this.rundown.length,
};
- this.socket.send('ontime-feat-playbackcontrol', featureData);
+ this.socket.send('feat-playbackcontrol', featureData);
}
/**
@@ -164,7 +164,7 @@ export class EventTimer extends Timer {
selectedEventIndex: this.selectedEventIndex,
numEvents: this.rundown.length,
};
- this.socket.send('ontime-feat-info', featureData);
+ this.socket.send('feat-info', featureData);
}
_broadcastFeatureCuesheet() {
@@ -175,7 +175,7 @@ export class EventTimer extends Timer {
numEvents: this.rundown.length,
titleNow: this.titles.titleNow,
};
- this.socket.send('ontime-feat-cuesheet', featureData);
+ this.socket.send('feat-cuesheet', featureData);
}
/**