feat: one day delay

This commit is contained in:
IlyaDoronin 2024-01-25 17:24:10 +03:00
parent 00831e5664
commit a54893d67a
4 changed files with 231 additions and 189 deletions

@ -1,150 +1,148 @@
import axios from "axios";
import {enqueueSnackbar} from "notistack";
let SESSIONS = ""
import type { AxiosError } from "axios";
import type { GetDataResponse } from "../model/settingsData";
export const publicationMakeRequest = ({
url,
body
}: any) => {
console.log(body)
return axios(url, {
//@ts-ignore
data:body,
headers: {
"X-Sessionkey": SESSIONS,
"Content-Type": "multipart/form-data",
},
method: "POST"
})
}
let SESSIONS = "";
export async function getData(quizId: string) {
const QID =
process.env.NODE_ENV === "production" ?
window.location.pathname.replace(/\//g, '')
:
"ef836ff8-35b1-4031-9acf-af5766bac2b2"
export const publicationMakeRequest = ({ url, body }: any) => {
console.log(body);
return axios(url, {
//@ts-ignore
data: body,
headers: {
"X-Sessionkey": SESSIONS,
"Content-Type": "multipart/form-data",
},
method: "POST",
});
};
try {
const data = await axios(`https://s.hbpn.link/answer/settings`, {
method: "POST",
// headers,
data: JSON.stringify({
quiz_id: quizId,
limit: 100,
page: 0,
need_config: true,
export async function getData(quizId: string): Promise<{
data: GetDataResponse | null;
isRecentlyCompleted: boolean;
error?: string;
}> {
const QID =
process.env.NODE_ENV === "production"
? window.location.pathname.replace(/\//g, "")
: "ef836ff8-35b1-4031-9acf-af5766bac2b2";
}),
})
const sessions: any = JSON.parse(localStorage.getItem("sessions") || "{}")
console.log("что-то", data)
if (typeof sessions[QID] === "number") {
//unix время. Если меньше суток прошло - выводить ошибку, иначе пустить дальше
if ((Date.now() - sessions[QID] < 86400000)) {
throw new Error("Вы уже прошли этот опрос")
}
try {
const { data, headers } = await axios<GetDataResponse>(
`https://s.hbpn.link/answer/settings`,
{
method: "POST",
// headers,
data: JSON.stringify({
quiz_id: quizId,
limit: 100,
page: 0,
need_config: true,
}),
}
);
const sessions = JSON.parse(localStorage.getItem("sessions") || "{}");
}
if (typeof sessions[data.data.settings[QID]] === "number" && (Date.now() - sessions[QID] > 86400000)) {
SESSIONS = data.headers["x-sessionkey"]
sessions[QID] = data.headers["x-sessionkey"]
localStorage.setItem("sessions", JSON.stringify(sessions))
}else {
}
SESSIONS = data.headers["x-sessionkey"]
sessions[QID] = data.headers["x-sessionkey"]
localStorage.setItem("sessions", JSON.stringify(sessions))
return data.data
} catch (e) {
console.log("ОШИБКА", e)
enqueueSnackbar(e)
if (typeof sessions[QID] === "number") {
// unix время. Если меньше суток прошло - выводить ошибку, иначе пустить дальше
if (Date.now() - sessions[QID] < 86400000) {
return { data, isRecentlyCompleted: true };
}
}
}
SESSIONS = headers["x-sessionkey"];
return { data, isRecentlyCompleted: false };
} catch (nativeError) {
const error = nativeError as AxiosError;
return { data: null, isRecentlyCompleted: false, error: error.message };
}
}
export function sendAnswer({ questionId, body, qid }: any) {
const formData = new FormData();
console.log(qid)
const answers = [{
question_id: questionId,
content: body, //тут массив с ответом
}]
formData.append("answers", JSON.stringify(answers));
formData.append("qid", qid);
const formData = new FormData();
console.log(qid);
const answers = [
{
question_id: questionId,
content: body, //тут массив с ответом
},
];
formData.append("answers", JSON.stringify(answers));
formData.append("qid", qid);
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
}
//body ={file, filename}
export function sendFile({ questionId, body, qid }: any) {
console.log(body)
const formData = new FormData();
console.log(body);
const formData = new FormData();
const answers: any = [{
question_id: questionId,
content: "file:" + body.name,
}]
const answers: any = [
{
question_id: questionId,
content: "file:" + body.name,
},
];
formData.append("answers", JSON.stringify(answers));
formData.append(body.name, body.file);
formData.append("qid", qid);
formData.append("answers", JSON.stringify(answers));
formData.append(body.name, body.file);
formData.append("qid", qid);
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
}
const fields = [
"name",
"email",
"phone",
"adress",
"telegram",
"wechat",
"viber",
"vk",
"skype",
"whatsup",
"messenger",
"text"
]
"name",
"email",
"phone",
"adress",
"telegram",
"wechat",
"viber",
"vk",
"skype",
"whatsup",
"messenger",
"text",
];
//форма контактов
export function sendFC({ questionId, body, qid }: any) {
const formData = new FormData();
const formData = new FormData();
// const keysBody = Object.keys(body)
// const content:any = {}
// fields.forEach((key) => {
// if (keysBody.includes(key)) content[key] = body.key
// })
// const keysBody = Object.keys(body)
// const content:any = {}
// fields.forEach((key) => {
// if (keysBody.includes(key)) content[key] = body.key
// })
const answers = [
{
question_id: questionId,
content: JSON.stringify(body),
result: true,
qid,
},
];
const answers = [{
question_id: questionId,
content: JSON.stringify(body),
result: true,
qid
}]
formData.append("answers", JSON.stringify(answers));
formData.append("qid", qid);
formData.append("answers", JSON.stringify(answers));
formData.append("qid", qid);
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
}
return publicationMakeRequest({
url: `https://s.hbpn.link/answer/answer`,
body: formData,
method: "POST",
});
}

@ -38,6 +38,7 @@ export type QuestionsStore = {
};
export interface Settings {
qid: string;
fp: boolean;
rep: boolean;
name: string;

@ -136,9 +136,14 @@ export const ContactForm = ({
await sendFC({
questionId: resultQuestion?.id,
body: body,
//@ts-ignore
qid: settings.qid,
});
const sessions = JSON.parse(localStorage.getItem("sessions") || "{}");
localStorage.setItem(
"sessions",
JSON.stringify({ ...sessions, [settings.qid]: new Date().getTime() })
);
} catch (e) {
enqueueSnackbar("ответ не был засчитан");
}
@ -290,29 +295,35 @@ export const ContactForm = ({
settings?.cfg.resultInfo.showResultForm === "after" &&
!checkEmptyData({ resultData: resultQuestion })
) {
try {
await inputHC()
fireOnce.current = false
const QID =
process.env.NODE_ENV === "production" ?
window.location.pathname.replace(/\//g, '')
:
"ef836ff8-35b1-4031-9acf-af5766bac2b2"
const sessions: any = JSON.parse(localStorage.getItem("sessions") || "{}")
sessions[QID] = Date.now()
localStorage.setItem("sessions", JSON.stringify(sessions))
enqueueSnackbar("Данные успешно отправлены")
await inputHC();
fireOnce.current = false;
const QID =
process.env.NODE_ENV === "production"
? window.location.pathname.replace(/\//g, "")
: "ef836ff8-35b1-4031-9acf-af5766bac2b2";
const sessions: any = JSON.parse(
localStorage.getItem("sessions") || "{}"
);
sessions[QID] = Date.now();
localStorage.setItem(
"sessions",
JSON.stringify(sessions)
);
enqueueSnackbar("Данные успешно отправлены");
} catch (e) {
enqueueSnackbar("повторите попытку позже")
enqueueSnackbar("повторите попытку позже");
}
if (settings?.cfg.resultInfo.showResultForm === "after" && !checkEmptyData({ resultData: resultQuestion })) {
setShowContactForm(false)
setShowResultForm(true)
if (
settings?.cfg.resultInfo.showResultForm === "after" &&
!checkEmptyData({ resultData: resultQuestion })
) {
setShowContactForm(false);
setShowResultForm(true);
}
} else {
enqueueSnackbar("Пожалуйста, заполните поля")
enqueueSnackbar("Пожалуйста, заполните поля");
}
} else {
enqueueSnackbar("Пожалуйста, заполните поля");

@ -1,45 +1,47 @@
import { useEffect, useState } from "react";
import { Box, Skeleton, ThemeProvider } from "@mui/material";
import { enqueueSnackbar } from "notistack";
import { StartPageViewPublication } from "./StartPageViewPublication";
import { Question } from "./Question";
import { ApologyPage } from "./ApologyPage"
import { ApologyPage } from "./ApologyPage";
import { useQuestionsStore } from "@stores/quizData/store"
import { getData } from "@api/quizRelase"
import { useQuestionsStore } from "@stores/quizData/store";
import { getData } from "@api/quizRelase";
import type { AnyTypedQuizQuestion } from "@model/questionTypes/shared";
import { useGetSettings } from "../../utils/hooks/useGetSettings";
import { themesPublication } from "../../utils/themes/Publication/themePublication";
import { replaceSpacesToEmptyLines } from "./tools/replaceSpacesToEmptyLines";
const QID =
process.env.NODE_ENV === "production" ?
window.location.pathname.replace(/\//g, '')
:
"ef836ff8-35b1-4031-9acf-af5766bac2b2"
process.env.NODE_ENV === "production"
? window.location.pathname.replace(/\//g, "")
: "ef836ff8-35b1-4031-9acf-af5766bac2b2";
export const ViewPage = () => {
const { settings, cnt, items } = useQuestionsStore()
console.log("КВИЗ ", settings)
console.log("ВОПРОСЫ ", items)
const { settings, cnt, items } = useQuestionsStore();
console.log("КВИЗ ", settings);
console.log("ВОПРОСЫ ", items);
const [visualStartPage, setVisualStartPage] = useState<boolean>();
const [errormessage, setErrormessage] = useState<string>("");
const [recentlyСompleted, setRecentlyСompleted] = useState<boolean>(false);
useEffect(() => {
async function get() {
try {
let data = await getData(QID)
let { data, isRecentlyCompleted, error } = await getData(QID);
console.log(data)
//@ts-ignore
const settings = data.settings
setRecentlyСompleted(isRecentlyCompleted);
if (error) {
return enqueueSnackbar(error);
}
//@ts-ignore
const settings = data.settings;
console.log(data)
//@ts-ignore
data.settings = {
//@ts-ignore
@ -52,12 +54,11 @@ export const ViewPage = () => {
lim: settings.lim,
due: settings.due,
delay: settings.delay,
pausable: settings.pausable
}
console.log(data)
pausable: settings.pausable,
};
//@ts-ignore
data.items = data.items.map((item) => {
const content = JSON.parse(item.c)
const content = JSON.parse(item.c);
return {
description: item.desc,
id: item.id,
@ -65,61 +66,92 @@ export const ViewPage = () => {
required: item.req,
title: item.title,
type: item.typ,
content
}
}),
console.log(data)
console.log(JSON.stringify({data: data}).replaceAll(/\\\" \\\"/g, '""').replaceAll(/\" \"/g, '""'))
console.log(JSON.parse(JSON.stringify({data: data}).replaceAll(/\\\" \\\"/g, '""').replaceAll(/\" \"/g, '""')).data)
data = replaceSpacesToEmptyLines(data)
content,
};
});
useQuestionsStore.setState(JSON.parse(JSON.stringify({data: data}).replaceAll(/\\\" \\\"/g, '""').replaceAll(/\" \"/g, '""')).data)
console.log(
JSON.stringify({ data: data })
.replaceAll(/\\\" \\\"/g, '""')
.replaceAll(/\" \"/g, '""')
);
console.log(
JSON.parse(
JSON.stringify({ data: data })
.replaceAll(/\\\" \\\"/g, '""')
.replaceAll(/\" \"/g, '""')
).data
);
data = replaceSpacesToEmptyLines(data);
useQuestionsStore.setState(
JSON.parse(
JSON.stringify({ data: data })
.replaceAll(/\\\" \\\"/g, '""')
.replaceAll(/\" \"/g, '""')
).data
);
} catch (e) {
console.log("ОШИБКА", e)
console.log("ОШИБКА", e);
//@ts-ignore
if (e?.response?.status === 423) setErrormessage("квиз не активирован")
if (e?.response?.status === 423) setErrormessage("квиз не активирован");
}
}
get()
}, [])
get();
}, []);
let title = document.title;
console.log(title);
useEffect(() => {//установка фавиконки
useEffect(() => {
//установка фавиконки
if (Object.values(settings).length > 0) {
const link = document.querySelector('link[rel="icon"]');
if (link && settings?.cfg.startpage.favIcon) {
link.setAttribute("href", settings?.cfg.startpage.favIcon);
}
//установка заголовка страницы
document.title = settings.name
document.title = settings.name;
setVisualStartPage(!settings?.cfg.noStartPage);
}
}, [settings]);
const filteredQuestions = (
items.filter(({ type }) => type) as AnyTypedQuizQuestion[]
).sort((previousItem, item) => previousItem.page - item.page);
if (errormessage) return <ApologyPage message={errormessage} />;
if (errormessage) return <ApologyPage message={errormessage} />
if (visualStartPage === undefined) return <Skeleton sx={{ bgcolor: 'grey', width: "100vw", height: "100vh" }} variant="rectangular" />;
if (cnt === 0 || (cnt === 1 && items[0].type === "result")) return <ApologyPage message="Нет созданных вопросов" />
if (recentlyСompleted) {
return <ApologyPage message="Вы уже прошли этот опрос" />;
}
if (visualStartPage === undefined) {
return (
<Skeleton
sx={{ bgcolor: "grey", width: "100vw", height: "100vh" }}
variant="rectangular"
/>
);
}
if (cnt === 0 || (cnt === 1 && items[0].type === "result"))
return <ApologyPage message="Нет созданных вопросов" />;
return (
<ThemeProvider theme={themesPublication?.[settings?.cfg.theme || "StandardTheme"]}>
<Box>
{
visualStartPage ?
<ThemeProvider
theme={themesPublication?.[settings?.cfg.theme || "StandardTheme"]}
>
{recentlyСompleted ? (
<ApologyPage message="Вы уже прошли этот опрос" />
) : (
<Box>
{visualStartPage ? (
<StartPageViewPublication setVisualStartPage={setVisualStartPage} />
:
) : (
<Question questions={filteredQuestions} />
}
</Box>
)}
</Box>
)}
</ThemeProvider>
);
};