diff --git a/web-app/app/[locale]/email/verify/[id]/EmailVerifyPage.tsx b/web-app/app/[locale]/email/verify/[id]/EmailVerifyPage.tsx new file mode 100644 index 0000000..9181ffc --- /dev/null +++ b/web-app/app/[locale]/email/verify/[id]/EmailVerifyPage.tsx @@ -0,0 +1,110 @@ +'use client'; + +import { useTranslations } from 'next-intl'; +import { useState } from 'react'; +import { verifyTenantEmail } from '@/app/lib/actions/emailActions'; +import { CheckCircleIcon } from '@heroicons/react/24/outline'; + +interface EmailVerifyPageProps { + shareId: string; +} + +export default function EmailVerifyPage({ shareId }: EmailVerifyPageProps) { + const t = useTranslations('email-verify-page'); + const [isVerifying, setIsVerifying] = useState(false); + const [isVerified, setIsVerified] = useState(false); + const [error, setError] = useState(null); + + const handleVerify = async () => { + setIsVerifying(true); + setError(null); + + try { + const result = await verifyTenantEmail(shareId); + + if (result.success) { + setIsVerified(true); + } else { + setError(result.message || t('error.unknown')); + } + } catch (err) { + setError(t('error.unknown')); + } finally { + setIsVerifying(false); + } + }; + + if (isVerified) { + return ( +
+
+
+ +
+

+ {t('success.title')} +

+

{t('success.message')}

+
+
+ ); + } + + if (error) { + return ( +
+
+

{t('error.title')}

+

{error}

+
+
+ ); + } + + return ( +
+
+

{t('title')}

+ +
+
+

{t('about.title')}

+

{t('about.description')}

+
+ +
+

{t('why.title')}

+

{t('why.description')}

+
+ +
+

{t('what-happens.title')}

+

{t('what-happens.description')}

+
+ +
+

{t('opt-out.title')}

+

{t('opt-out.description')}

+
+
+ +
+ +
+
+
+ ); +} diff --git a/web-app/app/[locale]/email/verify/[id]/page.tsx b/web-app/app/[locale]/email/verify/[id]/page.tsx new file mode 100644 index 0000000..e7d4360 --- /dev/null +++ b/web-app/app/[locale]/email/verify/[id]/page.tsx @@ -0,0 +1,13 @@ +import { Suspense } from 'react'; +import EmailVerifyPage from './EmailVerifyPage'; +import { Main } from '@/app/ui/Main'; + +export default async function Page({ params: { id } }: { params: { id: string } }) { + return ( +
+ Loading...}> + + +
+ ); +} diff --git a/web-app/messages/en.json b/web-app/messages/en.json index ee19a79..6c16d66 100644 --- a/web-app/messages/en.json +++ b/web-app/messages/en.json @@ -415,6 +415,37 @@ "content": "If you have any questions about these Terms, please contact us at support@rezije.app." } }, + "email-verify-page": { + "title": "Verify Your Email Address", + "about": { + "title": "About Evidencija Režija", + "description": "Evidencija Režija is a utility bills tracking application that helps landlords manage their properties and notify tenants about rent and utility bills." + }, + "why": { + "title": "Why did you receive this email?", + "description": "Your landlord has configured the application to send rent due and/or utility bills notifications to your email address. To start receiving these notifications, you need to verify your email address." + }, + "what-happens": { + "title": "What happens after verification?", + "description": "After you verify your email address, you will receive notifications when rent is due and/or when utility bills are ready, depending on your landlord's configuration. Notifications are sent up to twice per month." + }, + "opt-out": { + "title": "Don't want to receive emails?", + "description": "You can ignore this email if you don't want to receive notifications. You can also unsubscribe at any time using the link included in every notification email." + }, + "button": { + "verify": "Verify Email Address", + "verifying": "Verifying..." + }, + "success": { + "title": "Email Verified!", + "message": "Your email address has been successfully verified. You will now receive notifications from your landlord." + }, + "error": { + "title": "Verification Failed", + "unknown": "An error occurred during verification. Please try again or contact your landlord." + } + }, "privacy-policy-page": { "title": "Privacy Policy for the Utility Bill Tracking Web App", "meta": { diff --git a/web-app/messages/hr.json b/web-app/messages/hr.json index 4f4529c..0f6c1a2 100644 --- a/web-app/messages/hr.json +++ b/web-app/messages/hr.json @@ -412,6 +412,37 @@ "content": "Ako imate bilo kakvih pitanja o ovim Uvjetima, kontaktirajte nas na support@rezije.app." } }, + "email-verify-page": { + "title": "Potvrdite Vašu Email Adresu", + "about": { + "title": "O aplikaciji Evidencija Režija", + "description": "Evidencija Režija je aplikacija za praćenje režija koja pomaže vlasnicicama nekretnina da upravljaju svojim objektima i obavještavaju zakupce o dospjeloj najamnini i režijama." + }, + "why": { + "title": "Zašto ste primili ovaj email?", + "description": "Vaš vlasnik nekretnine je konfigurirao aplikaciju da šalje obavijesti o dospjeloj najamnini i/ili režijama na vašu email adresu. Da biste počeli primati ove obavijesti, trebate potvrditi svoju email adresu." + }, + "what-happens": { + "title": "Što se događa nakon potvrde?", + "description": "Nakon što potvrdite svoju email adresu, primate ćete obavijesti kada najamnina dospije i/ili kada su režije spremne, ovisno o konfiguraciji vašeg vlasnika nekretnine. Obavijesti se šalju do dva puta mjesečno." + }, + "opt-out": { + "title": "Ne želite primati emailove?", + "description": "Možete zanemariti ovaj email ako ne želite primati obavijesti. Također se možete odjaviti u bilo kojem trenutku korištenjem linka koji je uključen u svakom emailu s obavijesti." + }, + "button": { + "verify": "Potvrdi Email Adresu", + "verifying": "Potvrđivanje..." + }, + "success": { + "title": "Email Potvrđen!", + "message": "Vaša email adresa je uspješno potvrđena. Sada ćete primati obavijesti od vašeg vlasnika nekretnine." + }, + "error": { + "title": "Potvrda Nije Uspjela", + "unknown": "Došlo je do greške prilikom potvrde. Molimo pokušajte ponovno ili kontaktirajte vašeg vlasnika nekretnine." + } + }, "privacy-policy-page": { "title": "Politika privatnosti za web aplikaciju za evidenciju režija", "meta": {