@webex/plugin-meetings 3.0.0-beta.108 → 3.0.0-beta.109
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +21 -2
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +2 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +36 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +39 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +55 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +9 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +84 -14
- package/dist/meeting/index.js.map +1 -1
- package/dist/types/constants.d.ts +16 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -0
- package/dist/types/controls-options-manager/types.d.ts +7 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +8 -0
- package/package.json +19 -19
- package/src/constants.ts +22 -0
- package/src/controls-options-manager/enums.ts +2 -0
- package/src/controls-options-manager/types.ts +10 -0
- package/src/controls-options-manager/util.ts +45 -0
- package/src/locus-info/controlsUtils.ts +54 -0
- package/src/locus-info/index.ts +55 -0
- package/src/meeting/in-meeting-actions.ts +16 -0
- package/src/meeting/index.ts +70 -0
- package/test/unit/spec/controls-options-manager/util.js +108 -7
- package/test/unit/spec/locus-info/controlsUtils.js +112 -0
- package/test/unit/spec/locus-info/index.js +84 -1
- package/test/unit/spec/meeting/in-meeting-actions.ts +8 -0
- package/test/unit/spec/meeting/index.js +108 -0
|
@@ -244,6 +244,12 @@ export declare const EVENT_TRIGGERS: {
|
|
|
244
244
|
REMOTE_MEDIA_AUDIO_CREATED: string;
|
|
245
245
|
REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: string;
|
|
246
246
|
REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: string;
|
|
247
|
+
MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED: string;
|
|
248
|
+
MEETING_CONTROLS_SHARE_CONTROL_UPDATED: string;
|
|
249
|
+
MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED: string;
|
|
250
|
+
MEETING_CONTROLS_REACTIONS_UPDATED: string;
|
|
251
|
+
MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED: string;
|
|
252
|
+
MEETING_CONTROLS_RAISE_HAND_UPDATED: string;
|
|
247
253
|
};
|
|
248
254
|
export declare const EVENT_TYPES: {
|
|
249
255
|
SELF: string;
|
|
@@ -460,6 +466,12 @@ export declare const LOCUSINFO: {
|
|
|
460
466
|
CONTROLS_MEETING_CONTAINER_UPDATED: string;
|
|
461
467
|
CONTROLS_ENTRY_EXIT_TONE_UPDATED: string;
|
|
462
468
|
CONTROLS_JOIN_BREAKOUT_FROM_MAIN: string;
|
|
469
|
+
CONTROLS_MUTE_ON_ENTRY_CHANGED: string;
|
|
470
|
+
CONTROLS_SHARE_CONTROL_CHANGED: string;
|
|
471
|
+
CONTROLS_DISALLOW_UNMUTE_CHANGED: string;
|
|
472
|
+
CONTROLS_REACTIONS_CHANGED: string;
|
|
473
|
+
CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: string;
|
|
474
|
+
CONTROLS_RAISE_HAND_CHANGED: string;
|
|
463
475
|
SELF_UNADMITTED_GUEST: string;
|
|
464
476
|
SELF_ADMITTED_GUEST: string;
|
|
465
477
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: string;
|
|
@@ -661,6 +673,10 @@ export declare const DISPLAY_HINTS: {
|
|
|
661
673
|
DISABLE_LOBBY_TO_BREAKOUT: string;
|
|
662
674
|
DISABLE_VIEW_THE_PARTICIPANT_LIST: string;
|
|
663
675
|
ENABLE_VIEW_THE_PARTICIPANT_LIST: string;
|
|
676
|
+
DISABLE_RAISE_HAND: string;
|
|
677
|
+
ENABLE_RAISE_HAND: string;
|
|
678
|
+
DISABLE_VIDEO: string;
|
|
679
|
+
ENABLE_VIDEO: string;
|
|
664
680
|
};
|
|
665
681
|
export declare const SELF_ROLES: {
|
|
666
682
|
COHOST: string;
|
|
@@ -5,8 +5,10 @@ declare enum Setting {
|
|
|
5
5
|
}
|
|
6
6
|
declare enum Control {
|
|
7
7
|
audio = "audio",
|
|
8
|
+
raiseHand = "raiseHand",
|
|
8
9
|
reactions = "reactions",
|
|
9
10
|
shareControl = "shareControl",
|
|
11
|
+
video = "video",
|
|
10
12
|
viewTheParticipantList = "viewTheParticipantList"
|
|
11
13
|
}
|
|
12
14
|
export { Control, Setting };
|
|
@@ -14,6 +14,9 @@ export interface AudioProperties {
|
|
|
14
14
|
disallowUnmute?: boolean;
|
|
15
15
|
muteOnEntry?: boolean;
|
|
16
16
|
}
|
|
17
|
+
export interface RaiseHandProperties {
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
}
|
|
17
20
|
export interface ReactionsProperties {
|
|
18
21
|
enabled?: boolean;
|
|
19
22
|
showDisplayNameWithReactions?: boolean;
|
|
@@ -21,10 +24,13 @@ export interface ReactionsProperties {
|
|
|
21
24
|
export interface ShareControlProperties {
|
|
22
25
|
control?: 'ANYONE' | 'MODERATOR_PRESENTER';
|
|
23
26
|
}
|
|
27
|
+
export interface VideoProperties {
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
}
|
|
24
30
|
export interface ViewTheParticipantListProperties {
|
|
25
31
|
enabled?: boolean;
|
|
26
32
|
}
|
|
27
|
-
export type Properties = AudioProperties | ReactionsProperties | ShareControlProperties | ViewTheParticipantListProperties;
|
|
33
|
+
export type Properties = AudioProperties | RaiseHandProperties | ReactionsProperties | ShareControlProperties | VideoProperties | ViewTheParticipantListProperties;
|
|
28
34
|
export interface ControlConfig<Props = Properties> {
|
|
29
35
|
/**
|
|
30
36
|
* The scope of the control within this object.
|
|
@@ -57,6 +57,10 @@ interface IInMeetingActions {
|
|
|
57
57
|
canUpdateShareControl?: boolean;
|
|
58
58
|
canEnableViewTheParticipantsList?: boolean;
|
|
59
59
|
canDisableViewTheParticipantsList?: boolean;
|
|
60
|
+
canEnableRaiseHand?: boolean;
|
|
61
|
+
canDisableRaiseHand?: boolean;
|
|
62
|
+
canEnableVideo?: boolean;
|
|
63
|
+
canDisableVideo?: boolean;
|
|
60
64
|
}
|
|
61
65
|
/**
|
|
62
66
|
* @class InMeetingActions
|
|
@@ -114,6 +118,10 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
114
118
|
canUpdateShareControl: any;
|
|
115
119
|
canEnableViewTheParticipantsList: any;
|
|
116
120
|
canDisableViewTheParticipantsList: any;
|
|
121
|
+
canEnableRaiseHand: any;
|
|
122
|
+
canDisableRaiseHand: any;
|
|
123
|
+
canEnableVideo: any;
|
|
124
|
+
canDisableVideo: any;
|
|
117
125
|
/**
|
|
118
126
|
* Returns all meeting action options
|
|
119
127
|
* @returns {Object}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.109",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.109",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.109",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.109",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.109",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.109",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.109",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
"typescript": "^4.7.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@webex/common": "3.0.0-beta.
|
|
49
|
+
"@webex/common": "3.0.0-beta.109",
|
|
50
50
|
"@webex/internal-media-core": "1.38.0",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
61
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.109",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.109",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.109",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.109",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.109",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.109",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.109",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.109",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.109",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.109",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.109",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
package/src/constants.ts
CHANGED
|
@@ -346,6 +346,14 @@ export const EVENT_TRIGGERS = {
|
|
|
346
346
|
REMOTE_MEDIA_AUDIO_CREATED: 'media:remoteAudio:created',
|
|
347
347
|
REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScreenShareAudio:created',
|
|
348
348
|
REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: 'media:remoteVideo:layoutChanged',
|
|
349
|
+
// Controls
|
|
350
|
+
MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED: 'meeting:controls:mute-on-entry:updated',
|
|
351
|
+
MEETING_CONTROLS_SHARE_CONTROL_UPDATED: 'meeting:controls:share-control:updated',
|
|
352
|
+
MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED: 'meeting:controls:disallow-unmute:updated',
|
|
353
|
+
MEETING_CONTROLS_REACTIONS_UPDATED: 'meeting:controls:reactions:updated',
|
|
354
|
+
MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED:
|
|
355
|
+
'meeting:controls:view-the-participants-list:updated',
|
|
356
|
+
MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',
|
|
349
357
|
};
|
|
350
358
|
|
|
351
359
|
export const EVENT_TYPES = {
|
|
@@ -592,6 +600,12 @@ export const LOCUSINFO = {
|
|
|
592
600
|
CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
|
|
593
601
|
CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',
|
|
594
602
|
CONTROLS_JOIN_BREAKOUT_FROM_MAIN: 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
|
|
603
|
+
CONTROLS_MUTE_ON_ENTRY_CHANGED: 'CONTROLS_MUTE_ON_ENTRY_CHANGED',
|
|
604
|
+
CONTROLS_SHARE_CONTROL_CHANGED: 'CONTROLS_SHARE_CONTROL_CHANGED',
|
|
605
|
+
CONTROLS_DISALLOW_UNMUTE_CHANGED: 'CONTROLS_DISALLOW_UNMUTE_CHANGED',
|
|
606
|
+
CONTROLS_REACTIONS_CHANGED: 'CONTROLS_REACTIONS_CHANGED',
|
|
607
|
+
CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: 'CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED',
|
|
608
|
+
CONTROLS_RAISE_HAND_CHANGED: 'CONTROLS_RAISE_HAND_CHANGED',
|
|
595
609
|
SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
|
|
596
610
|
SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
|
|
597
611
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
|
|
@@ -831,6 +845,14 @@ export const DISPLAY_HINTS = {
|
|
|
831
845
|
// participants list
|
|
832
846
|
DISABLE_VIEW_THE_PARTICIPANT_LIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST',
|
|
833
847
|
ENABLE_VIEW_THE_PARTICIPANT_LIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST',
|
|
848
|
+
|
|
849
|
+
// raise hand
|
|
850
|
+
DISABLE_RAISE_HAND: 'DISABLE_RAISE_HAND',
|
|
851
|
+
ENABLE_RAISE_HAND: 'ENABLE_RAISE_HAND',
|
|
852
|
+
|
|
853
|
+
// video
|
|
854
|
+
DISABLE_VIDEO: 'DISABLE_VIDEO',
|
|
855
|
+
ENABLE_VIDEO: 'ENABLE_VIDEO',
|
|
834
856
|
};
|
|
835
857
|
|
|
836
858
|
export const SELF_ROLES = {
|
|
@@ -17,6 +17,10 @@ export interface AudioProperties {
|
|
|
17
17
|
muteOnEntry?: boolean;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
export interface RaiseHandProperties {
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
export interface ReactionsProperties {
|
|
21
25
|
enabled?: boolean;
|
|
22
26
|
showDisplayNameWithReactions?: boolean;
|
|
@@ -26,14 +30,20 @@ export interface ShareControlProperties {
|
|
|
26
30
|
control?: 'ANYONE' | 'MODERATOR_PRESENTER';
|
|
27
31
|
}
|
|
28
32
|
|
|
33
|
+
export interface VideoProperties {
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
29
37
|
export interface ViewTheParticipantListProperties {
|
|
30
38
|
enabled?: boolean;
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
export type Properties =
|
|
34
42
|
| AudioProperties
|
|
43
|
+
| RaiseHandProperties
|
|
35
44
|
| ReactionsProperties
|
|
36
45
|
| ShareControlProperties
|
|
46
|
+
| VideoProperties
|
|
37
47
|
| ViewTheParticipantListProperties;
|
|
38
48
|
|
|
39
49
|
export interface ControlConfig<Props = Properties> {
|
|
@@ -3,8 +3,10 @@ import {Control} from './enums';
|
|
|
3
3
|
import {
|
|
4
4
|
ControlConfig,
|
|
5
5
|
AudioProperties,
|
|
6
|
+
RaiseHandProperties,
|
|
6
7
|
ReactionsProperties,
|
|
7
8
|
ViewTheParticipantListProperties,
|
|
9
|
+
VideoProperties,
|
|
8
10
|
} from './types';
|
|
9
11
|
|
|
10
12
|
/**
|
|
@@ -122,6 +124,22 @@ class Utils {
|
|
|
122
124
|
return Utils.hasHints({requiredHints, displayHints});
|
|
123
125
|
}
|
|
124
126
|
|
|
127
|
+
public static canUpdateRaiseHand(
|
|
128
|
+
control: ControlConfig<RaiseHandProperties>,
|
|
129
|
+
displayHints: Array<string>
|
|
130
|
+
) {
|
|
131
|
+
const requiredHints = [];
|
|
132
|
+
|
|
133
|
+
if (control.properties.enabled === true) {
|
|
134
|
+
requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);
|
|
135
|
+
}
|
|
136
|
+
if (control.properties.enabled === false) {
|
|
137
|
+
requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return Utils.hasHints({requiredHints, displayHints});
|
|
141
|
+
}
|
|
142
|
+
|
|
125
143
|
/**
|
|
126
144
|
* Validate if an reactions-scoped control is allowed to be sent to the service.
|
|
127
145
|
*
|
|
@@ -184,6 +202,22 @@ class Utils {
|
|
|
184
202
|
return Utils.hasHints({requiredHints, displayHints});
|
|
185
203
|
}
|
|
186
204
|
|
|
205
|
+
public static canUpdateVideo(
|
|
206
|
+
control: ControlConfig<VideoProperties>,
|
|
207
|
+
displayHints: Array<string>
|
|
208
|
+
) {
|
|
209
|
+
const requiredHints = [];
|
|
210
|
+
|
|
211
|
+
if (control.properties.enabled === true) {
|
|
212
|
+
requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);
|
|
213
|
+
}
|
|
214
|
+
if (control.properties.enabled === false) {
|
|
215
|
+
requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return Utils.hasHints({requiredHints, displayHints});
|
|
219
|
+
}
|
|
220
|
+
|
|
187
221
|
/**
|
|
188
222
|
* Validate that a control can be sent to the service based on the provided
|
|
189
223
|
* display hints.
|
|
@@ -200,6 +234,13 @@ class Utils {
|
|
|
200
234
|
determinant = Utils.canUpdateAudio(control as ControlConfig<AudioProperties>, displayHints);
|
|
201
235
|
break;
|
|
202
236
|
|
|
237
|
+
case Control.raiseHand:
|
|
238
|
+
determinant = Utils.canUpdateRaiseHand(
|
|
239
|
+
control as ControlConfig<RaiseHandProperties>,
|
|
240
|
+
displayHints
|
|
241
|
+
);
|
|
242
|
+
break;
|
|
243
|
+
|
|
203
244
|
case Control.reactions:
|
|
204
245
|
determinant = Utils.canUpdateReactions(
|
|
205
246
|
control as ControlConfig<ReactionsProperties>,
|
|
@@ -211,6 +252,10 @@ class Utils {
|
|
|
211
252
|
determinant = Utils.canUpdateShareControl(displayHints);
|
|
212
253
|
break;
|
|
213
254
|
|
|
255
|
+
case Control.video:
|
|
256
|
+
determinant = Utils.canUpdateVideo(control as ControlConfig<VideoProperties>, displayHints);
|
|
257
|
+
break;
|
|
258
|
+
|
|
214
259
|
case Control.viewTheParticipantList:
|
|
215
260
|
determinant = Utils.canUpdateViewTheParticipantsList(
|
|
216
261
|
control as ControlConfig<ViewTheParticipantListProperties>,
|
|
@@ -53,6 +53,33 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
53
53
|
parsedControls.videoEnabled = controls.video.enabled;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
if (controls?.muteOnEntry) {
|
|
57
|
+
parsedControls.muteOnEntry = {enabled: controls.muteOnEntry.enabled};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (controls?.shareControl) {
|
|
61
|
+
parsedControls.shareControl = {control: controls.shareControl.control};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (controls?.disallowUnmute) {
|
|
65
|
+
parsedControls.disallowUnmute = {enabled: controls.disallowUnmute.enabled};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (controls?.reactions) {
|
|
69
|
+
parsedControls.reactions = {
|
|
70
|
+
enabled: controls.reactions.enabled,
|
|
71
|
+
showDisplayNameWithReactions: controls.reactions.showDisplayNameWithReactions,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (controls?.viewTheParticipantList) {
|
|
76
|
+
parsedControls.viewTheParticipantList = {enabled: controls.viewTheParticipantList.enabled};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (controls?.raiseHand) {
|
|
80
|
+
parsedControls.raiseHand = {enabled: controls.raiseHand.enabled};
|
|
81
|
+
}
|
|
82
|
+
|
|
56
83
|
return parsedControls;
|
|
57
84
|
};
|
|
58
85
|
|
|
@@ -70,6 +97,33 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
70
97
|
previous,
|
|
71
98
|
current,
|
|
72
99
|
updates: {
|
|
100
|
+
hasMuteOnEntryChanged:
|
|
101
|
+
current?.muteOnEntry?.enabled &&
|
|
102
|
+
current?.muteOnEntry?.enabled !== previous?.muteOnEntry?.enabled,
|
|
103
|
+
|
|
104
|
+
hasShareControlChanged:
|
|
105
|
+
current?.shareControl?.control &&
|
|
106
|
+
current?.shareControl?.control !== previous?.shareControl?.control,
|
|
107
|
+
|
|
108
|
+
hasDisallowUnmuteChanged:
|
|
109
|
+
current?.disallowUnmute?.enabled &&
|
|
110
|
+
current?.disallowUnmute?.enabled !== previous?.disallowUnmute?.enabled,
|
|
111
|
+
|
|
112
|
+
hasReactionsChanged:
|
|
113
|
+
current?.reactions?.enabled && current?.reactions?.enabled !== previous?.reactions?.enabled,
|
|
114
|
+
|
|
115
|
+
hasReactionDisplayNamesChanged:
|
|
116
|
+
current?.reactions?.showDisplayNameWithReactions &&
|
|
117
|
+
current?.reactions?.showDisplayNameWithReactions !==
|
|
118
|
+
previous?.reactions?.showDisplayNameWithReactions,
|
|
119
|
+
|
|
120
|
+
hasViewTheParticipantListChanged:
|
|
121
|
+
current?.viewTheParticipantList?.enabled &&
|
|
122
|
+
current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled,
|
|
123
|
+
|
|
124
|
+
hasRaiseHandChanged:
|
|
125
|
+
current?.raiseHand?.enabled && current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,
|
|
126
|
+
|
|
73
127
|
hasRecordingPausedChanged:
|
|
74
128
|
current?.record &&
|
|
75
129
|
!isEqual(previous?.record?.paused, current.record.paused) &&
|
package/src/locus-info/index.ts
CHANGED
|
@@ -700,10 +700,65 @@ export default class LocusInfo extends EventsScope {
|
|
|
700
700
|
hasEntryExitToneChanged,
|
|
701
701
|
hasBreakoutChanged,
|
|
702
702
|
hasVideoEnabledChanged,
|
|
703
|
+
hasMuteOnEntryChanged,
|
|
704
|
+
hasShareControlChanged,
|
|
705
|
+
hasDisallowUnmuteChanged,
|
|
706
|
+
hasReactionsChanged,
|
|
707
|
+
hasReactionDisplayNamesChanged,
|
|
708
|
+
hasViewTheParticipantListChanged,
|
|
709
|
+
hasRaiseHandChanged,
|
|
703
710
|
},
|
|
704
711
|
current,
|
|
705
712
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
706
713
|
|
|
714
|
+
if (hasMuteOnEntryChanged) {
|
|
715
|
+
this.emitScoped(
|
|
716
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
717
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
718
|
+
{state: current.muteOnEntry}
|
|
719
|
+
);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (hasShareControlChanged) {
|
|
723
|
+
this.emitScoped(
|
|
724
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
725
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
726
|
+
{state: current.shareControl}
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
if (hasDisallowUnmuteChanged) {
|
|
731
|
+
this.emitScoped(
|
|
732
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
733
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
734
|
+
{state: current.disallowUnmute}
|
|
735
|
+
);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
739
|
+
this.emitScoped(
|
|
740
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
741
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
742
|
+
{state: current.reactions}
|
|
743
|
+
);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
if (hasViewTheParticipantListChanged) {
|
|
747
|
+
this.emitScoped(
|
|
748
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
749
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
750
|
+
{state: current.viewTheParticipantList}
|
|
751
|
+
);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
if (hasRaiseHandChanged) {
|
|
755
|
+
this.emitScoped(
|
|
756
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
757
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
758
|
+
{state: current.raiseHand}
|
|
759
|
+
);
|
|
760
|
+
}
|
|
761
|
+
|
|
707
762
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
708
763
|
let state = null;
|
|
709
764
|
|
|
@@ -60,6 +60,10 @@ interface IInMeetingActions {
|
|
|
60
60
|
canUpdateShareControl?: boolean;
|
|
61
61
|
canEnableViewTheParticipantsList?: boolean;
|
|
62
62
|
canDisableViewTheParticipantsList?: boolean;
|
|
63
|
+
canEnableRaiseHand?: boolean;
|
|
64
|
+
canDisableRaiseHand?: boolean;
|
|
65
|
+
canEnableVideo?: boolean;
|
|
66
|
+
canDisableVideo?: boolean;
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
/**
|
|
@@ -170,6 +174,14 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
170
174
|
|
|
171
175
|
canDisableViewTheParticipantsList = null;
|
|
172
176
|
|
|
177
|
+
canEnableRaiseHand = null;
|
|
178
|
+
|
|
179
|
+
canDisableRaiseHand = null;
|
|
180
|
+
|
|
181
|
+
canEnableVideo = null;
|
|
182
|
+
|
|
183
|
+
canDisableVideo = null;
|
|
184
|
+
|
|
173
185
|
/**
|
|
174
186
|
* Returns all meeting action options
|
|
175
187
|
* @returns {Object}
|
|
@@ -226,6 +238,10 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
226
238
|
canUpdateShareControl: this.canUpdateShareControl,
|
|
227
239
|
canEnableViewTheParticipantsList: this.canEnableViewTheParticipantsList,
|
|
228
240
|
canDisableViewTheParticipantsList: this.canDisableViewTheParticipantsList,
|
|
241
|
+
canEnableRaiseHand: this.canEnableRaiseHand,
|
|
242
|
+
canDisableRaiseHand: this.canDisableRaiseHand,
|
|
243
|
+
canEnableVideo: this.canEnableVideo,
|
|
244
|
+
canDisableVideo: this.canDisableVideo,
|
|
229
245
|
});
|
|
230
246
|
|
|
231
247
|
/**
|
package/src/meeting/index.ts
CHANGED
|
@@ -2114,6 +2114,60 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2114
2114
|
{entryExitTone}
|
|
2115
2115
|
);
|
|
2116
2116
|
});
|
|
2117
|
+
|
|
2118
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, ({state}) => {
|
|
2119
|
+
Trigger.trigger(
|
|
2120
|
+
this,
|
|
2121
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2122
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED,
|
|
2123
|
+
{state}
|
|
2124
|
+
);
|
|
2125
|
+
});
|
|
2126
|
+
|
|
2127
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, ({state}) => {
|
|
2128
|
+
Trigger.trigger(
|
|
2129
|
+
this,
|
|
2130
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2131
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_SHARE_CONTROL_UPDATED,
|
|
2132
|
+
{state}
|
|
2133
|
+
);
|
|
2134
|
+
});
|
|
2135
|
+
|
|
2136
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, ({state}) => {
|
|
2137
|
+
Trigger.trigger(
|
|
2138
|
+
this,
|
|
2139
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2140
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED,
|
|
2141
|
+
{state}
|
|
2142
|
+
);
|
|
2143
|
+
});
|
|
2144
|
+
|
|
2145
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, ({state}) => {
|
|
2146
|
+
Trigger.trigger(
|
|
2147
|
+
this,
|
|
2148
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2149
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_REACTIONS_UPDATED,
|
|
2150
|
+
{state}
|
|
2151
|
+
);
|
|
2152
|
+
});
|
|
2153
|
+
|
|
2154
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, ({state}) => {
|
|
2155
|
+
Trigger.trigger(
|
|
2156
|
+
this,
|
|
2157
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2158
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED,
|
|
2159
|
+
{state}
|
|
2160
|
+
);
|
|
2161
|
+
});
|
|
2162
|
+
|
|
2163
|
+
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, ({state}) => {
|
|
2164
|
+
Trigger.trigger(
|
|
2165
|
+
this,
|
|
2166
|
+
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
2167
|
+
EVENT_TRIGGERS.MEETING_CONTROLS_RAISE_HAND_UPDATED,
|
|
2168
|
+
{state}
|
|
2169
|
+
);
|
|
2170
|
+
});
|
|
2117
2171
|
}
|
|
2118
2172
|
|
|
2119
2173
|
/**
|
|
@@ -2553,6 +2607,22 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2553
2607
|
requiredHints: [DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST],
|
|
2554
2608
|
displayHints: payload.info.userDisplayHints,
|
|
2555
2609
|
}),
|
|
2610
|
+
canEnableRaiseHand: ControlsOptionsUtil.hasHints({
|
|
2611
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_RAISE_HAND],
|
|
2612
|
+
displayHints: payload.info.userDisplayHints,
|
|
2613
|
+
}),
|
|
2614
|
+
canDisableRaiseHand: ControlsOptionsUtil.hasHints({
|
|
2615
|
+
requiredHints: [DISPLAY_HINTS.DISABLE_RAISE_HAND],
|
|
2616
|
+
displayHints: payload.info.userDisplayHints,
|
|
2617
|
+
}),
|
|
2618
|
+
canEnableVideo: ControlsOptionsUtil.hasHints({
|
|
2619
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_VIDEO],
|
|
2620
|
+
displayHints: payload.info.userDisplayHints,
|
|
2621
|
+
}),
|
|
2622
|
+
canDisableVideo: ControlsOptionsUtil.hasHints({
|
|
2623
|
+
requiredHints: [DISPLAY_HINTS.DISABLE_VIDEO],
|
|
2624
|
+
displayHints: payload.info.userDisplayHints,
|
|
2625
|
+
}),
|
|
2556
2626
|
});
|
|
2557
2627
|
|
|
2558
2628
|
this.recordingController.setDisplayHints(payload.info.userDisplayHints);
|