MM-48412 - backdrop issue when rhs expanded; ramdom fixes to channels tour (#22700)

* MM-48412 - backdrop issue when rhs expanded; ramdom fixes to channels tour

* remove no longer needed backdrop removal
Этот коммит содержится в:
Pablo Andrés Vélez Vidal
2023-04-03 15:32:05 +02:00
коммит произвёл GitHub
родитель 01cb20f5fd
Коммит c3b32de46e
11 изменённых файлов: 50 добавлений и 19 удалений

Просмотреть файл

@@ -33,6 +33,7 @@ export type ChannelsTourTipProps = {
hideBackdrop?: boolean; hideBackdrop?: boolean;
tippyBlueStyle?: boolean; tippyBlueStyle?: boolean;
showOptOut?: boolean; showOptOut?: boolean;
interactivePunchOut?: boolean;
} }
export const ChannelsTourTip = ({ export const ChannelsTourTip = ({
@@ -50,6 +51,7 @@ export const ChannelsTourTip = ({
hideBackdrop = false, hideBackdrop = false,
tippyBlueStyle = false, tippyBlueStyle = false,
showOptOut = true, showOptOut = true,
interactivePunchOut = false,
}: ChannelsTourTipProps) => { }: ChannelsTourTipProps) => {
const { const {
show, show,
@@ -131,6 +133,7 @@ export const ChannelsTourTip = ({
hideBackdrop={hideBackdrop} hideBackdrop={hideBackdrop}
tippyBlueStyle={tippyBlueStyle} tippyBlueStyle={tippyBlueStyle}
showOptOut={showOptOut} showOptOut={showOptOut}
interactivePunchOut={interactivePunchOut}
/> />
); );
}; };

Просмотреть файл

@@ -9,7 +9,7 @@ import {Constants, Preferences} from 'utils/constants';
import {getCurrentUserId} from 'mattermost-redux/selectors/entities/common'; import {getCurrentUserId} from 'mattermost-redux/selectors/entities/common';
import {savePreferences} from 'mattermost-redux/actions/preferences'; import {savePreferences} from 'mattermost-redux/actions/preferences';
import {TourTip, useMeasurePunchouts} from '@mattermost/components'; import {TourTip, useFollowElementDimensions, useMeasurePunchouts} from '@mattermost/components';
const translate = {x: 2, y: 25}; const translate = {x: 2, y: 25};
@@ -17,6 +17,9 @@ const CRTThreadsPaneTutorialTip = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const {formatMessage} = useIntl(); const {formatMessage} = useIntl();
const currentUserId = useSelector(getCurrentUserId); const currentUserId = useSelector(getCurrentUserId);
const dimensions = useFollowElementDimensions('sidebar-right');
const title = ( const title = (
<FormattedMessage <FormattedMessage
id='tutorial_threads.threads_pane.title' id='tutorial_threads.threads_pane.title'
@@ -60,7 +63,7 @@ const CRTThreadsPaneTutorialTip = () => {
dispatch(savePreferences(currentUserId, preferences)); dispatch(savePreferences(currentUserId, preferences));
}; };
const overlayPunchOut = useMeasurePunchouts(['rhsContainer'], []); const overlayPunchOut = useMeasurePunchouts(['rhsContainer'], [dimensions?.width]);
return ( return (
<TourTip <TourTip

Просмотреть файл

@@ -8,7 +8,7 @@ import {useMeasurePunchouts} from '@mattermost/components';
import OnboardingTourTip from './onboarding_tour_tip'; import OnboardingTourTip from './onboarding_tour_tip';
const translate = {x: 0, y: 18}; const translate = {x: 0, y: 70};
export const CreateAndJoinChannelsTour = () => { export const CreateAndJoinChannelsTour = () => {
const title = ( const title = (
@@ -26,7 +26,7 @@ export const CreateAndJoinChannelsTour = () => {
</p> </p>
); );
const overlayPunchOut = useMeasurePunchouts(['showMoreChannels', 'invitePeople'], [], {y: -8, height: 16, x: 0, width: 0}); const overlayPunchOut = useMeasurePunchouts(['showMoreChannels', 'showNewChannel'], [], {y: -8, height: 16, x: 0, width: 0});
return ( return (
<OnboardingTourTip <OnboardingTourTip

Просмотреть файл

@@ -26,7 +26,7 @@ export const InvitePeopleTour = () => {
</p> </p>
); );
const overlayPunchOut = useMeasurePunchouts(['showMoreChannels', 'invitePeople'], [], {y: -8, height: 16, x: 0, width: 0}); const overlayPunchOut = useMeasurePunchouts(['invitePeople'], [], {y: -8, height: 16, x: 0, width: 0});
return ( return (
<OnboardingTourTip <OnboardingTourTip

Просмотреть файл

@@ -4,16 +4,16 @@
import React from 'react'; import React from 'react';
import {FormattedMessage, useIntl} from 'react-intl'; import {FormattedMessage, useIntl} from 'react-intl';
import {useMeasurePunchouts} from '@mattermost/components'; import {useFollowElementDimensions, useMeasurePunchouts} from '@mattermost/components';
import OnboardingWorkTemplateTourTip from './worktemplate_explore_tour_tip'; import OnboardingWorkTemplateTourTip from './worktemplate_explore_tour_tip';
import {useShowTourTip} from './useShowTourTip'; import {useShowTourTip} from './useShowTourTip';
export const BoardsTourTip = (): JSX.Element | null => { export const BoardsTourTip = (): JSX.Element | null => {
const {formatMessage} = useIntl(); const {formatMessage} = useIntl();
const {playbooksCount, boardsCount, showBoardsTour} = useShowTourTip(); const {playbooksCount, boardsCount, showBoardsTour} = useShowTourTip();
const overlayPunchOut = useMeasurePunchouts(['sidebar-right'], []); const dimensions = useFollowElementDimensions('sidebar-right');
const overlayPunchOut = useMeasurePunchouts(['sidebar-right'], [dimensions?.width]);
if (!showBoardsTour) { if (!showBoardsTour) {
return null; return null;
@@ -60,6 +60,7 @@ export const BoardsTourTip = (): JSX.Element | null => {
singleTip={playbooksCount === 0} singleTip={playbooksCount === 0}
placement='left-start' placement='left-start'
showOptOut={false} showOptOut={false}
interactivePunchOut={true}
/> />
); );
}; };

Просмотреть файл

@@ -4,7 +4,7 @@
import React from 'react'; import React from 'react';
import {FormattedMessage, useIntl} from 'react-intl'; import {FormattedMessage, useIntl} from 'react-intl';
import {useMeasurePunchouts} from '@mattermost/components'; import {useFollowElementDimensions, useMeasurePunchouts} from '@mattermost/components';
import {useShowTourTip} from './useShowTourTip'; import {useShowTourTip} from './useShowTourTip';
import OnboardingWorkTemplateTourTip from './worktemplate_explore_tour_tip'; import OnboardingWorkTemplateTourTip from './worktemplate_explore_tour_tip';
@@ -12,7 +12,8 @@ import OnboardingWorkTemplateTourTip from './worktemplate_explore_tour_tip';
export const PlaybooksTourTip = (): JSX.Element | null => { export const PlaybooksTourTip = (): JSX.Element | null => {
const {formatMessage} = useIntl(); const {formatMessage} = useIntl();
const {playbooksCount, boardsCount, showPlaybooksTour} = useShowTourTip(); const {playbooksCount, boardsCount, showPlaybooksTour} = useShowTourTip();
const overlayPunchOut = useMeasurePunchouts(['sidebar-right'], []); const dimensions = useFollowElementDimensions('sidebar-right');
const overlayPunchOut = useMeasurePunchouts(['sidebar-right'], [dimensions?.width]);
if (!showPlaybooksTour) { if (!showPlaybooksTour) {
return null; return null;
@@ -59,6 +60,7 @@ export const PlaybooksTourTip = (): JSX.Element | null => {
overlayPunchOut={overlayPunchOut} overlayPunchOut={overlayPunchOut}
placement='left-start' placement='left-start'
showOptOut={false} showOptOut={false}
interactivePunchOut={true}
/> />
); );
}; };

Просмотреть файл

@@ -0,0 +1,27 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {useEffect, useState} from 'react';
export const useFollowElementDimensions = (elementId: string): DOMRectReadOnly => {
const [dimensions, setDimensions] = useState(new DOMRect());
useEffect(() => {
const element = document.getElementById(elementId);
if (!element) {
return undefined;
}
const observer = new ResizeObserver((entries) => {
if (entries.length > 0) {
setDimensions(entries[0].contentRect);
}
});
observer.observe(element);
return () => {
observer.unobserve(element);
};
}, [elementId]);
return dimensions;
};

Просмотреть файл

@@ -16,3 +16,4 @@ export {FocusTrap} from './focus_trap';
// hooks // hooks
export * from './common/hooks/useMeasurePunchouts'; export * from './common/hooks/useMeasurePunchouts';
export {useElementAvailable} from './common/hooks/useElementAvailable'; export {useElementAvailable} from './common/hooks/useElementAvailable';
export {useFollowElementDimensions} from './common/hooks/useFollowElementDimensions';

Просмотреть файл

@@ -363,7 +363,7 @@
&__backdrop { &__backdrop {
position: absolute; position: absolute;
z-index: 999; z-index: 100;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;

Просмотреть файл

@@ -90,15 +90,10 @@ export const TourTip = ({
}: Props) => { }: Props) => {
const FIRST_STEP_INDEX = 0; const FIRST_STEP_INDEX = 0;
const triggerRef = useRef(null); const triggerRef = useRef(null);
const [useBackdrop, setUseBackdrop] = useState(!hideBackdrop);
const onJump = (event: React.MouseEvent, jumpToStep: number) => { const onJump = (event: React.MouseEvent, jumpToStep: number) => {
handleJump?.(event, jumpToStep); handleJump?.(event, jumpToStep);
}; };
useClickOutsideRef(triggerRef, () => {
setUseBackdrop(false);
});
// This needs to be changed if root-portal node isn't available to maybe body // This needs to be changed if root-portal node isn't available to maybe body
const rootPortal = document.getElementById('root-portal'); const rootPortal = document.getElementById('root-portal');
@@ -214,7 +209,7 @@ export const TourTip = ({
> >
<PulsatingDot/> <PulsatingDot/>
</div> </div>
{useBackdrop && <TourTipBackdrop <TourTipBackdrop
show={show} show={show}
onDismiss={handleDismiss} onDismiss={handleDismiss}
onPunchOut={handlePunchOut} onPunchOut={handlePunchOut}
@@ -222,7 +217,7 @@ export const TourTip = ({
overlayPunchOut={overlayPunchOut} overlayPunchOut={overlayPunchOut}
appendTo={rootPortal!} appendTo={rootPortal!}
transparent={hideBackdrop} transparent={hideBackdrop}
/>} />
{show && ( {show && (
<Tippy <Tippy
showOnCreate={show} showOnCreate={show}

Просмотреть файл

@@ -81,4 +81,3 @@ export const TourTipBackdrop = ({
</TourTipRootPortal> </TourTipRootPortal>
); );
}; };