diff --git a/.env.development.local b/.env.development.local
index 992c76e4..50bf2636 100644
--- a/.env.development.local
+++ b/.env.development.local
@@ -1,2 +1 @@
REACT_APP_DOMAIN="https://squiz.pena.digital"
-REACT_APP_HUB_DOMAIN="https://shub.pena.digital"
\ No newline at end of file
diff --git a/.env.production.local b/.env.production.local
index 992c76e4..c0284fff 100644
--- a/.env.production.local
+++ b/.env.production.local
@@ -1,2 +1 @@
-REACT_APP_DOMAIN="https://squiz.pena.digital"
-REACT_APP_HUB_DOMAIN="https://shub.pena.digital"
\ No newline at end of file
+REACT_APP_DOMAIN="https://squiz.pena.digital"
\ No newline at end of file
diff --git a/package.json b/package.json
index b35fa6f2..274e4d00 100755
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"@craco/craco": "^7.0.0",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
- "@frontend/kitui": "^1.0.55",
+ "@frontend/kitui": "^1.0.62",
"@mui/icons-material": "^5.10.14",
"@mui/material": "^5.10.14",
"@mui/x-date-pickers": "^6.16.1",
diff --git a/src/App.tsx b/src/App.tsx
index f092e854..c71f16e7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -43,10 +43,12 @@ import {
import { enqueueSnackbar } from "notistack";
import PrivateRoute from "@ui_kit/PrivateRoute";
-import { Restore } from "./pages/startPage/Restore";
+import { Restore } from "./pages/auth/Restore";
import { isAxiosError } from "axios";
import { useEffect, useLayoutEffect, useRef } from "react";
+import RecoverPassword from "./pages/auth/RecoverPassword";
+import OutdatedLink from "./pages/auth/OutdatedLink";
export function useUserAccountFetcher({
onError,
onNewUserAccount,
@@ -183,7 +185,9 @@ export default function App() {
} />
} />
- } />
+ } />
+ } />
+ } />
)}
@@ -201,9 +205,31 @@ export default function App() {
}
/>
+
+ }
+ />
+
+ }
+ />
+
}
/>
} />
diff --git a/src/api/auth.ts b/src/api/auth.ts
index 7c729a66..23a9301d 100644
--- a/src/api/auth.ts
+++ b/src/api/auth.ts
@@ -8,7 +8,7 @@ import type {
} from "@frontend/kitui";
import { parseAxiosError } from "../utils/parse-error";
-const apiUrl =process.env.REACT_APP_DOMAIN + "/auth";
+const apiUrl = process.env.REACT_APP_DOMAIN + "/auth";
export async function register(
login: string,
@@ -70,3 +70,29 @@ export async function logout(): Promise<[unknown, string?]> {
return [null, `Не удалось выйти. ${error}`];
}
}
+
+export async function recover(
+ email: string,
+): Promise<[unknown | null, string?]> {
+ try {
+ const formData = new FormData();
+ formData.append("email", email);
+ formData.append(
+ "RedirectionURL",
+ process.env.REACT_APP_DOMAIN + "/changepwd",
+ );
+ const recoverResponse = await makeRequest({
+ url: process.env.REACT_APP_DOMAIN + "/codeword/recover",
+ body: formData,
+ useToken: false,
+ withCredentials: true,
+ });
+ console.log(recoverResponse);
+ return [recoverResponse];
+ } catch (nativeError) {
+ console.log(nativeError);
+ const [error] = parseAxiosError(nativeError);
+
+ return [null, `Не удалось восстановить пароль. ${error}`];
+ }
+}
diff --git a/src/api/contactForm.ts b/src/api/contactForm.ts
index f64be0c2..00e9face 100644
--- a/src/api/contactForm.ts
+++ b/src/api/contactForm.ts
@@ -1,6 +1,6 @@
import axios from "axios";
-const domen = process.env.REACT_APP_HUB_DOMAIN
+const domen = process.env.REACT_APP_DOMAIN;
export function sendContactFormRequest(body: {
contact: string;
diff --git a/src/api/quizRelase.ts b/src/api/quizRelase.ts
index a960f2d5..c846c8d8 100644
--- a/src/api/quizRelase.ts
+++ b/src/api/quizRelase.ts
@@ -18,7 +18,7 @@ import {
CopyQuestionResponse,
} from "@model/question/copy";
-const baseUrl = process.env.REACT_APP_DOMAIN ;
+const baseUrl = process.env.REACT_APP_DOMAIN;
function get(quizId: string) {
return makeRequest({
diff --git a/src/model/quiz/quiz.ts b/src/model/quiz/quiz.ts
index ada7bbdb..9fb59db5 100644
--- a/src/model/quiz/quiz.ts
+++ b/src/model/quiz/quiz.ts
@@ -50,7 +50,7 @@ export interface Quiz {
question_cnt: number;
/** count passings */
passed_count: number;
- sessions_count: number;
+ session_count: number;
/** average time of passing */
average_time: number;
/** set true if squiz realize group functionality */
@@ -109,7 +109,7 @@ export interface RawQuiz {
question_cnt: number;
/** count passings */
passed_count: number;
- sessions_count: number;
+ session_count: number;
/** average time of passing */
average_time: number;
/** set true if squiz realize group functionality */
diff --git a/src/pages/Landing/FooterLanding.tsx b/src/pages/Landing/FooterLanding.tsx
index b94d8fd9..0708e15c 100644
--- a/src/pages/Landing/FooterLanding.tsx
+++ b/src/pages/Landing/FooterLanding.tsx
@@ -127,13 +127,13 @@ export default function Component() {
>
Пользовательское соглашение
-
diff --git a/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx b/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
index 8dff844e..3c3c8269 100644
--- a/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
+++ b/src/pages/Questions/OptionsAndPicture/SettingOptionsAndPict.tsx
@@ -67,18 +67,18 @@ export default function SettingOptionsAndPict({
>
Настройки ответов
-
- updateQuestion(question.id, (question) => {
- if (question.type !== "varimg") return;
+ {/**/}
+ {/* updateQuestion(question.id, (question) => {*/}
+ {/* if (question.type !== "varimg") return;*/}
- question.content.own = target.checked;
- })
- }
- />
+ {/* question.content.own = target.checked;*/}
+ {/* })*/}
+ {/* }*/}
+ {/*/>*/}
{!isWrappColumn && (
{
}}
>
Настройки результатов
-
>
diff --git a/src/pages/startPage/stepOne.tsx b/src/pages/startPage/stepOne.tsx
index 6eb89ed7..7d36ae04 100755
--- a/src/pages/startPage/stepOne.tsx
+++ b/src/pages/startPage/stepOne.tsx
@@ -2,12 +2,13 @@ import { Box, Button, useMediaQuery, useTheme } from "@mui/material";
import CreationCard from "@ui_kit/CreationCard";
import quizCreationImage1 from "../../assets/quiz-creation-1.png";
import quizCreationImage2 from "../../assets/quiz-creation-2.png";
-import { setQuizType } from "@root/quizes/actions";
+import { setQuizType, updateQuiz } from "@root/quizes/actions";
import { useCurrentQuiz } from "@root/quizes/hooks";
import { useEffect, useRef, useState } from "react";
import arrowLeftIcon from "../../assets/icons/arrow_left.svg";
import arrowRightIcon from "../../assets/icons/arrow_right.svg";
+import QuizgenegationName from "@utils/quizgenegationName";
export default function StepOne() {
const quiz = useCurrentQuiz();
@@ -69,6 +70,9 @@ export default function StepOne() {
data-cy="create-quiz-card"
onClick={() => {
setQuizType(quiz.id, "quiz");
+ updateQuiz(quiz.id, (quiz) => {
+ quiz.name = QuizgenegationName({ quiz });
+ });
}}
>
{
setQuizType(quiz.id, "form");
+ updateQuiz(quiz.id, (quiz) => {
+ quiz.name = QuizgenegationName({ quiz });
+ });
}}
>
{
updateFn(question, imageUrl);
diff --git a/src/stores/quizes.ts b/src/stores/quizes.ts
index 4f9103ba..4dcf6926 100644
--- a/src/stores/quizes.ts
+++ b/src/stores/quizes.ts
@@ -129,7 +129,7 @@ export const quizStore = create()(
config: {
noStartPage: false,
type: "", // quiz или form
- logo: process.env.REACT_APP_HUB_DOMAIN + "/img/logo",
+ logo: process.env.REACT_APP_DOMAIN + "/img/logo",
startpage: {
description: "", // приветственный текст опроса
button: "", // текст на кнопке начала опроса
diff --git a/src/stores/quizes/actions.ts b/src/stores/quizes/actions.ts
index fdf1e185..187a3206 100644
--- a/src/stores/quizes/actions.ts
+++ b/src/stores/quizes/actions.ts
@@ -269,7 +269,7 @@ export const uploadQuizImage = async (
updateQuiz(quizId, (quiz) => {
updateFn(
quiz,
- process.env.REACT_APP_DOMAIN + `/squizimages/${quiz.qid}/${imageId}`,
+ process.env.REACT_APP_DOMAIN + `/squizimages/${quiz.qid}/${imageId}`,
);
});
} catch (error) {
diff --git a/src/utils/parse-error.ts b/src/utils/parse-error.ts
index 14e549bb..739f1b8d 100644
--- a/src/utils/parse-error.ts
+++ b/src/utils/parse-error.ts
@@ -16,20 +16,27 @@ const translateMessage: Record = {
"user with this email or login is exist": "Пользователь уже существует",
"user with this login is exist":
"Пользователь с таким логином уже существует",
+ unauthorized: "Ссылка просрочена",
};
export const parseAxiosError = (nativeError: unknown): [string, number?] => {
+ console.log(nativeError);
const error = nativeError as AxiosError;
-
- if (
- error.response?.data &&
- "statusCode" in (error.response.data as ServerError)
- ) {
+ console.log(error);
+ console.log(error.response?.data);
+ if (error.response?.data) {
const serverError = error.response.data as ServerError;
- const translatedMessage = translateMessage[serverError.message];
- if (translatedMessage !== undefined)
- serverError.message = translatedMessage;
- return [serverError.message, serverError.statusCode];
+ let SEMessage;
+ if ("statusCode" in (error.response?.data as ServerError)) {
+ SEMessage = serverError?.message.toLowerCase() || "";
+ }
+ if ("error" in (error.response?.data as ServerError)) {
+ SEMessage = serverError?.error.toLowerCase() || "";
+ }
+ console.log(serverError);
+ const translatedMessage = translateMessage[SEMessage || ""];
+ if (translatedMessage !== undefined) SEMessage = translatedMessage;
+ return [SEMessage || "", serverError.statusCode];
}
switch (error.status) {
diff --git a/src/utils/quizgenegationName.ts b/src/utils/quizgenegationName.ts
new file mode 100644
index 00000000..2e1bf42c
--- /dev/null
+++ b/src/utils/quizgenegationName.ts
@@ -0,0 +1,16 @@
+import { Quiz } from "@model/quiz/quiz";
+interface Props {
+ quiz: Quiz;
+}
+export default function QuizgenegationName({ quiz }: Props) {
+ let QuizgenegationName = "";
+ quiz.config.type === "form"
+ ? (QuizgenegationName =
+ "Form " + quiz.backendId.toString().slice(-4).replace(/^0/, "1"))
+ : quiz.config.type === "quiz"
+ ? (QuizgenegationName =
+ "Quiz " + quiz.backendId.toString().slice(-4).replace(/^0/, "1"))
+ : (QuizgenegationName =
+ "No type " + quiz.backendId.toString().slice(-4).replace(/^0/, "1"));
+ return QuizgenegationName;
+}
diff --git a/yarn.lock b/yarn.lock
index 6f23d7b9..fb6d2079 100755
--- a/yarn.lock
+++ b/yarn.lock
@@ -1407,10 +1407,10 @@
resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz"
integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
-"@frontend/kitui@^1.0.55":
- version "1.0.55"
- resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.55.tgz#6e02f80b2c13828142ffeacaf9704e50e54324d0"
- integrity sha1-bgL4CywTgoFC/+rK+XBOUOVDJNA=
+"@frontend/kitui@^1.0.62":
+ version "1.0.62"
+ resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.62.tgz#212185a0a19a9b9948a85e9d4c71e002ad7f8b27"
+ integrity sha1-ISGFoKGam5lIqF6dTHHgAq1/iyc=
dependencies:
immer "^10.0.2"
reconnecting-eventsource "^1.6.2"