Files
ThreadNet-Web/src/components/views/spaces/QuickSettingsButton.tsx
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

143 lines
5.8 KiB
TypeScript
Raw Normal View History

2021-11-26 15:41:04 +00:00
/*
2024-09-09 14:57:16 +01:00
Copyright 2024 New Vector Ltd.
Copyright 2021-2023 The Matrix.org Foundation C.I.C.
2021-11-26 15:41:04 +00:00
2024-09-09 14:57:16 +01:00
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
2021-11-26 15:41:04 +00:00
*/
import React from "react";
2021-12-09 09:10:23 +00:00
import classNames from "classnames";
import {
OverflowHorizontalIcon,
UserProfileSolidIcon,
FavouriteSolidIcon,
} from "@vector-im/compound-design-tokens/assets/web/icons";
2021-11-26 15:41:04 +00:00
import { _t } from "../../../languageHandler";
import ContextMenu, { alwaysAboveRightOf, ChevronFace, useContextMenu } from "../../structures/ContextMenu";
2021-11-26 15:41:04 +00:00
import AccessibleButton from "../elements/AccessibleButton";
import StyledCheckbox from "../elements/StyledCheckbox";
import { MetaSpace } from "../../../stores/spaces";
import { useSettingValue } from "../../../hooks/useSettings";
import { onMetaSpaceChangeFactory } from "../settings/tabs/user/SidebarUserSettingsTab";
import defaultDispatcher from "../../../dispatcher/dispatcher";
import { Action } from "../../../dispatcher/actions";
2022-03-24 16:42:53 -06:00
import { UserTab } from "../dialogs/UserTab";
import QuickThemeSwitcher from "./QuickThemeSwitcher";
2022-03-02 10:18:45 +01:00
import { Icon as PinUprightIcon } from "../../../../res/img/element-icons/room/pin-upright.svg";
import Modal from "../../../Modal";
import DevtoolsDialog from "../dialogs/DevtoolsDialog";
import { SdkContextClass } from "../../../contexts/SDKContext";
2021-11-26 15:41:04 +00:00
const QuickSettingsButton: React.FC<{
isPanelCollapsed: boolean;
}> = ({ isPanelCollapsed = false }) => {
2021-11-26 15:41:04 +00:00
const [menuDisplayed, handle, openMenu, closeMenu] = useContextMenu<HTMLDivElement>();
const { [MetaSpace.Favourites]: favouritesEnabled, [MetaSpace.People]: peopleEnabled } =
useSettingValue<Record<MetaSpace, boolean>>("Spaces.enabledMetaSpaces");
const currentRoomId = SdkContextClass.instance.roomViewStore.getRoomId();
2024-08-05 08:59:27 +01:00
const developerModeEnabled = useSettingValue<boolean>("developerMode");
let contextMenu: JSX.Element | undefined;
if (menuDisplayed && handle.current) {
2021-11-26 15:41:04 +00:00
contextMenu = (
<ContextMenu
{...alwaysAboveRightOf(handle.current.getBoundingClientRect(), ChevronFace.None, 16)}
wrapperClassName="mx_QuickSettingsButton_ContextMenuWrapper"
onFinished={closeMenu}
managed={false}
focusLock={true}
>
<h2>{_t("quick_settings|title")}</h2>
2021-11-26 15:41:04 +00:00
<AccessibleButton
onClick={() => {
closeMenu();
defaultDispatcher.dispatch({ action: Action.ViewUserSettings });
}}
kind="primary_outline"
>
{_t("quick_settings|all_settings")}
</AccessibleButton>
{currentRoomId && developerModeEnabled && (
2022-03-02 10:18:45 +01:00
<AccessibleButton
onClick={() => {
closeMenu();
Modal.createDialog(
DevtoolsDialog,
2022-12-12 12:24:14 +01:00
{
roomId: currentRoomId,
2022-12-12 12:24:14 +01:00
},
2022-03-02 10:18:45 +01:00
"mx_DevtoolsDialog_wrapper",
2022-12-12 12:24:14 +01:00
);
}}
2022-03-02 10:18:45 +01:00
kind="danger_outline"
>
{_t("devtools|title")}
2022-03-02 10:18:45 +01:00
</AccessibleButton>
2022-12-12 12:24:14 +01:00
)}
2021-11-26 15:41:04 +00:00
<h4 className="mx_QuickSettingsButton_pinToSidebarHeading">
2022-03-02 10:18:45 +01:00
<PinUprightIcon className="mx_QuickSettingsButton_icon" />
{_t("quick_settings|metaspace_section")}
2021-11-26 15:41:04 +00:00
</h4>
2022-03-02 10:18:45 +01:00
2021-11-26 15:41:04 +00:00
<StyledCheckbox
className="mx_QuickSettingsButton_favouritesCheckbox"
checked={!!favouritesEnabled}
onChange={onMetaSpaceChangeFactory(MetaSpace.Favourites, "WebQuickSettingsPinToSidebarCheckbox")}
2022-12-12 12:24:14 +01:00
>
<FavouriteSolidIcon className="mx_QuickSettingsButton_icon" />
{_t("common|favourites")}
2021-11-26 15:41:04 +00:00
</StyledCheckbox>
<StyledCheckbox
className="mx_QuickSettingsButton_peopleCheckbox"
checked={!!peopleEnabled}
onChange={onMetaSpaceChangeFactory(MetaSpace.People, "WebQuickSettingsPinToSidebarCheckbox")}
2022-12-12 12:24:14 +01:00
>
<UserProfileSolidIcon className="mx_QuickSettingsButton_icon" />
{_t("common|people")}
2021-11-26 15:41:04 +00:00
</StyledCheckbox>
<AccessibleButton
className="mx_QuickSettingsButton_moreOptionsButton"
onClick={() => {
closeMenu();
defaultDispatcher.dispatch({
action: Action.ViewUserSettings,
initialTabId: UserTab.Sidebar,
});
}}
>
<OverflowHorizontalIcon className="mx_QuickSettingsButton_icon" />
{_t("quick_settings|sidebar_settings")}
2021-11-26 15:41:04 +00:00
</AccessibleButton>
<QuickThemeSwitcher requestClose={closeMenu} />
2021-11-26 15:41:04 +00:00
</ContextMenu>
);
}
return (
<>
<AccessibleButton
className={classNames("mx_QuickSettingsButton", { expanded: !isPanelCollapsed })}
2021-11-26 15:41:04 +00:00
onClick={openMenu}
aria-label={_t("quick_settings|title")}
title={isPanelCollapsed ? _t("quick_settings|title") : undefined}
ref={handle}
2023-04-20 18:13:30 +01:00
aria-expanded={!isPanelCollapsed}
>
{!isPanelCollapsed ? _t("common|settings") : null}
</AccessibleButton>
2021-11-26 15:41:04 +00:00
{contextMenu}
</>
);
};
export default QuickSettingsButton;