add question types
This commit is contained in:
parent
34c487d9d0
commit
f04a51f4b3
@ -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;
|
||||
};
|
||||
}
|
19
src/model/questionTypes/date.ts
Normal file
19
src/model/questionTypes/date.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
25
src/model/questionTypes/emoji.ts
Normal file
25
src/model/questionTypes/emoji.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
29
src/model/questionTypes/file.ts
Normal file
29
src/model/questionTypes/file.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
28
src/model/questionTypes/images.ts
Normal file
28
src/model/questionTypes/images.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
24
src/model/questionTypes/number.ts
Normal file
24
src/model/questionTypes/number.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
16
src/model/questionTypes/page.ts
Normal file
16
src/model/questionTypes/page.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
21
src/model/questionTypes/rating.ts
Normal file
21
src/model/questionTypes/rating.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
20
src/model/questionTypes/select.ts
Normal file
20
src/model/questionTypes/select.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
36
src/model/questionTypes/shared.ts
Normal file
36
src/model/questionTypes/shared.ts
Normal file
@ -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;
|
||||
}
|
20
src/model/questionTypes/text.ts
Normal file
20
src/model/questionTypes/text.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
27
src/model/questionTypes/variant.ts
Normal file
27
src/model/questionTypes/variant.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
19
src/model/questionTypes/varimg.ts
Normal file
19
src/model/questionTypes/varimg.ts
Normal file
@ -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;
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user