Skip to content

Commit 07d61c8

Browse files
authored
Merge pull request #33 from oslabs-beta/Hernan/alerts
Hernan/alerts
2 parents 1e6fe53 + 46fe1cd commit 07d61c8

File tree

3 files changed

+62
-29
lines changed

3 files changed

+62
-29
lines changed

app/src/components/marketplace/MarketplaceCard.tsx

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ import { useDispatch, useSelector } from 'react-redux'
2222
import { RootState } from '../../redux/store';
2323
import { saveProject } from '../../helperFunctions/projectGetSaveDel';
2424
import { useHistory } from 'react-router-dom';
25-
import { openProject, resetAllState } from '../../redux/reducers/slice/appStateSlice';
25+
import { openProject } from '../../redux/reducers/slice/appStateSlice';
26+
import MuiAlert, { AlertProps } from '@mui/material/Alert';
27+
import Snackbar from '@mui/material/Snackbar';
2628

2729
interface Project {
2830
forked: String,
@@ -43,16 +45,16 @@ const MarketplaceCard = ({proj} :{proj: Project}) => {
4345
const history = useHistory();
4446
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
4547
const open = Boolean(anchorEl);
48+
const [alertOpen, setAlertOpen] = React.useState<boolean>(false)
4649
const state = useSelector((store:RootState) => store.appState);
4750
const handleClick = (event: React.MouseEvent<HTMLElement>) => {
4851
setAnchorEl(event.currentTarget);
4952
};
5053
const handleClone = async () => { // creates a copy of the project
5154
const docId = proj._id;
5255
const response = await axios.get(`/cloneProject/${docId}`, { params: { username: window.localStorage.getItem('username') } });//passing in username as a query param is query params
53-
const project = response.data;
54-
console.log('handleClone project', response.data)
55-
alert('Project cloned!');
56+
const project = response.data.project;
57+
setAlertOpen(true);
5658
setAnchorEl(null);
5759
return {_id: project._id, name: project.name, published: project.published, ...project.project};
5860
};
@@ -62,11 +64,29 @@ const MarketplaceCard = ({proj} :{proj: Project}) => {
6264
history.push('/');
6365
dispatch(openProject(project));
6466
};
67+
6568
const handleClose = () => {
6669
setAnchorEl(null);
6770
};
6871

6972

73+
const handleAlertClose = (
74+
event: React.SyntheticEvent | Event,
75+
reason?: string
76+
) => {
77+
if (reason === 'clickaway') {
78+
return;
79+
}
80+
setAlertOpen(false);
81+
setAnchorEl(null)
82+
}
83+
84+
const Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(
85+
props,
86+
ref
87+
) {
88+
return <MuiAlert elevation={6} ref={ref} variant="filled" {...props} />;
89+
});
7090

7191

7292
return (
@@ -135,6 +155,19 @@ const MarketplaceCard = ({proj} :{proj: Project}) => {
135155
Clone and open
136156
</MenuItem>
137157
</Menu>
158+
<Snackbar
159+
open={alertOpen}
160+
autoHideDuration={3000}
161+
onClose={handleAlertClose}
162+
>
163+
<Alert
164+
onClose={handleAlertClose}
165+
severity="success"
166+
sx={{ width: '100%', color: 'white' }}
167+
>
168+
Project Cloned!
169+
</Alert>
170+
</Snackbar>
138171
</Card>
139172
</>
140173
);

app/src/helperFunctions/projectGetSaveDel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export const deleteProject = (project: any): Promise<Object> => {
142142
body
143143
})
144144
.then((res) => res.json())
145-
.then((data) => {
145+
.then((data) => { console.log(data)
146146
return {_id: data._id, name: data.name, published:data.published, ...data.project};
147147
})
148148
.catch((err) => console.log(`Error deleting project ${err}`));

server/controllers/projectController.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -69,31 +69,31 @@ const projectController: ProjectController = {
6969
deleteProject: async (req, res, next) => {
7070
// pull project name and userId from req.body
7171
const { _id, userId } = req.body;
72-
try {
73-
const response = await Projects.findOneAndDelete({ _id: _id, username: userId });
74-
res.locals.deleted = response;
75-
return next()
76-
} catch (err) {
77-
return next({
78-
log: `Error in projectController.deleteProject: ${err}`,
79-
message: {
80-
err: 'Error in projectController.deleteProject, check server logs for details'
81-
}
82-
});
83-
}
72+
// try {
73+
// const response = await Projects.findOneAndDelete({ _id: _id, username: userId });
74+
// res.locals.deleted = response;
75+
// return next()
76+
// } catch (err) {
77+
// return next({
78+
// log: `Error in projectController.deleteProject: ${err}`,
79+
// message: {
80+
// err: 'Error in projectController.deleteProject, check server logs for details'
81+
// }
82+
// });
83+
// }
8484
// @Denton, rewrote the above syntax for async await, would be good to test this further
85-
// Projects.findOneAndDelete({ _id, userId }, null, (err, deleted) => {
86-
// if (err) {
87-
// return next({
88-
// log: `Error in projectController.deleteProject: ${err}`,
89-
// message: {
90-
// err: 'Error in projectController.deleteProject, check server logs for details'
91-
// }
92-
// });
93-
// }
94-
// res.locals.deleted = deleted;
95-
// return next();
96-
// });
85+
Projects.findOneAndDelete({ _id, userId }, null, (err, deleted) => {
86+
if (err) {
87+
return next({
88+
log: `Error in projectController.deleteProject: ${err}`,
89+
message: {
90+
err: 'Error in projectController.deleteProject, check server logs for details'
91+
}
92+
});
93+
}
94+
res.locals.deleted = deleted;
95+
return next();
96+
});
9797
}
9898
};
9999
export default projectController;

0 commit comments

Comments
 (0)