Skip to content

Commit 5721315

Browse files
Mohtasimpull[bot]
authored andcommitted
[Calling] Tooltip for each of the reaction button applied (#4035)
1 parent 1a100b9 commit 5721315

8 files changed

Lines changed: 119 additions & 26 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "minor",
3+
"area": "improvement",
4+
"workstream": "Adding tooltip for each reaction button",
5+
"comment": "Tooltip for each of the reaction button applied",
6+
"packageName": "@azure/communication-react",
7+
"email": "mbellah@microsoft.com",
8+
"dependentChangeType": "patch"
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "minor",
3+
"area": "improvement",
4+
"workstream": "Adding tooltip for each reaction button",
5+
"comment": "Tooltip for each of the reaction button applied",
6+
"packageName": "@azure/communication-react",
7+
"email": "mbellah@microsoft.com",
8+
"dependentChangeType": "patch"
9+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3673,7 +3673,12 @@ export interface ReactionButtonProps extends ControlBarButtonProps {
36733673

36743674
// @beta
36753675
export interface ReactionButtonStrings {
3676+
applauseReactionTooltipContent?: string;
3677+
heartReactionTooltipContent?: string;
36763678
label: string;
3679+
laughReactionTooltipContent?: string;
3680+
likeReactionTooltipContent?: string;
3681+
surprisedReactionTooltipContent?: string;
36773682
tooltipContent?: string;
36783683
tooltipDisabledContent?: string;
36793684
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,7 +1908,12 @@ export interface ReactionButtonProps extends ControlBarButtonProps {
19081908

19091909
// @beta
19101910
export interface ReactionButtonStrings {
1911+
applauseReactionTooltipContent?: string;
1912+
heartReactionTooltipContent?: string;
19111913
label: string;
1914+
laughReactionTooltipContent?: string;
1915+
likeReactionTooltipContent?: string;
1916+
surprisedReactionTooltipContent?: string;
19121917
tooltipContent?: string;
19131918
tooltipDisabledContent?: string;
19141919
}

packages/react-components/src/components/ReactionButton.tsx

Lines changed: 65 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import {
66
ContextualMenuItemType,
77
DefaultPalette,
88
IButtonStyles,
9+
ICalloutContentStyles,
10+
IconButton,
911
IContextualMenuItem,
1012
mergeStyles,
1113
Theme,
14+
TooltipHost,
1215
useTheme
1316
} from '@fluentui/react';
1417
/* @conditional-compile-remove(reaction) */
@@ -22,7 +25,9 @@ import { useLocale } from '../localization';
2225
/* @conditional-compile-remove(reaction) */
2326
import { reactionEmoji } from './utils/videoTileStylesUtils';
2427
/* @conditional-compile-remove(reaction) */
25-
import { emojiStyles, reactionEmojiMenuStyles } from './styles/ReactionButton.styles';
28+
import { emojiStyles, reactionEmojiMenuStyles, reactionToolTipHostStyle } from './styles/ReactionButton.styles';
29+
/* @conditional-compile-remove(reaction) */
30+
import { isDarkThemed } from '../theming/themeUtils';
2631

2732
/* @conditional-compile-remove(reaction) */
2833
/**
@@ -50,10 +55,20 @@ export interface ReactionButtonProps extends ControlBarButtonProps {
5055
export interface ReactionButtonStrings {
5156
/** Label of the button. */
5257
label: string;
53-
/** * Tooltip content when the button is disabled. */
58+
/** Tooltip content when the button is disabled. */
5459
tooltipDisabledContent?: string;
5560
/** Tooltip content when the button is enabled. */
5661
tooltipContent?: string;
62+
/** Tooltip content of like reaction button. */
63+
likeReactionTooltipContent?: string;
64+
/** Tooltip content of heart reaction button. */
65+
heartReactionTooltipContent?: string;
66+
/** Tooltip content of laugh reaction button. */
67+
laughReactionTooltipContent?: string;
68+
/** Tooltip content of clap reaction button. */
69+
applauseReactionTooltipContent?: string;
70+
/** Tooltip content of surprised reaction button. */
71+
surprisedReactionTooltipContent?: string;
5772
}
5873

5974
/* @conditional-compile-remove(reaction) */
@@ -69,35 +84,61 @@ export const ReactionButton = (props: ReactionButtonProps): JSX.Element => {
6984
const strings = { ...localeStrings, ...props.strings };
7085
const theme = useTheme();
7186
const styles = reactionButtonStyles(theme);
72-
const onRenderIcon = (): JSX.Element => <_HighContrastAwareIcon iconName="ReactionButtonIcon" />;
87+
const onRenderIcon = (): JSX.Element => (
88+
<_HighContrastAwareIcon disabled={props.disabled} iconName="ReactionButtonIcon" />
89+
);
7390

7491
const [isHoveredMap, setIsHoveredMap] = useState(new Map());
7592
const emojis = ['like', 'heart', 'laugh', 'applause', 'surprised'];
93+
const emojiButtonTooltip: Map<string, string | undefined> = new Map([
94+
['like', strings.likeReactionTooltipContent],
95+
['heart', strings.heartReactionTooltipContent],
96+
['laugh', strings.laughReactionTooltipContent],
97+
['applause', strings.applauseReactionTooltipContent],
98+
['surprised', strings.surprisedReactionTooltipContent]
99+
]);
100+
101+
const calloutStyle: Partial<ICalloutContentStyles> = { root: { padding: 0 }, calloutMain: { padding: '0.5rem' } };
102+
103+
const calloutProps = {
104+
gapSpace: 4,
105+
styles: calloutStyle,
106+
backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''
107+
};
76108

77109
const renderEmoji = (item: IContextualMenuItem, dismissMenu: () => void): React.JSX.Element => (
78110
<div style={reactionEmojiMenuStyles()}>
79111
{emojis.map((emoji, index) => (
80-
<div
112+
<TooltipHost
81113
key={index}
82-
onClick={() => {
83-
props.onReactionClicked(emoji);
84-
setIsHoveredMap((prevMap) => {
85-
return new Map(prevMap).set(emoji, false);
86-
});
87-
dismissMenu();
88-
}}
89-
style={emojiStyles(reactionEmoji.get(emoji), isHoveredMap.get(emoji) ? 'running' : 'paused')}
90-
onMouseEnter={() =>
91-
setIsHoveredMap((prevMap) => {
92-
return new Map(prevMap).set(emoji, true);
93-
})
94-
}
95-
onMouseLeave={() =>
96-
setIsHoveredMap((prevMap) => {
97-
return new Map(prevMap).set(emoji, false);
98-
})
99-
}
100-
/>
114+
data-ui-id={index}
115+
hidden={props.disableTooltip}
116+
content={emojiButtonTooltip.get(emoji)}
117+
styles={reactionToolTipHostStyle()}
118+
calloutProps={{ ...calloutProps }}
119+
>
120+
<IconButton
121+
key={index}
122+
onClick={() => {
123+
props.onReactionClicked(emoji);
124+
setIsHoveredMap((prevMap) => {
125+
return new Map(prevMap).set(emoji, false);
126+
});
127+
dismissMenu();
128+
}}
129+
style={emojiStyles(reactionEmoji.get(emoji), isHoveredMap.get(emoji) ? 'running' : 'paused')}
130+
onMouseEnter={() =>
131+
setIsHoveredMap((prevMap) => {
132+
return new Map(prevMap).set(emoji, true);
133+
})
134+
}
135+
onMouseLeave={() =>
136+
setIsHoveredMap((prevMap) => {
137+
return new Map(prevMap).set(emoji, false);
138+
})
139+
}
140+
/>
141+
</TooltipHost>
101142
))}
102143
</div>
103144
);
@@ -118,6 +159,7 @@ export const ReactionButton = (props: ReactionButtonProps): JSX.Element => {
118159
strings={strings}
119160
labelKey={props.labelKey ?? 'reactionButtonLabel'}
120161
onRenderMenuIcon={() => <div />}
162+
disabled={props.disabled}
121163
/>
122164
);
123165
};

packages/react-components/src/components/styles/ReactionButton.styles.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Licensed under the MIT License.
33

44
/* @conditional-compile-remove(reaction) */
5-
import { keyframes, memoizeFunction } from '@fluentui/react';
5+
import { ITooltipHostStyles, keyframes, memoizeFunction } from '@fluentui/react';
66
/* @conditional-compile-remove(reaction) */
77
import React from 'react';
88

@@ -46,7 +46,7 @@ export const emojiStyles = (backgroundImage?: string, animationPlayState?: strin
4646
backgroundSize: `44px 2142px`,
4747
transition: 'opacity 2s',
4848
backgroundColor: 'transparent',
49-
transform: `scale(0.6)`
49+
transform: `${animationPlayState === 'running' ? 'scale(0.8)' : 'scale(0.6)'}`
5050
};
5151
};
5252

@@ -65,3 +65,19 @@ export const reactionEmojiMenuStyles = (): React.CSSProperties => {
6565
height: '42px'
6666
};
6767
};
68+
69+
/* @conditional-compile-remove(reaction) */
70+
/**
71+
*
72+
* @private
73+
*/
74+
export const reactionToolTipHostStyle = (): ITooltipHostStyles => {
75+
return {
76+
root: {
77+
display: 'flex',
78+
flexDirection: 'column',
79+
height: '100%',
80+
width: '100%'
81+
}
82+
};
83+
};

packages/react-components/src/localization/locales/en-US/strings.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,12 @@
126126
"reactionButton": {
127127
"label": "React",
128128
"tooltipDisabledContent": "Reaction action is disabled",
129-
"tooltipContent": "Send a reaction"
129+
"tooltipContent": "Send a reaction",
130+
"likeReactionTooltipContent": "Like",
131+
"heartReactionTooltipContent": "Love",
132+
"laughReactionTooltipContent": "Laugh",
133+
"applauseReactionTooltipContent": "Applause",
134+
"surprisedReactionTooltipContent": "Surprised"
130135
},
131136
"messageThread": {
132137
"yesterday": "Yesterday",

packages/react-composites/src/composites/CallComposite/components/buttons/Reaction.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const Reaction = (props: {
2020
displayType?: CallControlDisplayType;
2121
styles?: ControlBarButtonStyles;
2222
disabled?: boolean;
23+
disableTooltip?: boolean;
2324
}): JSX.Element => {
2425
const reactionButtonProps = usePropsFor(ReactionButton) as unknown as ReactionButtonProps;
2526
const styles = useMemo(() => concatButtonBaseStyles(props.styles ?? {}), [props.styles]);
@@ -33,6 +34,7 @@ export const Reaction = (props: {
3334
showLabel={props.displayType !== 'compact'}
3435
disabled={reactionButtonDisabled || props.disabled}
3536
styles={styles}
37+
disableTooltip={props.disableTooltip}
3638
/>
3739
);
3840
};

0 commit comments

Comments
 (0)