возможность выбрать и корректно отправить пол

This commit is contained in:
Nastya 2025-06-08 22:56:22 +03:00
parent 61c0357adc
commit 918b6bf145
4 changed files with 64 additions and 19 deletions

@ -7,14 +7,19 @@ const API_URL = `${process.env.REACT_APP_DOMAIN}/squiz`;
export interface AuditoryItem { export interface AuditoryItem {
id: number; id: number;
quiz_id: number; quiz_id: number;
sex: boolean; sex: number; // 0 - женский, 1 - мужской, 2 - оба
age: string; age: string;
deleted: boolean; deleted: boolean;
created_at: number; created_at: number;
} }
export interface AuditoryResponse { export interface AuditoryResponse {
data: AuditoryItem[]; ID: number;
quiz_id: number;
sex: number;
age: string;
deleted: boolean;
created_at: number;
} }
// Request Types // Request Types
@ -27,7 +32,7 @@ export interface AuditoryDeleteRequest {
} }
export interface AuditoryAddRequest { export interface AuditoryAddRequest {
sex: boolean; sex: number;
age: string; age: string;
} }

@ -75,7 +75,7 @@ export const AuditoryLink = ({ utmParams, item, index, onDelete }: AuditoryLinkP
}} /> }} />
</IconButton> </IconButton>
<IconButton edge="end" aria-label="info" sx={{ color: theme.palette.brightPurple.main, p: 0, width: 18, height: 18 }}> <IconButton edge="end" aria-label="info" sx={{ color: theme.palette.brightPurple.main, p: 0, width: 18, height: 18 }}>
<TooltipClickInfo title={`Пол: ${item.sex ? "мужской" : "женский"} \n Возраст: ${item.age}`} /> <TooltipClickInfo title={`Пол: ${item.sex === 0 ? "женский" : item.sex === 1 ? "мужской" : "оба"} \n Возраст: ${item.age}`} />
</IconButton> </IconButton>
<IconButton <IconButton
edge="end" edge="end"

@ -1,6 +1,7 @@
import { Box, FormControl, FormLabel, RadioGroup, FormControlLabel, Radio, useTheme, Button, useMediaQuery } from "@mui/material"; import { Box, FormControl, FormLabel, Checkbox, FormControlLabel, useTheme, Button, useMediaQuery } from "@mui/material";
import CheckboxIcon from "@icons/Checkbox"; import CheckboxIcon from "@icons/Checkbox";
import AgeInputWithSelect from "./AgeInputWithSelect"; import AgeInputWithSelect from "./AgeInputWithSelect";
import { useState } from "react";
interface GenderAndAgeSelectorProps { interface GenderAndAgeSelectorProps {
gender: string; gender: string;
@ -23,6 +24,33 @@ export default function GenderAndAgeSelector({
}: GenderAndAgeSelectorProps) { }: GenderAndAgeSelectorProps) {
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down(845)); const isMobile = useMediaQuery(theme.breakpoints.down(845));
const [maleChecked, setMaleChecked] = useState(false);
const [femaleChecked, setFemaleChecked] = useState(false);
const handleGenderChange = (type: 'male' | 'female', checked: boolean) => {
if (type === 'male') {
setMaleChecked(checked);
} else {
setFemaleChecked(checked);
}
// Обновляем значение gender в родительском компоненте
if (type === 'male' && checked && !femaleChecked) {
onGenderChange('1'); // Только мужской
} else if (type === 'female' && checked && !maleChecked) {
onGenderChange('0'); // Только женский
} else if (type === 'male' && checked && femaleChecked) {
onGenderChange('2'); // Оба пола
} else if (type === 'female' && checked && maleChecked) {
onGenderChange('2'); // Оба пола
} else if (type === 'male' && !checked && femaleChecked) {
onGenderChange('0'); // Только женский
} else if (type === 'female' && !checked && maleChecked) {
onGenderChange('1'); // Только мужской
} else {
onGenderChange(''); // Ничего не выбрано
}
};
return ( return (
<Box sx={{ display: 'flex', gap: 4, alignItems: "end", flexWrap: "wrap" }}> <Box sx={{ display: 'flex', gap: 4, alignItems: "end", flexWrap: "wrap" }}>
@ -43,18 +71,15 @@ export default function GenderAndAgeSelector({
}} }}
component="legend">Пол</FormLabel> component="legend">Пол</FormLabel>
</Box> </Box>
<RadioGroup <Box
sx={{ sx={{
width: "155px", width: "155px",
justifyContent: "space-between", justifyContent: "space-between",
mt: "20px", mt: "20px",
ml: "-9px" ml: "-9px",
display: 'flex',
gap: '10px'
}} }}
row
aria-label="gender"
name="row-radio-buttons-group"
value={gender}
onChange={(e) => onGenderChange(e.target.value)}
> >
<FormControlLabel <FormControlLabel
sx={{ sx={{
@ -81,8 +106,14 @@ export default function GenderAndAgeSelector({
}, },
m: 0, m: 0,
}} }}
value="male" control={
control={<Radio icon={<CheckboxIcon />} checkedIcon={<CheckboxIcon checked />} />} <Checkbox
icon={<CheckboxIcon />}
checkedIcon={<CheckboxIcon checked />}
checked={maleChecked}
onChange={(e) => handleGenderChange('male', e.target.checked)}
/>
}
label="М" label="М"
/> />
<FormControlLabel <FormControlLabel
@ -109,11 +140,17 @@ export default function GenderAndAgeSelector({
}, },
m: 0, m: 0,
}} }}
value="female" control={
control={<Radio icon={<CheckboxIcon />} checkedIcon={<CheckboxIcon checked />} />} <Checkbox
icon={<CheckboxIcon />}
checkedIcon={<CheckboxIcon checked />}
checked={femaleChecked}
onChange={(e) => handleGenderChange('female', e.target.checked)}
/>
}
label="Ж" label="Ж"
/> />
</RadioGroup> </Box>
</FormControl> </FormControl>
<FormControl sx={{ maxWidth: "420px", width: "100%", marginLeft: isMobile ? "0" : "120px", minWidth: "265px" }} variant="filled"> <FormControl sx={{ maxWidth: "420px", width: "100%", marginLeft: isMobile ? "0" : "120px", minWidth: "265px" }} variant="filled">

@ -25,6 +25,8 @@ export default function PersonalizationAI() {
const [isStartCreate, setStartCreate] = useState(false); const [isStartCreate, setStartCreate] = useState(false);
const [gender, setGender] = useState<string>(''); const [gender, setGender] = useState<string>('');
console.log("gender")
console.log(gender)
const [age, setAge] = useState<string>(''); const [age, setAge] = useState<string>('');
const [ageError, setAgeError] = useState(false); const [ageError, setAgeError] = useState(false);
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
@ -58,7 +60,7 @@ export default function PersonalizationAI() {
const [result, error] = await auditoryAdd({ const [result, error] = await auditoryAdd({
quizId: quiz.backendId, quizId: quiz.backendId,
body: { body: {
sex: gender === "male", sex: parseInt(gender),
age age
} }
}); });
@ -72,9 +74,10 @@ export default function PersonalizationAI() {
handleAdd({ handleAdd({
id: result.ID, id: result.ID,
quiz_id: quiz.backendId, quiz_id: quiz.backendId,
sex: gender === "male", sex: parseInt(gender),
age, age,
deleted: false, deleted: false,
created_at: Date.now()
}); });
enqueueSnackbar('Ссылка успешно добавлена', { variant: 'success' }); enqueueSnackbar('Ссылка успешно добавлена', { variant: 'success' });
resetForm(); resetForm();