Skip to content

Commit 74a8397

Browse files
committed
deleting events by owner
1 parent da04096 commit 74a8397

File tree

4 files changed

+78
-4
lines changed

4 files changed

+78
-4
lines changed

client/actions/events.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export type EventsAction =
5151
| IUnresolveHelpRequest
5252
| IUpdateHelpRequest;
5353

54-
export function setEvent(event: Event): ISetEvent {
54+
export function setEvent(event: Event | null): ISetEvent {
5555
return {
5656
type: 'SET_EVENT',
5757
event,

client/eventPage/EventEditorForm.tsx

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,34 @@ export default ({ event, onComplete }: Props) => {
106106
}
107107
};
108108

109+
const onDelete = async () => {
110+
if (!confirm('Are you sure?') || !event) {
111+
return;
112+
}
113+
114+
setLoading(true);
115+
116+
try {
117+
const res = await post(`/api/events/delete`, {
118+
eventId: event._id,
119+
});
120+
121+
if (!res.ok) {
122+
const json = await res.json();
123+
throw new Error(json.message);
124+
}
125+
} catch (e) {
126+
setLoading(false);
127+
return setErrors({
128+
...errors,
129+
general: e.message,
130+
});
131+
}
132+
133+
setLoading(false);
134+
dispatch(setEvent(null));
135+
};
136+
109137
const clearErrors = (keys: Array<keyof typeof defaultErrors>) => {
110138
const updatedErrors = { ...errors };
111139
keys.forEach(key => (updatedErrors[key] = ''));
@@ -159,8 +187,21 @@ export default ({ event, onComplete }: Props) => {
159187
{errors.endDate && <Alert variant="danger">{errors.endDate}</Alert>}
160188
</Form.Group>
161189
<div className="controls">
190+
{event ? (
191+
<Button
192+
disabled={loading}
193+
onClick={(e: React.FormEvent) => {
194+
e.preventDefault();
195+
onDelete();
196+
}}
197+
variant="danger"
198+
>
199+
Delete
200+
</Button>
201+
) : (
202+
<div />
203+
)}
162204
<Button
163-
type="submit"
164205
disabled={loading}
165206
onClick={(e: React.FormEvent) => {
166207
e.preventDefault();
@@ -182,7 +223,8 @@ export default ({ event, onComplete }: Props) => {
182223
margin-top: 10px;
183224
}
184225
.controls {
185-
text-align: right;
226+
display: flex;
227+
justify-content: space-between;
186228
}
187229
`}</style>
188230
</div>

pages/login.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export default () => {
5858
<Form.Label>Password</Form.Label>
5959
<Form.Control
6060
type="password"
61-
placeholder="Hope you remember it!"
61+
placeholder="Enter your password"
6262
required
6363
value={password}
6464
onChange={(e: InputEvent) => {

server/routers/events.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,36 @@ router.post(
242242
}),
243243
);
244244

245+
router.post(
246+
'/api/events/delete',
247+
requiresAuth({ error: true }),
248+
asyncHandler(async (req: ReqWithUser, res: express.Response) => {
249+
const { eventId } = req.body;
250+
const db: typeof mongoose = req.app.locals.db;
251+
252+
const event = await Event.findById(eventId);
253+
254+
if (!event || String(event.owner) !== String(req.user._id)) {
255+
throw new NotFoundError('Event not found');
256+
}
257+
258+
const session = await db.startSession();
259+
session.startTransaction();
260+
261+
const q = Event.deleteOne({ _id: event._id });
262+
q.setOptions({ session });
263+
await q.exec();
264+
265+
await User.updateOne(
266+
{ _id: req.user._id },
267+
{ $set: { events: [] } },
268+
{ session },
269+
).exec();
270+
271+
await session.commitTransaction();
272+
273+
res.json({ success: true });
274+
}),
275+
);
276+
245277
export default router;

0 commit comments

Comments
 (0)