mirror of
https://github.com/runyanjake/cooking.git
synced 2026-03-26 01:43:17 -07:00
63 lines
1.4 KiB
TypeScript
63 lines
1.4 KiB
TypeScript
'use client';
|
|
|
|
import { useState, useEffect } from 'react';
|
|
import quotes from '@/public/quotes.json';
|
|
|
|
interface Quote {
|
|
text: string;
|
|
author?: string;
|
|
link?: string;
|
|
}
|
|
|
|
function getDayOfYear(): number {
|
|
const now = new Date();
|
|
const start = new Date(now.getFullYear(), 0, 0);
|
|
const diff = now.getTime() - start.getTime();
|
|
return Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
}
|
|
|
|
export default function QuoteOfTheDay() {
|
|
const [quote, setQuote] = useState<Quote | null>(null);
|
|
|
|
useEffect(() => {
|
|
const index = getDayOfYear() % quotes.length;
|
|
setQuote(quotes[index] as Quote);
|
|
}, []);
|
|
|
|
if (!quote) {
|
|
return <p className="text-xl text-gray-600 dark:text-gray-400 max-w-2xl mx-auto"> </p>;
|
|
}
|
|
|
|
const content = quote.author ? (
|
|
<>
|
|
<span className="italic">“{quote.text}”</span>
|
|
<span> — {quote.author}</span>
|
|
</>
|
|
) : (
|
|
<span>{quote.text}</span>
|
|
);
|
|
|
|
const href = quote.link && !/^https?:\/\//.test(quote.link)
|
|
? `https://${quote.link}`
|
|
: quote.link;
|
|
|
|
const wrapper = href ? (
|
|
<a
|
|
href={href}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="hover:text-gray-900 dark:hover:text-gray-200 hover:underline transition-colors"
|
|
>
|
|
{content}
|
|
</a>
|
|
) : (
|
|
content
|
|
);
|
|
|
|
return (
|
|
<p className="text-xl text-gray-600 dark:text-gray-400 max-w-2xl mx-auto">
|
|
{wrapper}
|
|
</p>
|
|
);
|
|
}
|