Update Space Panel scrollable region (#7245)

pull/21833/head
Michael Telatynski 2021-12-01 10:51:54 +00:00 committed by GitHub
parent 4a6d46b76a
commit 82c125c170
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 13 deletions

View File

@ -35,11 +35,6 @@ $activeBorderColor: $primary-content;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.mx_SpacePanel_spaceTreeWrapper {
flex: 1;
padding: 12px 8px 16px 0;
}
.mx_SpacePanel_toggleCollapse { .mx_SpacePanel_toggleCollapse {
margin: 0 auto; margin: 0 auto;
position: relative; position: relative;
@ -336,6 +331,9 @@ $activeBorderColor: $primary-content;
/* root space buttons are bigger and not indented */ /* root space buttons are bigger and not indented */
& > .mx_AutoHideScrollbar { & > .mx_AutoHideScrollbar {
flex: 1;
padding: 0 8px 16px 0;
& > .mx_SpaceButton { & > .mx_SpaceButton {
height: $topLevelHeight; height: $topLevelHeight;
@ -347,6 +345,18 @@ $activeBorderColor: $primary-content;
& > ul { & > ul {
padding-left: 0; padding-left: 0;
} }
&.mx_IndicatorScrollbar_topOverflow {
mask-image: linear-gradient(180deg, transparent, black 5%);
}
&.mx_IndicatorScrollbar_bottomOverflow {
mask-image: linear-gradient(180deg, black, black 95%, transparent);
}
&.mx_IndicatorScrollbar_topOverflow.mx_IndicatorScrollbar_bottomOverflow {
mask-image: linear-gradient(180deg, transparent, black 5%, black 95%, transparent);
}
} }
} }

View File

@ -19,10 +19,11 @@ limitations under the License.
border-bottom: 1px solid $quinary-content; border-bottom: 1px solid $quinary-content;
margin-left: 18px; margin-left: 18px;
margin-bottom: 4px; margin-bottom: 4px;
margin-top: 12px;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
width: max-content; width: calc(100% - 20px);
.mx_UserMenu_userAvatar { .mx_UserMenu_userAvatar {
position: relative; position: relative;

View File

@ -14,11 +14,11 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import React, { createRef } from "react"; import React, { ComponentProps, createRef } from "react";
import AutoHideScrollbar from "./AutoHideScrollbar"; import AutoHideScrollbar from "./AutoHideScrollbar";
import { replaceableComponent } from "../../utils/replaceableComponent"; import { replaceableComponent } from "../../utils/replaceableComponent";
interface IProps { interface IProps extends Omit<ComponentProps<typeof AutoHideScrollbar>, "onWheel"> {
// If true, the scrollbar will append mx_IndicatorScrollbar_leftOverflowIndicator // If true, the scrollbar will append mx_IndicatorScrollbar_leftOverflowIndicator
// and mx_IndicatorScrollbar_rightOverflowIndicator elements to the list for positioning // and mx_IndicatorScrollbar_rightOverflowIndicator elements to the list for positioning
// by the parent element. // by the parent element.
@ -55,6 +55,7 @@ export default class IndicatorScrollbar extends React.Component<IProps, IState>
} }
private collectScroller = (scroller: HTMLDivElement): void => { private collectScroller = (scroller: HTMLDivElement): void => {
this.props.wrappedRef?.(scroller);
if (scroller && !this.scrollElement) { if (scroller && !this.scrollElement) {
this.scrollElement = scroller; this.scrollElement = scroller;
// Using the passive option to not block the main thread // Using the passive option to not block the main thread
@ -185,10 +186,10 @@ export default class IndicatorScrollbar extends React.Component<IProps, IState>
? <div className="mx_IndicatorScrollbar_rightOverflowIndicator" style={rightIndicatorStyle} /> : null; ? <div className="mx_IndicatorScrollbar_rightOverflowIndicator" style={rightIndicatorStyle} /> : null;
return (<AutoHideScrollbar return (<AutoHideScrollbar
{...otherProps}
ref={this.autoHideScrollbar} ref={this.autoHideScrollbar}
wrappedRef={this.collectScroller} wrappedRef={this.collectScroller}
onWheel={this.onMouseWheel} onWheel={this.onMouseWheel}
{...otherProps}
> >
{ leftOverflowIndicator } { leftOverflowIndicator }
{ children } { children }

View File

@ -44,7 +44,6 @@ import {
UPDATE_SELECTED_SPACE, UPDATE_SELECTED_SPACE,
UPDATE_TOP_LEVEL_SPACES, UPDATE_TOP_LEVEL_SPACES,
} from "../../../stores/spaces"; } from "../../../stores/spaces";
import AutoHideScrollbar from "../../structures/AutoHideScrollbar";
import { RovingTabIndexProvider } from "../../../accessibility/RovingTabIndex"; import { RovingTabIndexProvider } from "../../../accessibility/RovingTabIndex";
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore"; import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
import SpaceContextMenu from "../context_menus/SpaceContextMenu"; import SpaceContextMenu from "../context_menus/SpaceContextMenu";
@ -58,6 +57,7 @@ import UIStore from "../../../stores/UIStore";
import QuickSettingsButton from "./QuickSettingsButton"; import QuickSettingsButton from "./QuickSettingsButton";
import { useSettingValue } from "../../../hooks/useSettings"; import { useSettingValue } from "../../../hooks/useSettings";
import UserMenu from "../../structures/UserMenu"; import UserMenu from "../../structures/UserMenu";
import IndicatorScrollbar from "../../structures/IndicatorScrollbar";
const useSpaces = (): [Room[], MetaSpace[], Room[], SpaceKey] => { const useSpaces = (): [Room[], MetaSpace[], Room[], SpaceKey] => {
const invites = useEventEmitterState<Room[]>(SpaceStore.instance, UPDATE_INVITED_SPACES, () => { const invites = useEventEmitterState<Room[]>(SpaceStore.instance, UPDATE_INVITED_SPACES, () => {
@ -252,7 +252,6 @@ const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(({ children, isPanelCo
}); });
return <div className="mx_SpaceTreeLevel"> return <div className="mx_SpaceTreeLevel">
<UserMenu isPanelCollapsed={isPanelCollapsed} />
{ metaSpacesSection } { metaSpacesSection }
{ invites.map(s => ( { invites.map(s => (
<SpaceItem <SpaceItem
@ -308,9 +307,10 @@ const SpacePanel = () => {
aria-label={_t("Spaces")} aria-label={_t("Spaces")}
ref={ref} ref={ref}
> >
<UserMenu isPanelCollapsed={isPanelCollapsed} />
<Droppable droppableId="top-level-spaces"> <Droppable droppableId="top-level-spaces">
{ (provided, snapshot) => ( { (provided, snapshot) => (
<AutoHideScrollbar <IndicatorScrollbar
{...provided.droppableProps} {...provided.droppableProps}
wrappedRef={provided.innerRef} wrappedRef={provided.innerRef}
className="mx_SpacePanel_spaceTreeWrapper" className="mx_SpacePanel_spaceTreeWrapper"
@ -324,7 +324,7 @@ const SpacePanel = () => {
> >
{ provided.placeholder } { provided.placeholder }
</InnerSpacePanel> </InnerSpacePanel>
</AutoHideScrollbar> </IndicatorScrollbar>
) } ) }
</Droppable> </Droppable>
<AccessibleTooltipButton <AccessibleTooltipButton