add question types

This commit is contained in:
nflnkr 2023-09-30 17:02:34 +03:00
parent 34c487d9d0
commit f04a51f4b3
13 changed files with 284 additions and 153 deletions

@ -1,153 +0,0 @@
export type QuizQuestionType =
| "variant"
| "images"
| "varimg"
| "emoji"
| "text"
| "select"
| "date"
| "number"
| "file"
| "page"
| "rating";
export interface QuizQuestionBranchingRules {
/**
* Радиокнопка "Все условия обязательны"
*/
or: boolean;
show: boolean;
reqs: {
id: string;
/**
* Список выбранных вариантов
*/
vars: number[];
}[];
}
export interface QuizQuestionHint {
/**
* Текст подсказки
*/
text: string;
/**
* URL видео подсказки
*/
video: string;
}
export interface QuizQuestionBase {
id: number;
title: string;
type: QuizQuestionType;
}
export interface QuizQuestionVariant extends QuizQuestionBase {
type: "variant";
content: {
/**
* Чекбокс "Длинный текстовый ответ"
*/
largeCheck: boolean;
/**
* Чекбокс "Можно несколько"
*/
multi: boolean;
/**
* Чекбокс "Вариант "свой ответ""
*/
own: boolean;
/**
* Чекбокс "Внутреннее название вопроса"
*/
innerNameCheck: boolean;
/**
* Чекбокс "Необязательный вопрос"
*/
required: boolean;
/**
* Поле "Внутреннее название вопроса"
*/
innerName: string;
/**
* Варианты ответов
*/
variants: {
answer: string;
hints: string;
}[];
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}
export interface QuizQuestionImages extends QuizQuestionBase {
type: "images";
content: {
/**
* Чекбокс "Вариант "свой ответ""
*/
own: boolean;
/**
* Чекбокс "Можно несколько"
*/
multi: boolean;
/**
* Пропорции
*/
xy: "1:1" | "1:2" | "2:1";
/**
* Чекбокс "Внутреннее название вопроса"
*/
innerNameCheck: boolean;
/**
* Поле "Внутреннее название вопроса"
*/
innerName: string;
/**
* Чекбокс "Большие картинки"
*/
large: boolean;
/**
* Форма
*/
format: "carousel" | "masonry";
/**
* Чекбокс "Необязательный вопрос"
*/
required: boolean;
/**
* Варианты (картинки)
*/
variants: unknown;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}
export interface QuizQuestionVarImg extends QuizQuestionBase {
type: "varimg";
content: {
/**
* Чекбокс "Вариант "свой ответ""
*/
own: boolean;
/**
* Чекбокс "Внутреннее название вопроса"
*/
innerNameCheck: boolean;
/**
* Поле "Внутреннее название вопроса"
*/
innerName: string;
/**
* Чекбокс "Необязательный вопрос"
*/
required: boolean;
variants: [];
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,19 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionDate extends QuizQuestionBase {
type: "date";
content: {
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
type: "calendar" | "mask";
dateRange: boolean;
time: boolean;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,25 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionEmoji extends QuizQuestionBase {
type: "emoji";
content: {
/** Чекбокс "Можно несколько" */
multi: boolean;
/** Чекбокс "Вариант "свой ответ"" */
own: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Чекбокс "Необязательный вопрос" */
required: boolean;
variants: {
answer: string;
hints: string;
emoji: string;
}[];
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,29 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export const uploadFileTypesMap = {
"all": "Все типы файлов",
"picture": "Изображения",
"video": "Видео",
"audio": "Аудио",
"document": "Документ",
} as const;
export type UploadFileType = keyof typeof uploadFileTypesMap;
export interface QuizQuestionFile extends QuizQuestionBase {
type: "file";
content: {
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Чекбокс "Автозаполнение адреса" */
autofill: boolean;
type: UploadFileType;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,28 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionImages extends QuizQuestionBase {
type: "images";
content: {
/** Чекбокс "Вариант "свой ответ"" */
own: boolean;
/** Чекбокс "Можно несколько" */
multi: boolean;
/** Пропорции */
xy: "1:1" | "1:2" | "2:1";
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Чекбокс "Большие картинки" */
large: boolean;
/** Форма */
format: "carousel" | "masonry";
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Варианты (картинки) */
variants: unknown;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,24 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionNumber extends QuizQuestionBase {
type: "number";
content: {
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Диапазон */
range: [number, number];
/** Начальное значение */
defaultValue: number;
/** Шаг */
step: number;
/** Чекбокс "Выбор диапазона (два ползунка)" */
chooseRange: boolean;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,16 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionPage extends QuizQuestionBase {
type: "page";
content: {
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
text: string;
video: string;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,21 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionRating extends QuizQuestionBase {
type: "rating";
content: {
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
steps: number;
ratingExpanded: boolean;
ratingDescription: string;
/** Форма иконки */
form: string;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,20 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionSelect extends QuizQuestionBase {
type: "select";
content: {
/** Чекбокс "Можно несколько" */
multi: boolean;
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Поле "Текст в выпадающем списке" */
default: string;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,36 @@
export type QuizQuestionType =
| "variant"
| "images"
| "varimg"
| "emoji"
| "text"
| "select"
| "date"
| "number"
| "file"
| "page"
| "rating";
export interface QuizQuestionBranchingRules {
/** Радиокнопка "Все условия обязательны" */
or: boolean;
show: boolean;
reqs: {
id: string;
/** Список выбранных вариантов */
vars: number[];
}[];
}
export interface QuizQuestionHint {
/** Текст подсказки */
text: string;
/** URL видео подсказки */
video: string;
}
export interface QuizQuestionBase {
id: number;
title: string;
type: QuizQuestionType;
}

@ -0,0 +1,20 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionText extends QuizQuestionBase {
type: "text";
content: {
placeholder: string;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Чекбокс "Автозаполнение адреса" */
autofill: boolean;
answerType: "single" | "multi" | "number";
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,27 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionVariant extends QuizQuestionBase {
type: "variant";
content: {
/** Чекбокс "Длинный текстовый ответ" */
largeCheck: boolean;
/** Чекбокс "Можно несколько" */
multi: boolean;
/** Чекбокс "Вариант "свой ответ"" */
own: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Чекбокс "Необязательный вопрос" */
required: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Варианты ответов */
variants: {
answer: string;
hints: string;
}[];
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}

@ -0,0 +1,19 @@
import { QuizQuestionBase, QuizQuestionBranchingRules, QuizQuestionHint } from "./shared";
export interface QuizQuestionVarImg extends QuizQuestionBase {
type: "varimg";
content: {
/** Чекбокс "Вариант "свой ответ"" */
own: boolean;
/** Чекбокс "Внутреннее название вопроса" */
innerNameCheck: boolean;
/** Поле "Внутреннее название вопроса" */
innerName: string;
/** Чекбокс "Необязательный вопрос" */
required: boolean;
variants: unknown;
hint: QuizQuestionHint;
rule: QuizQuestionBranchingRules;
};
}