возможность выбрать и корректно отправить пол
This commit is contained in:
parent
61c0357adc
commit
918b6bf145
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user