Fixes for menus, sizing fixes general css finagling, added cool hamburger buttons

This commit is contained in:
austinkelsay 2025-03-18 17:45:18 -05:00 committed by austinkelsay
parent 79a0559995
commit d353e948f7
No known key found for this signature in database
GPG Key ID: 5A763922E5BA08EE
9 changed files with 54 additions and 46 deletions

View File

@ -103,7 +103,7 @@ const HeroBanner = () => {
}; };
return ( return (
<div className={`${getHeroHeight()} ${isTabView ? 'mx-0 w-full' : 'm-4'} relative flex justify-center items-center overflow-hidden drop-shadow-2xl rounded-lg`}> <div className={`${getHeroHeight()} ${isTabView ? 'mx-0 w-full' : 'mt-4 mx-12'} relative flex justify-center items-center overflow-hidden drop-shadow-2xl rounded-lg`}>
<Image <Image
src={HeroImage} src={HeroImage}
alt="Banner" alt="Banner"

View File

@ -18,7 +18,7 @@ const responsiveOptions = [
numScroll: 1 numScroll: 1
}, },
{ {
breakpoint: '575px', breakpoint: '675px',
numVisible: 1, numVisible: 1,
numScroll: 1 numScroll: 1
} }

View File

@ -20,7 +20,7 @@ const responsiveOptions = [
numScroll: 1 numScroll: 1
}, },
{ {
breakpoint: '575px', breakpoint: '675px',
numVisible: 1, numVisible: 1,
numScroll: 1 numScroll: 1
} }

View File

@ -20,7 +20,7 @@ const responsiveOptions = [
numScroll: 1 numScroll: 1
}, },
{ {
breakpoint: '575px', breakpoint: '675px',
numVisible: 1, numVisible: 1,
numScroll: 1 numScroll: 1
} }

View File

