Middle Header: Fix missing pinned message when playing audio (#1534)

This commit is contained in:
Alexander Zinchuk 2021-11-05 21:57:47 +03:00
parent 67dca172db
commit dedefe87ca
3 changed files with 99 additions and 56 deletions

View File

@ -20,10 +20,6 @@
--color-white: var(--color-background-own);
}
.MiddleHeader & + .HeaderActions {
margin-left: 1.5rem;
}
.player-button {
&.smaller {
width: 3rem;
@ -76,7 +72,7 @@
&:hover .volume-slider-spacer, .volume-slider-spacer:hover {
visibility: visible;
}
}
.volume-slider {
opacity: 0;
@ -101,8 +97,8 @@
}
}
&:hover .volume-slider,
.volume-slider:hover,
&:hover .volume-slider,
.volume-slider:hover,
.volume-slider-spacer:hover + .volume-slider {
opacity: 1;
visibility: visible;

View File

@ -8,7 +8,7 @@
left: 0;
right: 0;
height: 2.875rem;
box-shadow: 0 2px 2px var(--color-light-shadow);
box-shadow: 0 .125rem .125rem var(--color-light-shadow);
display: flex;
flex-direction: row-reverse;
@ -39,10 +39,9 @@
}
.AudioPlayer {
height: 3.25rem;
flex-direction: row;
padding: 0.375rem 0.5rem;
margin-top: 0;
padding: 0.25rem 0.5rem;
&-content {
padding: 0 0.5rem;
@ -50,7 +49,7 @@
}
> .Button {
margin: 0;
margin: -.0625rem 0 0;
}
> .player-close {
@ -72,6 +71,10 @@
max-width: none;
}
}
.HeaderPinnedMessage-wrapper.full-width {
display: none;
}
}
.MiddleHeader {
@ -150,6 +153,10 @@
overflow: hidden;
}
body.animation-level-0 & .HeaderPinnedMessage-wrapper {
transition: none !important;
}
.header-tools {
display: flex;
align-items: center;
@ -159,7 +166,6 @@
body.animation-level-0 & {
&,
.HeaderPinnedMessage-wrapper,
.AudioPlayer,
.HeaderActions {
transition: none !important;
@ -193,39 +199,32 @@
}
@media (min-width: 1276px) and (max-width: 1439px) {
&:not(.tools-stacked) .header-tools {
.HeaderPinnedMessage-wrapper,
.AudioPlayer {
opacity: 1;
&:not(.tools-stacked) .HeaderPinnedMessage-wrapper,
&:not(.tools-stacked) .AudioPlayer {
opacity: 1;
#Main.right-column-open & {
opacity: 0;
}
#Main.right-column-open & {
opacity: 0;
}
}
}
&.tools-stacked .header-tools {
&.tools-stacked .AudioPlayer {
@include mobile-header-styles();
@media (min-width: 1150px) {
#Main.right-column-open & {
.HeaderPinnedMessage-wrapper,
.AudioPlayer {
padding-right: calc(0.5rem + var(--right-column-width));
}
padding-right: calc(0.5rem + var(--right-column-width));
}
}
}
&.tools-stacked.animated .header-tools {
.HeaderPinnedMessage-wrapper,
.AudioPlayer {
animation: fade-in var(--layer-transition) forwards;
&.tools-stacked.animated .HeaderPinnedMessage-wrapper,
&.tools-stacked.animated .AudioPlayer {
animation: fade-in var(--layer-transition) forwards;
body.animation-level-0 & {
animation: none;
}
body.animation-level-0 & {
animation: none;
}
}
@ -329,6 +328,7 @@
margin-left: auto;
cursor: default;
flex-direction: row-reverse;
background: var(--color-background);
body.animation-level-1 & {
.ripple-container {
@ -336,6 +336,16 @@
}
}
@media (min-width: 1276px) {
transform: translate3d(0, 0, 0);
transition: transform var(--layer-transition);
#Main.right-column-open & {
transform: translate3d(calc(var(--right-column-width) * -1), 0, 0);
}
}
.HeaderPinnedMessage {
min-width: 16rem;
}
@ -343,6 +353,48 @@
> .Button {
flex-shrink: 0;
}
&.full-width {
position: absolute;
left: 0;
right: 0;
top: 100%;
background: var(--color-background);
padding: .25rem .8125rem .25rem 1rem;
box-shadow: 0 .125rem .125rem var(--color-light-shadow);
transform: translate3d(0, 0, 0);
transition: transform var(--layer-transition);
&::before {
content: "";
display: block;
position: absolute;
top: -.1875rem;
left: 0;
right: 0;
height: .125rem;
box-shadow: 0 .125rem .125rem var(--color-light-shadow);
}
.HeaderPinnedMessage {
margin-top: 0;
margin-bottom: 0;
flex: 1;
.message-text {
max-width: none;
}
}
@media (min-width: 1276px) {
transform: translate3d(0, 0, 0);
transition: transform var(--layer-transition);
#Main.right-column-open & {
padding-left: calc(var(--right-column-width) + 1rem);
}
}
}
}
.HeaderPinnedMessage {
@ -483,13 +535,6 @@
@media (max-width: 600px) {
@include mobile-header-styles();
}
@media (min-width: 925px) and (max-width: 1149.9px) {
.HeaderPinnedMessage-wrapper,
.AudioPlayer {
position: absolute;
}
}
}
@keyframes fade-in {

View File

@ -261,7 +261,7 @@ const MiddleHeader: FC<OwnProps & StateProps & DispatchProps> = ({
const {
shouldRender: shouldRenderPinnedMessage,
transitionClassNames: pinnedMessageClassNames,
} = useShowTransition(pinnedMessage && !shouldRenderAudioPlayer);
} = useShowTransition(Boolean(pinnedMessage));
const renderingPinnedMessage = useCurrentOrPrev(pinnedMessage, true);
const renderingPinnedMessagesCount = useCurrentOrPrev(pinnedMessagesCount, true);
@ -380,7 +380,7 @@ const MiddleHeader: FC<OwnProps & StateProps & DispatchProps> = ({
size="smaller"
color="translucent"
onClick={handleBackClick}
ariaLabel={asClose ? 'Close' : 'Back'}
ariaLabel={lang(asClose ? 'Close' : 'Back')}
>
<div className={buildClassName('animated-close-icon', !asClose && 'state-back')} />
</Button>
@ -393,6 +393,8 @@ const MiddleHeader: FC<OwnProps & StateProps & DispatchProps> = ({
);
}
const isAudioPlayerRendered = Boolean(shouldRenderAudioPlayer && renderingAudioMessage);
return (
<div className="MiddleHeader" ref={componentRef}>
<Transition
@ -402,23 +404,23 @@ const MiddleHeader: FC<OwnProps & StateProps & DispatchProps> = ({
{renderInfo}
</Transition>
{shouldRenderPinnedMessage && renderingPinnedMessage && (
<HeaderPinnedMessage
key={chatId}
message={renderingPinnedMessage}
count={renderingPinnedMessagesCount || 0}
index={pinnedMessageIndex}
customTitle={renderingPinnedMessageTitle}
className={buildClassName(pinnedMessageClassNames, isAudioPlayerRendered && 'full-width')}
onUnpinMessage={renderingCanUnpin ? handleUnpinMessage : undefined}
onClick={handlePinnedMessageClick}
onAllPinnedClick={handleAllPinnedClick}
/>
)}
<div className="header-tools">
{shouldRenderPinnedMessage && renderingPinnedMessage && !shouldRenderAudioPlayer && (
<HeaderPinnedMessage
key={chatId}
message={renderingPinnedMessage}
count={renderingPinnedMessagesCount || 0}
index={pinnedMessageIndex}
customTitle={renderingPinnedMessageTitle}
className={pinnedMessageClassNames}
onUnpinMessage={renderingCanUnpin ? handleUnpinMessage : undefined}
onClick={handlePinnedMessageClick}
onAllPinnedClick={handleAllPinnedClick}
/>
)}
{shouldRenderAudioPlayer && renderingAudioMessage && (
{isAudioPlayerRendered && (
<AudioPlayer
key={getMessageKey(renderingAudioMessage)}
key={getMessageKey(renderingAudioMessage!)}
message={renderingAudioMessage!}
className={audioPlayerClassNames}
/>