Add option to hide logout

This commit is contained in:
Weves 2024-06-02 19:56:51 -07:00 committed by Chris Weaver
parent e4a08c5546
commit 81aada7c0f
8 changed files with 52 additions and 60 deletions

View File

@ -198,6 +198,7 @@ services:
- NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
- NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
depends_on:
- api_server
restart: always

View File

@ -197,6 +197,7 @@ services:
- NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
- NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
depends_on:
- api_server
restart: always

View File

@ -69,6 +69,7 @@ services:
- NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
- NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
depends_on:
- api_server
restart: always

View File

@ -69,6 +69,7 @@ services:
- NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
- NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
- NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
depends_on:
- api_server
restart: always

View File

@ -54,6 +54,9 @@ ENV NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PRED
ARG NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS
ENV NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS}
ARG NEXT_PUBLIC_DISABLE_LOGOUT
ENV NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT}
RUN npm run build
# Step 3. Production image, copy all the files and run next
@ -99,6 +102,9 @@ ENV NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PRED
ARG NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS
ENV NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS}
ARG NEXT_PUBLIC_DISABLE_LOGOUT
ENV NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT}
# Note: Don't expose ports here, Compose will handle that for us if necessary.
# If you want to run this without compose, specify the ports to
# expose via cli

View File

@ -1,6 +1,6 @@
"use client";
import { useState, useRef } from "react";
import { useState, useRef, useContext } from "react";
import { FiSearch, FiMessageSquare, FiTool, FiLogOut } from "react-icons/fi";
import Link from "next/link";
import { useRouter } from "next/navigation";
@ -9,6 +9,9 @@ import { checkUserIsNoAuthUser, logout } from "@/lib/user";
import { BasicSelectable } from "@/components/BasicClickable";
import { Popover } from "./popover/Popover";
import { FaBrain } from "react-icons/fa";
import { LOGOUT_DISABLED } from "@/lib/constants";
import { Settings } from "@/app/admin/settings/interfaces";
import { SettingsContext } from "./settings/SettingsProvider";
export function UserDropdown({
user,
@ -21,6 +24,12 @@ export function UserDropdown({
const userInfoRef = useRef<HTMLDivElement>(null);
const router = useRouter();
const combinedSettings = useContext(SettingsContext);
if (!combinedSettings) {
return null;
}
const settings = combinedSettings.settings;
const handleLogout = () => {
logout().then((isSuccess) => {
if (!isSuccess) {
@ -31,7 +40,8 @@ export function UserDropdown({
};
const showAdminPanel = !user || user.role === "admin";
const showLogout = user && !checkUserIsNoAuthUser(user.id);
const showLogout =
user && !checkUserIsNoAuthUser(user.id) && !LOGOUT_DISABLED;
return (
<div className="relative" ref={userInfoRef}>
@ -71,27 +81,33 @@ export function UserDropdown({
>
{!hideChatAndSearch && (
<>
<Link
href="/search"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FiSearch className="my-auto mr-2 text-lg" />
Danswer Search
</Link>
<Link
href="/chat"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FiMessageSquare className="my-auto mr-2 text-lg" />
Danswer Chat
</Link>
<Link
href="/assistants/mine"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FaBrain className="my-auto mr-2 text-lg" />
My Assistants
</Link>
{settings.search_page_enabled && (
<Link
href="/search"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FiSearch className="my-auto mr-2 text-lg" />
Danswer Search
</Link>
)}
{settings.chat_page_enabled && (
<>
<Link
href="/chat"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FiMessageSquare className="my-auto mr-2 text-lg" />
Danswer Chat
</Link>
<Link
href="/assistants/mine"
className="flex py-3 px-4 rounded cursor-pointer hover:bg-hover-light"
>
<FaBrain className="my-auto mr-2 text-lg" />
My Assistants
</Link>
</>
)}
</>
)}
{showAdminPanel && (

View File

@ -17,43 +17,6 @@ interface HeaderProps {
}
export function Header({ user }: HeaderProps) {
const router = useRouter();
const [dropdownOpen, setDropdownOpen] = useState(false);
const dropdownRef = useRef<HTMLDivElement>(null);
const handleLogout = async () => {
const response = await logout();
if (!response.ok) {
alert("Failed to logout");
}
// disable auto-redirect immediately after logging out so the user
// is not immediately re-logged in
router.push("/auth/login?disableAutoRedirect=true");
};
// When dropdownOpen state changes, it attaches/removes the click listener
useEffect(() => {
const handleClickOutside = (e: MouseEvent) => {
if (
dropdownRef.current &&
!dropdownRef.current.contains(e.target as Node)
) {
setDropdownOpen(false);
}
};
if (dropdownOpen) {
document.addEventListener("click", handleClickOutside);
} else {
document.removeEventListener("click", handleClickOutside);
}
// Clean up function to remove listener when component unmounts
return () => {
document.removeEventListener("click", handleClickOutside);
};
}, [dropdownOpen]);
const combinedSettings = useContext(SettingsContext);
if (!combinedSettings) {
return null;

View File

@ -17,6 +17,9 @@ export const SEARCH_TYPE_COOKIE_NAME = "search_type";
export const HEADER_PADDING = "pt-[64px]";
export const LOGOUT_DISABLED =
process.env.NEXT_PUBLIC_DISABLE_LOGOUT?.toLowerCase() === "true";
// NOTE: since this is a `NEXT_PUBLIC_` variable, it will be set at
// build-time
// TODO: consider moving this to an API call so that the api_server