@ -1,7 +1,8 @@
import React from 'react'; import React, { useState, useRef } from 'react';
import Image from 'next/image'; import Image from 'next/image';
import UserAvatar from './user/UserAvatar'; import UserAvatar from './user/UserAvatar';
import { Menubar } from 'primereact/menubar'; import { Menubar } from 'primereact/menubar';
import { Menu } from 'primereact/menu';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import SearchBar from '../search/SearchBar'; import SearchBar from '../search/SearchBar';
import 'primereact/resources/primereact.min.css'; import 'primereact/resources/primereact.min.css';
@ -14,6 +15,31 @@ const Navbar = () => {
const windowWidth = useWindowWidth(); const windowWidth = useWindowWidth();
const navbarHeight = '60px'; const navbarHeight = '60px';
const {ndk} = useNDKContext(); const {ndk} = useNDKContext();
const [isHovered, setIsHovered] = useState(false);
const menu = useRef(null);
const menuItems = [
{
label: 'Content',
icon: 'pi pi-play-circle',
command: () => router.push('/content?tag=all')
},
{
label: 'Feeds',
icon: 'pi pi-comments',
command: () => router.push('/feeds?channel=global')
},
{
label: 'Subscribe',
icon: 'pi pi-star',
command: () => router.push('/subscribe')
},
{
label: 'About',
icon: 'pi pi-info-circle',
command: () => router.push('/about')
}
];
const start = ( const start = (
<div className='flex items-center'> <div className='flex items-center'>
@ -25,8 +51,28 @@ const Navbar = () => {
height={50} height={50}
className="rounded-full mr-2 max-tab:hidden max-mob:hidden" className="rounded-full mr-2 max-tab:hidden max-mob:hidden"
/> />
<h1 className="text-white text-xl font-semibold max-tab:text-2xl max-mob:text-2xl">PlebDevs</h1> <h1 className="text-white text-xl font-semibold max-tab:text-2xl max-mob:text-2xl pb-1">PlebDevs</h1>
</div> </div>
<div
className={`ml-2 p-2 cursor-pointer transition-all duration-300 flex items-center justify-center ${isHovered ? 'bg-gray-700 rounded-full' : ''}`}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
onClick={(e) => menu.current.toggle(e)}
style={{ width: '40px', height: '40px' }}
>
<div className="flex flex-col items-center justify-center">
{/* Show hamburger menu on mobile (< 600px) and up/down arrows on larger screens */}
{windowWidth <= 600 ? (
<i className="pi pi-bars text-white text-xl" />
) : (
<>
<i className="pi pi-angle-up text-white text-base" />
<i className="pi pi-angle-down text-white text-base" />
</>
)}
</div>
</div>
<Menu model={menuItems} popup ref={menu} />
{ndk && windowWidth > 600 && <SearchBar />} {ndk && windowWidth > 600 && <SearchBar />}
</div> </div>
); );

View File

@ -70,7 +70,7 @@ const UserAvatar = () => {
// Only show the "Create" option for admin users // Only show the "Create" option for admin users
...(isAdmin ? [{ ...(isAdmin ? [{
label: 'Create', label: 'Create',
icon: 'pi pi-book', icon: 'pi pi-file-edit',
command: () => router.push('/create') command: () => router.push('/create')
}] : []), }] : []),
{ {
@ -84,14 +84,6 @@ const UserAvatar = () => {
userAvatar = ( userAvatar = (
<> <>
<div className='flex flex-row items-center justify-between'> <div className='flex flex-row items-center justify-between'>
<GenericButton
outlined
rounded
label="About"
className='mr-4'
onClick={() => router.push('/about')}
size={windowWidth < 768 ? 'small' : 'normal'}
/>
<div onClick={(event) => menu.current.toggle(event)} className={`flex flex-row items-center justify-between cursor-pointer hover:opacity-75`}> <div onClick={(event) => menu.current.toggle(event)} className={`flex flex-row items-center justify-between cursor-pointer hover:opacity-75`}>
<Image <Image
alt="logo" alt="logo"
@ -112,14 +104,6 @@ const UserAvatar = () => {
} else { } else {
userAvatar = ( userAvatar = (
<div className='flex flex-row items-center justify-between'> <div className='flex flex-row items-center justify-between'>
<GenericButton
outlined
rounded
label="About"
className='mr-4'
onClick={() => router.push('/about')}
size={windowWidth < 768 ? 'small' : 'normal'}
/>
<GenericButton <GenericButton
label="Login" label="Login"
icon="pi pi-user" icon="pi pi-user"

View File

@ -10,7 +10,6 @@ import { useContentSearch } from '@/hooks/useContentSearch';
import { useCommunitySearch } from '@/hooks/useCommunitySearch'; import { useCommunitySearch } from '@/hooks/useCommunitySearch';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import useWindowWidth from '@/hooks/useWindowWidth'; import useWindowWidth from '@/hooks/useWindowWidth';
import styles from './searchbar.module.css';
const SearchBar = () => { const SearchBar = () => {
const { searchContent, searchResults: contentResults } = useContentSearch(); const { searchContent, searchResults: contentResults } = useContentSearch();
@ -77,7 +76,7 @@ const SearchBar = () => {
} }
return ( return (
<div className={`absolute ${windowWidth < 700 ? "left-[40%]" : "left-[50%]"} transform -translate-x-[50%]`}> <div className={`absolute ${windowWidth < 950 ? "left-[55%]" : "left-[50%]"} transform -translate-x-[50%]`}>
<IconField iconPosition="left"> <IconField iconPosition="left">
<InputIcon className="pi pi-search"> </InputIcon> <InputIcon className="pi pi-search"> </InputIcon>
<InputText <InputText
@ -101,7 +100,6 @@ const SearchBar = () => {
className: 'mx-0 px-0 shadow-lg' className: 'mx-0 px-0 shadow-lg'
} }
}} }}
className={styles.dropdown}
value={selectedSearchOption} value={selectedSearchOption}
onChange={(e) => setSelectedSearchOption(e.value)} onChange={(e) => setSelectedSearchOption(e.value)}
options={searchOptions} options={searchOptions}

View File

@ -1,19 +0,0 @@
/* .dropdown {
border: none !important;
outline: none !important;
box-shadow: none !important;
}
.dropdown:focus,
.dropdown:active,
.dropdown:hover {
border: none !important;
outline: none !important;
box-shadow: none !important;
} */
/* Override any potential global styles */
/* .dropdown * {
outline: none !important;
box-shadow: none !important;
} */

View File

@ -1,6 +1,5 @@
import Head from 'next/head'; import Head from 'next/head';
import React, { useEffect, useState, useMemo } from 'react'; import React, { useEffect, useState, useMemo } from 'react';
// import GenericCarousel from '@/components/content/carousels/GenericCarousel';
import CoursesCarousel from '@/components/content/carousels/CoursesCarousel'; import CoursesCarousel from '@/components/content/carousels/CoursesCarousel';
import VideosCarousel from '@/components/content/carousels/VideosCarousel'; import VideosCarousel from '@/components/content/carousels/VideosCarousel';
import DocumentsCarousel from '@/components/content/carousels/DocumentsCarousel'; import DocumentsCarousel from '@/components/content/carousels/DocumentsCarousel';