diff --git a/apps/landing/src/app/(landings)/blog/_components/BlogNewsletter.tsx b/apps/landing/src/app/(landings)/blog/_components/BlogNewsletter.tsx index 9b64d1b..29db6e6 100644 --- a/apps/landing/src/app/(landings)/blog/_components/BlogNewsletter.tsx +++ b/apps/landing/src/app/(landings)/blog/_components/BlogNewsletter.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { Mail } from 'lucide-react'; +import { submitEmail } from '@/lib/actions/waitlistActions'; export const BlogNewsletter = () => { const [email, setEmail] = useState(''); @@ -13,28 +13,24 @@ export const BlogNewsletter = () => { setStatus('loading'); - // TODO: Integrate with email service - // For now, just simulate success - await new Promise((resolve) => setTimeout(resolve, 500)); - console.log('Newsletter subscription:', email); + const result = await submitEmail(email); - setStatus('success'); - setEmail(''); - - // Reset status after 3 seconds - setTimeout(() => setStatus('idle'), 3000); + if (result.success) { + setStatus('success'); + setEmail(''); + } else { + setStatus('error'); + setTimeout(() => setStatus('idle'), 3000); + } }; return (
-
- -

Subscribe to Banatie

-

- Get the latest technical articles, tutorials, and updates delivered right to your inbox. +

+ Get the latest articles and updates delivered to your inbox.

{ value={email} onChange={(e) => setEmail(e.target.value)} placeholder="your@email.com" - disabled={status === 'loading'} + disabled={status === 'loading' || status === 'success'} className="block w-full rounded-lg border border-white/10 bg-[#0B0F19] py-2 px-3 text-white text-sm placeholder:text-gray-600 focus:border-violet-500 focus:ring-1 focus:ring-violet-500 focus:outline-none disabled:opacity-50" />
diff --git a/apps/landing/src/app/(landings)/blog/_components/BlogPageHeader.tsx b/apps/landing/src/app/(landings)/blog/_components/BlogPageHeader.tsx index 2cf8255..2b5f05a 100644 --- a/apps/landing/src/app/(landings)/blog/_components/BlogPageHeader.tsx +++ b/apps/landing/src/app/(landings)/blog/_components/BlogPageHeader.tsx @@ -1,16 +1,47 @@ +'use client'; + +import { useState } from 'react'; + +type TabType = 'latest' | 'popular'; + interface BlogPageHeaderProps { title?: string; + onTabChange?: (tab: TabType) => void; } -export const BlogPageHeader = ({ title = 'Latest Articles' }: BlogPageHeaderProps) => { +export const BlogPageHeader = ({ + title = 'Latest Articles', + onTabChange, +}: BlogPageHeaderProps) => { + const [activeTab, setActiveTab] = useState('latest'); + + const handleTabClick = (tab: TabType) => { + setActiveTab(tab); + onTabChange?.(tab); + }; + return (

{title}

- -
diff --git a/apps/landing/src/app/(landings)/blog/page.tsx b/apps/landing/src/app/(landings)/blog/page.tsx index c55e4eb..9134650 100644 --- a/apps/landing/src/app/(landings)/blog/page.tsx +++ b/apps/landing/src/app/(landings)/blog/page.tsx @@ -1,13 +1,13 @@ import type { Metadata } from 'next'; -import { getAllPosts, getCategories } from './utils'; +import { getAllPosts } from './utils'; import { BlogBackground, BlogArticleCard, BlogPageHeader, - BlogSearchInput, - BlogCategories, + // BlogSearchInput, + // BlogCategories, BlogNewsletter, - BlogTags, + // BlogTags, } from './_components'; export const metadata: Metadata = { @@ -16,11 +16,11 @@ export const metadata: Metadata = { 'Articles, guides, and updates about AI-powered placeholder images.', }; -const defaultTags = ['ai', 'image-generation', 'api', 'midjourney', 'flux']; +// const defaultTags = ['ai', 'image-generation', 'api', 'midjourney', 'flux']; export default function BlogPage() { const posts = getAllPosts(); - const categories = getCategories(); + // const categories = getCategories(); return ( <> @@ -53,10 +53,10 @@ export default function BlogPage() {