@norgate-av/react-crestron-ch5-hooks 1.0.0

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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +914 -0
  3. package/dist/hooks/index.d.ts +18 -0
  4. package/dist/hooks/useCrestronAnalog/index.d.ts +11 -0
  5. package/dist/hooks/useCrestronAnalogCollection/index.d.ts +12 -0
  6. package/dist/hooks/useCrestronDigital/index.d.ts +11 -0
  7. package/dist/hooks/useCrestronDigitalCollection/index.d.ts +12 -0
  8. package/dist/hooks/useCrestronPublishAnalog/index.d.ts +9 -0
  9. package/dist/hooks/useCrestronPublishAnalogCollection/index.d.ts +10 -0
  10. package/dist/hooks/useCrestronPublishDigital/index.d.ts +9 -0
  11. package/dist/hooks/useCrestronPublishDigitalCollection/index.d.ts +10 -0
  12. package/dist/hooks/useCrestronPublishSerial/index.d.ts +9 -0
  13. package/dist/hooks/useCrestronPublishSerialCollection/index.d.ts +10 -0
  14. package/dist/hooks/useCrestronSerial/index.d.ts +11 -0
  15. package/dist/hooks/useCrestronSerialCollection/index.d.ts +12 -0
  16. package/dist/hooks/useCrestronSubscribeAnalog/index.d.ts +11 -0
  17. package/dist/hooks/useCrestronSubscribeAnalogCollection/index.d.ts +12 -0
  18. package/dist/hooks/useCrestronSubscribeDigital/index.d.ts +11 -0
  19. package/dist/hooks/useCrestronSubscribeDigitalCollection/index.d.ts +12 -0
  20. package/dist/hooks/useCrestronSubscribeSerial/index.d.ts +11 -0
  21. package/dist/hooks/useCrestronSubscribeSerialCollection/index.d.ts +12 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +8 -0
  24. package/dist/react-crestron-ch5-hooks.cjs.development.js +643 -0
  25. package/dist/react-crestron-ch5-hooks.cjs.development.js.map +1 -0
  26. package/dist/react-crestron-ch5-hooks.cjs.production.min.js +2 -0
  27. package/dist/react-crestron-ch5-hooks.cjs.production.min.js.map +1 -0
  28. package/dist/react-crestron-ch5-hooks.esm.js +602 -0
  29. package/dist/react-crestron-ch5-hooks.esm.js.map +1 -0
  30. package/dist/react-crestron-ch5-hooks.umd.development.js +645 -0
  31. package/dist/react-crestron-ch5-hooks.umd.development.js.map +1 -0
  32. package/dist/react-crestron-ch5-hooks.umd.production.min.js +2 -0
  33. package/dist/react-crestron-ch5-hooks.umd.production.min.js.map +1 -0
  34. package/dist/types/Analog/index.d.ts +1 -0
  35. package/dist/types/AnalogStateCallback/index.d.ts +3 -0
  36. package/dist/types/Digital/index.d.ts +1 -0
  37. package/dist/types/DigitalStateCallback/index.d.ts +3 -0
  38. package/dist/types/IAnalogEventAction/index.d.ts +4 -0
  39. package/dist/types/IAnalogSignal/index.d.ts +5 -0
  40. package/dist/types/IAnalogState/index.d.ts +4 -0
  41. package/dist/types/IBaseEventAction/index.d.ts +3 -0
  42. package/dist/types/IBaseSignal/index.d.ts +4 -0
  43. package/dist/types/IBaseState/index.d.ts +3 -0
  44. package/dist/types/IDigitalEventAction/index.d.ts +7 -0
  45. package/dist/types/IDigitalSignal/index.d.ts +5 -0
  46. package/dist/types/IDigitalState/index.d.ts +4 -0
  47. package/dist/types/ISerialEventAction/index.d.ts +4 -0
  48. package/dist/types/ISerialSignal/index.d.ts +5 -0
  49. package/dist/types/ISerialState/index.d.ts +4 -0
  50. package/dist/types/IStateSubscription/index.d.ts +4 -0
  51. package/dist/types/Serial/index.d.ts +1 -0
  52. package/dist/types/SerialStateCallback/index.d.ts +3 -0
  53. package/dist/types/StateCallback/index.d.ts +1 -0
  54. package/dist/types/index.d.ts +20 -0
  55. package/dist/utils/getSignalCollection.d.ts +3 -0
  56. package/dist/utils/index.d.ts +1 -0
  57. package/package.json +135 -0
