Skip to content

Commit e5fc0e4

Browse files
[Release] stabilize reactions (#4429)
* stabilize reactions * Change files * fix tagging * Update packages/react-composites CallWithChatComposite browser test snapshots * fix build * Update packages/react-composites CallComposite browser test snapshots * update beta API * update API --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent f06b904 commit e5fc0e4

File tree

134 files changed

+111
-53
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

134 files changed

+111
-53
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "prerelease",
3+
"area": "feature",
4+
"workstream": "Reactions",
5+
"comment": "Microsoft Azure Communications Services has recently updated its UI library composites and components to include call reactions. The UI Library will support the following list of live call reactions: Like 3D emoji like reaction, Love 3D Emoji heart reaction, Applause 3D emoji applause reaction, Laugh  3D emoji laughter reaction, Surprise 3D emoji surprise reaction. Call reactions are associated to the user sending it and are visible to all types of users (in-tenant, guest, federated, anonymous). Call reactions are supported in all types of calls (1:1, group) and meetings (scheduled, meet now, private, channel) of all sizes (small, large, XL). The addition of this feature will assist with greater engagement within calls, as people can now react or respond in real time without having to speak or interrupt.",
6+
"packageName": "@azure/communication-react",
7+
"email": "[email protected]",
8+
"dependentChangeType": "patch"
9+
}

common/config/babel/features.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ module.exports = {
1717
"gallery-layout-composite",
1818
// feature for hiding attendee name in the teams meeting
1919
"hide-attendee-name",
20-
// Feature for meeting reactions
21-
'reaction',
2220
// Feature for Rich Text Editor (RTE) support
2321
'rich-text-editor',
2422
// Join meeting with meetingId and passcode
@@ -95,6 +93,8 @@ module.exports = {
9593
// Feature for end of call survey
9694
'end-of-call-survey',
9795
// Feature for PPT Live for teams meeting
98-
'ppt-live'
96+
'ppt-live',
97+
// Feature for meeting reactions
98+
'reaction',
9999
]
100100
}

packages/calling-component-bindings/src/callControlSelectors.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export const raiseHandButtonSelector: RaiseHandButtonSelector = reselect.createS
144144
/**
145145
* Selector type for {@link ReactionButton} component.
146146
*
147-
* @beta
147+
* @public
148148
*/
149149
export type ReactionButtonSelector = (
150150
state: CallClientState,
@@ -158,7 +158,7 @@ export type ReactionButtonSelector = (
158158
/**
159159
* Selector for {@link ReactionButton} component.
160160
*
161-
* @beta
161+
* @public
162162
*/
163163
export const reactionButtonSelector: ReactionButtonSelector = reselect.createSelector(
164164
[getLocalParticipantReactionState, getCallState],

packages/calling-component-bindings/src/handlers/createCommonHandlers.ts

-3
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ export interface CommonCallingHandlers {
6262
onLowerHand: () => Promise<void>;
6363
onToggleRaiseHand: () => Promise<void>;
6464
/* @conditional-compile-remove(reaction) */
65-
/**
66-
* @beta
67-
*/
6865
onReactionClick: (reaction: Reaction) => Promise<void>;
6966
/* @conditional-compile-remove(PSTN-calls) */
7067
onToggleHold: () => Promise<void>;

packages/calling-component-bindings/src/hooks/usePropsFor.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,7 @@ export const getSelector = <Component extends (props: any) => JSX.Element | unde
140140
if (component === HoldButton) {
141141
return findConditionalCompiledSelector(component);
142142
}
143-
/* @conditional-compile-remove(reaction) */
144-
if (component === ReactionButton) {
145-
return findConditionalCompiledSelector(component);
146-
}
143+
147144
return findSelector(component);
148145
};
149146

@@ -174,6 +171,8 @@ const findSelector = (component: (props: any) => JSX.Element | undefined): any =
174171
return errorBarSelector;
175172
case RaiseHandButton:
176173
return raiseHandButtonSelector;
174+
case ReactionButton:
175+
return reactionButtonSelector;
177176
}
178177
return undefined;
179178
};
@@ -185,9 +184,5 @@ const findConditionalCompiledSelector = (component: (props: any) => JSX.Element
185184
case HoldButton:
186185
/* @conditional-compile-remove(PSTN-calls) */
187186
return holdButtonSelector;
188-
/* @conditional-compile-remove(reaction) */
189-
case ReactionButton:
190-
/* @conditional-compile-remove(reaction) */
191-
return reactionButtonSelector;
192187
}
193188
};

