Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 3ff4c68

Browse files
authored
Fix space panel edge gradient not applying on load (#7644)
1 parent 3eca71b commit 3ff4c68

File tree

2 files changed

+42
-30
lines changed

2 files changed

+42
-30
lines changed

src/components/structures/IndicatorScrollbar.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import React, { ComponentProps, createRef } from "react";
1818

1919
import AutoHideScrollbar from "./AutoHideScrollbar";
2020
import { replaceableComponent } from "../../utils/replaceableComponent";
21+
import UIStore, { UI_EVENTS } from "../../stores/UIStore";
2122

2223
interface IProps extends Omit<ComponentProps<typeof AutoHideScrollbar>, "onWheel"> {
2324
// If true, the scrollbar will append mx_IndicatorScrollbar_leftOverflowIndicator
@@ -35,8 +36,8 @@ interface IProps extends Omit<ComponentProps<typeof AutoHideScrollbar>, "onWheel
3536
}
3637

3738
interface IState {
38-
leftIndicatorOffset: number | string;
39-
rightIndicatorOffset: number | string;
39+
leftIndicatorOffset: string;
40+
rightIndicatorOffset: string;
4041
}
4142

4243
@replaceableComponent("structures.IndicatorScrollbar")
@@ -50,8 +51,8 @@ export default class IndicatorScrollbar extends React.Component<IProps, IState>
5051
super(props);
5152

5253
this.state = {
53-
leftIndicatorOffset: 0,
54-
rightIndicatorOffset: 0,
54+
leftIndicatorOffset: '0',
55+
rightIndicatorOffset: '0',
5556
};
5657
}
5758

@@ -79,6 +80,7 @@ export default class IndicatorScrollbar extends React.Component<IProps, IState>
7980

8081
public componentDidMount(): void {
8182
this.checkOverflow();
83+
UIStore.instance.on(UI_EVENTS.Resize, this.checkOverflow);
8284
}
8385

8486
private checkOverflow = (): void => {
@@ -122,9 +124,8 @@ export default class IndicatorScrollbar extends React.Component<IProps, IState>
122124
};
123125

124126
public componentWillUnmount(): void {
125-
if (this.scrollElement) {
126-
this.scrollElement.removeEventListener("scroll", this.checkOverflow);
127-
}
127+
this.scrollElement?.removeEventListener("scroll", this.checkOverflow);
128+
UIStore.instance.off(UI_EVENTS.Resize, this.checkOverflow);
128129
}
129130

130131
private onMouseWheel = (e: React.WheelEvent): void => {

src/components/views/spaces/SpacePanel.tsx

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ import React, {
1818
ComponentProps,
1919
Dispatch,
2020
ReactNode,
21+
RefCallback,
2122
SetStateAction,
2223
useCallback,
2324
useEffect,
2425
useLayoutEffect,
2526
useRef,
2627
useState,
2728
} from "react";
28-
import { DragDropContext, Draggable, Droppable } from "react-beautiful-dnd";
29+
import { DragDropContext, Draggable, Droppable, DroppableProvidedProps } from "react-beautiful-dnd";
2930
import classNames from "classnames";
3031
import { Room } from "matrix-js-sdk/src/models/room";
3132

@@ -87,12 +88,6 @@ const useSpaces = (): [Room[], MetaSpace[], Room[], SpaceKey] => {
8788
return [invites, metaSpaces, actualSpaces, activeSpace];
8889
};
8990

90-
interface IInnerSpacePanelProps {
91-
children?: ReactNode;
92-
isPanelCollapsed: boolean;
93-
setPanelCollapsed: Dispatch<SetStateAction<boolean>>;
94-
}
95-
9691
export const HomeButtonContextMenu = ({
9792
onFinished,
9893
hideHeader,
@@ -260,8 +255,23 @@ const metaSpaceComponentMap: Record<MetaSpace, typeof HomeButton> = {
260255
[MetaSpace.Orphans]: OrphansButton,
261256
};
262257

258+
interface IInnerSpacePanelProps extends DroppableProvidedProps {
259+
children?: ReactNode;
260+
isPanelCollapsed: boolean;
261+
setPanelCollapsed: Dispatch<SetStateAction<boolean>>;
262+
isDraggingOver: boolean;
263+
innerRef: RefCallback<HTMLElement>;
264+
}
265+
263266
// Optimisation based on https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/api/droppable.md#recommended-droppable--performance-optimisation
264-
const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(({ children, isPanelCollapsed, setPanelCollapsed }) => {
267+
const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(({
268+
children,
269+
isPanelCollapsed,
270+
setPanelCollapsed,
271+
isDraggingOver,
272+
innerRef,
273+
...props
274+
}) => {
265275
const [invites, metaSpaces, actualSpaces, activeSpace] = useSpaces();
266276
const activeSpaces = activeSpace ? [activeSpace] : [];
267277

@@ -270,7 +280,14 @@ const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(({ children, isPanelCo
270280
return <Component key={key} selected={activeSpace === key} isPanelCollapsed={isPanelCollapsed} />;
271281
});
272282

273-
return <div className="mx_SpaceTreeLevel">
283+
return <IndicatorScrollbar
284+
{...props}
285+
wrappedRef={innerRef}
286+
className="mx_SpaceTreeLevel"
287+
style={isDraggingOver ? {
288+
pointerEvents: "none",
289+
} : undefined}
290+
>
274291
{ metaSpacesSection }
275292
{ invites.map(s => (
276293
<SpaceItem
@@ -300,7 +317,7 @@ const InnerSpacePanel = React.memo<IInnerSpacePanelProps>(({ children, isPanelCo
300317
)) }
301318
{ children }
302319
<CreateSpaceButton isPanelCollapsed={isPanelCollapsed} setPanelCollapsed={setPanelCollapsed} />
303-
</div>;
320+
</IndicatorScrollbar>;
304321
});
305322

306323
const SpacePanel = () => {
@@ -352,21 +369,15 @@ const SpacePanel = () => {
352369
</UserMenu>
353370
<Droppable droppableId="top-level-spaces">
354371
{ (provided, snapshot) => (
355-
<IndicatorScrollbar
372+
<InnerSpacePanel
356373
{...provided.droppableProps}
357-
wrappedRef={provided.innerRef}
358-
className="mx_SpacePanel_spaceTreeWrapper"
359-
style={snapshot.isDraggingOver ? {
360-
pointerEvents: "none",
361-
} : undefined}
374+
isPanelCollapsed={isPanelCollapsed}
375+
setPanelCollapsed={setPanelCollapsed}
376+
isDraggingOver={snapshot.isDraggingOver}
377+
innerRef={provided.innerRef}
362378
>
363-
<InnerSpacePanel
364-
isPanelCollapsed={isPanelCollapsed}
365-
setPanelCollapsed={setPanelCollapsed}
366-
>
367-
{ provided.placeholder }
368-
</InnerSpacePanel>
369-
</IndicatorScrollbar>
379+
{ provided.placeholder }
380+
</InnerSpacePanel>
370381
) }
371382
</Droppable>
372383

0 commit comments

Comments
 (0)