diff --git a/src/api/challengeSubmissionPost.js b/src/api/challengeSubmissionPost.js index d5ae8f7..720c91f 100644 --- a/src/api/challengeSubmissionPost.js +++ b/src/api/challengeSubmissionPost.js @@ -38,7 +38,12 @@ const challengeSubmission = ( .then((data) => { dispatch({ type: SUBMIT_ACTION.TOGGLE_SUBMISSION_LOADING }); const processUrl = API.replace('/api', ''); - window.location.replace(`${processUrl}/open-view-progress/${data}#form`); + if (Number.isInteger(Number(data))) { + console.log(`${processUrl}/open-view-progress/${data}#form`); + window.location.replace( + `${processUrl}/open-view-progress/${data}#form` + ); + } // console.log(data); // fetch(`${API}/view-progress-with-web-sockets/${data}`) diff --git a/src/api/deleteSubmission.js b/src/api/deleteSubmission.js index b360743..c3f7696 100644 --- a/src/api/deleteSubmission.js +++ b/src/api/deleteSubmission.js @@ -1,12 +1,12 @@ import KeyCloakService from '../services/KeyCloakService'; import { API } from '../utils/globals'; +import theme from '../utils/theme'; const deleteSubmission = async ( item, deletedItems, setDeletedItems, - popUpMessageHandler, - theme + popUpMessageHandler ) => { fetch(`${API}/delete-submission/${item.id}`, { method: 'POST', @@ -22,6 +22,13 @@ const deleteSubmission = async ( newDeletedItems.push(item); setDeletedItems(newDeletedItems); popUpMessageHandler('Complete', `Submission "${item.id}" deleted`); + } else if (data.includes('') && data.includes('Login')) { + popUpMessageHandler( + 'Error', + 'You have to be login in to edit submission!', + null, + theme.colors.red + ); } else { popUpMessageHandler( 'Error', diff --git a/src/api/editSubmission.js b/src/api/editSubmission.js index 6e87dc8..4519b29 100644 --- a/src/api/editSubmission.js +++ b/src/api/editSubmission.js @@ -1,25 +1,47 @@ import KeyCloakService from '../services/KeyCloakService'; import { API } from '../utils/globals'; +import theme from '../utils/theme'; -const editSubmission = ( +const editSubmission = async ( submisssion, tags, - description + description, + popUpMessageHandler ) => { - // tags = tags.map((tag) => tag.name).join(','); tags = tags.replaceAll(',', '%2C'); fetch(`${API}/edit-submission/${submisssion}/${tags}/${description}`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', Authorization: `Bearer ${KeyCloakService.getToken()}`, - } + }, }) .then((resp) => resp.text()) .then((data) => { console.log(data); + if (data === 'Submission changed') { + popUpMessageHandler( + 'Submission changed!', + `Submission ${submisssion} edited`, + null, + theme.colors.green + ); + } else if (data === 'Only owner can edit a submission!') { + popUpMessageHandler('Error', data, null, theme.colors.red); + } else if (data.includes('') && data.includes('Login')) { + popUpMessageHandler( + 'Error', + 'You have to be login in to edit submission!', + null, + theme.colors.red + ); + } else { + if (data.length > 650) { + data = `${data.slice(0, 650)}...`; + } + popUpMessageHandler('Error', data, null, theme.colors.red); + } }); }; export default editSubmission; -// http://localhost:3000/api/edit-submission/4/1%2C2/abc \ No newline at end of file diff --git a/src/components/generic/Table/Table.js b/src/components/generic/Table/Table.js index cb0658f..5d9a6b1 100644 --- a/src/components/generic/Table/Table.js +++ b/src/components/generic/Table/Table.js @@ -1,15 +1,10 @@ import React from 'react'; -import TableStyle from './styles/TableStyle'; -import TableHeader from './components/TableHeader'; -import TableRowItems from './components/TableRowItems'; -import RowsBackgroundStyle from './styles/RowsBackgroundStyle'; -import TableRowFooter from './components/TableRowFooter'; -import deleteSubmission from '../../../api/deleteSubmission'; -import theme from '../../../utils/theme'; -import DeletePopUp from './components/DeletePopUp'; -import MobileTable from './components/MobileTable'; import Media from 'react-media'; +import theme from '../../../utils/theme'; +import MobileTable from './components/MobileTable'; +import DesktopTable from './components/DesktopTable'; import EditPopUp from './components/EditPopUp'; +import DeletePopUp from './components/DeletePopUp'; const Table = ({ items, @@ -24,78 +19,58 @@ const Table = ({ const [deletePopUp, setDeletePopUp] = React.useState(false); const [editPopUp, setEditPopUp] = React.useState(false); const [itemToHandle, setItemToHandle] = React.useState(null); - const itemsToRender = items.filter((item) => !deletedItems.includes(item)); - const deleteItem = async (item) => { - await deleteSubmission( - item, - deletedItems, - setDeletedItems, - popUpMessageHandler, - theme - ); - }; - - const desktopRender = () => { - return ( - <> - - - - - {itemsToRender.map((item, i) => { - return ( - - - { - setItemToHandle(item); - setDeletePopUp(true); - }} - editItem={() => { - setItemToHandle(item); - setEditPopUp(true); - }} - rowFooter={rowFooter} - item={item} - i={i} - /> - - - ); - })} - - - ); - }; - return ( <> + + + + + - {desktopRender()} ); }; diff --git a/src/components/generic/Table/components/DeletePopUp/DeletePopUp.js b/src/components/generic/Table/components/DeletePopUp/DeletePopUp.js index 2ff2834..47a824f 100644 --- a/src/components/generic/Table/components/DeletePopUp/DeletePopUp.js +++ b/src/components/generic/Table/components/DeletePopUp/DeletePopUp.js @@ -4,8 +4,32 @@ import Button from '../../../Button'; import { Medium, H3 } from '../../../../../utils/fonts'; import { FlexColumn, FlexRow } from '../../../../../utils/containers'; import theme from '../../../../../utils/theme'; +import deleteSubmission from '../../../../../api/deleteSubmission'; -const DeletePopUp = ({ deletePopUp, setDeletePopUp, deleteItem, item }) => { +const deleteItem = async ( + item, + setDeletePopUp, + deletedItems, + setDeletedItems, + popUpMessageHandler +) => { + setDeletePopUp(false); + await deleteSubmission( + item, + deletedItems, + setDeletedItems, + popUpMessageHandler + ); +}; + +const DeletePopUp = ({ + deletePopUp, + setDeletePopUp, + item, + deletedItems, + setDeletedItems, + popUpMessageHandler, +}) => { if (deletePopUp) { return createPortal( { diff --git a/src/components/generic/Table/components/DesktopTable/DesktopTable.js b/src/components/generic/Table/components/DesktopTable/DesktopTable.js new file mode 100644 index 0000000..f8b9b9c --- /dev/null +++ b/src/components/generic/Table/components/DesktopTable/DesktopTable.js @@ -0,0 +1,41 @@ +import React from 'react'; +import TableStyle from '../../styles/TableStyle'; +import TableHeader from '../TableHeader/TableHeader'; +import TableRowItems from '../TableRowItems/TableRowItems'; +import TableRowFooter from '../TableRowFooter/TableRowFooter'; +import RowsBackgroundStyle from '../../styles/RowsBackgroundStyle'; + +const DesktopTable = (props) => { + return ( + + + {props.elements.map((item, i) => { + return ( + + + { + props.setItemToHandle(item); + props.setDeletePopUp(true); + }} + editItem={() => { + props.setItemToHandle(item); + props.setEditPopUp(true); + }} + rowFooter={props.rowFooter} + item={item} + i={i} + /> + + + ); + })} + + ); +}; + +export default DesktopTable; diff --git a/src/components/generic/Table/components/DesktopTable/index.js b/src/components/generic/Table/components/DesktopTable/index.js new file mode 100644 index 0000000..e04c8bb --- /dev/null +++ b/src/components/generic/Table/components/DesktopTable/index.js @@ -0,0 +1 @@ +export { default } from './DesktopTable'; diff --git a/src/components/generic/Table/components/EditPopUp/EditPopUp.js b/src/components/generic/Table/components/EditPopUp/EditPopUp.js index c7b154e..6735fdc 100644 --- a/src/components/generic/Table/components/EditPopUp/EditPopUp.js +++ b/src/components/generic/Table/components/EditPopUp/EditPopUp.js @@ -10,10 +10,31 @@ import editSubmission from '../../../../../api/editSubmission'; import getTags from '../../../../../api/getTags'; import React from 'react'; -const EditPopUp = ({ editPopUp, setEditPopUp, item }) => { +const editSubmissionHandler = async ( + item, + setEditPopUp, + tagsToEdit, + description, + popUpMessageHandler +) => { + setEditPopUp(false); + let tags = ''; + if (tagsToEdit) { + tags = tagsToEdit.join(','); + } else { + if (item?.tags) { + tags = item.tags.map((tag) => tag.name).join(','); + } + } + await editSubmission(item.id, tags, description, popUpMessageHandler); +}; + +const EditPopUp = ({ editPopUp, setEditPopUp, item, popUpMessageHandler }) => { const [tags, setTags] = React.useState([]); const [tagsToEdit, setTagsToEdit] = React.useState(item?.tags?.slice()); - const [description, setDescription] = React.useState(item?.description?.slice()); + const [description, setDescription] = React.useState( + item?.description?.slice() + ); React.useMemo(() => { getTags(setTags); @@ -50,10 +71,15 @@ const EditPopUp = ({ editPopUp, setEditPopUp, item }) => { @@ -61,7 +87,7 @@ const EditPopUp = ({ editPopUp, setEditPopUp, item }) => { width="100px" height="32px" handler={() => { - setTagsToEdit([]); + setTagsToEdit([]); setEditPopUp(false); }} backgroundColor={theme.colors.dark} diff --git a/src/components/generic/Table/components/MobileTable/MobileTable.js b/src/components/generic/Table/components/MobileTable/MobileTable.js index fe07aa4..60247f3 100644 --- a/src/components/generic/Table/components/MobileTable/MobileTable.js +++ b/src/components/generic/Table/components/MobileTable/MobileTable.js @@ -1,5 +1,4 @@ import React from 'react'; -import DeletePopUp from '../DeletePopUp/DeletePopUp'; import TableRowItems from '../TableRowItems/TableRowItems'; import TableRowFooter from '../TableRowFooter/TableRowFooter'; import MobileTableStyle from './MobileTableStyle'; @@ -10,15 +9,16 @@ const MobileTable = (props) => { {props.elements.map((item, i) => { return ( - props.setDeletePopUp(true)} + deleteItem={() => { + props.setItemToHandle(item); + props.setDeletePopUp(true); + }} + editItem={() => { + props.setItemToHandle(item); + props.setEditPopUp(true); + }} rowFooter={props.rowFooter} item={item} i={i}