mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-07-01 10:10:49 +02:00
Add link to connectors page
This commit is contained in:
@ -1,7 +1,6 @@
|
|||||||
import { buildUrl } from "@/lib/userSS";
|
import { buildUrl } from "@/lib/userSS";
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
|
||||||
const getDomain = (request: NextRequest) => {
|
const getDomain = (request: NextRequest) => {
|
||||||
// use env variable if set
|
// use env variable if set
|
||||||
if (process.env.BASE_URL) {
|
if (process.env.BASE_URL) {
|
||||||
@ -9,9 +8,9 @@ const getDomain = (request: NextRequest) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// next, try and build domain from headers
|
// next, try and build domain from headers
|
||||||
const requestedHost = request.headers.get('X-Forwarded-Host');
|
const requestedHost = request.headers.get("X-Forwarded-Host");
|
||||||
const requestedPort = request.headers.get('X-Forwarded-Port');
|
const requestedPort = request.headers.get("X-Forwarded-Port");
|
||||||
const requestedProto = request.headers.get('X-Forwarded-Proto');
|
const requestedProto = request.headers.get("X-Forwarded-Proto");
|
||||||
if (requestedHost) {
|
if (requestedHost) {
|
||||||
const url = request.nextUrl.clone();
|
const url = request.nextUrl.clone();
|
||||||
url.host = requestedHost;
|
url.host = requestedHost;
|
||||||
@ -21,9 +20,8 @@ const getDomain = (request: NextRequest) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// finally just use whatever is in the request
|
// finally just use whatever is in the request
|
||||||
return request.nextUrl.origin
|
return request.nextUrl.origin;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
export const GET = async (request: NextRequest) => {
|
export const GET = async (request: NextRequest) => {
|
||||||
// Wrapper around the FastAPI endpoint /auth/google/callback,
|
// Wrapper around the FastAPI endpoint /auth/google/callback,
|
||||||
@ -35,9 +33,7 @@ export const GET = async (request: NextRequest) => {
|
|||||||
const setCookieHeader = response.headers.get("set-cookie");
|
const setCookieHeader = response.headers.get("set-cookie");
|
||||||
|
|
||||||
if (!setCookieHeader) {
|
if (!setCookieHeader) {
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(new URL("/auth/error", getDomain(request)));
|
||||||
new URL("/auth/error", getDomain(request))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const redirectResponse = NextResponse.redirect(
|
const redirectResponse = NextResponse.redirect(
|
||||||
|
@ -2,34 +2,83 @@
|
|||||||
|
|
||||||
import { logout } from "@/lib/user";
|
import { logout } from "@/lib/user";
|
||||||
import { UserCircle } from "@phosphor-icons/react";
|
import { UserCircle } from "@phosphor-icons/react";
|
||||||
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import React from "react";
|
import React, { useEffect, useRef, useState } from "react";
|
||||||
import "tailwindcss/tailwind.css";
|
import "tailwindcss/tailwind.css";
|
||||||
|
|
||||||
export const Header: React.FC = () => {
|
export const Header: React.FC = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const [dropdownOpen, setDropdownOpen] = useState(false);
|
||||||
|
const dropdownRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
return (
|
const handleLogout = () => {
|
||||||
<header className="bg-gray-800 text-gray-200 py-4">
|
|
||||||
<div className="mx-8 flex">
|
|
||||||
<h1 className="text-2xl font-bold">danswer 💃</h1>
|
|
||||||
|
|
||||||
<div
|
|
||||||
className="ml-auto flex items-center cursor-pointer hover:text-red-500"
|
|
||||||
onClick={() =>
|
|
||||||
logout().then((isSuccess) => {
|
logout().then((isSuccess) => {
|
||||||
if (!isSuccess) {
|
if (!isSuccess) {
|
||||||
alert("Failed to logout");
|
alert("Failed to logout");
|
||||||
}
|
}
|
||||||
router.push("/auth/login");
|
router.push("/auth/login");
|
||||||
})
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 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]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<header className="bg-gray-800 text-gray-200 py-4">
|
||||||
|
<div className="mx-8 flex">
|
||||||
|
<Link href="/">
|
||||||
|
<h1 className="text-2xl font-bold">danswer 💃</h1>
|
||||||
|
</Link>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="ml-auto flex items-center cursor-pointer relative"
|
||||||
|
onClick={() => setDropdownOpen(!dropdownOpen)}
|
||||||
|
ref={dropdownRef}
|
||||||
|
>
|
||||||
|
<UserCircle size={24} className="mr-1 hover:text-red-500" />
|
||||||
|
{dropdownOpen && (
|
||||||
|
<div
|
||||||
|
className={
|
||||||
|
"absolute top-10 right-0 mt-2 bg-gray-600 rounded-sm " +
|
||||||
|
"w-36 overflow-hidden shadow-xl z-10 text-sm text-gray-300"
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{/* TODO: make this a dropdown with more options */}
|
<Link href="/admin/connectors/slack">
|
||||||
<UserCircle size={24} className="mr-1" />
|
<div className="flex py-2 px-3 cursor-pointer hover:bg-gray-500 border-b border-gray-500">
|
||||||
|
Connectors
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
<div
|
||||||
|
className="flex py-2 px-3 cursor-pointer hover:bg-gray-500"
|
||||||
|
onClick={handleLogout}
|
||||||
|
>
|
||||||
Logout
|
Logout
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user