diff --git a/src/model/questionTypes/text.ts b/src/model/questionTypes/text.ts
index c38101aa..b8b47909 100644
--- a/src/model/questionTypes/text.ts
+++ b/src/model/questionTypes/text.ts
@@ -1,4 +1,4 @@
-import type { QuizQuestionBase, QuestionHint, PreviewRule } from "./shared";
+import type { PreviewRule, QuestionHint, QuizQuestionBase } from "./shared";
export interface QuizQuestionText extends QuizQuestionBase {
type: "text";
@@ -13,7 +13,7 @@ export interface QuizQuestionText extends QuizQuestionBase {
required: boolean;
/** Чекбокс "Автозаполнение адреса" */
autofill: boolean;
- answerType: "single" | "multi";
+ answerType: "single" | "multi" | "numberOnly";
hint: QuestionHint;
rule: PreviewRule;
back: string;
diff --git a/src/pages/Questions/DataOptions/settingData.tsx b/src/pages/Questions/DataOptions/settingData.tsx
index 59044ab4..9b9f290a 100644
--- a/src/pages/Questions/DataOptions/settingData.tsx
+++ b/src/pages/Questions/DataOptions/settingData.tsx
@@ -4,13 +4,17 @@ import CustomCheckbox from "@ui_kit/CustomCheckbox";
import type { QuizQuestionDate } from "../../../model/questionTypes/date";
type SettingsDataProps = {
- question: QuizQuestionDate;
+ questionId: string;
+ isRequired: boolean;
+ isDateRange: boolean;
+ isTime: boolean;
};
-export default function SettingsData({ question }: SettingsDataProps) {
+export default function SettingsData({ questionId, isRequired, isDateRange, isTime }: SettingsDataProps) {
const theme = useTheme();
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
const isMobile = useMediaQuery(theme.breakpoints.down(790));
+ const isTablet = useMediaQuery(theme.breakpoints.down(900));
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
return (
@@ -18,19 +22,66 @@ export default function SettingsData({ question }: SettingsDataProps) {
sx={{
display: "flex",
justifyContent: "space-between",
- flexDirection: isWrappColumn ? "column" : null,
+ flexDirection: isTablet ? "column" : "row",
+ marginRight: isFigmaTablte ? (isMobile ? "0" : "0px") : "30px",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
+
+ Настройки ответов
+
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.dateRange = target.checked;
+ });
+ }}
+ />
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.time = target.checked;
+ });
+ }}
+ />
+
+
{
- updateQuestion(question.id, (question) => {
+ updateQuestion(questionId, (question) => {
question.content.required = !target.checked;
});
}}
diff --git a/src/pages/Questions/DataOptions/switchData.tsx b/src/pages/Questions/DataOptions/switchData.tsx
index 805eecd6..18c2997b 100644
--- a/src/pages/Questions/DataOptions/switchData.tsx
+++ b/src/pages/Questions/DataOptions/switchData.tsx
@@ -7,13 +7,17 @@ interface Props {
question: QuizQuestionDate;
}
-export default function SwitchData({
- switchState = "setting",
- question,
-}: Props) {
+export default function SwitchData({ switchState = "setting", question }: Props) {
switch (switchState) {
case "setting":
- return ;
+ return (
+
+ );
case "help":
return (
(function ({
- questionId,
- isRequired,
-}) {
+const SettingEmoji = memo(function ({ questionId, isRequired, isMulti, isOwn }) {
const theme = useTheme();
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
+ const isTablet = useMediaQuery(theme.breakpoints.down(985));
const isMobile = useMediaQuery(theme.breakpoints.down(790));
return (
@@ -24,13 +25,58 @@ const SettingEmoji = memo(function ({
display: "flex",
justifyContent: "space-between",
flexDirection: isWrappColumn ? "column" : "none",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
+
+
+ Настройки ответов
+
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.multi = target.checked;
+ });
+ }}
+ />
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.own = target.checked;
+ });
+ }}
+ />
+
);
case "help":
diff --git a/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx b/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
index d910360f..5e0535b5 100644
--- a/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
+++ b/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
@@ -4,21 +4,20 @@ import CustomCheckbox from "@ui_kit/CustomCheckbox";
import CustomTextField from "@ui_kit/CustomTextField";
import type { QuizQuestionVarImg } from "../../../model/questionTypes/varimg";
import { memo } from "react";
+import type { QuizQuestionVariant } from "@model/questionTypes/variant";
type SettingOptionsAndPictProps = {
questionId: string;
replText: string;
isRequired: boolean;
+ isOwn: boolean;
};
-const SettingOptionsAndPict = memo(function ({
- questionId,
- replText,
- isRequired,
-}) {
+const SettingOptionsAndPict = memo(function ({ questionId, replText, isRequired, isOwn }) {
const theme = useTheme();
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
+ const isTablet = useMediaQuery(theme.breakpoints.down(985));
const isMobile = useMediaQuery(theme.breakpoints.down(680));
const setReplText = (replText: string) => {
@@ -36,13 +35,14 @@ const SettingOptionsAndPict = memo(function ({
display: "flex",
justifyContent: "space-between",
flexDirection: isWrappColumn ? "column" : "none",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
(function ({
>
Настройки ответов
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.own = target.checked;
+ });
+ }}
+ />
{!isWrappColumn && (
(function ({
(function ({
}
/>
{isWrappColumn && (
- <>
+
(function ({
maxLength={60}
onChange={({ target }) => setReplText(target.value)}
/>
- >
+
)}
diff --git a/src/pages/Questions/OptionsAndPicture/switchOptionsAndPict.tsx b/src/pages/Questions/OptionsAndPicture/switchOptionsAndPict.tsx
index 018fb0a9..2243f045 100644
--- a/src/pages/Questions/OptionsAndPicture/switchOptionsAndPict.tsx
+++ b/src/pages/Questions/OptionsAndPicture/switchOptionsAndPict.tsx
@@ -8,10 +8,7 @@ interface Props {
question: QuizQuestionVarImg;
}
-export default function SwitchOptionsAndPict({
- switchState = "setting",
- question,
-}: Props) {
+export default function SwitchOptionsAndPict({ switchState = "setting", question }: Props) {
switch (switchState) {
case "setting":
return (
@@ -19,6 +16,7 @@ export default function SwitchOptionsAndPict({
questionId={question.id}
replText={question.content.replText}
isRequired={question.content.required}
+ isOwn={question.content.own}
/>
);
case "help":
@@ -30,12 +28,7 @@ export default function SwitchOptionsAndPict({
/>
);
case "image":
- return (
-
- );
+ return ;
default:
return null;
}
diff --git a/src/pages/Questions/OptionsPicture/settingOpytionsPict.tsx b/src/pages/Questions/OptionsPicture/settingOpytionsPict.tsx
index ee1b061a..770327db 100644
--- a/src/pages/Questions/OptionsPicture/settingOpytionsPict.tsx
+++ b/src/pages/Questions/OptionsPicture/settingOpytionsPict.tsx
@@ -1,10 +1,4 @@
-import {
- Box,
- Button,
- Typography,
- useMediaQuery,
- useTheme,
-} from "@mui/material";
+import { Box, Button, Typography, useMediaQuery, useTheme } from "@mui/material";
import { updateQuestion } from "@root/questions/actions";
import CustomCheckbox from "@ui_kit/CustomCheckbox";
import ProportionsIcon11 from "../../../assets/icons/questionsPage/ProportionsIcon11";
@@ -12,6 +6,9 @@ import ProportionsIcon12 from "../../../assets/icons/questionsPage/ProportionsIc
import ProportionsIcon21 from "../../../assets/icons/questionsPage/ProportionsIcon21";
import type { QuizQuestionImages } from "../../../model/questionTypes/images";
import { memo } from "react";
+import type { QuizQuestionVariant } from "@model/questionTypes/variant";
+import FormatIcon1 from "../../../assets/icons/questionsPage/FormatIcon1";
+import FormatIcon2 from "../../../assets/icons/questionsPage/FormatIcon2";
type Proportion = "1:1" | "2:1" | "1:2";
@@ -26,14 +23,34 @@ const PROPORTIONS: ProportionItem[] = [
{ value: "1:2", icon: ProportionsIcon12 },
];
+type Format = "carousel" | "masonry";
+
+type FormatItem = {
+ value: Format;
+ icon: (props: { color: string }) => JSX.Element;
+};
+
+const FORMATS: FormatItem[] = [
+ { value: "masonry", icon: FormatIcon2 },
+ { value: "carousel", icon: FormatIcon1 },
+];
+
type SettingOpytionsPictProps = {
questionId: string;
isRequired: boolean;
+ isMulti: boolean;
+ isOwn: boolean;
+ proportions: Proportion;
+ format: Format;
};
const SettingOptionsPict = memo(function ({
questionId,
isRequired,
+ isMulti,
+ isOwn,
+ proportions,
+ format,
}) {
const theme = useTheme();
const isTablet = useMediaQuery(theme.breakpoints.down(985));
@@ -47,38 +64,167 @@ const SettingOptionsPict = memo(function ({
justifyContent: "space-between",
flexDirection: isTablet ? "column" : null,
marginRight: isFigmaTablte ? (isMobile ? "0" : "0px") : "30px",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
-
-
+
- Настройки вопросов
-
-
- updateQuestion(questionId, (question) => {
- if (question.type !== "images") return;
+
+ Пропорции
+
+
+ {PROPORTIONS.map((proportionItem, index) => (
+ {
+ updateQuestion(questionId, (question) => {
+ if (question.type !== "images") return;
+ question.content.xy = proportionItem.value;
+ });
+ }}
+ />
+ ))}
+
+
+
+
+ Настройки ответов
+
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.multi = target.checked;
+ });
+ }}
+ />
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.own = target.checked;
+ });
+ }}
+ />
+
+
+
+
+
+ Формат
+
+
+ {FORMATS.map((formatItem, index) => (
+ {
+ updateQuestion(questionId, (question) => {
+ if (question.type !== "images") return;
+ question.content.format = formatItem.value;
+ });
+ }}
+ />
+ ))}
+
+
+
+ Настройки вопросов
+
+ updateQuestion(questionId, (question) => {
+ if (question.type !== "images") return;
- question.content.required = !target.checked;
- })
- }
- />
+ question.content.required = !target.checked;
+ })
+ }
+ />
+
);
@@ -101,23 +247,13 @@ export function SelectIconButton({ Icon, isActive = false, onClick }: Props) {
- }
+ startIcon={}
sx={{
backgroundColor: isActive ? theme.palette.brightPurple.main : "#eee4fc",
borderRadius: 0,
border: "none",
- color: isActive
- ? theme.palette.brightPurple.main
- : theme.palette.grey2.main,
+ color: isActive ? theme.palette.brightPurple.main : theme.palette.grey2.main,
p: "7px",
width: "40px",
height: "40px",
@@ -128,9 +264,7 @@ export function SelectIconButton({ Icon, isActive = false, onClick }: Props) {
},
"&:hover": {
border: "none",
- borderColor: isActive
- ? theme.palette.brightPurple.main
- : theme.palette.grey2.main,
+ borderColor: isActive ? theme.palette.brightPurple.main : theme.palette.grey2.main,
},
}}
/>
diff --git a/src/pages/Questions/OptionsPicture/switchOptionsPict.tsx b/src/pages/Questions/OptionsPicture/switchOptionsPict.tsx
index 3e16d64a..10f983a8 100644
--- a/src/pages/Questions/OptionsPicture/switchOptionsPict.tsx
+++ b/src/pages/Questions/OptionsPicture/switchOptionsPict.tsx
@@ -7,16 +7,17 @@ interface Props {
question: QuizQuestionImages;
}
-export default function SwitchAnswerOptionsPict({
- switchState = "setting",
- question,
-}: Props) {
+export default function SwitchAnswerOptionsPict({ switchState = "setting", question }: Props) {
switch (switchState) {
case "setting":
return (
);
case "help":
diff --git a/src/pages/Questions/OwnTextField/settingTextField.tsx b/src/pages/Questions/OwnTextField/settingTextField.tsx
index d9e22ce2..e085b262 100644
--- a/src/pages/Questions/OwnTextField/settingTextField.tsx
+++ b/src/pages/Questions/OwnTextField/settingTextField.tsx
@@ -1,31 +1,36 @@
-import { Box, Typography, useMediaQuery, useTheme } from "@mui/material";
+import { Box, FormControlLabel, Radio, RadioGroup, Typography, useMediaQuery, useTheme } from "@mui/material";
import { updateQuestion } from "@root/questions/actions";
import CustomCheckbox from "@ui_kit/CustomCheckbox";
import type { QuizQuestionText } from "../../../model/questionTypes/text";
import { memo } from "react";
+import RadioCheck from "@ui_kit/RadioCheck";
+import RadioIcon from "@ui_kit/RadioIcon";
+
+type Answer = "single" | "multi" | "numberOnly";
+
+type AnswerItem = {
+ name: string;
+ value: Answer;
+};
+
+const ANSWER_TYPES: AnswerItem[] = [
+ { name: "Однострочное", value: "single" },
+ { name: "Многострочное", value: "multi" },
+ { name: "Только числа", value: "numberOnly" },
+];
type SettingTextFieldProps = {
questionId: string;
isRequired: boolean;
+ isAutofill: boolean;
+ answerType: Answer;
};
-type Answer = {
- name: string;
- value: "single" | "multi";
-};
-
-const ANSWER_TYPES: Answer[] = [
- { name: "Однострочное", value: "single" },
- { name: "Многострочное", value: "multi" },
-];
-
-const SettingTextField = memo(function ({
- questionId,
- isRequired,
-}) {
+const SettingTextField = memo(function ({ questionId, isRequired, isAutofill, answerType }) {
const theme = useTheme();
const isWrappColumn = useMediaQuery(theme.breakpoints.down(980));
const isMobile = useMediaQuery(theme.breakpoints.down(790));
+ const isTablet = useMediaQuery(theme.breakpoints.down(900));
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
return (
@@ -33,19 +38,67 @@ const SettingTextField = memo(function ({
sx={{
display: "flex",
justifyContent: "space-between",
- flexDirection: isWrappColumn ? "column" : null,
- marginRight: isFigmaTablte ? "0px" : "32px",
+ flexDirection: isTablet ? "column" : "row",
+ marginRight: isFigmaTablte ? (isMobile ? "0" : "0px") : "30px",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
+
+ Настройки ответов
+
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.answerType = event.target.value as Answer;
+ });
+ }}
+ sx={{
+ display: "flex",
+ flexDirection: "column",
+ }}
+ >
+ {ANSWER_TYPES.map((answerTypeItem, index) => (
+ } icon={} />}
+ label={answerTypeItem.name}
+ sx={{
+ color: theme.palette.grey2.main,
+ }}
+ />
+ ))}
+
+
+
(function ({
>
Настройки вопросов
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.autofill = e.target.checked;
+ });
+ }}
+ />
);
case "image":
- return (
-
- );
+ return ;
case "help":
return (
(function ({ questionId, isRequired }) {
+const ResponseSettings = memo(function ({ questionId, isRequired, isLargeCheck, isMulti, isOwn }) {
const theme = useTheme();
const isTablet = useMediaQuery(theme.breakpoints.down(900));
const isFigmaTablte = useMediaQuery(theme.breakpoints.down(990));
@@ -20,16 +23,72 @@ const ResponseSettings = memo(function ({ questionId, isRequired }) {
sx={{
display: "flex",
justifyContent: "space-between",
- flexDirection: isTablet ? "column" : "none",
+ flexDirection: isTablet ? "column" : "row",
marginRight: isFigmaTablte ? (isMobile ? "0" : "0px") : "30px",
+ pb: "20px",
+ pl: "20px",
+ pt: isTablet ? "5px" : "0px",
}}
>
+
+ Настройки ответов
+
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.largeCheck = target.checked;
+ });
+ }}
+ />
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.multi = target.checked;
+ });
+ }}
+ />
+ {
+ updateQuestion(questionId, (question) => {
+ question.content.own = target.checked;
+ });
+ }}
+ />
+
+
);
case "help":
@@ -29,12 +29,7 @@ export default function SwitchAnswerOptions({
/>
);
case "image":
- return (
-
- );
+ return ;
default:
return null;
}