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