Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e15c298
Merge pull request #104 from Miamiohlibs/dev
kenirwin Sep 10, 2025
0a4ec92
Merge pull request #120 from Miamiohlibs/dev
kenirwin Sep 11, 2025
e56e28c
Merge pull request #129 from Miamiohlibs/dev
kenirwin Sep 18, 2025
db1a8d9
Merge pull request #134 from Miamiohlibs/dev
kenirwin Sep 22, 2025
ced1fc6
Merge pull request #174 from Miamiohlibs/dev
kenirwin Oct 17, 2025
0a579de
Merge pull request #184 from Miamiohlibs/go-to-record
kenirwin Oct 23, 2025
6267a75
Merge pull request #187 from Miamiohlibs/dev
kenirwin Oct 27, 2025
08f28b9
Merge pull request #193 from Miamiohlibs/dev
kenirwin Dec 5, 2025
1bcc28a
Merge pull request #210 from Miamiohlibs/dev
kenirwin Jan 12, 2026
93b7c41
Merge pull request #245 from Miamiohlibs/dev
kenirwin Jan 28, 2026
f5da751
Merge pull request #247 from Miamiohlibs/dev
kenirwin Jan 28, 2026
fac4959
Merge pull request #267 from Miamiohlibs/dev
kenirwin Feb 9, 2026
2acea5e
Merge pull request #272 from Miamiohlibs/dev
kenirwin Feb 13, 2026
3d5ab71
Merge pull request #293 from Miamiohlibs/dev
kenirwin Mar 13, 2026
c753f4f
upgrade to next 16, but no Header yet
kenirwin Mar 13, 2026
4cae206
begin rebuilding Header component as Header/HeaderWrapper
kenirwin Mar 13, 2026
cd2b0cf
client nav links work
kenirwin Mar 13, 2026
aaaed79
make argus permissions optional in type
kenirwin Mar 13, 2026
98d52d4
add permissions to header wrapper
kenirwin Mar 13, 2026
c95fe1e
fix ClientNavEditor
kenirwin Mar 13, 2026
3b063c1
add clientNavAdmin into new header
kenirwin Mar 13, 2026
07413b2
use new next-16 compatible header layout
kenirwin Mar 13, 2026
9a26cc5
updates to tsconfig to build
kenirwin Mar 13, 2026
0af4013
update version to 0.9-dev
kenirwin Mar 13, 2026
e6c4ce4
update version to 0.9.0-dev
kenirwin Mar 13, 2026
4eae16e
fix build errors
kenirwin Mar 13, 2026
1953312
use react/react-dom ^19.2.4
kenirwin Mar 13, 2026
21eea25
Merge pull request #295 from Miamiohlibs/next-16
kenirwin Mar 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion app/(main-layout)/admin/users/edit/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ export default async function UserEditPage({
<div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>
<h2 className="h3">{userToEdit.name}</h2>
<p>Email: {userToEdit.email}</p>
<UserEditForm user={userToEdit} actorIsSuperAdmin={actorIsSuperAdmin} />
<UserEditForm
user={userToEdit}
actorIsSuperAdmin={actorIsSuperAdmin ?? false}
/>
</div>
</>
);
Expand Down
2 changes: 1 addition & 1 deletion app/(main-layout)/editEntry/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export default async function EditEntryPage({
holdingsData={holdingsData}
actionType="edit"
existingEntry={existingEntry}
isEditor={canEdit}
isEditor={canEdit ?? false}
/>
</>
);
Expand Down
8 changes: 5 additions & 3 deletions app/(main-layout)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Roboto } from 'next/font/google';
import '@/app/styles/custom-bootstrap.scss';
import './globals.css';
import { ClerkProvider } from '@clerk/nextjs';
import Header from '@/components/Header';
import Header from '@/components/Header/Header';
import Footer from '@/components/Footer';
import { ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
Expand All @@ -27,7 +27,8 @@ export default function RootLayout({
}>) {
return (
<html lang="en">
<body className={`${roboto.className}`}><ClerkProvider>
<body className={`${roboto.className}`}>
<ClerkProvider>
<div id="skiplink" className="visually-hidden-focusable">
<a href="#main-content">Skip to Main Content</a>
</div>
Expand All @@ -37,7 +38,8 @@ export default function RootLayout({
</main>
<ToastContainer />
<Footer />
</ClerkProvider></body>
</ClerkProvider>
</body>
</html>
);
}
6 changes: 3 additions & 3 deletions app/(main-layout)/searchBibs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ async function SearchBibsPage({ searchParams }: SearchBibsPageProps) {
<ServerDataFetcher projectId={projectId.toString()}>
<ClientSearchBibsPage
projectId={projectId}
userCanEditPage={canEdit}
userCanPrint={canPrint}
nonOwnerAlert={nonOwnerEditor}
userCanEditPage={canEdit ?? false}
userCanPrint={canPrint ?? false}
nonOwnerAlert={nonOwnerEditor ?? false}
project={project}
/>
</ServerDataFetcher>
Expand Down
2 changes: 1 addition & 1 deletion app/actions/deleteEntry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ async function deleteEntry({
logger.verbose(
`deletion request on ${entryId} by ${
user.id
}; isAdmin: ${isAdmin.toString()}`
}; isAdmin: ${isAdmin?.toString()}`,
);

// only delete if isAdmin, isOwner, or isCoEditor
Expand Down
61 changes: 34 additions & 27 deletions components/Header.tsx → components/Header/ClientNav.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import NextLink from 'next/link';
import Link from 'next/link';
import {
Nav,
NavItem,
NavLink,
Navbar,
NavbarText,
NavbarBrand,
Expand All @@ -11,17 +10,22 @@ import {
} from 'react-bootstrap';
import Image from 'next/image';
import {
SignInButton, // SignUpButton,
Show, UserButton
SignInButton, // SignUpButton,
Show,
UserButton,
} from '@clerk/nextjs';
import { Search } from 'react-bootstrap-icons';
import { checkUser } from '@/lib/checkUser';
import NavEditor from './NavEditor';
import NavAdmin from './NavAdmin';
import { User } from '@prisma/client';
import { ArgusPermissions } from '@/types/ArgusPermissions';
import ClientNavEditor from './ClientNavEditor';
import ClientNavAdmin from './ClientNavAdmin';

const Header = async () => {
const user = await checkUser();
interface PageProps {
user: User | null | undefined;
permissions: ArgusPermissions;
}

const ClientNav = async ({ user, permissions }: PageProps) => {
return (
<Navbar
bg={process.env.NEXT_PUBLIC_NAV_COLOR || 'dark'}
Expand All @@ -30,33 +34,36 @@ const Header = async () => {
className="px-2"
>
<NavbarToggle aria-controls="navbarScroll" />
<NavbarBrand as={NextLink} href="/">
<Image
src={`${process.env.NEXT_PUBLIC_APP_BASEPATH}/peacock-logo.png`}
alt="Peacock Logo"
width={40}
height={40}
/>
<span className="ps-2">
Argus {process.env.NEXT_PUBLIC_NAV_LABEL || ''}
</span>
</NavbarBrand>
<Link href={'/'}>
<NavbarBrand>
<Image
src={`${process.env.NEXT_PUBLIC_APP_BASEPATH}/peacock-logo.png`}
alt="Peacock Logo"
width={40}
height={40}
/>
<span className="ps-2">
Argus {process.env.NEXT_PUBLIC_NAV_LABEL || ''}
</span>
</NavbarBrand>
</Link>

<NavbarCollapse id="navbar">
<Nav className="ms-auto me-3 text-light">
<NavEditor />
<ClientNavEditor permissions={permissions} />
<Show when="signed-in">
<NavItem>
<NavLink as={NextLink} href="/publicProjects">
<Link href="/publicProjects" className="nav-link">
Public Projects
</NavLink>
</Link>
</NavItem>
</Show>
<NavAdmin />
<ClientNavAdmin permissions={permissions} />
<Show when="signed-in">
<NavItem>
<NavLink as={NextLink} href="/searchEntries">
<Link className="nav-link" href="/searchEntries">
<Search aria-hidden="true" /> Search
</NavLink>
</Link>
</NavItem>
</Show>
<Show when="signed-out">
Expand All @@ -82,4 +89,4 @@ const Header = async () => {
);
};

export default Header;
export default ClientNav;
23 changes: 11 additions & 12 deletions components/NavAdmin.tsx → components/Header/ClientNavAdmin.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import logger from '@/lib/logger';
'use client';
import NextLink from 'next/link';
import { NavItem, NavLink } from 'react-bootstrap';
import checkAccess from '@/lib/checkAccess';
import { ArgusPermissions } from '@/types/ArgusPermissions';

const NavAdmin = async () => {
interface PageProps {
permissions: ArgusPermissions;
}

const ClientNavAdmin = ({ permissions }: PageProps) => {
// Check if the user has access to admin features
const hasAccess = await checkAccess({
permittedRoles: ['admin', 'superadmin'],
inline: true,
});
logger.verbose('NavAdmin - hasAccess:', hasAccess);
if (!hasAccess) {
console.log(JSON.stringify(permissions));
if (!permissions.isAdmin && !permissions.isSuperAdmin) {
return null; // If no access, do not render the admin navigation
}

return (
<>
{/* <Nav className="me-3"> */}
<NavLink disabled aria-hidden="true" className="d-none d-md-block">
|
</NavLink>
Expand All @@ -29,9 +29,8 @@ const NavAdmin = async () => {
Users
</NavLink>
</NavItem>
{/* </Nav> */}
</>
);
};

export default NavAdmin;
export default ClientNavAdmin;
26 changes: 26 additions & 0 deletions components/Header/ClientNavEditor.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'use client';
import NextLink from 'next/link';
import Link from 'next/link';
import { NavItem, NavLink } from 'react-bootstrap';
import type { ArgusPermissions } from '@/types/ArgusPermissions';

interface PageProps {
permissions: ArgusPermissions;
}

const ClientNavEditor = ({ permissions }: PageProps) => {
if (!permissions.isEditorOrAbove) {
return null; // If no access, do not render the editor navigation
}
return (
<>
<NavItem>
<NavLink as={NextLink} href="/">
My Projects
</NavLink>
</NavItem>
</>
);
};

export default ClientNavEditor;
12 changes: 12 additions & 0 deletions components/Header/Header.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use server';
import { checkUser } from '@/lib/checkUser';
// import checkAccess from '@/lib/checkAccess';
import getUserInfo from '@/lib/getUserInfo';
import ClientNav from './ClientNav';

export default async function Header() {
const user = await checkUser();
const { permissions } = await getUserInfo();

return <ClientNav user={user} permissions={permissions} />;
}
26 changes: 0 additions & 26 deletions components/NavEditor.tsx

This file was deleted.

Loading