packages/calling-stateful-client/src/CallClientState.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ export type RaisedHandState = {
277277
* State only version of {@link @azure/communication-calling#Call.ReactionMessage} with UI helper props receivedOn.
278278
* Reaction state with a timestamp which helps UI to decide to render the reaction accordingly.
279279
*
280-
* @beta
280+
* @public
281281
*/
282282
export type ReactionState = {
283283
/**
@@ -453,7 +453,7 @@ export interface RemoteParticipantState {
453453
* Proxy of {@link @azure/communication-calling#Call.ReactionMessage} with
454454
* UI helper props receivedOn which indicates the timestamp when the message was received.
455455
*
456-
* @beta
456+
* @public
457457
*/
458458
reactionState?: ReactionState;
459459
/* @conditional-compile-remove(spotlight) */
@@ -563,7 +563,7 @@ export interface CallState {
563563
* Proxy of {@link @azure/communication-calling#Call.ReactionMessage} with
564564
* UI helper props receivedOn which indicates the timestamp when the message was received.
565565
*
566-
* @beta
566+
* @public
567567
*/
568568
localParticipantReaction?: ReactionState;
569569
/**

packages/communication-react/review/beta/communication-react.api.md

+7-18
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,6 @@ export interface CallAdapterCallOperations {
415415
leaveCall(forEveryone?: boolean): Promise<void>;
416416
lowerHand(): Promise<void>;
417417
mute(): Promise<void>;
418-
// @beta
419418
onReactionClick(reaction: Reaction_2): Promise<void>;
420419
raiseHand(): Promise<void>;
421420
removeParticipant(userId: string): Promise<void>;
@@ -1035,7 +1034,6 @@ export interface CallState {
10351034
isMuted: boolean;
10361035
isScreenSharingOn: boolean;
10371036
kind: CallKind;
1038-
// @beta
10391037
localParticipantReaction?: ReactionState;
10401038
localRecording: LocalRecordingCallFeatureState;
10411039
localVideoStreams: LocalVideoStreamState[];
@@ -1101,7 +1099,6 @@ export interface CallWithChatAdapterManagement {
11011099
loadPreviousChatMessages(messagesToLoad: number): Promise<boolean>;
11021100
lowerHand(): Promise<void>;
11031101
mute(): Promise<void>;
1104-
// @beta
11051102
onReactionClick(reaction: Reaction_2): Promise<void>;
11061103
queryCameras(): Promise<VideoDeviceInfo[]>;
11071104
queryMicrophones(): Promise<AudioDeviceInfo[]>;
@@ -1284,7 +1281,6 @@ export interface CallWithChatClientState {
12841281
latestCallErrors: AdapterErrors;
12851282
latestChatErrors: AdapterErrors;
12861283
onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;
1287-
// @beta
12881284
reactions?: ReactionResources;
12891285
selectedVideoBackgroundEffect?: VideoBackgroundEffect;
12901286
userId: CommunicationIdentifierKind;
@@ -2017,7 +2013,7 @@ export interface CommonCallingHandlers {
20172013
onLowerHand: () => Promise<void>;
20182014
// (undocumented)
20192015
onRaiseHand: () => Promise<void>;
2020-
// @beta (undocumented)
2016+
// (undocumented)
20212017
onReactionClick: (reaction: Reaction_2) => Promise<void>;
20222018
// (undocumented)
20232019
onRemoveParticipant(userId: string): Promise<void>;
@@ -2202,7 +2198,6 @@ export interface ComponentStrings {
22022198
ParticipantList: ParticipantListStrings;
22032199
participantsButton: ParticipantsButtonStrings;
22042200
raiseHandButton: RaiseHandButtonStrings;
2205-
// @beta
22062201
reactionButton: ReactionButtonStrings;
22072202
richTextSendBox: RichTextSendBoxStrings;
22082203
screenShareButton: ScreenShareButtonStrings;
@@ -3769,20 +3764,20 @@ export interface RaiseHandCallFeature {
37693764
raisedHands: RaisedHandState[];
37703765
}
37713766

3772-
// @beta
3767+
// @public
37733768
export type Reaction = {
37743769
reactionType: string;
37753770
receivedOn: Date;
37763771
};
37773772

3778-
// @beta
3773+
// @public
37793774
export interface ReactionButtonProps extends ControlBarButtonProps {
37803775
onReactionClick: (reaction: string) => Promise<void>;
37813776
reactionResources: ReactionResources;
37823777
strings?: Partial<ReactionButtonStrings>;
37833778
}
37843779

3785-
// @beta
3780+
// @public
37863781
export interface ReactionButtonStrings {
37873782
applauseReactionTooltipContent?: string;
37883783
ariaLabel: string;
@@ -3795,7 +3790,7 @@ export interface ReactionButtonStrings {
37953790
tooltipDisabledContent?: string;
37963791
}
37973792

3798-
// @beta
3793+
// @public
37993794
export interface ReactionResources {
38003795
applauseReaction?: ReactionSprite;
38013796
heartReaction?: ReactionSprite;
@@ -3804,14 +3799,14 @@ export interface ReactionResources {
38043799
surprisedReaction?: ReactionSprite;
38053800
}
38063801

3807-
// @beta
3802+
// @public
38083803
export type ReactionSprite = {
38093804
url: string;
38103805
frameCount: number;
38113806
size?: number;
38123807
};
38133808

3814-
// @beta
3809+
// @public
38153810
export type ReactionState = {
38163811
reactionMessage: ReactionMessage;
38173812
receivedOn: Date;
@@ -3841,7 +3836,6 @@ export interface RemoteParticipantState {
38413836
isMuted: boolean;
38423837
isSpeaking: boolean;
38433838
raisedHand?: RaisedHandState;
3844-
// @beta
38453839
reactionState?: ReactionState;
38463840
role?: ParticipantRole;
38473841
spotlight?: SpotlightState;
@@ -4535,7 +4529,6 @@ export type VideoGalleryLayout = 'default' | 'floatingLocalVideo' | 'speaker' |
45354529
// @public
45364530
export interface VideoGalleryLocalParticipant extends VideoGalleryParticipant {
45374531
raisedHand?: RaisedHand;
4538-
// @beta
45394532
reaction?: Reaction;
45404533
}
45414534

@@ -4577,7 +4570,6 @@ export interface VideoGalleryProps {
45774570
onUnpinParticipant?: (userId: string) => void;
45784571
overflowGalleryPosition?: OverflowGalleryPosition;
45794572
pinnedParticipants?: string[];
4580-
// @beta
45814573
reactionResources?: ReactionResources;
45824574
remoteParticipants?: VideoGalleryRemoteParticipant[];
45834575
remoteVideoTileMenu?: false | VideoTileContextualMenuProps | VideoTileDrawerMenuProps;
@@ -4593,7 +4585,6 @@ export interface VideoGalleryProps {
45934585
export interface VideoGalleryRemoteParticipant extends VideoGalleryParticipant {
45944586
isSpeaking?: boolean;
45954587
raisedHand?: RaisedHand;
4596-
// @beta
45974588
reaction?: Reaction;
45984589
screenShareStream?: VideoGalleryStream;
45994590
// @beta
@@ -4699,13 +4690,11 @@ export interface VideoTileProps {
46994690
noVideoAvailableAriaLabel?: string;
47004691
onLongTouch?: () => void;
47014692
onRenderPlaceholder?: OnRenderAvatarCallback;
4702-
// @beta
47034693
overlay?: JSX.Element | null;
47044694
participantState?: ParticipantState;
47054695
personaMaxSize?: number;
47064696
personaMinSize?: number;
47074697
raisedHand?: RaisedHand;
4708-
// @beta
47094698
reactionResources?: ReactionResources;
47104699
renderElement?: JSX.Element | null;
47114700
showLabel?: boolean;

0 commit comments

Comments
 (0)