diff --git a/package.json b/package.json index f17db62..cec4030 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,9 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", - "build": "next build --turbopack", - "start": "next start", - "lint": "eslint" + "dev": "next dev", + "build": "next build --no-lint", + "start": "next start" }, "dependencies": { "lucide-react": "^0.544.0", @@ -25,4 +24,4 @@ "tailwindcss": "^4", "typescript": "^5" } -} +} \ No newline at end of file diff --git a/src/components/Layouts/Header.tsx b/src/components/Layouts/Header.tsx index cc195ad..19b84bd 100644 --- a/src/components/Layouts/Header.tsx +++ b/src/components/Layouts/Header.tsx @@ -6,15 +6,9 @@ import Image from "next/image"; const Header = () => { const [isMenuOpen, setIsMenuOpen] = useState(false); - const [openDropdown, setOpenDropdown] = useState(null); - - const toggleDropdown = (dropdownName: string) => { - setOpenDropdown(current => current === dropdownName ? null : dropdownName); - }; const closeAllMenus = () => { setIsMenuOpen(false); - setOpenDropdown(null); }; return ( @@ -26,7 +20,7 @@ const Header = () => {
CMC Logo { {/* Desktop Navigation */} - - {/* Mobile menu button */} - -
+ {isMenuOpen ? ( + + ) : ( + + )} + + + - {/* Mobile Menu */} - {isMenuOpen && ( -
- +
+ )} ); }; -export default Header; \ No newline at end of file +export default Header; diff --git a/src/components/blogs/BlogListing.tsx b/src/components/blogs/BlogListing.tsx index fc245f7..6c85c72 100644 --- a/src/components/blogs/BlogListing.tsx +++ b/src/components/blogs/BlogListing.tsx @@ -1,6 +1,6 @@ // components/BlogListing.tsx 'use client'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import Image from 'next/image'; import Link from 'next/link'; import { ChevronRight } from 'lucide-react'; @@ -25,34 +25,32 @@ const BlogListing: React.FC = () => { }; // Filter blogs based on category and search query - const filterBlogs = () => { - let filtered = blogs; + const filterBlogs = useCallback(() => { + let filtered = blogs; - // Filter by category - if (selectedCategory !== 'All Categories') { - filtered = filtered.filter(blog => - blog.tags.some(tag => - tag.toLowerCase().includes(selectedCategory.toLowerCase()) - ) - ); - } + if (selectedCategory !== 'All Categories') { + filtered = filtered.filter(blog => + blog.tags.some(tag => + tag.toLowerCase().includes(selectedCategory.toLowerCase()) + ) + ); + } - // Filter by search query - if (searchQuery.trim()) { - const query = searchQuery.toLowerCase().trim(); - filtered = filtered.filter(blog => - blog.title.toLowerCase().includes(query) || - blog.excerpt.toLowerCase().includes(query) || - blog.tags.some(tag => tag.toLowerCase().includes(query)) || - (blog.professors && blog.professors.some(prof => - prof.firstName?.toLowerCase().includes(query) || - prof.name?.toLowerCase().includes(query) - )) - ); - } + if (searchQuery.trim()) { + const query = searchQuery.toLowerCase().trim(); + filtered = filtered.filter(blog => + blog.title.toLowerCase().includes(query) || + blog.excerpt.toLowerCase().includes(query) || + blog.tags.some(tag => tag.toLowerCase().includes(query)) || + (blog.professors && blog.professors.some(prof => + prof.firstName?.toLowerCase().includes(query) || + prof.name?.toLowerCase().includes(query) + )) + ); + } - setFilteredBlogs(filtered); - }; + setFilteredBlogs(filtered); +}, [blogs, selectedCategory, searchQuery]); // Load blogs from API useEffect(() => { @@ -85,10 +83,11 @@ const BlogListing: React.FC = () => { // Filter blogs when category or search changes useEffect(() => { - if (mounted && blogs.length > 0) { - filterBlogs(); - } - }, [selectedCategory, searchQuery, blogs, mounted]); + if (mounted && blogs.length > 0) { + filterBlogs(); + } +}, [mounted, filterBlogs]); + // Handle mount useEffect(() => { diff --git a/src/components/career/careerscomponent.tsx b/src/components/career/careerscomponent.tsx index 5ad71f7..cacb8b8 100644 --- a/src/components/career/careerscomponent.tsx +++ b/src/components/career/careerscomponent.tsx @@ -2,7 +2,7 @@ 'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; -import { MapPin, Clock, DollarSign, Building, Users, ChevronRight } from 'lucide-react'; +import { MapPin, Clock, Building, ChevronRight } from 'lucide-react'; import { careerService, Job, JobApplicationData } from '../../services/careerService'; import { fileUploadService } from '../../services/fileUploadService'; @@ -432,7 +432,7 @@ const Career: React.FC = () => { disabled={submitting} className="w-full px-3 py-2 text-xs border border-gray-300 rounded focus:outline-none focus:ring-2 focus:border-transparent disabled:bg-gray-100" style={{ '--tw-ring-color': '#012068', color:'#333' } as React.CSSProperties} - placeholder="Tell us why you're interested in this position..." + placeholder="Tell us why you're interested in this position..." /> diff --git a/src/components/education/EducationTraining.tsx b/src/components/education/EducationTraining.tsx index 7f82b4d..9aeec1e 100644 --- a/src/components/education/EducationTraining.tsx +++ b/src/components/education/EducationTraining.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from 'react'; import Image from 'next/image'; import Link from 'next/link'; -import { ChevronRight, Clock, Users, Award, Calendar, Globe, GraduationCap } from 'lucide-react'; +import { ChevronRight, Clock, Users, Award, Calendar } from 'lucide-react'; import { educationService, Course } from '../../services/educationService'; import { upcomingEventsService, UpcomingEvent } from '../../services/upcomingEventsService';