From 8f5f1bc55226b96c7afbd2e15ead258605609268 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Mon, 3 Mar 2025 19:03:04 +0800 Subject: [PATCH 1/2] feat: implement logout functionality in admin navbar and update sidebar links --- app/layouts/admin/navbar.tsx | 38 +++++++++++++++++++++++------- app/layouts/admin/sidebar.tsx | 6 ++--- app/routes/actions.admin.logout.ts | 22 +++++++++++++++++ 3 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 app/routes/actions.admin.logout.ts diff --git a/app/layouts/admin/navbar.tsx b/app/layouts/admin/navbar.tsx index 366faa7..9776ffe 100644 --- a/app/layouts/admin/navbar.tsx +++ b/app/layouts/admin/navbar.tsx @@ -1,4 +1,5 @@ -import { Link } from 'react-router' +import { Button, Popover, PopoverButton, PopoverPanel } from '@headlessui/react' +import { Link, useFetcher } from 'react-router' import { ChevronIcon } from '~/components/icons/chevron' import { NotificationIcon } from '~/components/icons/notification' @@ -7,6 +8,7 @@ import { useAdminContext } from '~/contexts/admin' export const Navbar = () => { const { adminProfile } = useAdminContext() + const fetcher = useFetcher() return (
@@ -21,13 +23,33 @@ export const Navbar = () => { />
-
-
-
- {adminProfile.name} -
- -
+ + +
+
+ {adminProfile.name} +
+ + + + + + + + { >
{group}
{items.map(({ title, url, icon: Icon }) => ( - { > {title} - + ))}
))} diff --git a/app/routes/actions.admin.logout.ts b/app/routes/actions.admin.logout.ts new file mode 100644 index 0000000..a67d82d --- /dev/null +++ b/app/routes/actions.admin.logout.ts @@ -0,0 +1,22 @@ +import { data } from 'react-router' + +import { setStaffLogoutHeaders } from '~/libs/logout-header.server' + +export const action = async () => { + try { + const responseHeaders = setStaffLogoutHeaders() + + return data( + { success: true }, + { headers: responseHeaders, status: 200, statusText: 'OK' }, + ) + } catch { + return data( + { + message: 'Something went wrong', + success: false, + }, + { status: 500 }, + ) + } +} From 5f5a0dff31f0cf6f8eaebf8a1f9fe8fe0deae90c Mon Sep 17 00:00:00 2001 From: Ardeman Date: Mon, 3 Mar 2025 19:10:50 +0800 Subject: [PATCH 2/2] feat: update admin navbar to display staff profile information and refactor loader data --- app/layouts/admin/navbar.tsx | 15 ++++++++++----- app/routes/_admin.lg-admin.tsx | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/layouts/admin/navbar.tsx b/app/layouts/admin/navbar.tsx index 9776ffe..fd58500 100644 --- a/app/layouts/admin/navbar.tsx +++ b/app/layouts/admin/navbar.tsx @@ -1,13 +1,14 @@ import { Button, Popover, PopoverButton, PopoverPanel } from '@headlessui/react' -import { Link, useFetcher } from 'react-router' +import { Link, useFetcher, useRouteLoaderData } from 'react-router' import { ChevronIcon } from '~/components/icons/chevron' import { NotificationIcon } from '~/components/icons/notification' import { APP } from '~/configs/meta' -import { useAdminContext } from '~/contexts/admin' +import type { loader } from '~/routes/_admin.lg-admin' export const Navbar = () => { - const { adminProfile } = useAdminContext() + const loaderData = useRouteLoaderData('routes/_admin.lg-admin') + const staffData = loaderData?.staffData const fetcher = useFetcher() return ( @@ -26,8 +27,12 @@ export const Navbar = () => {
-
- {adminProfile.name} + {staffData?.name} + {staffData?.name}
diff --git a/app/routes/_admin.lg-admin.tsx b/app/routes/_admin.lg-admin.tsx index f7e87de..7b38064 100644 --- a/app/routes/_admin.lg-admin.tsx +++ b/app/routes/_admin.lg-admin.tsx @@ -12,7 +12,7 @@ export const loader = async ({ request }: Route.LoaderArgs) => { const { staffToken } = await handleCookie(request) const { pathname } = new URL(request.url) const isAuthPage = AUTH_PAGES.includes(pathname) - let adminData + let staffData if (!isAuthPage && !staffToken) { throw redirect('/lg-admin/login') @@ -26,11 +26,11 @@ export const loader = async ({ request }: Route.LoaderArgs) => { const { data } = await getStaff({ accessToken: staffToken, }) - adminData = data + staffData = data } return { - adminData, + staffData, } }