Files
element-call/src/UserMenuContainer.tsx

82 lines
2.4 KiB
TypeScript
Raw Normal View History

/*
Copyright 2022-2024 New Vector Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE in the repository root for full details.
*/
import { type FC, useCallback, useState } from "react";
2025-01-06 18:00:20 +01:00
import { useNavigate, useLocation } from "react-router-dom";
import { logger } from "matrix-js-sdk/src/logger";
import { useClientLegacy } from "./ClientContext";
2022-01-05 17:27:01 -08:00
import { useProfile } from "./profile/useProfile";
2023-12-01 17:43:09 -05:00
import { defaultSettingsTab, SettingsModal } from "./settings/SettingsModal";
2021-12-23 14:40:23 -08:00
import { UserMenu } from "./UserMenu";
interface Props {
preventNavigation?: boolean;
}
export const UserMenuContainer: FC<Props> = ({ preventNavigation = false }) => {
2021-12-23 14:40:23 -08:00
const location = useLocation();
2025-01-06 18:00:20 +01:00
const navigate = useNavigate();
const { client, logout, authenticated, passwordlessUser } = useClientLegacy();
2021-12-23 14:40:23 -08:00
const { displayName, avatarUrl } = useProfile(client);
const [settingsModalOpen, setSettingsModalOpen] = useState(false);
const onDismissSettingsModal = useCallback(
() => setSettingsModalOpen(false),
2023-10-11 10:42:04 -04:00
[setSettingsModalOpen],
);
2021-12-23 14:40:23 -08:00
2023-12-01 17:43:09 -05:00
const [settingsTab, setSettingsTab] = useState(defaultSettingsTab);
2021-12-23 14:40:23 -08:00
const onAction = useCallback(
(value: string) => {
2021-12-23 14:40:23 -08:00
switch (value) {
case "user":
2023-12-01 17:43:09 -05:00
setSettingsTab("profile");
setSettingsModalOpen(true);
break;
case "settings":
2023-12-01 17:43:09 -05:00
setSettingsTab("audio");
setSettingsModalOpen(true);
2021-12-23 14:40:23 -08:00
break;
case "logout":
logout?.();
2021-12-23 14:40:23 -08:00
break;
case "login":
navigate("/login", { state: { from: location } })?.catch((error) =>
logger.error("Failed to navigate to login", error),
);
2021-12-23 14:40:23 -08:00
break;
}
},
2025-01-06 18:00:20 +01:00
[navigate, location, logout, setSettingsModalOpen],
2021-12-23 14:40:23 -08:00
);
const userName = client?.getUserIdLocalpart() ?? "";
2021-12-23 14:40:23 -08:00
return (
<>
<UserMenu
preventNavigation={preventNavigation}
isAuthenticated={authenticated}
isPasswordlessUser={passwordlessUser}
avatarUrl={avatarUrl}
onAction={onAction}
userId={client?.getUserId() ?? ""}
displayName={displayName || (userName ? userName.replace("@", "") : "")}
/>
{client && (
<SettingsModal
client={client}
open={settingsModalOpen}
onDismiss={onDismissSettingsModal}
2023-12-01 17:43:09 -05:00
tab={settingsTab}
onTabChange={setSettingsTab}
/>
)}
2021-12-23 14:40:23 -08:00
</>
);
};