@clockworkdog/cogs-client-react 2.7.0 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # COGS Client React library
1
+ # COGS SDK - React
2
2
 
3
3
  Use this library to create custom content for your COGS Media Master or COGS Plugin
4
4
 
@@ -5,9 +5,10 @@ const react_1 = require("react");
5
5
  function useCogsConfig(connection) {
6
6
  const [config, setConfig] = (0, react_1.useState)(connection.config);
7
7
  (0, react_1.useEffect)(() => {
8
+ // Use the latest config in case it has changed before this useEffect ran
9
+ setConfig(connection.config);
8
10
  const listener = (event) => setConfig(event.config);
9
11
  connection.addEventListener('config', listener);
10
- setConfig(connection.config); // Use the latest config in case is has changed before this useEffect ran
11
12
  return () => connection.removeEventListener('config', listener);
12
13
  }, [connection]);
13
14
  return config;
@@ -0,0 +1,2 @@
1
+ import { CogsConnection, MediaClientConfig } from '@clockworkdog/cogs-client';
2
+ export default function useCogsMediaConfig<MediaConfigExtra>(connection: CogsConnection<any>): (MediaClientConfig & MediaConfigExtra) | null;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = useCogsMediaConfig;
4
+ const react_1 = require("react");
5
+ function useCogsMediaConfig(connection) {
6
+ const [mediaConfig, setMediaConfig] = (0, react_1.useState)(null);
7
+ (0, react_1.useEffect)(() => {
8
+ // Use the latest config in case it has changed before this useEffect ran
9
+ setMediaConfig(connection.mediaConfig);
10
+ const listener = ({ mediaConfig }) => {
11
+ setMediaConfig(mediaConfig);
12
+ };
13
+ connection.addEventListener('mediaConfig', listener);
14
+ return () => connection.removeEventListener('mediaConfig', listener);
15
+ }, [connection]);
16
+ return mediaConfig;
17
+ }
@@ -5,6 +5,8 @@ const react_1 = require("react");
5
5
  function useCogsStateValue(connection, stateName) {
6
6
  const [value, setValue] = (0, react_1.useState)(connection.state[stateName]);
7
7
  (0, react_1.useEffect)(() => {
8
+ // Use the latest state in case it has changed before this useEffect ran
9
+ setValue(connection.state[stateName]);
8
10
  const listener = ({ state }) => {
9
11
  const value = state[stateName];
10
12
  if (value !== undefined) {
@@ -5,6 +5,7 @@ const react_1 = require("react");
5
5
  function useCogsInputPortValues(connection) {
6
6
  const [value, setValue] = (0, react_1.useState)(connection.state);
7
7
  (0, react_1.useEffect)(() => {
8
+ // Use the latest state in case it has changed before this useEffect ran
8
9
  setValue(connection.state);
9
10
  const listener = () => setValue(connection.state);
10
11
  connection.addEventListener('state', listener);
@@ -1,17 +1,15 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.default = useShowPhase;
7
4
  const react_1 = require("react");
8
- const useCogsMessage_1 = __importDefault(require("./useCogsMessage"));
9
5
  function useShowPhase(connection) {
10
6
  const [status, setStatus] = (0, react_1.useState)(connection.showPhase);
11
- (0, useCogsMessage_1.default)(connection, (0, react_1.useCallback)((message) => {
12
- if (message.type === 'show_phase') {
13
- setStatus(message.phase);
14
- }
15
- }, []));
7
+ (0, react_1.useEffect)(() => {
8
+ // Use the latest show phase in case it has changed before this useEffect ran
9
+ setStatus(connection.showPhase);
10
+ const listener = () => setStatus(connection.showPhase);
11
+ connection.addEventListener('showPhase', listener);
12
+ return () => connection.removeEventListener('showPhase', listener);
13
+ }, [connection]);
16
14
  return status;
17
15
  }
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { default as useIsConnected } from './hooks/useIsConnected';
3
3
  export { default as useCogsConfig } from './hooks/useCogsConfig';
4
4
  export { default as useCogsEvent } from './hooks/useCogsEvent';
5
5
  export { default as useCogsEvents } from './hooks/useCogsEvents';
6
+ export { default as useCogsMediaConfig } from './hooks/useCogsMediaConfig';
6
7
  export { default as useCogsStateValue } from './hooks/useCogsStateValue';
7
8
  export { default as useCogsStateValues } from './hooks/useCogsStateValues';
8
9
  export { default as useCogsMessage } from './hooks/useCogsMessage';
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.Images = exports.useImages = exports.Timer = exports.Hint = exports.useHint = exports.VideoContainer = exports.RtspVideo = exports.useIsAudioPlaying = exports.useAudioClips = exports.useWhenShowReset = exports.useShowPhase = exports.usePreloadedUrl = exports.useCogsMessage = exports.useCogsStateValues = exports.useCogsStateValue = exports.useCogsEvents = exports.useCogsEvent = exports.useCogsConfig = exports.useIsConnected = exports.useVideoPlayer = exports.useAudioPlayer = exports.useCogsConnection = exports.CogsConnectionProvider = void 0;
20
+ exports.Images = exports.useImages = exports.Timer = exports.Hint = exports.useHint = exports.VideoContainer = exports.RtspVideo = exports.useIsAudioPlaying = exports.useAudioClips = exports.useWhenShowReset = exports.useShowPhase = exports.usePreloadedUrl = exports.useCogsMessage = exports.useCogsStateValues = exports.useCogsStateValue = exports.useCogsMediaConfig = exports.useCogsEvents = exports.useCogsEvent = exports.useCogsConfig = exports.useIsConnected = exports.useVideoPlayer = exports.useAudioPlayer = exports.useCogsConnection = exports.CogsConnectionProvider = void 0;
21
21
  // Utilities
22
22
  var CogsConnectionProvider_1 = require("./providers/CogsConnectionProvider");
23
23
  Object.defineProperty(exports, "CogsConnectionProvider", { enumerable: true, get: function () { return __importDefault(CogsConnectionProvider_1).default; } });
@@ -32,6 +32,8 @@ var useCogsEvent_1 = require("./hooks/useCogsEvent");
32
32
  Object.defineProperty(exports, "useCogsEvent", { enumerable: true, get: function () { return __importDefault(useCogsEvent_1).default; } });
33
33
  var useCogsEvents_1 = require("./hooks/useCogsEvents");
34
34
  Object.defineProperty(exports, "useCogsEvents", { enumerable: true, get: function () { return __importDefault(useCogsEvents_1).default; } });
35
+ var useCogsMediaConfig_1 = require("./hooks/useCogsMediaConfig");
36
+ Object.defineProperty(exports, "useCogsMediaConfig", { enumerable: true, get: function () { return __importDefault(useCogsMediaConfig_1).default; } });
35
37
  var useCogsStateValue_1 = require("./hooks/useCogsStateValue");
36
38
  Object.defineProperty(exports, "useCogsStateValue", { enumerable: true, get: function () { return __importDefault(useCogsStateValue_1).default; } });
37
39
  var useCogsStateValues_1 = require("./hooks/useCogsStateValues");
@@ -1,4 +1,4 @@
1
- import { CogsAudioPlayer, CogsConnection, CogsPluginManifest, CogsVideoPlayer } from '@clockworkdog/cogs-client';
1
+ import { CogsAudioPlayer, CogsConnection, CogsPluginManifest, CogsVideoPlayer, ManifestTypes } from '@clockworkdog/cogs-client';
2
2
  import React, { ReactNode } from 'react';
3
3
  /**
4
4
  * Create a persistent connection to COGS which can be accessed with `useCogsConnection()`
@@ -48,13 +48,21 @@ import React, { ReactNode } from 'react';
48
48
  * }
49
49
  * ```
50
50
  */
51
- export default function CogsConnectionProvider<Manifest extends CogsPluginManifest>({ manifest, hostname, port, children, audioPlayer, videoPlayer, }: {
51
+ export default function CogsConnectionProvider<Manifest extends CogsPluginManifest, DataT extends {
52
+ [key: string]: unknown;
53
+ } = {
54
+ [key: string]: unknown;
55
+ }>({ manifest, hostname, port, children, audioPlayer, videoPlayer, initialClientState, initialDataStoreData, }: {
52
56
  manifest: Manifest;
53
57
  hostname?: string;
54
58
  port?: number;
55
59
  children: React.ReactNode;
56
60
  audioPlayer?: boolean;
57
61
  videoPlayer?: boolean;
62
+ initialClientState?: Partial<ManifestTypes.StateAsObject<Manifest, {
63
+ writableFromClient: true;
64
+ }>>;
65
+ initialDataStoreData?: DataT;
58
66
  }): ReactNode | null;
59
67
  /**
60
68
  * Get the connection from `<CogsConnectionProvider>`
@@ -108,18 +108,18 @@ const CogsConnectionContext = react_1.default.createContext({
108
108
  * }
109
109
  * ```
110
110
  */
111
- function CogsConnectionProvider({ manifest, hostname, port, children, audioPlayer, videoPlayer, }) {
111
+ function CogsConnectionProvider({ manifest, hostname, port, children, audioPlayer, videoPlayer, initialClientState, initialDataStoreData, }) {
112
112
  const connectionRef = (0, react_1.useRef)(undefined);
113
113
  const [, forceRender] = (0, react_1.useState)({});
114
114
  (0, react_1.useEffect)(() => {
115
- const connection = new cogs_client_1.CogsConnection(manifest, { hostname, port });
115
+ const connection = new cogs_client_1.CogsConnection(manifest, { hostname, port }, initialClientState, initialDataStoreData);
116
116
  connectionRef.current = connection;
117
117
  forceRender({});
118
118
  return () => {
119
119
  connectionRef.current = undefined;
120
120
  connection.close();
121
121
  };
122
- }, [manifest, hostname, port]);
122
+ }, [manifest, hostname, port, initialClientState, initialDataStoreData]);
123
123
  const audioPlayerRef = (0, react_1.useRef)(undefined);
124
124
  (0, react_1.useEffect)(() => {
125
125
  if (audioPlayer && !audioPlayerRef.current && connectionRef.current) {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "React components and hooks to connect to COGS to build a custom Media Master",
4
4
  "author": "Clockwork Dog <info@clockwork.dog>",
5
5
  "homepage": "https://github.com/clockwork-dog/cogs-sdk/tree/main/packages/react",
6
- "version": "2.7.0",
6
+ "version": "2.8.1",
7
7
  "keywords": [],
8
8
  "license": "MIT",
9
9
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "release": "yarn npm publish --access public"
28
28
  },
29
29
  "dependencies": {
30
- "@clockworkdog/cogs-client": "^2.7.0"
30
+ "@clockworkdog/cogs-client": "^2.8.1"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": "^18.0.0 || ^19.0.0",