Fix remaining ESLint errors: replace img with Next.js Image, fix useEffect dependency, correct nodemailer method

This commit is contained in:
nmemmert committed 2025-10-23 08:19:18 -04:00
1 parent 8b189f4caa
commit 6a997d9931
5 files changed
+15 -13

No files matched your search

+1
View File
@@ -20,6 +20,7 @@ const eslintConfig = defineConfig([
"jest.setup.js", "jest.setup.js",
"next-i18next.config.js", "next-i18next.config.js",
"next.config.ts", "next.config.ts",
"src/dataconnect-generated/**",
]), ]),
]); ]);
+1 -1
View File
@@ -244,7 +244,7 @@ export async function GET() {
const smtpConfig = configDoc.data(); const smtpConfig = configDoc.data();
// Create transporter // Create transporter
const transporter = nodemailer.createTransporter({ const transporter = nodemailer.createTransport({
host: smtpConfig.host, host: smtpConfig.host,
port: smtpConfig.port, port: smtpConfig.port,
secure: smtpConfig.secure, secure: smtpConfig.secure,
+11 -10
View File
@@ -1,11 +1,12 @@
'use client'; 'use client';
import { useState, useEffect } from 'react'; import { useState, useEffect, useCallback } from 'react';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { storage, db } from '@/lib/firebase'; import { storage, db } from '@/lib/firebase';
import { ref, uploadBytes, getDownloadURL } from 'firebase/storage'; import { ref, uploadBytes, getDownloadURL } from 'firebase/storage';
import { doc, getDoc, updateDoc } from 'firebase/firestore'; import { doc, getDoc, updateDoc } from 'firebase/firestore';
import { useTheme } from 'next-themes'; import { useTheme } from 'next-themes';
import Image from 'next/image';
interface UserProfile { interface UserProfile {
avatarUrl?: string; avatarUrl?: string;
@@ -20,13 +21,7 @@ export default function Profile() {
const [uploading, setUploading] = useState(false); const [uploading, setUploading] = useState(false);
const [newCategory, setNewCategory] = useState(''); const [newCategory, setNewCategory] = useState('');
useEffect(() => { const loadProfile = useCallback(async () => {
if (user) {
loadProfile();
}
}, [user]);
const loadProfile = async () => {
if (!user) return; if (!user) return;
try { try {
const docRef = doc(db, 'users', user.uid); const docRef = doc(db, 'users', user.uid);
@@ -37,7 +32,13 @@ export default function Profile() {
} catch (error) { } catch (error) {
console.error('Error loading profile:', error); console.error('Error loading profile:', error);
} }
}; }, [user]);
useEffect(() => {
if (user) {
loadProfile();
}
}, [user, loadProfile]);
const handleAvatarUpload = async (e: React.ChangeEvent<HTMLInputElement>) => { const handleAvatarUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0]; const file = e.target.files?.[0];
@@ -88,7 +89,7 @@ export default function Profile() {
<div className="mb-6"> <div className="mb-6">
<label className="block mb-2 text-lg">Avatar</label> <label className="block mb-2 text-lg">Avatar</label>
{profile.avatarUrl && ( {profile.avatarUrl && (
<img src={profile.avatarUrl} alt="Avatar" className="w-20 h-20 rounded-full mb-2" /> <Image src={profile.avatarUrl} alt="Avatar" width={80} height={80} className="w-20 h-20 rounded-full mb-2" />
)} )}
<input <input
type="file" type="file"
+1 -2
View File
@@ -4,7 +4,6 @@ import { createContext, useContext, useEffect, useState, ReactNode } from 'react
import { User, signInWithEmailAndPassword, signOut, onAuthStateChanged, createUserWithEmailAndPassword } from 'firebase/auth'; import { User, signInWithEmailAndPassword, signOut, onAuthStateChanged, createUserWithEmailAndPassword } from 'firebase/auth';
import { auth, db, app } from '@/lib/firebase'; import { auth, db, app } from '@/lib/firebase';
import { doc, setDoc } from 'firebase/firestore'; import { doc, setDoc } from 'firebase/firestore';
import { getToken, onMessage } from 'firebase/messaging';
interface AuthContextType { interface AuthContextType {
user: User | null; user: User | null;
@@ -25,7 +24,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
// Register service worker for FCM // Register service worker for FCM
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/firebase-messaging-sw.js') navigator.serviceWorker.register('/firebase-messaging-sw.js')
.then((registration) => { .then(() => {
console.log('Service Worker registered for FCM'); console.log('Service Worker registered for FCM');
}) })
.catch((error) => { .catch((error) => {
+1
View File
@@ -31,6 +31,7 @@ export const db = getFirestore(app);
export const storage = getStorage(app); export const storage = getStorage(app);
// Initialize Firebase Analytics and get a reference to the service // Initialize Firebase Analytics and get a reference to the service
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let analytics: any = null; let analytics: any = null;
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
import('firebase/analytics').then(({ getAnalytics, isSupported }) => { import('firebase/analytics').then(({ getAnalytics, isSupported }) => {