2023-12-25 23:46:28 +00:00
import { Box , Typography , Button , Paper , TextField , Link , InputAdornment , useTheme } from "@mui/material" ;
2023-12-16 12:33:06 +00:00
import NameIcon from "@icons/ContactFormIcon/NameIcon" ;
import EmailIcon from "@icons/ContactFormIcon/EmailIcon" ;
import PhoneIcon from "@icons/ContactFormIcon/PhoneIcon" ;
import TextIcon from "@icons/ContactFormIcon/TextIcon" ;
import AddressIcon from "@icons/ContactFormIcon/AddressIcon" ;
2023-12-15 12:12:36 +00:00
import { useCurrentQuiz } from "@root/quizes/hooks" ;
2023-12-21 11:47:34 +00:00
import { NameplateLogo } from "@icons/NameplateLogo" ;
2023-12-16 12:33:06 +00:00
import CustomCheckbox from "@ui_kit/CustomCheckbox" ;
import { useState } from "react" ;
2023-12-16 09:36:35 +00:00
import { useQuestionsStore } from "@root/questions/store" ;
2023-12-23 17:24:32 +00:00
import { checkEmptyData } from "../ResultPage/cards/ResultCard" ;
2023-12-16 09:36:35 +00:00
import type { AnyTypedQuizQuestion } from "../../model/questionTypes/shared" ;
2023-12-25 23:46:28 +00:00
import { modes } from "../../utils/themes/Publication/themePublication" ;
2023-12-23 15:29:33 +00:00
import { enqueueSnackbar } from "notistack" ;
2023-12-15 12:12:36 +00:00
type ContactFormProps = {
2023-12-16 09:36:35 +00:00
currentQuestion : AnyTypedQuizQuestion ;
2023-12-15 12:12:36 +00:00
showResultForm : boolean ;
setShowContactForm : ( show : boolean ) = > void ;
setShowResultForm : ( show : boolean ) = > void ;
} ;
2023-12-16 12:33:06 +00:00
const icons = [
{ type : "name" , icon : NameIcon , defaultText : "Введите имя" , defaultTitle : "имя" } ,
{ type : "email" , icon : EmailIcon , defaultText : "Введите Email" , defaultTitle : "Email" } ,
{ type : "phone" , icon : PhoneIcon , defaultText : "Введите номер телефона" , defaultTitle : "номер телефона" } ,
{ type : "text" , icon : TextIcon , defaultText : "Введите фамилию" , defaultTitle : "фамилию" } ,
{ type : "address" , icon : AddressIcon , defaultText : "Введите адрес" , defaultTitle : "адрес" } ,
]
2023-12-15 12:12:36 +00:00
export const ContactForm = ( {
2023-12-16 09:36:35 +00:00
currentQuestion ,
2023-12-15 12:12:36 +00:00
showResultForm ,
setShowContactForm ,
setShowResultForm ,
} : ContactFormProps ) = > {
const quiz = useCurrentQuiz ( ) ;
2023-12-25 23:46:28 +00:00
const mode = modes ;
2023-12-16 09:36:35 +00:00
const { questions } = useQuestionsStore ( ) ;
2023-12-25 23:46:28 +00:00
const theme = useTheme ( ) ;
2023-12-16 12:33:06 +00:00
const [ ready , setReady ] = useState ( false )
2023-12-15 12:12:36 +00:00
const followNextForm = ( ) = > {
setShowContactForm ( false ) ;
setShowResultForm ( true ) ;
} ;
2023-12-23 17:24:32 +00:00
const resultQuestion = questions . find ( ( question ) = > {
if ( quiz ? . config . haveRoot ) { //ветвимся
return (
question . type === "result" &&
question . content . rule . parentId === currentQuestion . content . id
)
} else { // не ветвимся
return (
question . type === "result" &&
question . content . rule . parentId === "line"
)
}
}
2023-12-16 09:36:35 +00:00
) ;
2023-12-23 17:24:32 +00:00
2023-12-15 12:12:36 +00:00
return (
2023-12-16 12:33:06 +00:00
< Box
sx = { {
display : "flex" ,
alignItems : "center" ,
justifyContent : "center" ,
2023-12-25 23:46:28 +00:00
backgroundColor : theme.palette.background.default ,
2023-12-16 12:33:06 +00:00
height : "100vh"
} }
>
< Box
sx = { {
2023-12-29 23:11:37 +00:00
width : "530px" ,
borderRadius : "4px" ,
boxShadow : "rgba(0, 0, 0, 0.2) 0px 2px 1px -1px, rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px"
2023-12-16 12:33:06 +00:00
} }
>
< Box >
< Typography
sx = { {
textAlign : "center" ,
m : "20px 0" ,
2023-12-25 23:46:28 +00:00
fontSize : "28px" ,
color : theme.palette.text.primary
2023-12-16 12:33:06 +00:00
} }
>
2023-12-16 20:52:01 +00:00
{ quiz ? . config . formContact . title || "Заполните форму, чтобы получить результаты теста" }
2023-12-21 11:47:34 +00:00
2023-12-16 12:33:06 +00:00
< / Typography >
2023-12-16 20:52:01 +00:00
{
quiz ? . config . formContact . desc &&
2023-12-21 11:47:34 +00:00
< Typography
sx = { {
textAlign : "center" ,
m : "20px 0" ,
fontSize : "18px"
} }
>
{ quiz ? . config . formContact . desc }
< / Typography >
2023-12-16 20:52:01 +00:00
}
2023-12-16 12:33:06 +00:00
< / Box >
2023-12-29 23:11:37 +00:00
< Box
2023-12-16 12:33:06 +00:00
sx = { {
display : "flex" ,
alignItems : "center" ,
justifyContent : "center" ,
flexDirection : "column" ,
2023-12-25 23:46:28 +00:00
backgroundColor : theme.palette.background.default ,
2023-12-16 12:33:06 +00:00
p : "30px"
} } >
< Box
sx = { {
display : "flex" ,
flexDirection : "column" ,
my : "20px"
} }
>
2023-12-16 20:52:01 +00:00
< Inputs / >
2023-12-16 12:33:06 +00:00
< / Box >
2023-12-16 15:59:36 +00:00
{
// resultQuestion &&
// quiz?.config.resultInfo.when === "after" &&
(
< Button
disabled = { ! ready }
2023-12-16 20:17:42 +00:00
variant = "contained" onClick = { ( ) = > {
2023-12-23 17:24:32 +00:00
if ( quiz ? . config . resultInfo . when === "after" && ! checkEmptyData ( { resultData : resultQuestion } ) ) {
setShowContactForm ( false )
setShowResultForm ( true )
}
2023-12-16 20:17:42 +00:00
} } >
2023-12-24 15:03:46 +00:00
{ quiz ? . config . formContact ? . button || "Получить результаты" }
2023-12-16 15:59:36 +00:00
< / Button >
) }
2023-12-16 12:33:06 +00:00
< Box
sx = { {
display : "flex" ,
mt : "20px" ,
width : "450px" ,
} }
>
2023-12-25 23:46:28 +00:00
< CustomCheckbox label = "" handleChange = { ( { target } ) = > { setReady ( target . checked ) } } checked = { ready } colorIcon = { theme . palette . primary . main } / >
2023-12-16 12:33:06 +00:00
< Typography >
2023-12-25 23:46:28 +00:00
С & ensp ;
< Link > П о л о ж е н и е м о б о б р а б о т к е п е р с о н а л ь н ы х д а н н ы х < / Link >
& ensp ; и & ensp ;
< Link > П о л и т и к о й к о н ф и д е н ц и а л ь н о с т и < / Link >
& ensp ; о з н а к о м л е н
2023-12-16 12:33:06 +00:00
< / Typography >
< / Box >
2023-12-21 11:47:34 +00:00
< Box
sx = { {
display : "flex" ,
alignItems : "center" ,
2023-12-25 23:46:28 +00:00
mt : "20px" ,
gap : "15px"
2023-12-21 11:47:34 +00:00
} }
>
2023-12-25 23:46:28 +00:00
< NameplateLogo style = { { fontSize : "34px" , color : mode [ quiz . config . theme ] ? "#151515" : "#FFFFFF" } } / >
< Typography sx = { { fontSize : "20px" , color : mode [ quiz . config . theme ] ? "#4D4D4D" : "#F5F7FF" , whiteSpace : "nowrap" } } >
С д е л а н о н а PenaQuiz
< / Typography >
2023-12-21 11:47:34 +00:00
< / Box >
2023-12-29 23:11:37 +00:00
< / Box >
2023-12-16 15:59:36 +00:00
< / B o x >
< / B o x >
2023-12-15 12:12:36 +00:00
) ;
} ;
2023-12-16 12:33:06 +00:00
2023-12-23 15:29:33 +00:00
const Inputs = ( currentQuestion : any ) = > {
2023-12-16 20:52:01 +00:00
const quiz = useCurrentQuiz ( ) ;
2023-12-23 15:29:33 +00:00
const { questions } = useQuestionsStore ( )
2023-12-16 20:52:01 +00:00
2023-12-23 15:29:33 +00:00
const [ name , setName ] = useState ( "" )
const [ email , setEmail ] = useState ( "" )
const [ phone , setPhone ] = useState ( "" )
const [ text , setText ] = useState ( "" )
const [ adress , setAdress ] = useState ( "" )
2023-12-21 11:47:34 +00:00
2023-12-23 15:29:33 +00:00
//@ts-ignore
const FC : any = quiz ? . config . formContact . fields
console . log ( FC )
//@ts-ignore
const Name = < CustomInput onChange = { ( { target } ) = > setName ( target . value ) } id = { name } title = { FC [ "name" ] . innerText || "Введите имя" } desc = { FC [ "name" ] . text || "имя" } Icon = { NameIcon } / >
//@ts-ignore
const Email = < CustomInput onChange = { ( { target } ) = > setEmail ( target . value ) } id = { email } title = { FC [ "email" ] . innerText || "Введите Email" } desc = { FC [ "email" ] . text || "Email" } Icon = { EmailIcon } / >
//@ts-ignore
const Phone = < CustomInput onChange = { ( { target } ) = > setPhone ( target . value ) } id = { phone } title = { FC [ "phone" ] . innerText || "Введите номер телефона" } desc = { FC [ "phone" ] . text || "номер телефона" } Icon = { PhoneIcon } / >
//@ts-ignore
const Text = < CustomInput onChange = { ( { target } ) = > setText ( target . value ) } id = { text } title = { FC [ "text" ] . innerText || "Введите фамилию" } desc = { FC [ "text" ] . text || "фамилию" } Icon = { TextIcon } / >
//@ts-ignore
const Adress = < CustomInput onChange = { ( { target } ) = > setAdress ( target . value ) } id = { adress } title = { FC [ "address" ] . innerText || "Введите адрес" } desc = { FC [ "address" ] . text || "адрес" } Icon = { AddressIcon } / >
//@ts-ignore
2023-12-29 23:11:37 +00:00
if ( Object . values ( FC ) . some ( ( data ) = > data . used ) ) {
2023-12-23 15:29:33 +00:00
return < >
{ FC [ "name" ] . used ? Name : < > < / > }
{ FC [ "email" ] . used ? Email : < > < / > }
{ FC [ "phone" ] . used ? Phone : < > < / > }
{ FC [ "text" ] . used ? Text : < > < / > }
{ FC [ "address" ] . used ? Adress : < > < / > }
< / >
2023-12-16 20:52:01 +00:00
} else {
return < >
2023-12-23 15:29:33 +00:00
{ Name }
{ Email }
{ Phone }
2023-12-16 20:52:01 +00:00
< / >
}
}
2023-12-23 15:29:33 +00:00
2023-12-16 12:33:06 +00:00
const CustomInput = ( { title , desc , Icon } : any ) = > {
return < Box m = "15px 0" >
< Typography mb = "7px" > { title } < / Typography >
< TextField
sx = { {
width : "350px" ,
} }
placeholder = { desc }
InputProps = { {
2023-12-16 20:17:42 +00:00
startAdornment : < InputAdornment position = "start" > < Icon color = "gray" / > < / InputAdornment > ,
2023-12-16 12:33:06 +00:00
} }
/ >
< / Box >
2023-12-16 15:59:36 +00:00
}