This commit is contained in:
Mikola 2023-10-28 17:57:32 +03:00
parent 5e69e922f5
commit 6dd8ac7604
4 changed files with 189 additions and 4 deletions

View File

@ -94,6 +94,7 @@ export const ModalTiсket = ({
const [acceptModalOpen, setAcceptModalOpen] = useState(false); const [acceptModalOpen, setAcceptModalOpen] = useState(false);
const [selectTagsOpen, setSelectTagsOpen] = useState(false); const [selectTagsOpen, setSelectTagsOpen] = useState(false);
const { showNotification } = useNotification(); const { showNotification } = useNotification();
const [commentSendDisable, setCommentSendDisable] = useState(false)
function deleteTask() { function deleteTask() {
apiRequest("/task/update-task", { apiRequest("/task/update-task", {
@ -144,6 +145,8 @@ export const ModalTiсket = ({
} }
function createComment() { function createComment() {
if (!inputsValue.comment) return
setCommentSendDisable(true)
apiRequest("/comment/create", { apiRequest("/comment/create", {
method: "POST", method: "POST",
data: { data: {
@ -153,6 +156,7 @@ export const ModalTiсket = ({
}, },
}).then((res) => { }).then((res) => {
let newComment = res; let newComment = res;
setCommentSendDisable(false)
newComment.created_at = new Date(); newComment.created_at = new Date();
newComment.subComments = []; newComment.subComments = [];
setInputsValue((prevValue) => ({ ...prevValue, comment: "" })); setInputsValue((prevValue) => ({ ...prevValue, comment: "" }));
@ -285,6 +289,7 @@ export const ModalTiсket = ({
} }
useEffect(() => { useEffect(() => {
initListeners()
apiRequest( apiRequest(
`/comment/get-by-entity?entity_type=2&entity_id=${task.id}` `/comment/get-by-entity?entity_type=2&entity_id=${task.id}`
).then((res) => { ).then((res) => {
@ -502,14 +507,60 @@ export const ModalTiсket = ({
setAcceptModalOpen(false); setAcceptModalOpen(false);
} }
const initListeners = () => {
document.addEventListener("click", closeByClickingOut);
};
const closeByClickingOut = (event) => {
const path = event.path || (event.composedPath && event.composedPath());
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("button-add-worker") ||
div.classList.contains("dropdownList"))
)
) {
setDropListOpen(false);
setDropListMembersOpen(false)
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("deadLine") ||
div.classList.contains("react-datepicker-popper"))
)
) {
setDatePickerOpen(false)
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("tags") ||
div.classList.contains("tags__dropDown"))
)
) {
setSelectTagsOpen(false)
}
}
return ( return (
<div <div
className={active ? "modal-tiket active" : "modal-tiket"} className={active ? "modal-tiket active" : "modal-tiket"}
onClick={() => setActive(false)} onClick={(e) => {
if(e.target.className.includes('modal-tiket')) setActive(false)
}}
> >
<div <div
className="modal-tiket__content" className="modal-tiket__content"
onClick={(e) => e.stopPropagation()}
> >
<div className="content"> <div className="content">
<h3 className="title-project"> <h3 className="title-project">
@ -646,7 +697,7 @@ export const ModalTiсket = ({
})); }));
}} }}
/> />
<img src={send} onClick={createComment}></img> <img className={commentSendDisable ? 'disable' : ''} src={send} onClick={createComment}></img>
</div> </div>
<div className="comments__list"> <div className="comments__list">
{comments.map((comment) => { {comments.map((comment) => {

View File

@ -584,6 +584,11 @@
margin-right: 18px; margin-right: 18px;
} }
.disable {
pointer-events: none;
opacity: 0.5;
}
//&:focus-within { //&:focus-within {
// border: 1px solid #0000004d; // border: 1px solid #0000004d;
//} //}

View File

@ -93,8 +93,10 @@ export const TicketFullScreen = () => {
const [selectTagsOpen, setSelectTagsOpen] = useState(false); const [selectTagsOpen, setSelectTagsOpen] = useState(false);
const [correctProjectTags, setCorrectProjectTags] = useState([]); const [correctProjectTags, setCorrectProjectTags] = useState([]);
const { showNotification } = useNotification(); const { showNotification } = useNotification();
const [commentSendDisable, setCommentSendDisable] = useState(false)
useEffect(() => { useEffect(() => {
initListeners()
apiRequest(`/task/get-task?task_id=${ticketId.id}&expand=mark`).then( apiRequest(`/task/get-task?task_id=${ticketId.id}&expand=mark`).then(
(taskInfo) => { (taskInfo) => {
setTaskInfo(taskInfo); setTaskInfo(taskInfo);
@ -217,6 +219,8 @@ export const TicketFullScreen = () => {
} }
function createComment() { function createComment() {
if (!inputsValue.comment) return
setCommentSendDisable(true)
apiRequest("/comment/create", { apiRequest("/comment/create", {
method: "POST", method: "POST",
data: { data: {
@ -226,6 +230,7 @@ export const TicketFullScreen = () => {
}, },
}).then((res) => { }).then((res) => {
let newComment = res; let newComment = res;
setCommentSendDisable(false)
newComment.created_at = new Date(); newComment.created_at = new Date();
newComment.subComments = []; newComment.subComments = [];
setInputsValue((prevValue) => ({ ...prevValue, comment: "" })); setInputsValue((prevValue) => ({ ...prevValue, comment: "" }));
@ -525,6 +530,63 @@ export const TicketFullScreen = () => {
}); });
} }
const initListeners = () => {
document.addEventListener("click", closeByClickingOut);
};
const closeByClickingOut = (event) => {
const path = event.path || (event.composedPath && event.composedPath());
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("button-add-worker") ||
div.classList.contains("dropdownList"))
)
) {
setDropListOpen(false);
setDropListMembersOpen(false)
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("deadLine") ||
div.classList.contains("react-datepicker-popper"))
)
) {
setDatePickerOpen(false)
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("tags") ||
div.classList.contains("tags__dropDown"))
)
) {
setSelectTagsOpen(false)
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("addPerson") ||
div.classList.contains("persons__list"))
)
) {
setPersonListOpen(false)
}
}
return ( return (
<section className="ticket-full-screen"> <section className="ticket-full-screen">
<ProfileHeader /> <ProfileHeader />
@ -820,7 +882,7 @@ export const TicketFullScreen = () => {
})); }));
}} }}
/> />
<img src={send} onClick={createComment} alt="send"></img> <img className={commentSendDisable ? 'disable' : ''} src={send} onClick={createComment} alt="send"></img>
</div> </div>
<div className="comments__list"> <div className="comments__list">
{comments.map((comment) => { {comments.map((comment) => {

View File

@ -90,6 +90,7 @@ export const ProjectTracker = () => {
useEffect(() => { useEffect(() => {
dispatch(activeLoader()); dispatch(activeLoader());
dispatch(setProjectBoardFetch(projectId.id)); dispatch(setProjectBoardFetch(projectId.id));
initListeners()
}, []); }, []);
useEffect(() => { useEffect(() => {
@ -353,6 +354,72 @@ export const ProjectTracker = () => {
}); });
} }
const initListeners = () => {
document.addEventListener("click", closeByClickingOut);
};
const closeByClickingOut = (event) => {
const path = event.path || (event.composedPath && event.composedPath());
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("addPerson") ||
div.classList.contains("persons__list"))
)
) {
setPersonListOpen(false);
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("tasks__head__executor") ||
div.classList.contains("tasks__head__executorDropdown"))
)
) {
setSelectedExecutorOpen(false);
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("tasks__head__tags") ||
div.classList.contains("tags__list"))
)
) {
setTags({
open: false,
add: false,
edit: false,
});
}
if (
event &&
!path.find(
(div) =>
div.classList &&
(div.classList.contains("board__head__more") ||
div.classList.contains("column__select"))
)
) {
setOpenColumnSelect((prevState) => {
const newState = {}
for (const key in prevState) {
newState[key] = false;
}
return newState;
})
}
};
return ( return (
<div className="tracker"> <div className="tracker">
<ProfileHeader /> <ProfileHeader />