129 lines
2.8 KiB
TypeScript
129 lines
2.8 KiB
TypeScript
import { AnyTypedQuizQuestion } from "./questionTypes/shared";
|
|
|
|
export type QuizStartpageType = "standard" | "expanded" | "centered" | null;
|
|
|
|
export type QuizStartpageAlignType = "left" | "right" | "center";
|
|
|
|
export type QuizType = "quiz" | "form";
|
|
|
|
export type QuizResultsType = true | null;
|
|
|
|
export type QuizStep = "startpage" | "question" | "contactform";
|
|
|
|
export type QuizTheme =
|
|
| "StandardTheme"
|
|
| "StandardDarkTheme"
|
|
| "PinkTheme"
|
|
| "PinkDarkTheme"
|
|
| "BlackWhiteTheme"
|
|
| "OliveTheme"
|
|
| "YellowTheme"
|
|
| "GoldDarkTheme"
|
|
| "PurpleTheme"
|
|
| "BlueTheme"
|
|
| "BlueDarkTheme";
|
|
|
|
export type FCField = {
|
|
text: string;
|
|
innerText: string;
|
|
key: string;
|
|
required: boolean;
|
|
used: boolean;
|
|
};
|
|
|
|
export type QuizSettings = {
|
|
questions: AnyTypedQuizQuestion[];
|
|
settings: {
|
|
fp: boolean;
|
|
rep: boolean;
|
|
name: string;
|
|
lim: number;
|
|
due: number;
|
|
delay: number;
|
|
pausable: boolean;
|
|
cfg: QuizConfig;
|
|
};
|
|
cnt: number;
|
|
recentlyCompleted: boolean;
|
|
};
|
|
|
|
export interface QuizConfig {
|
|
type: QuizType;
|
|
noStartPage: boolean;
|
|
startpageType: QuizStartpageType;
|
|
score?: boolean;
|
|
results: QuizResultsType;
|
|
haveRoot: string;
|
|
theme: QuizTheme;
|
|
resultInfo: {
|
|
when: "email" | "";
|
|
share: boolean;
|
|
replay: boolean;
|
|
theme: string;
|
|
reply: string;
|
|
replname: string;
|
|
showResultForm: "before" | "after";
|
|
};
|
|
startpage: {
|
|
description: string;
|
|
button: string;
|
|
position: QuizStartpageAlignType;
|
|
favIcon: string | null;
|
|
logo: string | null;
|
|
originalLogo: string | null;
|
|
background: {
|
|
type: null | "image" | "video";
|
|
desktop: string | null;
|
|
originalDesktop: string | null;
|
|
mobile: string | null;
|
|
originalMobile: string | null;
|
|
video: string | null;
|
|
cycle: boolean;
|
|
};
|
|
};
|
|
formContact: {
|
|
title: string;
|
|
desc: string;
|
|
name: FCField;
|
|
email: FCField;
|
|
phone: FCField;
|
|
text: FCField;
|
|
address: FCField;
|
|
button: string;
|
|
fields: Record<FormContactFieldName, FormContactFieldData>;
|
|
};
|
|
info: {
|
|
phonenumber: string;
|
|
clickable: boolean;
|
|
orgname: string;
|
|
site: string;
|
|
law?: string;
|
|
};
|
|
meta: string;
|
|
}
|
|
|
|
export type FormContactFieldName =
|
|
| "name"
|
|
| "email"
|
|
| "phone"
|
|
| "text"
|
|
| "address";
|
|
|
|
type FormContactFieldData = {
|
|
text: string;
|
|
innerText: string;
|
|
key: string;
|
|
required: boolean;
|
|
used: boolean;
|
|
};
|
|
|
|
export interface QuizItems {
|
|
description: string;
|
|
id: number;
|
|
page: number;
|
|
required: boolean;
|
|
title: string;
|
|
type: string;
|
|
content: unknown;
|
|
}
|