fix ticket 5
All checks were successful
publish-main / release-image (push) Successful in 7m40s

This commit is contained in:
kuwsh1n 2024-05-12 20:20:29 +03:00
parent caf16c4ea9
commit ca131a225c
8 changed files with 131 additions and 55 deletions

View File

@ -32,7 +32,6 @@ const App = () => {
{id: 8, text: 'Дата', typeTag: InputDate}
]);
// useEffect(() => globalRender(window.location.pathname, user, navigate));
const [cookies, _, __] = useCookies(["user"]);
useEffect(() => {
@ -41,7 +40,6 @@ const App = () => {
if (response.status === 200) {
setUser(response.data);
console.log(response.data)
globalRender(window.location.pathname, response.data, navigate);
}
else {

View File

@ -75,36 +75,55 @@
background-color: rgb(200, 200, 200);
}
&__column {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 15px;
font-family: "Montserrat", sans-serif;
padding: 5px;
width: 100%;
border-bottom: 1px solid rgb(200, 200, 200);
&__wrapper {
display: flex;
justify-content: space-between;
align-items: center;
height: 100%;
width: 95%;
}
}
&__item {
padding: 0 5px;
// border-bottom: 1px solid rgb(200, 200, 200);
font-size: 15px;
font-family: "Montserrat", sans-serif;
display: flex;
justify-content: space-between;
align-items: center;
height: 20%;
width: 100%;
position: relative;
&:hover {
background-color: rgba(230, 230, 230, 0.6);
}
&__user {
cursor: pointer;
&:hover {
text-decoration: underline;
&__wrapper {
display: flex;
justify-content: space-between;
align-items: center;
height: 100%;
width: 95%;
&__user {
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
&__date {
}
i {
font-size: 13px;
position: absolute;
right: 10px;
cursor: pointer;
&:hover {
color: rgb(199, 73, 73);
}
}
}
&__date {
}
}
}
}

View File

@ -2,10 +2,10 @@ import React from "react";
import classes from "../assets/styles/components/checkModal.module.scss";
import MyButton from "./MyButton.jsx";
const CheckModal = ({message, action}) => {
const CheckModal = ({postfix, message, action}) => {
return (
<div class="modal fade" tabindex="-1" id="checkModal" tabIndex="-1" aria-labelledby="exampleModalLabel" data-bs-backdrop="static" aria-hidden="true">
<div class="modal fade" tabindex="-1" id={`checkModal${postfix}`} tabIndex="-1" aria-labelledby="exampleModalLabel" data-bs-backdrop="static" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">

View File

@ -0,0 +1,36 @@
import axios from "axios";
async function getAnswersApi(token, formToken) {
try {
const response = await axios.get(`https://api.minerva.krbl.ru/formBuilder/edit/${formToken}/answers`,
{
headers: {
"Authorization": `Token ${token}`
}
})
return response
}
catch (e) {
return e
}
};
async function removeAnswerFormApi(token, formId, answerId) {
try {
const response = await axios.delete(`https://api.minerva.krbl.ru/formBuilder/edit/${formId}/answers`,
{
headers: {
"Authorization": `Token ${token}`
},
data: {
"answer_id": answerId
}
})
return response
}
catch (e) {
return e
}
};
export { getAnswersApi, removeAnswerFormApi }

View File

@ -32,7 +32,8 @@ async function completeRegistration(data) {
async function verifyUserApi(token=false) {
if (token) {
try {
const response = await axios.get("https://api.minerva.krbl.ru/auth/me", {
const response = await axios.get("https://api.minerva.krbl.ru/auth/me",
{
headers: {
"Authorization": `Token ${token}`,
},

View File

@ -138,21 +138,6 @@ async function saveAnswersApi(token, formToken, data) {
}
};
async function getAnswersApi(token, formToken) {
try {
const response = await axios.get(`https://api.minerva.krbl.ru/formBuilder/edit/${formToken}/answers`,
{
headers: {
"Authorization": `Token ${token}`
}
})
return response
}
catch (e) {
return e
}
};
async function getBlockApi(token, formId, order) {
try {
const response = await axios.post(`https://api.minerva.krbl.ru/formBuilder/edit/${formId}/get`,
@ -171,4 +156,14 @@ async function getBlockApi(token, formId, order) {
}
};
export { addFormBlockApi, listFormBlockApi, saveFormApi, updateBlockApi, updateOrderBlockApi, listFormBlockByTokenApi, saveAnswersApi, getAnswersApi, removeBlockApi, getBlockApi }
export {
addFormBlockApi,
listFormBlockApi,
saveFormApi,
updateBlockApi,
updateOrderBlockApi,
listFormBlockByTokenApi,
saveAnswersApi,
removeBlockApi,
getBlockApi
}

View File

@ -4,9 +4,11 @@ import { useNavigate, useParams } from 'react-router-dom';
import { answersData } from "../context";
import classes from "../assets/styles/answersForm.module.scss";
import { responseDataToListBlock, dateTimeParse } from "../hooks/sundry/parseListBlock";
import { listFormBlockApi, getAnswersApi } from "../hooks/api/formApi";
import { listFormBlockApi } from "../hooks/api/formApi";
import { listUsersApi } from "../hooks/api/adminApi";
import { removeAnswerFormApi, getAnswersApi } from "../hooks/api/answersApi.js";
import Loading from "../components/Loading.jsx";
import CheckModal from "../components/CheckModal.jsx";
const AnswersForm = () => {
const { formId } = useParams();
@ -27,6 +29,7 @@ const AnswersForm = () => {
if (responseAnswers.data) {
for (let item of responseAnswers.data) {
const blocks = {
id: item.id,
user: listUsers.data.find(user => user.id === item.user_id).login,
date: dateTimeParse(item.date),
block: []
@ -60,6 +63,17 @@ const AnswersForm = () => {
getForm()
}, []);
async function removeAnswerForm(answerId) {
const response = await removeAnswerFormApi(cookies.token, formId, answerId)
if (response.status === 200) {
setData([...data].filter(item => item.id !== answerId))
}
else {
console.log(response)
}
}
return (
<div className={classes.main}>
<div className={classes.wrapper}>
@ -70,26 +84,40 @@ const AnswersForm = () => {
</div>
<div className={classes.answers__wrapper__body}>
<div className={classes.answers__wrapper__body__column}>
<div>Логин</div>
<div>Дата</div>
<div className={classes.answers__wrapper__body__column__wrapper}>
<div>Логин</div>
<div>Дата</div>
</div>
</div>
{data ?
data.map((item, i) =>
<div className={classes.answers__wrapper__body__item} key={i}>
<div className={classes.answers__wrapper__body__item__user} data-bs-toggle={"modal"} data-bs-target={`#answersModal${i}`}>
{item.user}
</div>
<div className={classes.answers__wrapper__body__item__date}>
{item.date}
</div>
data.map((item, dataIndex) =>
<div className={classes.answers__wrapper__body__item} key={dataIndex}>
<div className={classes.answers__wrapper__body__item__wrapper}>
<div className={classes.answers__wrapper__body__item__wrapper__user} data-bs-toggle={"modal"} data-bs-target={`#answersModal${dataIndex}`}>
{item.user}
</div>
<div className={classes.answers__wrapper__body__item__wrapper__date}>
{item.date}
</div>
<i class="fa-solid fa-trash" data-bs-toggle="modal" data-bs-target={`#checkModal${item.id}`}></i>
</div>
<div class="modal fade myModal" className={classes.myModal} id={`answersModal${i}`} tabIndex="-1" aria-labelledby="exampleModalLabel" data-bs-backdrop="static" aria-hidden="true">
<CheckModal
postfix={item.id}
message={`Вы хотетите удалить ответы пользователя <${item.user}>?`}
action={{
execute: () => removeAnswerForm(item.id),
cancel: () => {}
}}
/>
<div class="modal fade myModal" className={classes.myModal} id={`answersModal${dataIndex}`} tabIndex="-1" aria-labelledby="exampleModalLabel" data-bs-backdrop="static" aria-hidden="true">
<div class="modal-dialog myModal__dialog" className={classes.myModal__dialog}>
<div class="modal-content" className={classes.myModal__dialog__content}>
<div class="modal-body" className={classes.myModal__dialog__content__body}>
{item.block.map((block, i) =>
<div className={classes.myModal__item} key={i}>
{item.block.map((block, blockIndex) =>
<div className={classes.myModal__item} key={blockIndex}>
<div className={classes.myModal__item__question}>
<p className={classes.myModal__item__question__text}>{block.question.question}</p>
<p className={classes.myModal__item__question__comment}>{block.question.comment}</p>
@ -97,7 +125,7 @@ const AnswersForm = () => {
<div className={classes.myModal__item__answer}>
<p className={classes.myModal__item__question__text}>Ответ: {
Array.isArray(block.answers.answer) ?
block.answers.answer.map(item => <span>{item}; </span>) :
block.answers.answer.map((answer, indexAnswer) => <span key={indexAnswer}>{answer}; </span>) :
block.answers.answer
}</p>
</div>

View File

@ -13,7 +13,6 @@ const Forms = () => {
const {forms, setForms} = useContext(FormsData);
const {user, setUser} = useContext(UserData);
const [stateLoading, setStateLoading] = useState(false);
const [currentRemoveForm, setCurrentRemoveForm] = useState(false);
const [searchForm, setSearchForm] = useState("");
const [cookies, _, __] = useCookies(["user"]);
@ -118,14 +117,14 @@ const Forms = () => {
<li><a class="dropdown-item" onClick={() => navigate(`/forms/${item.id}/answers`)}>Ответы</a></li>
<li><a class="dropdown-item" onClick={() => navigate(`/tokens/${item.id}`)}>Список токенов</a></li>
<li><a class="dropdown-item" onClick={() => copyLinkToFormView(item.id)}>Скопировать ссылку</a></li>
<li><a class="dropdown-item" data-bs-toggle="modal" data-bs-target="#checkModal" onClick={() => setCurrentRemoveForm({id: item.id, title: item.title})}>Удалить</a></li>
<li><a class="dropdown-item" data-bs-toggle="modal" data-bs-target={`#checkModal${item.id}`}>Удалить</a></li>
</ul>
<CheckModal
message={`Вы хотетите удалить форму <${currentRemoveForm.title}>?`}
postfix={item.id}
message={`Вы хотетите удалить форму <${item.title}>?`}
action={{
execute: () => removeForm(currentRemoveForm.id),
// cancel: () => setCurrentRemoveForm(false)
execute: () => removeForm(item.id),
cancel: () => {}
}}
/>