push messages to telegram from contactUs form
This commit is contained in:
@@ -26,7 +26,8 @@ class TelegramSerializer(serializers.Serializer):
|
||||
("main", "Main"),
|
||||
("admin", "Admin"),
|
||||
("userAccount", "Account"),
|
||||
("contact-us", "Contact Us")
|
||||
("contactUs", "Contact Us"),
|
||||
("support", "Support")
|
||||
]
|
||||
|
||||
source = serializers.ChoiceField(choices=SOURCE_CHOICES)
|
||||
|
||||
@@ -18,7 +18,7 @@ GetMembershipData)
|
||||
urlpatterns = [
|
||||
path("v1/faq/", FAQView.as_view(), name='faqMain'),
|
||||
path("v1/news/", NewsView.as_view(), name="newsmain"),
|
||||
path("v1/send-message", TelegramMessageView.as_view(), name='send_message'),
|
||||
path("v1/send-message/", TelegramMessageView.as_view(), name='send_message'),
|
||||
path("v1/latest-routes/", LatestRoutesView.as_view(), name='latest_routes'),
|
||||
|
||||
path("auth/refresh/", RefreshTokenView.as_view(), name="token-refresh"),
|
||||
|
||||
@@ -137,15 +137,15 @@ export interface AccountSidebarProps {
|
||||
navigation: NavigationItem[]
|
||||
}
|
||||
|
||||
export type SourceType = 'main' | 'admin' | 'userAccount' | 'contactUs' | 'support'
|
||||
|
||||
export interface TelegramMessage {
|
||||
source: string
|
||||
source: SourceType
|
||||
name: string
|
||||
phone_number: string
|
||||
message: string
|
||||
}
|
||||
|
||||
export type SourceType = 'account' | 'contact-us'
|
||||
|
||||
export interface TextAreaProps {
|
||||
value: string
|
||||
handleChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void
|
||||
|
||||
@@ -32,7 +32,7 @@ const ContactUs = () => {
|
||||
message: '',
|
||||
},
|
||||
validationRules,
|
||||
async (values) => {
|
||||
async values => {
|
||||
try {
|
||||
await sendMessage(values)
|
||||
|
||||
@@ -42,20 +42,21 @@ const ContactUs = () => {
|
||||
})
|
||||
|
||||
resetField('message')
|
||||
} catch {
|
||||
} catch (error) {
|
||||
console.error('ContactUs - Error details:', error)
|
||||
showToast({ type: 'error', message: 'Ой, что то пошло не так..' })
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="rounded-2xl shadow overflow-hidden">
|
||||
<div className="p-6 bg-white sm:p-8">
|
||||
<div className="overflow-hidden rounded-2xl shadow">
|
||||
<div className="bg-white p-6 sm:p-8">
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-2xl">Хотели бы связаться с нами?</h2>
|
||||
<form className="space-y-4" onSubmit={handleSubmit}>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 h-full">
|
||||
<div className="space-y-4 h-full flex flex-col">
|
||||
<div className="grid h-full grid-cols-1 gap-6 md:grid-cols-2">
|
||||
<div className="flex h-full flex-col space-y-4">
|
||||
<TextInput
|
||||
label="Ваше имя"
|
||||
value={values.name}
|
||||
@@ -81,7 +82,7 @@ const ContactUs = () => {
|
||||
</div>
|
||||
<Button
|
||||
text="Отправить"
|
||||
className="text-sm font-semibold py-4 px-6 bg-black text-white flex items-center justify-center w-full rounded-2xl whitespace-nowrap"
|
||||
className="flex w-full items-center justify-center rounded-2xl bg-black px-6 py-4 text-sm font-semibold whitespace-nowrap text-white"
|
||||
type="submit"
|
||||
/>
|
||||
</form>
|
||||
|
||||
@@ -9,21 +9,24 @@ export const sendMessage = async (data: TelegramMessage) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const body = JSON.stringify({
|
||||
source: data.source,
|
||||
name: data.name,
|
||||
phone_number: data.phone_number,
|
||||
message: data.message,
|
||||
})
|
||||
|
||||
const response = await fetch(`${API_URL}/send-message/`, {
|
||||
method: 'POST',
|
||||
headers,
|
||||
body: JSON.stringify({
|
||||
source: data.source,
|
||||
name: data.name,
|
||||
phone_number: data.phone_number,
|
||||
message: data.message,
|
||||
}),
|
||||
body,
|
||||
})
|
||||
|
||||
if (!response.ok) {
|
||||
let errorMessage = `Failed to send form data: ${response.status} ${response.statusText}`
|
||||
try {
|
||||
const errorData = await response.text()
|
||||
|
||||
if (errorData) {
|
||||
errorMessage += ` - ${errorData}`
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
// export type SourceType = 'main' | 'admin' | 'userAccount' | 'contactUs' | 'support'
|
||||
import { SourceType } from '@/app/types'
|
||||
|
||||
const pathToSourceMap: Record<string, SourceType> = {
|
||||
techSupport: 'contact-us', // берем в кавычки значение с дефисом
|
||||
account: 'account',
|
||||
'account/support': 'support',
|
||||
'': 'main', // без слеша -- так работает usePathname
|
||||
'contact-us': 'contactUs', // URL путь с дефисом -> значение в camelCase
|
||||
}
|
||||
|
||||
export const getSourceFromPath = (pathname: string): SourceType => {
|
||||
const cleanPath = pathname.replace(/^\//, '')
|
||||
|
||||
const source = pathToSourceMap[cleanPath] || 'contact-us' // дефолтное значение
|
||||
// console.log('Final source:', source)
|
||||
|
||||
// для путей аккаунта (кроме support)
|
||||
if (cleanPath.startsWith('account/') && cleanPath !== 'account/support') {
|
||||
return 'userAccount'
|
||||
}
|
||||
const source = pathToSourceMap[cleanPath] || 'contactUs' // дефолтное значение
|
||||
return source
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user