erp-platform/ui/src/views/public/Contact.tsx
2025-09-16 00:02:48 +03:00

202 lines
7.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useEffect, useState } from 'react'
import {
FaMailBulk,
FaPhone,
FaMapPin,
FaFileAlt,
FaBuilding,
FaCalendarAlt,
FaCalendarCheck,
FaRegComment,
} from 'react-icons/fa'
import { useLocalization } from '@/utils/hooks/useLocalization'
import { Helmet } from 'react-helmet'
import { ContactDto } from '@/proxy/contact/models'
import { getContact } from '@/services/contact'
const Contact: React.FC = () => {
const { translate } = useLocalization()
const [loading, setLoading] = useState(true)
const [contact, setContact] = useState<ContactDto>()
useEffect(() => {
setLoading(true)
const fetchServices = async () => {
try {
const result = await getContact()
setContact(result.data)
} catch (error) {
console.error('About alınırken hata oluştu:', error)
} finally {
setLoading(false)
}
}
fetchServices()
}, [])
if (loading) {
return (
<div className="flex items-center justify-center min-h-screen bg-gray-50">
<div className="text-center">
<div className="w-12 h-12 border-4 border-blue-500 border-t-transparent rounded-full animate-spin mx-auto"></div>
</div>
</div>
)
}
return (
<div className="min-h-screen bg-gray-50">
<Helmet
titleTemplate="%s | Sözsoft"
title={translate('::' + 'Public.contact.title')}
defaultTitle="Sözsoft"
></Helmet>
{/* Hero Section */}
<div className="relative bg-blue-900 text-white py-12">
<div
className="absolute inset-0 opacity-20"
style={{
backgroundImage:
'url("https://images.pexels.com/photos/3183171/pexels-photo-3183171.jpeg?auto=compress&cs=tinysrgb&w=1920")',
backgroundSize: 'cover',
backgroundPosition: 'center',
}}
></div>
<div className="container mx-auto pt-20 relative">
<h1 className="text-5xl font-bold ml-4 mt-3 mb-2 text-white">
{translate('::Public.contact.title')}
</h1>
<p className="text-xl max-w-3xl ml-4">{translate('::Public.contact.subtitle')}</p>
</div>
</div>
{/* Stats Section */}
<div className="py-16">
<div className="container mx-auto px-4">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12">
<div className="space-y-4">
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900">
{translate('::Public.contact.info.title')}
</h2>
<div className="space-y-4">
<div className="flex items-start space-x-2">
<FaMapPin className="w-5 h-5 text-blue-600 flex-shrink-0 mt-1" />
<div>
<p className="text-gray-600">{translate('::' + contact?.address)}</p>
</div>
</div>
<div className="flex items-start space-x-2">
<FaPhone className="w-5 h-5 text-blue-600 flex-shrink-0" />
<div>
<p className="text-gray-600">{contact?.phone}</p>
</div>
</div>
<div className="flex items-start space-x-2">
<FaMailBulk className="w-5 h-5 text-blue-600 flex-shrink-0" />
<div>
<p className="text-gray-600">
<a
href={`mailto:${contact?.email}`}
className="hover:underline text-blue-600"
>
{contact?.email}
</a>
</p>
</div>
</div>
<div className="flex items-start space-x-2">
<FaBuilding className="w-5 h-5 text-blue-600 flex-shrink-0" />
<div>
<p className="text-gray-600">{contact?.location}</p>
</div>
</div>
<div className="flex items-start space-x-2">
<FaFileAlt className="w-5 h-5 text-blue-600 flex-shrink-0" />
<div>
<p className="text-gray-600">{contact?.taxNumber}</p>
</div>
</div>
</div>
</div>
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900 mb-6">
{translate('::Public.contact.bank.title')}
</h2>
<div className="mb-2">
<img
src="/img/enpara.svg"
alt="Enpara Logo"
className="w-24 object-contain mt-1 flex-shrink-0"
/>
<div>
<h3 className="font-semibold text-gray-900 mb-1">
{contact?.bankDto.accountHolder}
</h3>
<p className="text-gray-600 mb-1 ml-1">{contact?.bankDto.branch}</p>
<p className="text-gray-600 mb-1 ml-1">{contact?.bankDto.accountNumber}</p>
<p className="text-gray-600 mb-1 ml-1">{contact?.bankDto.iban}</p>
</div>
</div>
</div>
{/* Bank Information */}
<div className="bg-white rounded-xl shadow-lg p-8">
<h2 className="text-2xl font-bold text-gray-900 mb-6">
{translate('::Public.contact.workHours')}
</h2>
<div className="space-y-2">
<div className="flex items-center space-x-2">
<FaCalendarAlt className="w-5 h-5 text-blue-500" />
<p className="text-gray-600">
{translate('::' + contact?.workHoursDto.weekday)}
</p>
</div>
<div className="flex items-center space-x-2">
<FaCalendarCheck className="w-5 h-5 text-blue-500" />
<p className="text-gray-600">
{translate('::' + contact?.workHoursDto.weekend)}
</p>
</div>
<div className="flex items-center space-x-2">
<FaRegComment className="w-5 h-5 text-green-500" />
<p className="text-gray-600">
{translate('::' + contact?.workHoursDto.whatsapp)}
</p>
</div>
</div>
</div>
</div>
{/* Map Section */}
<div className="bg-white rounded-xl shadow-lg p-2">
<h2 className="text-2xl font-bold text-gray-900 mb-8 text-center">
{translate('::' + contact?.mapDto.title)}
</h2>
<div className="aspect-w-16 aspect-h-9 bg-gray-200 rounded-xl overflow-hidden">
<iframe
src={contact?.mapDto.src}
width={contact?.mapDto.width}
style={{ border: 0 }}
height={contact?.mapDto.height}
allowFullScreen={contact?.mapDto.allowFullScreen}
loading={contact?.mapDto.loading as 'lazy' | 'eager' | undefined}
referrerPolicy={
contact?.mapDto.referrerPolicy as React.HTMLAttributeReferrerPolicy | undefined
}
></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
)
}
export default Contact