make collapsing/expanding the first header work again
parent
a8085f4e3b
commit
a361ac3f83
|
@ -21,6 +21,7 @@ import classNames from "classnames";
|
||||||
import dis from "../../dispatcher/dispatcher";
|
import dis from "../../dispatcher/dispatcher";
|
||||||
import { _t } from "../../languageHandler";
|
import { _t } from "../../languageHandler";
|
||||||
import RoomList2 from "../views/rooms/RoomList2";
|
import RoomList2 from "../views/rooms/RoomList2";
|
||||||
|
import { HEADER_HEIGHT } from "../views/rooms/RoomSublist2";
|
||||||
import { Action } from "../../dispatcher/actions";
|
import { Action } from "../../dispatcher/actions";
|
||||||
import UserMenu from "./UserMenu";
|
import UserMenu from "./UserMenu";
|
||||||
import RoomSearch from "./RoomSearch";
|
import RoomSearch from "./RoomSearch";
|
||||||
|
@ -135,7 +136,6 @@ export default class LeftPanel2 extends React.Component<IProps, IState> {
|
||||||
const bottom = rlRect.bottom;
|
const bottom = rlRect.bottom;
|
||||||
const top = rlRect.top;
|
const top = rlRect.top;
|
||||||
const sublists = list.querySelectorAll<HTMLDivElement>(".mx_RoomSublist2");
|
const sublists = list.querySelectorAll<HTMLDivElement>(".mx_RoomSublist2");
|
||||||
const headerHeight = 32; // Note: must match the CSS!
|
|
||||||
const headerRightMargin = 24; // calculated from margins and widths to align with non-sticky tiles
|
const headerRightMargin = 24; // calculated from margins and widths to align with non-sticky tiles
|
||||||
|
|
||||||
const headerStickyWidth = rlRect.width - headerRightMargin;
|
const headerStickyWidth = rlRect.width - headerRightMargin;
|
||||||
|
@ -147,22 +147,22 @@ export default class LeftPanel2 extends React.Component<IProps, IState> {
|
||||||
|
|
||||||
const header = sublist.querySelector<HTMLDivElement>(".mx_RoomSublist2_stickable");
|
const header = sublist.querySelector<HTMLDivElement>(".mx_RoomSublist2_stickable");
|
||||||
|
|
||||||
if (slRect.top + headerHeight > bottom && !gotBottom) {
|
if (slRect.top + HEADER_HEIGHT > bottom && !gotBottom) {
|
||||||
header.classList.add("mx_RoomSublist2_headerContainer_sticky");
|
header.classList.add("mx_RoomSublist2_headerContainer_sticky");
|
||||||
header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom");
|
header.classList.add("mx_RoomSublist2_headerContainer_stickyBottom");
|
||||||
header.style.width = `${headerStickyWidth}px`;
|
header.style.width = `${headerStickyWidth}px`;
|
||||||
header.style.removeProperty("top");
|
header.style.removeProperty("top");
|
||||||
gotBottom = true;
|
gotBottom = true;
|
||||||
} else if (((slRect.top - (headerHeight * 0.6) + headerHeight) < top) || sublist === sublists[0]) {
|
} else if (((slRect.top - (HEADER_HEIGHT * 0.6) + HEADER_HEIGHT) < top) || sublist === sublists[0]) {
|
||||||
// the header should become sticky once it is 60% or less out of view at the top.
|
// the header should become sticky once it is 60% or less out of view at the top.
|
||||||
// We also add headerHeight because the sticky header is put above the scrollable area,
|
// We also add HEADER_HEIGHT because the sticky header is put above the scrollable area,
|
||||||
// into the padding of .mx_LeftPanel2_roomListWrapper,
|
// into the padding of .mx_LeftPanel2_roomListWrapper,
|
||||||
// by subtracting headerHeight from the top below.
|
// by subtracting HEADER_HEIGHT from the top below.
|
||||||
// We also always try to make the first sublist header sticky.
|
// We also always try to make the first sublist header sticky.
|
||||||
header.classList.add("mx_RoomSublist2_headerContainer_sticky");
|
header.classList.add("mx_RoomSublist2_headerContainer_sticky");
|
||||||
header.classList.add("mx_RoomSublist2_headerContainer_stickyTop");
|
header.classList.add("mx_RoomSublist2_headerContainer_stickyTop");
|
||||||
header.style.width = `${headerStickyWidth}px`;
|
header.style.width = `${headerStickyWidth}px`;
|
||||||
header.style.top = `${rlRect.top - headerHeight}px`;
|
header.style.top = `${rlRect.top - HEADER_HEIGHT}px`;
|
||||||
if (lastTopHeader) {
|
if (lastTopHeader) {
|
||||||
lastTopHeader.style.display = "none";
|
lastTopHeader.style.display = "none";
|
||||||
}
|
}
|
||||||
|
@ -194,8 +194,8 @@ export default class LeftPanel2 extends React.Component<IProps, IState> {
|
||||||
|
|
||||||
// ensure scroll doesn't go above the gap left by the header of
|
// ensure scroll doesn't go above the gap left by the header of
|
||||||
// the first sublist always being sticky if no other header is sticky
|
// the first sublist always being sticky if no other header is sticky
|
||||||
if (list.scrollTop < headerHeight) {
|
if (list.scrollTop < HEADER_HEIGHT) {
|
||||||
list.scrollTop = headerHeight;
|
list.scrollTop = HEADER_HEIGHT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ import StyledCheckbox from "../elements/StyledCheckbox";
|
||||||
|
|
||||||
const SHOW_N_BUTTON_HEIGHT = 32; // As defined by CSS
|
const SHOW_N_BUTTON_HEIGHT = 32; // As defined by CSS
|
||||||
const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS
|
const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS
|
||||||
|
export const HEADER_HEIGHT = 32; // As defined by CSS
|
||||||
|
|
||||||
const MAX_PADDING_HEIGHT = SHOW_N_BUTTON_HEIGHT + RESIZE_HANDLE_HEIGHT;
|
const MAX_PADDING_HEIGHT = SHOW_N_BUTTON_HEIGHT + RESIZE_HANDLE_HEIGHT;
|
||||||
|
|
||||||
|
@ -233,7 +234,11 @@ export default class RoomSublist2 extends React.Component<IProps, IState> {
|
||||||
|
|
||||||
const possibleSticky = target.parentElement;
|
const possibleSticky = target.parentElement;
|
||||||
const sublist = possibleSticky.parentElement.parentElement;
|
const sublist = possibleSticky.parentElement.parentElement;
|
||||||
if (possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_sticky')) {
|
const list = sublist.parentElement.parentElement;
|
||||||
|
// the scrollTop is capped at the height of the header in LeftPanel2
|
||||||
|
const isAtTop = list.scrollTop <= HEADER_HEIGHT;
|
||||||
|
const isSticky = possibleSticky.classList.contains('mx_RoomSublist2_headerContainer_sticky');
|
||||||
|
if (isSticky && !isAtTop) {
|
||||||
// is sticky - jump to list
|
// is sticky - jump to list
|
||||||
sublist.scrollIntoView({behavior: 'smooth'});
|
sublist.scrollIntoView({behavior: 'smooth'});
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue