Skip to content

Commit b0a5a07

Browse files
authored
Merge pull request #197 from canyener/add-delete-activity-action
Add delete activity action
2 parents 8ef23f5 + 27d2b70 commit b0a5a07

File tree

4 files changed

+26
-55
lines changed

4 files changed

+26
-55
lines changed

src/app/layout/App.tsx

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,16 @@
1-
import React, { useState, useEffect, Fragment, SyntheticEvent, useContext } from 'react'
1+
import React, { useEffect, Fragment, useContext } from 'react'
22
import { Container } from 'semantic-ui-react'
33
import { observer } from 'mobx-react-lite'
44

5-
import { IActivity } from '../models/activity'
6-
75
import NavBar from '../../features/nav/NavBar'
86
import ActivityDashboard from '../../features/activities/dashboard/ActivityDashboard'
97
import LoadingComponent from './LoadingComponent'
108

11-
import agent from '../api/agent'
12-
139
import ActivityStore from '../stores/activityStore'
1410

1511
const App = () => {
1612

1713
const activityStore = useContext(ActivityStore)
18-
const [activities, setActivities] = useState<IActivity[]>([])
19-
const [selectedActivity, setSelectedActivity] = useState<IActivity | null>(null)
20-
const [editMode, setEditMode] = useState(false)
21-
const [submitting, setSubmitting] = useState(false)
22-
const [target, setTarget] = useState('')
23-
24-
const handleDeleteActivity = (event: SyntheticEvent<HTMLButtonElement>, id: string) => {
25-
setSubmitting(true)
26-
setTarget(event.currentTarget.name)
27-
agent.Activities.delete(id).then(() => {
28-
setActivities([...activities.filter(activity => activity.id !== id)])
29-
})
30-
.then(() => setSubmitting(false))
31-
}
3214

3315
useEffect(() => {
3416
activityStore.loadActivities()
@@ -40,11 +22,7 @@ const App = () => {
4022
<Fragment>
4123
<NavBar />
4224
<Container style={{ marginTop: '7em' }}>
43-
<ActivityDashboard
44-
deleteActivity={handleDeleteActivity}
45-
submitting={submitting}
46-
target={target}
47-
/>
25+
<ActivityDashboard />
4826
</Container>
4927
</Fragment>
5028
)

src/app/stores/activityStore.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { makeObservable, observable, action, computed } from "mobx"
2-
import { createContext } from 'react'
2+
import { createContext, SyntheticEvent } from 'react'
33

44
import { IActivity } from "../models/activity"
55
import agent from '../api/agent'
@@ -16,6 +16,7 @@ class ActivityStore {
1616
@observable loadingInitial = false
1717
@observable editMode = false
1818
@observable submitting = false
19+
@observable target = ''
1920

2021
@computed get activitiesByDate() {
2122
return Array.from(this.activityRegistry.values()).slice().sort((a, b) => Date.parse(a.date) - Date.parse(b.date))
@@ -65,6 +66,22 @@ class ActivityStore {
6566
}
6667
}
6768

69+
@action deleteActivity = async (event: SyntheticEvent<HTMLButtonElement>, id: string) => {
70+
this.submitting = true
71+
this.target = event.currentTarget.name
72+
try {
73+
await agent.Activities.delete(id)
74+
this.activityRegistry.delete(id)
75+
this.submitting = false
76+
this.target = ''
77+
78+
} catch (error) {
79+
this.submitting = false
80+
this.target = ''
81+
console.log(error)
82+
}
83+
}
84+
6885
@action openEditForm = async (id: string) => {
6986
this.selectedActivity = this.activityRegistry.get(id)
7087
this.editMode = true

src/features/activities/dashboard/ActivityDashboard.tsx

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { SyntheticEvent, useContext } from 'react'
1+
import React, { useContext } from 'react'
22
import { Grid } from 'semantic-ui-react'
33
import { observer } from 'mobx-react-lite'
44

@@ -8,27 +8,13 @@ import ActivityList from './ActivityList'
88
import ActivityDetails from '../details/ActivityDetails'
99
import { ActivityForm } from '../form/ActivityForm'
1010

11-
interface IProps {
12-
deleteActivity: (event: SyntheticEvent<HTMLButtonElement>, id: string) => void
13-
submitting: boolean,
14-
target: string
15-
}
16-
17-
const ActivityDashboard: React.FC<IProps> = ({
18-
deleteActivity,
19-
submitting,
20-
target
21-
}) => {
11+
const ActivityDashboard: React.FC = () => {
2212
const activityStore = useContext(ActivityStore)
2313
const { editMode, selectedActivity } = activityStore
2414
return (
2515
<Grid>
2616
<Grid.Column width={10}>
27-
<ActivityList
28-
deleteActivity={deleteActivity}
29-
submitting={submitting}
30-
target={target}
31-
/>
17+
<ActivityList />
3218
</Grid.Column>
3319
<Grid.Column width={6}>
3420
{

src/features/activities/dashboard/ActivityList.tsx

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,12 @@
11
import { observer } from 'mobx-react-lite'
2-
import React, { SyntheticEvent, useContext } from 'react'
2+
import React, { useContext } from 'react'
33
import { Item, Button, Label, Segment } from 'semantic-ui-react'
44

55
import ActivityStore from '../../../app/stores/activityStore'
66

7-
interface IProps {
8-
deleteActivity: (event: SyntheticEvent<HTMLButtonElement>, id: string) => void
9-
submitting: boolean
10-
target: string
11-
}
12-
13-
const ActivityList: React.FC<IProps> = ({
14-
deleteActivity,
15-
submitting,
16-
target
17-
}) => {
7+
const ActivityList: React.FC = () => {
188
const activityStore = useContext(ActivityStore)
19-
const { activitiesByDate, selectActivity } = activityStore
9+
const { activitiesByDate, selectActivity, deleteActivity, submitting, target } = activityStore
2010
return (
2111
<Segment clearing>
2212
<Item.Group divided>

0 commit comments

Comments
 (0)