Skip to content

Commit 5558f5c

Browse files
committed
Consider rating settings in floating players
1 parent 37647c2 commit 5558f5c

File tree

9 files changed

+107
-39
lines changed

9 files changed

+107
-39
lines changed

ui/component/fileReactions/view.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export default function FileReactions(props: Props) {
6565
<div
6666
className={classnames('ratio-wrapper', {
6767
'ratio-wrapper--disabled': scheduledState === 'scheduled',
68+
'ratio-wrapper--no-slime': disableSlimes,
6869
})}
6970
>
7071
<LikeButton myReaction={myReaction} reactionCount={likeCount} onClick={() => doReactionLike(uri)} />

ui/component/shortsActions/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ import {
1515
} from 'redux/selectors/claims';
1616
import { selectIsSubscribedForUri } from 'redux/selectors/subscriptions';
1717
import { doChannelSubscribe, doChannelUnsubscribe } from 'redux/actions/subscriptions';
18-
import { DISABLE_SLIMES_VIDEO_TAG, DISABLE_SLIMES_ALL_TAG } from 'constants/tags';
18+
import {
19+
DISABLE_SLIMES_VIDEO_TAG,
20+
DISABLE_SLIMES_ALL_TAG,
21+
DISABLE_REACTIONS_ALL_TAG,
22+
DISABLE_REACTIONS_VIDEO_TAG,
23+
} from 'constants/tags';
1924
import { doOpenModal } from 'redux/actions/app';
2025

2126
const select = (state, props) => {
@@ -36,6 +41,9 @@ const select = (state, props) => {
3641
disableSlimes:
3742
makeSelectTagInClaimOrChannelForUri(uri, DISABLE_SLIMES_ALL_TAG)(state) ||
3843
makeSelectTagInClaimOrChannelForUri(uri, DISABLE_SLIMES_VIDEO_TAG)(state),
44+
disableReactions:
45+
makeSelectTagInClaimOrChannelForUri(uri, DISABLE_REACTIONS_ALL_TAG)(state) ||
46+
makeSelectTagInClaimOrChannelForUri(uri, DISABLE_REACTIONS_VIDEO_TAG)(state),
3947
isUnlisted: selectIsUriUnlisted(state, uri),
4048
webShareable: true,
4149
collectionId: props.collectionId,

ui/component/shortsActions/view.jsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type Props = {
3131
isLivestreamClaim?: boolean,
3232
scheduledState: ClaimScheduledState,
3333
disableSlimes: boolean,
34+
disableReactions: boolean,
3435
doFetchReactions: (claimId: ?string) => void,
3536
doReactionLike: (uri: string) => void,
3637
doReactionDislike: (uri: string) => void,
@@ -61,6 +62,7 @@ const ShortsActions = React.memo<Props>(
6162
isLivestreamClaim,
6263
scheduledState,
6364
disableSlimes,
65+
disableReactions,
6466
doFetchReactions,
6567
doReactionLike,
6668
doReactionDislike,
@@ -177,11 +179,12 @@ const ShortsActions = React.memo<Props>(
177179
disabled={isAtEnd || !hasPlaylist}
178180
/>
179181
<div
180-
className="shorts-page__ratings"
182+
className={classnames('shorts-page__ratings', { 'shorts-page__ratings--no-slime': disableSlimes })}
181183
style={{
184+
...(disableReactions ? { visibility: 'hidden', pointerEvents: 'none' } : {}),
182185
'--ratings-gradient': (() => {
183186
if (!Number.isInteger(likeCount) || !Number.isInteger(dislikeCount)) return 'var(--color-border)';
184-
const total = likeCount + dislikeCount;
187+
const total = likeCount + (disableSlimes ? 0 : dislikeCount);
185188
if (total === 0) return 'var(--color-border)';
186189
const likePercent = (likeCount / total) * 100;
187190
if (likePercent === 100) return 'var(--color-fire)';
@@ -241,7 +244,7 @@ const ShortsActions = React.memo<Props>(
241244
/>
242245
)}
243246
</div>
244-
<div className="slime-and-count">
247+
<div className="slime-and-count" style={disableSlimes ? { visibility: 'hidden' } : undefined}>
245248
<Button
246249
requiresAuth
247250
authSrc={'filereaction_dislike'}

ui/component/videoRenderFloating/internal/floatingReactions/index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
import { connect } from 'react-redux';
22
import { selectMyReactionForUri } from 'redux/selectors/reactions';
33
import { doFetchReactions, doReactionLike, doReactionDislike } from 'redux/actions/reactions';
4+
import { makeSelectTagInClaimOrChannelForUri } from 'redux/selectors/claims';
5+
import {
6+
DISABLE_SLIMES_VIDEO_TAG,
7+
DISABLE_SLIMES_ALL_TAG,
8+
DISABLE_REACTIONS_ALL_TAG,
9+
DISABLE_REACTIONS_VIDEO_TAG,
10+
} from 'constants/tags';
411
import FloatingReactions from './view';
512

613
const select = (state, props) => ({
714
myReaction: selectMyReactionForUri(state, props.uri),
15+
disableSlimes:
16+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_SLIMES_ALL_TAG)(state) ||
17+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_SLIMES_VIDEO_TAG)(state),
18+
disableReactions:
19+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_REACTIONS_ALL_TAG)(state) ||
20+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_REACTIONS_VIDEO_TAG)(state),
821
});
922

1023
const perform = {

ui/component/videoRenderFloating/internal/floatingReactions/view.jsx

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ type Props = {
99
uri: string,
1010
claimId: ?string,
1111
myReaction: ?string,
12+
disableSlimes: boolean,
13+
disableReactions: boolean,
1214
doFetchReactions: (claimId: string) => void,
1315
doReactionLike: (uri: string) => void,
1416
doReactionDislike: (uri: string) => void,
@@ -18,6 +20,8 @@ const FloatingReactions = ({
1820
uri,
1921
claimId,
2022
myReaction,
23+
disableSlimes,
24+
disableReactions,
2125
doFetchReactions,
2226
doReactionLike,
2327
doReactionDislike,
@@ -40,6 +44,8 @@ const FloatingReactions = ({
4044
const isFireActive = effectiveReaction === REACTION_TYPES.LIKE;
4145
const isSlimeActive = effectiveReaction === REACTION_TYPES.DISLIKE;
4246

47+
if (disableReactions) return null;
48+
4349
return (
4450
<div className="floating-player__reactions">
4551
<div className="floating-player__reaction">
@@ -80,39 +86,41 @@ const FloatingReactions = ({
8086
/>
8187
</div>
8288

83-
<div className="floating-player__reaction">
84-
<Button
85-
onClick={() => {
86-
setOptimisticReaction(isSlimeActive ? null : REACTION_TYPES.DISLIKE);
87-
if (!isSlimeActive) {
88-
setSlimeButtonGlow(false);
89-
clearTimeout(slimeButtonGlowTimeout.current);
90-
requestAnimationFrame(() => {
91-
setSlimeButtonGlow(true);
92-
slimeButtonGlowTimeout.current = setTimeout(() => setSlimeButtonGlow(false), 3000);
93-
});
89+
{!disableSlimes && (
90+
<div className="floating-player__reaction">
91+
<Button
92+
onClick={() => {
93+
setOptimisticReaction(isSlimeActive ? null : REACTION_TYPES.DISLIKE);
94+
if (!isSlimeActive) {
95+
setSlimeButtonGlow(false);
96+
clearTimeout(slimeButtonGlowTimeout.current);
97+
requestAnimationFrame(() => {
98+
setSlimeButtonGlow(true);
99+
slimeButtonGlowTimeout.current = setTimeout(() => setSlimeButtonGlow(false), 3000);
100+
});
101+
}
102+
doReactionDislike(uri);
103+
}}
104+
icon={isSlimeActive ? ICONS.SLIME_ACTIVE : ICONS.SLIME}
105+
iconSize={14}
106+
requiresAuth
107+
authSrc="filereaction_dislike"
108+
className={classnames('button--file-action button-dislike', {
109+
'button--slime': isSlimeActive,
110+
'button--slime-glow-pulse': slimeButtonGlow,
111+
})}
112+
label={
113+
isSlimeActive ? (
114+
<>
115+
<div className="button__slime-stain" />
116+
<div className="button__slime-drop1" />
117+
<div className="button__slime-drop2" />
118+
</>
119+
) : null
94120
}
95-
doReactionDislike(uri);
96-
}}
97-
icon={isSlimeActive ? ICONS.SLIME_ACTIVE : ICONS.SLIME}
98-
iconSize={14}
99-
requiresAuth
100-
authSrc="filereaction_dislike"
101-
className={classnames('button--file-action button-dislike', {
102-
'button--slime': isSlimeActive,
103-
'button--slime-glow-pulse': slimeButtonGlow,
104-
})}
105-
label={
106-
isSlimeActive ? (
107-
<>
108-
<div className="button__slime-stain" />
109-
<div className="button__slime-drop1" />
110-
<div className="button__slime-drop2" />
111-
</>
112-
) : null
113-
}
114-
/>
115-
</div>
121+
/>
122+
</div>
123+
)}
116124
</div>
117125
);
118126
};

ui/component/videoRenderFloating/internal/floatingShortsActions/index.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@ import { toggleAutoplayNextShort } from 'redux/actions/settings';
66
import { doSetShortsSidePanel } from 'redux/actions/shorts';
77
import { selectIsSubscribedForUri } from 'redux/selectors/subscriptions';
88
import { doChannelSubscribe, doChannelUnsubscribe } from 'redux/actions/subscriptions';
9-
import { selectPermanentUrlForUri } from 'redux/selectors/claims';
9+
import { selectPermanentUrlForUri, makeSelectTagInClaimOrChannelForUri } from 'redux/selectors/claims';
1010
import * as SETTINGS from 'constants/settings';
11+
import {
12+
DISABLE_SLIMES_VIDEO_TAG,
13+
DISABLE_SLIMES_ALL_TAG,
14+
DISABLE_REACTIONS_ALL_TAG,
15+
DISABLE_REACTIONS_VIDEO_TAG,
16+
} from 'constants/tags';
1117
import FloatingShortsActions from './view';
1218

1319
const select = (state, props) => ({
@@ -17,6 +23,12 @@ const select = (state, props) => ({
1723
autoPlayNextShort: selectClientSetting(state, SETTINGS.AUTOPLAY_NEXT_SHORTS),
1824
isSubscribed: props.channelUrl ? selectIsSubscribedForUri(state, props.channelUrl) : false,
1925
channelPermanentUrl: props.channelUrl ? selectPermanentUrlForUri(state, props.channelUrl) : undefined,
26+
disableSlimes:
27+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_SLIMES_ALL_TAG)(state) ||
28+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_SLIMES_VIDEO_TAG)(state),
29+
disableReactions:
30+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_REACTIONS_ALL_TAG)(state) ||
31+
makeSelectTagInClaimOrChannelForUri(props.uri, DISABLE_REACTIONS_VIDEO_TAG)(state),
2032
});
2133

2234
const perform = {

ui/component/videoRenderFloating/internal/floatingShortsActions/view.jsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ type Props = {
3030
doChannelUnsubscribe: (sub: {}) => void,
3131
onFireGlow?: () => void,
3232
onSlimeEffect?: () => void,
33+
disableSlimes: boolean,
34+
disableReactions: boolean,
3335
};
3436

3537
const FloatingShortsActions = ({
@@ -54,6 +56,8 @@ const FloatingShortsActions = ({
5456
doChannelUnsubscribe,
5557
onFireGlow,
5658
onSlimeEffect,
59+
disableSlimes,
60+
disableReactions,
5761
}: Props) => {
5862
const [optimisticReaction, setOptimisticReaction] = React.useState(undefined);
5963
const [fireButtonGlow, setFireButtonGlow] = React.useState(false);
@@ -93,7 +97,10 @@ const FloatingShortsActions = ({
9397
</div>
9498

9599
<div className="content__shorts-floating-actions">
96-
<div className="shorts-floating-action">
100+
<div
101+
className="shorts-floating-action"
102+
style={disableReactions ? { visibility: 'hidden', pointerEvents: 'none' } : undefined}
103+
>
97104
<Button
98105
onClick={() => {
99106
setOptimisticReaction(isFireActive ? null : REACTION_TYPES.LIKE);
@@ -135,7 +142,10 @@ const FloatingShortsActions = ({
135142
)}
136143
</div>
137144

138-
<div className="shorts-floating-action">
145+
<div
146+
className="shorts-floating-action"
147+
style={disableReactions || disableSlimes ? { visibility: 'hidden', pointerEvents: 'none' } : undefined}
148+
>
139149
<Button
140150
onClick={() => {
141151
setOptimisticReaction(isSlimeActive ? null : REACTION_TYPES.DISLIKE);

ui/scss/component/_media.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,12 @@
267267
pointer-events: none;
268268
}
269269

270+
.ratio-wrapper--no-slime {
271+
max-width: unset;
272+
min-width: unset;
273+
width: auto;
274+
}
275+
270276
.icon--DollarSign {
271277
stroke-width: 1.5;
272278
transform: scale(0.8);

ui/scss/component/_shorts.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,13 @@ body:has(.main--shorts-page):not(:has(.navigation__overlay--active)) {
710710
mask-composite: exclude;
711711
pointer-events: none;
712712
}
713+
714+
&--no-slime {
715+
&::before {
716+
bottom: auto;
717+
height: calc(50% + 6px);
718+
}
719+
}
713720
}
714721

715722
.shorts-floating-action__avatar.channel-thumbnail {

0 commit comments

Comments
 (0)