diff --git a/SurveyFrontend/public/arrow_drop_down.svg b/SurveyFrontend/public/arrow_drop_down.svg new file mode 100644 index 0000000..1d700de --- /dev/null +++ b/SurveyFrontend/public/arrow_drop_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/SurveyFrontend/public/arrow_drop_up.svg b/SurveyFrontend/public/arrow_drop_up.svg new file mode 100644 index 0000000..d891272 --- /dev/null +++ b/SurveyFrontend/public/arrow_drop_up.svg @@ -0,0 +1,3 @@ + + + diff --git a/SurveyFrontend/public/radio_button_unchecked.svg b/SurveyFrontend/public/radio_button_unchecked.svg new file mode 100644 index 0000000..a99050b --- /dev/null +++ b/SurveyFrontend/public/radio_button_unchecked.svg @@ -0,0 +1,3 @@ + + + diff --git a/SurveyFrontend/src/components/AnswerOption/AnswerOption.tsx b/SurveyFrontend/src/components/AnswerOption/AnswerOption.tsx index cd84857..8645966 100644 --- a/SurveyFrontend/src/components/AnswerOption/AnswerOption.tsx +++ b/SurveyFrontend/src/components/AnswerOption/AnswerOption.tsx @@ -1,14 +1,18 @@ import React, {useState, useRef, useEffect} from "react"; import styles from'./AnswerOption.module.css'; +const single_selected_response = '../../../public/radio_button_checked.svg'; +const multiple_selected_response = '../../../public/check_box.svg'; +// const single_response = + interface AnswerOptionProps{ - src: string; index: number; value: string; onChange: (value: string) => void; + selectedType: 'single' | 'multiply'; } -const AnswerOption: React.FC = ({src, index, value, onChange}) => { +const AnswerOption: React.FC = ({index, value, onChange, selectedType}) => { const [currentValue, setCurrentValue] = useState(value); const [isEditing, setIsEditing] = useState(false); //редактируется ли сейчас @@ -48,9 +52,17 @@ const AnswerOption: React.FC = ({src, index, value, onChange} } }, [isEditing]); + const getImage = (typeValue: string): string => { + if (typeValue === 'multiply') { + return multiple_selected_response; + } else { + return single_selected_response; + } + }; + return ( - + {isEditing ? ( = ({indexQuestion, initialTextQuestion = `Вопрос ${indexQuestion}`}) => { + const [selectedType, setSelectedType] = useState<'single' | 'multiply'>('single'); + const [answerOption, setAnswerOption] = useState(['']); - const [questionType] = useState('single'); const [textQuestion, setTextQuestion] = useState(initialTextQuestion); + const handleTypeChange = (type: 'single' | 'multiply') => { + setSelectedType(type); + } + const handleAddAnswer = () => { setAnswerOption([...answerOption, '']); }; @@ -33,17 +38,15 @@ const QuestionItem: React.FC = ({indexQuestion, initialTextQu - + {answerOption.map((answerText, index) => ( handleAnswerChange(index, value)} @@ -54,7 +57,7 @@ const QuestionItem: React.FC = ({indexQuestion, initialTextQu onClick={handleAddAnswer} /> - + ); } diff --git a/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.module.css b/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.module.css index f97ac79..681d004 100644 --- a/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.module.css +++ b/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.module.css @@ -1,9 +1,10 @@ /*TypeDropdown.module.css*/ .dropdownContainer { - width: 22%; + width: 23%; position: relative; display: inline-block; + margin-right: 29px; } .dropdownButton { @@ -16,53 +17,52 @@ cursor: pointer; display: flex; align-items: center; - justify-content: space-between; width: 118%; text-align: left; + white-space: nowrap; } .selectedTypeIcon { - margin-right: 5px; + margin-right: 4px; } .dropdownArrow { - margin-left: 5px; + margin-left: auto; } .dropdownList { margin-top: 11px; position: absolute; - top: 100%; - left: 0; background-color: #fff; border: 1px solid #ccc; border-radius: 5px; - padding: 5px 0; + padding: 12px; list-style: none; - z-index: 1; /* Убедитесь, что список отображается поверх других элементов */ - width: 100%; /* Занимает всю ширину контейнера */ - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + z-index: 1; + width: 100%; + box-shadow: 0 0 4.7px 0 #00000040; } .dropdownItem { - padding: 10px 15px; - cursor: pointer; display: flex; align-items: center; -} + margin-bottom: 14px; + padding: 0; + border: none; + background-color: #ffffff; -.dropdownItem:hover { - background-color: #f0f0f0; + /*cursor: pointer;*/ } .dropdownItemIcon { margin-right: 5px; + width: 24px; } .selectedTypeIcon, .dropdownItemIcon { - width: 20px; /* Задайте нужную ширину и высоту */ + width: 20px; height: 20px; margin-right: 5px; - vertical-align: middle; /* Выровняйте значок по вертикали */ + vertical-align: middle; } diff --git a/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.tsx b/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.tsx index 227555e..80e85ac 100644 --- a/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.tsx +++ b/SurveyFrontend/src/components/TypeDropdown/TypeDropdown.tsx @@ -5,18 +5,24 @@ import styles from './TypeDropdown.module.css' const single_selected = '../../../public/radio_button_checked.svg'; const multiple_selected = '../../../public/check_box.svg'; +const arrow_drop_down = '../../../public/arrow_drop_down.svg'; +const arrow_drop_up = '../../../public/arrow_drop_up.svg'; -const TypeDropdown: React.FC = () => { +interface TypeDropdownProps { + selectedType: 'single' | 'multiply'; + onTypeChange: (type: 'single' | 'multiply') => void; +} + +const TypeDropdown: React.FC = ({selectedType, onTypeChange}) => { const [isOpen, setIsOpen] = useState(false); - const [selectedType, setSelectedType] = useState('single'); const dropdownRef = useRef(null); const handleToggle = () =>{ setIsOpen(!isOpen); } - const handleSelect = (value: string) => { - setSelectedType(value); + const handleSelect = (value: 'single' | 'multiply') => { + onTypeChange(value); setIsOpen(false); } @@ -50,7 +56,11 @@ const TypeDropdown: React.FC = () => { className={styles.selectedTypeIcon} /> {selectedType === "single" ? "Одиночный выбор" : "Множественный выбор"} - ▼ + {isOpen && (