@@ -0,0 +1,643 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
+
7
+ var ch5Crcomlib = require('@crestron/ch5-crcomlib');
8
+ var CrestronCH5 = _interopDefault(require('@norgate-av/crestron-ch5-helper'));
9
+ var react = require('react');
10
+
11
+ /**
12
+ * `useCrestronPublishAnalog` is a hook that returns an object with a setValue function.
13
+ * @param {string} signalName - The name of the signal you want to publish to.
14
+ * @returns An array with a single IAnalogEventAction object.
15
+ */
16
+
17
+ function useCrestronPublishAnalog(signalName) {
18
+ return [{
19
+ setValue: function setValue(value) {
20
+ return ch5Crcomlib.publishEvent(CrestronCH5.SignalType.Number, signalName, value);
21
+ }
22
+ }];
23
+ }
24
+ var useCrestronPublishNumber = useCrestronPublishAnalog;
25
+
26
+ /**
27
+ * `useCrestronSubscribeAnalog` is a hook that returns an object with a value property.
28
+ * @param {string} signalName - The name of the signal you want to subscribe to.
29
+ * @param {AnalogStateCallback} [callback] - An optional callback function that will be called whenever the state
30
+ * changes.
31
+ * @returns An array with a single IAnalogState object.
32
+ */
33
+
34
+ function useCrestronSubscribeAnalog(signalName, callback) {
35
+ var _useState = react.useState(0),
36
+ state = _useState[0],
37
+ setState = _useState[1];
38
+
39
+ var callbackRef = react.useRef();
40
+ react.useEffect(function () {
41
+ callbackRef.current = callback;
42
+ }, [callback]);
43
+ react.useEffect(function () {
44
+ var signalType = CrestronCH5.SignalType.Number;
45
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
46
+ setState(value);
47
+
48
+ if (callbackRef.current) {
49
+ callbackRef.current(value, signalName);
50
+ }
51
+ });
52
+ return function () {
53
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
54
+ };
55
+ }, [signalName]);
56
+ return [{
57
+ value: state
58
+ }];
59
+ }
60
+ var useCrestronSubscribeNumber = useCrestronSubscribeAnalog;
61
+
62
+ /**
63
+ * `useCrestronAnalog` is a hook that returns an object with a state and action property.
64
+ * @param {string} signalName - The name of the signal you want to use.
65
+ * @param {AnalogStateCallback} [callback] - An optional callback function that will be called whenever the state of the signal
66
+ * changes.
67
+ * @returns An array with a single IAnalogSignal object.
68
+ */
69
+
70
+ function useCrestronAnalog(signalName, callback) {
71
+ var _useCrestronSubscribe = useCrestronSubscribeAnalog(signalName, callback),
72
+ state = _useCrestronSubscribe[0];
73
+
74
+ var _useCrestronPublishAn = useCrestronPublishAnalog(signalName),
75
+ action = _useCrestronPublishAn[0];
76
+
77
+ return [{
78
+ state: state,
79
+ action: action
80
+ }];
81
+ }
82
+ var useCrestronNumber = useCrestronAnalog;
83
+
84
+ /**
85
+ * `useCrestronPublishDigital` is a hook that returns an object with setValue, push, release and click functions.
86
+ * @param {string} signalName - The name of the signal you want to publish to.
87
+ * @returns An array with a single IDigitalEventAction object.
88
+ */
89
+
90
+ function useCrestronPublishDigital(signalName) {
91
+ var signalType = CrestronCH5.SignalType.Boolean;
92
+
93
+ var setValue = function setValue(value) {
94
+ ch5Crcomlib.publishEvent(signalType, signalName, value);
95
+ };
96
+
97
+ var push = function push() {
98
+ setValue(true);
99
+ };
100
+
101
+ var release = function release() {
102
+ setValue(false);
103
+ };
104
+
105
+ var click = function click() {
106
+ push();
107
+ release();
108
+ }; // const hold = (duration: number, callback: () => void) => {
109
+ // push();
110
+ // setTimeout(() => {
111
+ // release();
112
+ // callback();
113
+ // }, duration);
114
+ // };
115
+
116
+
117
+ return [{
118
+ setValue: setValue,
119
+ push: push,
120
+ release: release,
121
+ click: click
122
+ }];
123
+ }
124
+ var useCrestronPublishBoolean = useCrestronPublishDigital;
125
+
126
+ /**
127
+ * `useCrestronSubscribeDigital` is a hook that returns an object with a value property.
128
+ * @param {string} signalName - The name of the signal you want to subscribe to.
129
+ * @param {DigitalStateCallback} [callback] - An optional callback function that will be called whenever the state
130
+ * changes.
131
+ * @returns An array with a single IDigitalState object.
132
+ */
133
+
134
+ function useCrestronSubscribeDigital(signalName, callback) {
135
+ var _useState = react.useState(false),
136
+ state = _useState[0],
137
+ setState = _useState[1];
138
+
139
+ var callbackRef = react.useRef();
140
+ react.useEffect(function () {
141
+ callbackRef.current = callback;
142
+ }, [callback]);
143
+ react.useEffect(function () {
144
+ var signalType = CrestronCH5.SignalType.Boolean;
145
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
146
+ setState(value);
147
+
148
+ if (callbackRef.current) {
149
+ callbackRef.current(value, signalName);
150
+ }
151
+ });
152
+ return function () {
153
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
154
+ };
155
+ }, [signalName]);
156
+ return [{
157
+ value: state
158
+ }];
159
+ }
160
+ var useCrestronSubscribeBoolean = useCrestronSubscribeDigital;
161
+
162
+ /**
163
+ * `useCrestronDigital` is a hook that returns an object with a state and action property.
164
+ * @param {string} signalName - The name of the signal you want to use.
165
+ * @param {DigitalStateCallback} [callback] - An optional callback function that will be called whenever the state of the signal
166
+ * changes.
167
+ * @returns An array with a single IDigitalSignal object
168
+ */
169
+
170
+ function useCrestronDigital(signalName, callback) {
171
+ var _useCrestronSubscribe = useCrestronSubscribeDigital(signalName, callback),
172
+ state = _useCrestronSubscribe[0];
173
+
174
+ var _useCrestronPublishDi = useCrestronPublishDigital(signalName),
175
+ action = _useCrestronPublishDi[0];
176
+
177
+ return [{
178
+ state: state,
179
+ action: action
180
+ }];
181
+ }
182
+ var useCrestronBoolean = useCrestronDigital;
183
+
184
+ /**
185
+ * `useCrestronPublishSerial` is a hook that returns an object with a setValue function.
186
+ * @param {string} signalName - The name of the signal you want to publish to.
187
+ * @returns An array with a single ISerialEventAction object.
188
+ */
189
+
190
+ function useCrestronPublishSerial(signalName) {
191
+ return [{
192
+ setValue: function setValue(value) {
193
+ return ch5Crcomlib.publishEvent(CrestronCH5.SignalType.String, signalName, value);
194
+ }
195
+ }];
196
+ }
197
+ var useCrestronPublishString = useCrestronPublishSerial;
198
+
199
+ /**
200
+ * `useCrestronSubscribeSerial` is a hook that returns an object with a value property.
201
+ * @param {string} signalName - The name of the signal you want to subscribe to.
202
+ * @param {SerialStateCallback} [callback] - An optional callback function that will be called whenever the state
203
+ * changes.
204
+ * @returns An array with a single ISerialState object.
205
+ */
206
+
207
+ function useCrestronSubscribeSerial(signalName, callback) {
208
+ var _useState = react.useState(""),
209
+ state = _useState[0],
210
+ setState = _useState[1];
211
+
212
+ var callbackRef = react.useRef();
213
+ react.useEffect(function () {
214
+ callbackRef.current = callback;
215
+ }, [callback]);
216
+ react.useEffect(function () {
217
+ var signalType = CrestronCH5.SignalType.String;
218
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
219
+ setState(value);
220
+
221
+ if (callbackRef.current) {
222
+ callbackRef.current(value, signalName);
223
+ }
224
+ });
225
+ return function () {
226
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
227
+ };
228
+ }, [signalName]);
229
+ return [{
230
+ value: state
231
+ }];
232
+ }
233
+ var useCrestronSubscribeString = useCrestronSubscribeSerial;
234
+
235
+ /**
236
+ * `useCrestronSerial` is a hook that returns an object with a state and action property.
237
+ * @param {string} signalName - The name of the signal you want to use.
238
+ * @param {SerialStateCallback} [callback] - An optional callback function that will be called whenever the state of the signal
239
+ * changes.
240
+ * @returns An array with a single ISerialSignal object.
241
+ */
242
+
243
+ function useCrestronSerial(signalName, callback) {
244
+ var _useCrestronSubscribe = useCrestronSubscribeSerial(signalName, callback),
245
+ state = _useCrestronSubscribe[0];
246
+
247
+ var _useCrestronPublishSe = useCrestronPublishSerial(signalName),
248
+ action = _useCrestronPublishSe[0];
249
+
250
+ return [{
251
+ state: state,
252
+ action: action
253
+ }];
254
+ }
255
+ var useCrestronString = useCrestronSerial;
256
+
257
+ function getSignalCollection(length, state, action) {
258
+ var signals = []; // eslint-disable-next-line no-plusplus
259
+
260
+ for (var index = 0; index < length; index++) {
261
+ signals.push({
262
+ state: state[index],
263
+ action: action[index]
264
+ });
265
+ }
266
+
267
+ return signals;
268
+ }
269
+
270
+ /**
271
+ * `useCrestronPublishAnalogCollection` is a hook that returns an array of objects each with a setValue function.
272
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
273
+ * to publish to.
274
+ * @returns An array of IAnalogEventAction objects.
275
+ */
276
+
277
+ function useCrestronPublishAnalogCollection(signalNames) {
278
+ var signalType = CrestronCH5.SignalType.Number;
279
+ var actions = [];
280
+ signalNames.forEach(function (signalName) {
281
+ actions.push({
282
+ setValue: function setValue(value) {
283
+ return ch5Crcomlib.publishEvent(signalType, signalName, value);
284
+ }
285
+ });
286
+ });
287
+ return actions;
288
+ }
289
+ var useCrestronPublishNumberCollection = useCrestronPublishAnalogCollection;
290
+
291
+ function _extends() {
292
+ _extends = Object.assign || function (target) {
293
+ for (var i = 1; i < arguments.length; i++) {
294
+ var source = arguments[i];
295
+
296
+ for (var key in source) {
297
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
298
+ target[key] = source[key];
299
+ }
300
+ }
301
+ }
302
+
303
+ return target;
304
+ };
305
+
306
+ return _extends.apply(this, arguments);
307
+ }
308
+
309
+ /**
310
+ * `useCrestronSubscribeAnalogCollection` is a hook that returns an array of objects each with a value property.
311
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
312
+ * to subscribe to.
313
+ * @param {AnalogStateCallback} [callback] - An optional callback function that will be called whenever the
314
+ * state changes.
315
+ * @returns An array of IAnalogState objects.
316
+ */
317
+
318
+ function useCrestronSubscribeAnalogCollection(signalNames, callback) {
319
+ var _useState = react.useState(Array.from({
320
+ length: signalNames.length
321
+ }).fill({
322
+ value: 0
323
+ })),
324
+ state = _useState[0],
325
+ setState = _useState[1];
326
+
327
+ var callbackRef = react.useRef();
328
+ react.useEffect(function () {
329
+ callbackRef.current = callback;
330
+ }, [callback]);
331
+ react.useEffect(function () {
332
+ var signalType = CrestronCH5.SignalType.Number;
333
+ var subscriptions = [];
334
+ signalNames.forEach(function (signalName, index) {
335
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
336
+ setState(function (prevState) {
337
+ var newState = [].concat(prevState);
338
+ newState[index] = _extends({}, newState[index], {
339
+ value: value
340
+ });
341
+ return newState;
342
+ });
343
+
344
+ if (callbackRef.current) {
345
+ callbackRef.current(value, signalName);
346
+ }
347
+ });
348
+ subscriptions.push({
349
+ id: id,
350
+ signalName: signalName
351
+ });
352
+ });
353
+
354
+ var unsubscribeAll = function unsubscribeAll() {
355
+ subscriptions.forEach(function (_ref) {
356
+ var id = _ref.id,
357
+ signalName = _ref.signalName;
358
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
359
+ });
360
+ };
361
+
362
+ return function () {
363
+ unsubscribeAll();
364
+ };
365
+ }, []);
366
+ return state;
367
+ }
368
+ var useCrestronSubscribeNumberCollection = useCrestronSubscribeAnalogCollection;
369
+
370
+ /**
371
+ * `useCrestronAnalogCollection` is a hook that returns an array of objects each with state and action properties.
372
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
373
+ * to use.
374
+ * @param {AnalogStateCallback} [callback] - A optional callback function that will be called whenever the state of
375
+ * the signal changes.
376
+ * @returns An array of IAnalogSignal objects.
377
+ */
378
+
379
+ function useCrestronAnalogCollection(signalNames, callback) {
380
+ var state = useCrestronSubscribeAnalogCollection(signalNames, callback);
381
+ var action = useCrestronPublishAnalogCollection(signalNames);
382
+ return getSignalCollection(signalNames.length, state, action);
383
+ }
384
+ var useCrestronNumberCollection = useCrestronAnalogCollection;
385
+
386
+ /**
387
+ * `useCrestronPublishDigitalCollection` is a hook that returns an array of objects each with setValue, push, release and click functions.
388
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
389
+ * to publish to.
390
+ * @returns An array of IDigitalEventAction objects.
391
+ */
392
+
393
+ function useCrestronPublishDigitalCollection(signalNames) {
394
+ var signalType = CrestronCH5.SignalType.Boolean;
395
+ var actions = [];
396
+ signalNames.forEach(function (signalName) {
397
+ var setValue = function setValue(value) {
398
+ ch5Crcomlib.publishEvent(signalType, signalName, value);
399
+ };
400
+
401
+ var push = function push() {
402
+ setValue(true);
403
+ };
404
+
405
+ var release = function release() {
406
+ setValue(false);
407
+ };
408
+
409
+ var click = function click() {
410
+ push();
411
+ release();
412
+ }; // const hold = (duration: number, callback: () => void) => {
413
+ // push();
414
+ // setTimeout(() => {
415
+ // release();
416
+ // callback();
417
+ // }, duration);
418
+ // };
419
+
420
+
421
+ actions.push({
422
+ setValue: setValue,
423
+ push: push,
424
+ release: release,
425
+ click: click
426
+ });
427
+ });
428
+ return actions;
429
+ }
430
+ var useCrestronPublishBooleanCollection = useCrestronPublishDigitalCollection;
431
+
432
+ /**
433
+ * `useCrestronSubscribeDigitalCollection` is a hook that returns an array of objects each with a value property.
434
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
435
+ * to subscribe to.
436
+ * @param {DigitalStateCallback} [callback] - An optional callback function that will be called whenever the
437
+ * state changes.
438
+ * @returns An array of IDigitalState objects.
439
+ */
440
+
441
+ function useCrestronSubscribeDigitalCollection(signalNames, callback) {
442
+ var _useState = react.useState(Array.from({
443
+ length: signalNames.length
444
+ }).fill({
445
+ value: false
446
+ })),
447
+ state = _useState[0],
448
+ setState = _useState[1];
449
+
450
+ var callbackRef = react.useRef();
451
+ react.useEffect(function () {
452
+ callbackRef.current = callback;
453
+ }, [callback]);
454
+ react.useEffect(function () {
455
+ var signalType = CrestronCH5.SignalType.Boolean;
456
+ var subscriptions = [];
457
+ signalNames.forEach(function (signalName, index) {
458
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
459
+ setState(function (prevState) {
460
+ var newState = [].concat(prevState);
461
+ newState[index] = _extends({}, newState[index], {
462
+ value: value
463
+ });
464
+ return newState;
465
+ });
466
+
467
+ if (callbackRef.current) {
468
+ callbackRef.current(value, signalName);
469
+ }
470
+ });
471
+ subscriptions.push({
472
+ id: id,
473
+ signalName: signalName
474
+ });
475
+ });
476
+
477
+ var unsubscribeAll = function unsubscribeAll() {
478
+ subscriptions.forEach(function (_ref) {
479
+ var id = _ref.id,
480
+ signalName = _ref.signalName;
481
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
482
+ });
483
+ };
484
+
485
+ return function () {
486
+ unsubscribeAll();
487
+ };
488
+ }, []);
489
+ return state;
490
+ }
491
+ var useCrestronSubscribeBooleanCollection = useCrestronSubscribeDigitalCollection;
492
+
493
+ /**
494
+ * `useCrestronDigitalCollection` is a hook that returns an array of objects each with state and action properties.
495
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
496
+ * to use.
497
+ * @param {DigitalStateCallback} [callback] - A optional callback function that will be called whenever the state of
498
+ * the signal changes.
499
+ * @returns An array of IDigitalSignal objects.
500
+ */
501
+
502
+ function useCrestronDigitalCollection(signalNames, callback) {
503
+ var state = useCrestronSubscribeDigitalCollection(signalNames, callback);
504
+ var action = useCrestronPublishDigitalCollection(signalNames);
505
+ return getSignalCollection(signalNames.length, state, action);
506
+ }
507
+ var useCrestronBooleanCollection = useCrestronDigitalCollection;
508
+
509
+ /**
510
+ * `useCrestronPublishSerialCollection` is a hook that returns an array of objects each with a setValue function.
511
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
512
+ * to publish to.
513
+ * @returns An array of ISerialEventAction objects.
514
+ */
515
+
516
+ function useCrestronPublishSerialCollection(signalNames) {
517
+ var signalType = CrestronCH5.SignalType.String;
518
+ var actions = [];
519
+ signalNames.forEach(function (signalName) {
520
+ actions.push({
521
+ setValue: function setValue(value) {
522
+ return ch5Crcomlib.publishEvent(signalType, signalName, value);
523
+ }
524
+ });
525
+ });
526
+ return actions;
527
+ }
528
+ var useCrestronPublishStringCollection = useCrestronPublishSerialCollection;
529
+
530
+ /**
531
+ * `useCrestronSubscribeSerialCollection` is a hook that returns an array of objects each with a value property.
532
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
533
+ * to subscribe to.
534
+ * @param {SerialStateCallback} [callback] - An optional callback function that will be called whenever the
535
+ * state changes.
536
+ * @returns An array of ISerialState objects.
537
+ */
538
+
539
+ function useCrestronSubscribeSerialCollection(signalNames, callback) {
540
+ var _useState = react.useState(Array.from({
541
+ length: signalNames.length
542
+ }).fill({
543
+ value: ""
544
+ })),
545
+ state = _useState[0],
546
+ setState = _useState[1];
547
+
548
+ var callbackRef = react.useRef();
549
+ react.useEffect(function () {
550
+ callbackRef.current = callback;
551
+ }, [callback]);
552
+ react.useEffect(function () {
553
+ var signalType = CrestronCH5.SignalType.String;
554
+ var subscriptions = [];
555
+ signalNames.forEach(function (signalName, index) {
556
+ var id = ch5Crcomlib.subscribeState(signalType, signalName, function (value) {
557
+ setState(function (prevState) {
558
+ var newState = [].concat(prevState);
559
+ newState[index] = _extends({}, newState[index], {
560
+ value: value
561
+ });
562
+ return newState;
563
+ });
564
+
565
+ if (callbackRef.current) {
566
+ callbackRef.current(value, signalName);
567
+ }
568
+ });
569
+ subscriptions.push({
570
+ id: id,
571
+ signalName: signalName
572
+ });
573
+ });
574
+
575
+ var unsubscribeAll = function unsubscribeAll() {
576
+ subscriptions.forEach(function (_ref) {
577
+ var id = _ref.id,
578
+ signalName = _ref.signalName;
579
+ ch5Crcomlib.unsubscribeState(signalType, signalName, id);
580
+ });
581
+ };
582
+
583
+ return function () {
584
+ unsubscribeAll();
585
+ };
586
+ }, []);
587
+ return state;
588
+ }
589
+ var useCrestronSubscribeStringCollection = useCrestronSubscribeSerialCollection;
590
+
591
+ /**
592
+ * `useCrestronSerialCollection` is a hook that returns an array of objects each with state and action properties.
593
+ * @param {string[]} signalNames - An array of strings that represent the names of the signals you want
594
+ * to use.
595
+ * @param {SerialStateCallback} [callback] - A optional callback function that will be called whenever the state of
596
+ * the signal changes.
597
+ * @returns An array of ISerialSignal objects.
598
+ */
599
+
600
+ function useCrestronSerialCollection(signalNames, callback) {
601
+ var state = useCrestronSubscribeSerialCollection(signalNames, callback);
602
+ var action = useCrestronPublishSerialCollection(signalNames);
603
+ return getSignalCollection(signalNames.length, state, action);
604
+ }
605
+ var useCrestronStringCollection = useCrestronSerialCollection;
606
+
607
+ exports.useCrestronAnalog = useCrestronAnalog;
608
+ exports.useCrestronAnalogCollection = useCrestronAnalogCollection;
609
+ exports.useCrestronBoolean = useCrestronBoolean;
610
+ exports.useCrestronBooleanCollection = useCrestronBooleanCollection;
611
+ exports.useCrestronDigital = useCrestronDigital;
612
+ exports.useCrestronDigitalCollection = useCrestronDigitalCollection;
613
+ exports.useCrestronNumber = useCrestronNumber;
614
+ exports.useCrestronNumberCollection = useCrestronNumberCollection;
615
+ exports.useCrestronPublishAnalog = useCrestronPublishAnalog;
616
+ exports.useCrestronPublishAnalogCollection = useCrestronPublishAnalogCollection;
617
+ exports.useCrestronPublishBoolean = useCrestronPublishBoolean;
618
+ exports.useCrestronPublishBooleanCollection = useCrestronPublishBooleanCollection;
619
+ exports.useCrestronPublishDigital = useCrestronPublishDigital;
620
+ exports.useCrestronPublishDigitalCollection = useCrestronPublishDigitalCollection;
621
+ exports.useCrestronPublishNumber = useCrestronPublishNumber;
622
+ exports.useCrestronPublishNumberCollection = useCrestronPublishNumberCollection;
623
+ exports.useCrestronPublishSerial = useCrestronPublishSerial;
624
+ exports.useCrestronPublishSerialCollection = useCrestronPublishSerialCollection;
625
+ exports.useCrestronPublishString = useCrestronPublishString;
626
+ exports.useCrestronPublishStringCollection = useCrestronPublishStringCollection;
627
+ exports.useCrestronSerial = useCrestronSerial;
628
+ exports.useCrestronSerialCollection = useCrestronSerialCollection;
629
+ exports.useCrestronString = useCrestronString;
630
+ exports.useCrestronStringCollection = useCrestronStringCollection;
631
+ exports.useCrestronSubscribeAnalog = useCrestronSubscribeAnalog;
632
+ exports.useCrestronSubscribeAnalogCollection = useCrestronSubscribeAnalogCollection;
633
+ exports.useCrestronSubscribeBoolean = useCrestronSubscribeBoolean;
634
+ exports.useCrestronSubscribeBooleanCollection = useCrestronSubscribeBooleanCollection;
635
+ exports.useCrestronSubscribeDigital = useCrestronSubscribeDigital;
636
+ exports.useCrestronSubscribeDigitalCollection = useCrestronSubscribeDigitalCollection;
637
+ exports.useCrestronSubscribeNumber = useCrestronSubscribeNumber;
638
+ exports.useCrestronSubscribeNumberCollection = useCrestronSubscribeNumberCollection;
639
+ exports.useCrestronSubscribeSerial = useCrestronSubscribeSerial;
640
+ exports.useCrestronSubscribeSerialCollection = useCrestronSubscribeSerialCollection;
641
+ exports.useCrestronSubscribeString = useCrestronSubscribeString;
642
+ exports.useCrestronSubscribeStringCollection = useCrestronSubscribeStringCollection;
643
+ //# sourceMappingURL=react-crestron-ch5-hooks.cjs.development.js.map