Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
planner-team-one
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
21
Issues
21
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Евгений Положенцев
planner-team-one
Commits
8faed77a
Commit
8faed77a
authored
Jan 15, 2023
by
Ermolaev Timur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#153
добавил селект для сортировки по проектам
parent
2cfef1f4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
251 additions
and
206 deletions
+251
-206
tasks.ts
planner-api/src/routers/tasks.ts
+6
-0
MultipleSelect.js
...-front/src/components/UI/MultipleSelect/MultipleSelect.js
+2
-3
DateTimePicker.js
...UsersTasksTableContainer/DateTimePicker/DateTimePicker.js
+0
-3
UsersTasksRow.js
...tainer/UsersTasksTableBody/UsersTasksRow/UsersTasksRow.js
+3
-3
UsersTasksTableToolbar.js
...mpoments/UsersTasksTableToolbar/UsersTasksTableToolbar.js
+35
-20
UsersTasks.js
planner-front/src/containers/UsersTasks/UsersTasks.js
+24
-9
tasksTypes.js
planner-front/src/store/actionTypes/tasksTypes.js
+3
-1
tasksActions.js
planner-front/src/store/actions/tasksActions.js
+172
-166
tasksReducer.js
planner-front/src/store/reducers/tasksReducer.js
+6
-1
No files found.
planner-api/src/routers/tasks.ts
View file @
8faed77a
...
@@ -380,10 +380,16 @@ router.post('/project',async (req: Request, res: Response):Promise<Response>=>{
...
@@ -380,10 +380,16 @@ router.post('/project',async (req: Request, res: Response):Promise<Response>=>{
const
tasks
=
await
const
tasks
=
await
dataSource
dataSource
.
getRepository
(
Task
)
.
getRepository
(
Task
)
.
createQueryBuilder
(
'task'
)
.
createQueryBuilder
(
'task'
)
.
innerJoinAndSelect
(
'task.project'
,
'project'
)
.
innerJoinAndSelect
(
'task.project'
,
'project'
)
.
innerJoinAndSelect
(
'task.author'
,
'users'
)
.
innerJoinAndSelect
(
'task.executor'
,
'userss'
)
.
innerJoinAndSelect
(
'task.dateTimeTasks'
,
'DateTimeTask'
)
.
where
(
'task.project IN(:...projects)'
,
{
projects
:
projectArray
})
.
where
(
'task.project IN(:...projects)'
,
{
projects
:
projectArray
})
.
getMany
()
.
getMany
()
return
res
.
send
({
tasks
})
return
res
.
send
({
tasks
})
})
})
...
...
planner-front/src/components/UI/MultipleSelect/MultipleSelect.js
View file @
8faed77a
...
@@ -29,7 +29,6 @@ function getStyles(name, personName, theme) {
...
@@ -29,7 +29,6 @@ function getStyles(name, personName, theme) {
}
}
export
default
function
MultipleSelect
({
projects
,
onCloseFilterByProjects
})
{
export
default
function
MultipleSelect
({
projects
,
onCloseFilterByProjects
})
{
const
theme
=
useTheme
();
const
theme
=
useTheme
();
const
[
listProjectIds
,
setListProjectIds
]
=
React
.
useState
([])
const
[
listProjectIds
,
setListProjectIds
]
=
React
.
useState
([])
const
handleChange
=
(
event
)
=>
{
const
handleChange
=
(
event
)
=>
{
...
@@ -48,10 +47,10 @@ export default function MultipleSelect({projects,onCloseFilterByProjects}) {
...
@@ -48,10 +47,10 @@ export default function MultipleSelect({projects,onCloseFilterByProjects}) {
<
InputLabel
placeholder
=
'Choose Project'
<
InputLabel
placeholder
=
'Choose Project'
label
=
'I am a really really long green TextField label'
label
=
'I am a really really long green TextField label'
id
=
"demo-multiple-name-label"
sx
=
{{
color
:
'white'
,
padding
:
'1'
}}
id
=
"demo-multiple-name-label"
sx
=
{{
color
:
'white'
,
padding
:
'1'
}}
>
Project
<
/InputLabel
>
>
Проекты
<
/InputLabel
>
<
Select
<
Select
labelId
=
"demo-multiple-name-label"
labelId
=
"demo-multiple-name-label"
label
=
'
Choose Project
'
label
=
'
Выберите проект
'
name
=
'Choose Project'
name
=
'Choose Project'
id
=
"demo-multiple-name"
id
=
"demo-multiple-name"
multiple
multiple
...
...
planner-front/src/components/UsersTasksCompoments/UsersTasksTableContainer/DateTimePicker/DateTimePicker.js
View file @
8faed77a
...
@@ -11,9 +11,6 @@ import moment from "moment";
...
@@ -11,9 +11,6 @@ import moment from "moment";
export
default
function
MaterialUIPickers
({
task
,
name
,
onChange
,
currentTask
})
{
export
default
function
MaterialUIPickers
({
task
,
name
,
onChange
,
currentTask
})
{
const
[
state
,
setState
]
=
useState
(
null
)
const
[
state
,
setState
]
=
useState
(
null
)
let
fullYear
=
new
Date
().
getFullYear
()
let
month
=
new
Date
().
getMonth
()
let
day
=
new
Date
().
getDate
();
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
!
task
.
dateTimeDeadLine
)
setState
(
null
)
if
(
!
task
.
dateTimeDeadLine
)
setState
(
null
)
if
(
currentTask
)
setState
(
moment
(
task
.
dateTimeDeadLine
).
utc
())
if
(
currentTask
)
setState
(
moment
(
task
.
dateTimeDeadLine
).
utc
())
...
...
planner-front/src/components/UsersTasksCompoments/UsersTasksTableContainer/UsersTasksTableBody/UsersTasksRow/UsersTasksRow.js
View file @
8faed77a
...
@@ -28,7 +28,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
...
@@ -28,7 +28,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
const
[
editMode
,
setEditMode
]
=
useState
(
false
);
const
[
editMode
,
setEditMode
]
=
useState
(
false
);
const
dateTimeTasks
=
useMemo
(()
=>
{
const
dateTimeTasks
=
useMemo
(()
=>
{
if
(
row
.
dateTimeTasks
.
length
===
1
)
{
if
(
row
?.
dateTimeTasks
?
.
length
===
1
)
{
const
date
=
moment
(
row
.
dateTimeTasks
[
0
].
dateTimeStart
).
utc
().
format
(
'DD.MM'
)
const
date
=
moment
(
row
.
dateTimeTasks
[
0
].
dateTimeStart
).
utc
().
format
(
'DD.MM'
)
const
start
=
moment
(
row
.
dateTimeTasks
[
0
].
dateTimeStart
).
utc
().
format
(
'HH:mm'
)
const
start
=
moment
(
row
.
dateTimeTasks
[
0
].
dateTimeStart
).
utc
().
format
(
'HH:mm'
)
let
end
let
end
...
@@ -60,7 +60,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
...
@@ -60,7 +60,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
}
}
<
/Box
>
<
/Box
>
}
else
if
(
row
.
dateTimeTasks
.
length
>
1
)
{
}
else
if
(
row
?.
dateTimeTasks
?
.
length
>
1
)
{
return
(
<>
return
(
<>
<
IconButton
<
IconButton
aria
-
label
=
"expand row"
aria
-
label
=
"expand row"
...
@@ -82,7 +82,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
...
@@ -82,7 +82,7 @@ function UsersTasksRow({ row, deleteTaskHandler, calendarOpen, deleteCopyTaskHan
:
null
:
null
}
}
<
/>
)
<
/>
)
}
else
if
(
row
.
dateTimeTasks
.
length
===
0
)
{
}
else
if
(
row
?.
dateTimeTasks
?
.
length
===
0
)
{
return
(
<>
return
(
<>
Копий
нет
Копий
нет
{
{
...
...
planner-front/src/components/UsersTasksCompoments/UsersTasksTableToolbar/UsersTasksTableToolbar.js
View file @
8faed77a
import
{
AppBar
,
Box
,
Typography
}
from
"@mui/material"
;
import
{
AppBar
,
Box
,
Typography
}
from
"@mui/material"
;
import
{
memo
}
from
"react"
;
import
{
memo
,
useMemo
}
from
"react"
;
import
MultipleSelect
from
"../../UI/MultipleSelect/MultipleSelect"
;
import
CreateTaskFromButton
from
"./CreateTaskFromButton/CreateTaskFromButton"
;
import
CreateTaskFromButton
from
"./CreateTaskFromButton/CreateTaskFromButton"
;
function
UsersTasksTableToolbar
({
addFormStatus
,
createTaskFromButtonHandler
})
{
function
UsersTasksTableToolbar
({
addFormStatus
,
createTaskFromButtonHandler
,
projects
,
onCloseFilterByProjects
,
projectIdListForTaskSelect
,
setProjectIdListForTaskSelect
})
{
return
(
const
projectsFilter
=
useMemo
(()
=>
{
<
AppBar
position
=
"static"
sx
=
{{
padding
:
3
}}
>
if
(
Array
.
isArray
(
projects
))
{
<
Box
sx
=
{{
display
:
'flex'
,
alignItems
:
'center'
}}
>
return
<
MultipleSelect
<
Typography
projects
=
{
projects
}
sx
=
{{
flex
:
'1 1 100%'
}}
onCloseFilterByProjects
=
{
onCloseFilterByProjects
}
variant
=
"h6"
projectIdListForTaskSelect
=
{
projectIdListForTaskSelect
}
id
=
"tableTitle"
setProjectIdListForTaskSelect
=
{
setProjectIdListForTaskSelect
}
component
=
"div"
/
>
>
}
else
{
Задачи
сотрудников
return
null
<
/Typography
>
}
<
CreateTaskFromButton
},
[
projects
,
onCloseFilterByProjects
,
projectIdListForTaskSelect
,
setProjectIdListForTaskSelect
])
addFormStatus
=
{
addFormStatus
}
onClick
=
{()
=>
{
createTaskFromButtonHandler
()
}}
return
(
/
>
<
AppBar
position
=
"static"
sx
=
{{
padding
:
3
}}
>
<
/Box
>
<
Box
sx
=
{{
display
:
'flex'
,
alignItems
:
'center'
}}
>
<
/AppBar
>
<
Typography
);
sx
=
{{
flex
:
'1 1 100%'
}}
variant
=
"h6"
id
=
"tableTitle"
component
=
"div"
>
Задачи
сотрудников
<
/Typography
>
{
projectsFilter
}
<
CreateTaskFromButton
addFormStatus
=
{
addFormStatus
}
onClick
=
{()
=>
{
createTaskFromButtonHandler
()
}}
/
>
<
/Box
>
<
/AppBar
>
);
}
}
export
default
memo
(
UsersTasksTableToolbar
)
export
default
memo
(
UsersTasksTableToolbar
)
\ No newline at end of file
planner-front/src/containers/UsersTasks/UsersTasks.js
View file @
8faed77a
...
@@ -2,10 +2,10 @@ import Paper from '@mui/material/Paper';
...
@@ -2,10 +2,10 @@ import Paper from '@mui/material/Paper';
import
UsersTasksTableToolbar
from
'../../components/UsersTasksCompoments/UsersTasksTableToolbar/UsersTasksTableToolbar'
;
import
UsersTasksTableToolbar
from
'../../components/UsersTasksCompoments/UsersTasksTableToolbar/UsersTasksTableToolbar'
;
import
UsersTasksTablePagination
from
'../../components/UsersTasksCompoments/UsersTasksTablePagination/UsersTasksTablePagination'
;
import
UsersTasksTablePagination
from
'../../components/UsersTasksCompoments/UsersTasksTablePagination/UsersTasksTablePagination'
;
import
UsersTasksTableContainer
from
'../../components/UsersTasksCompoments/UsersTasksTableContainer/UsersTasksTableContainer'
;
import
UsersTasksTableContainer
from
'../../components/UsersTasksCompoments/UsersTasksTableContainer/UsersTasksTableContainer'
;
import
{
activateCreateCopyTasksMode
,
addTaskToUserTasksTable
,
deleteDateTimeTaskUsers
,
deleteTaskUsers
,
editTaskUsers
,
fetchAllTasksByMembership
}
from
'../../store/actions/tasksActions'
;
import
{
activateCreateCopyTasksMode
,
addTaskToUserTasksTable
,
deleteDateTimeTaskUsers
,
deleteTaskUsers
,
editTaskUsers
,
fetchAllTasksByMembership
,
sortTaskByProjects
}
from
'../../store/actions/tasksActions'
;
import
{
shallowEqual
,
useDispatch
,
useSelector
}
from
'react-redux'
;
import
{
shallowEqual
,
useDispatch
,
useSelector
}
from
'react-redux'
;
import
{
useCallback
,
useEffect
,
useState
}
from
'react'
;
import
{
useCallback
,
useEffect
,
useState
}
from
'react'
;
import
{
fetchAllUserProjects
}
from
'../../store/actions/projectsActions'
;
import
{
fetchAllUserProjects
,
fetchProjects
}
from
'../../store/actions/projectsActions'
;
import
moment
from
'moment'
;
import
moment
from
'moment'
;
import
{
useNavigate
}
from
'react-router-dom'
;
import
{
useNavigate
}
from
'react-router-dom'
;
...
@@ -13,8 +13,8 @@ export default function EnhancedTable() {
...
@@ -13,8 +13,8 @@ export default function EnhancedTable() {
const
dispatch
=
useDispatch
();
const
dispatch
=
useDispatch
();
const
navigate
=
useNavigate
()
const
navigate
=
useNavigate
()
const
{
tasks
}
=
useSelector
((
state
)
=>
state
.
tasks
);
const
{
tasks
,
sortedTasks
}
=
useSelector
((
state
)
=>
state
.
tasks
,
shallowEqual
);
const
{
allUserProjectsForModalTask
}
=
useSelector
(
state
=>
state
.
projects
,
shallowEqual
)
const
{
allUserProjectsForModalTask
,
projects
}
=
useSelector
(
state
=>
state
.
projects
,
shallowEqual
)
const
[
newTask
,
setNewTask
]
=
useState
({
const
[
newTask
,
setNewTask
]
=
useState
({
priority
:
''
,
priority
:
''
,
...
@@ -39,11 +39,18 @@ export default function EnhancedTable() {
...
@@ -39,11 +39,18 @@ export default function EnhancedTable() {
const
[
page
,
setPage
]
=
useState
(
0
);
const
[
page
,
setPage
]
=
useState
(
0
);
const
[
rowsPerPage
,
setRowsPerPage
]
=
useState
(
10
);
const
[
rowsPerPage
,
setRowsPerPage
]
=
useState
(
10
);
const
[
addFormStatus
,
setAddFormStatus
]
=
useState
(
false
);
const
[
addFormStatus
,
setAddFormStatus
]
=
useState
(
false
);
const
[
projectIdListForTaskSelect
,
setProjectIdListForTaskSelect
]
=
useState
([]);
useEffect
(()
=>
{
useEffect
(()
=>
{
dispatch
(
fetchAllTasksByMembership
());
dispatch
(
fetchAllTasksByMembership
());
dispatch
(
fetchAllUserProjects
())
dispatch
(
fetchAllUserProjects
())
dispatch
(
fetchProjects
())
},
[
dispatch
]);
},
[
dispatch
]);
useEffect
(()
=>
{
dispatch
(
sortTaskByProjects
(
projectIdListForTaskSelect
))
},
[
dispatch
,
projectIdListForTaskSelect
]);
const
onChangeNewTaskHandler
=
useCallback
((
e
)
=>
{
const
onChangeNewTaskHandler
=
useCallback
((
e
)
=>
{
const
{
value
,
name
}
=
e
.
target
;
const
{
value
,
name
}
=
e
.
target
;
...
@@ -147,10 +154,10 @@ export default function EnhancedTable() {
...
@@ -147,10 +154,10 @@ export default function EnhancedTable() {
dispatch
(
deleteDateTimeTaskUsers
(
id
))
dispatch
(
deleteDateTimeTaskUsers
(
id
))
},
[
dispatch
])
},
[
dispatch
])
const
calendarOpen
=
(
task
)
=>
{
const
calendarOpen
=
useCallback
(
(
task
)
=>
{
dispatch
(
activateCreateCopyTasksMode
(
task
,
navigate
))
dispatch
(
activateCreateCopyTasksMode
(
task
,
navigate
))
}
}
,
[
dispatch
,
navigate
])
console
.
log
(
currentTask
)
const
editCurrentTaskHandler
=
useCallback
(()
=>
{
const
editCurrentTaskHandler
=
useCallback
(()
=>
{
if
(
currentTask
.
priority
===
''
||
currentTask
.
project
===
''
||
currentTask
.
executor
===
''
||
!
Object
.
keys
(
currentTask
.
executor
).
length
)
{
if
(
currentTask
.
priority
===
''
||
currentTask
.
project
===
''
||
currentTask
.
executor
===
''
||
!
Object
.
keys
(
currentTask
.
executor
).
length
)
{
const
task
=
{
const
task
=
{
...
@@ -174,17 +181,25 @@ export default function EnhancedTable() {
...
@@ -174,17 +181,25 @@ export default function EnhancedTable() {
})
})
},
[
dispatch
,
currentTask
])
},
[
dispatch
,
currentTask
])
const
onCloseFilterByProjects
=
useCallback
((
listProjectIds
)
=>
{
setProjectIdListForTaskSelect
(
listProjectIds
)
},
[])
return
(
return
(
<
Paper
sx
=
{{
width
:
'100%'
,
mb
:
2
}}
>
<
Paper
sx
=
{{
width
:
'100%'
,
mb
:
2
}}
>
<
UsersTasksTableToolbar
<
UsersTasksTableToolbar
addFormStatus
=
{
addFormStatus
}
addFormStatus
=
{
addFormStatus
}
createTaskFromButtonHandler
=
{
createTaskFromButtonHandler
}
createTaskFromButtonHandler
=
{
createTaskFromButtonHandler
}
onCloseFilterByProjects
=
{
onCloseFilterByProjects
}
projectIdListForTaskSelect
=
{
projectIdListForTaskSelect
}
setProjectIdListForTaskSelect
=
{
setProjectIdListForTaskSelect
}
projects
=
{
projects
.
projects
}
/
>
/
>
<
UsersTasksTableContainer
<
UsersTasksTableContainer
order
=
{
order
}
order
=
{
order
}
orderBy
=
{
orderBy
}
orderBy
=
{
orderBy
}
handleRequestSort
=
{
handleRequestSort
}
handleRequestSort
=
{
handleRequestSort
}
rows
=
{
tasks
}
rows
=
{
projectIdListForTaskSelect
.
length
?
sortedTasks
:
tasks
}
page
=
{
page
}
page
=
{
page
}
rowsPerPage
=
{
rowsPerPage
}
rowsPerPage
=
{
rowsPerPage
}
addFormStatus
=
{
addFormStatus
}
addFormStatus
=
{
addFormStatus
}
...
@@ -203,7 +218,7 @@ export default function EnhancedTable() {
...
@@ -203,7 +218,7 @@ export default function EnhancedTable() {
editCurrentTaskHandler
=
{
editCurrentTaskHandler
}
editCurrentTaskHandler
=
{
editCurrentTaskHandler
}
/
>
/
>
<
UsersTasksTablePagination
<
UsersTasksTablePagination
count
=
{
tasks
.
length
}
count
=
{
projectIdListForTaskSelect
.
length
?
sortedTasks
.
length
:
tasks
.
length
}
rowsPerPage
=
{
rowsPerPage
}
rowsPerPage
=
{
rowsPerPage
}
page
=
{
page
}
page
=
{
page
}
handleChangePage
=
{
handleChangePage
}
handleChangePage
=
{
handleChangePage
}
...
...
planner-front/src/store/actionTypes/tasksTypes.js
View file @
8faed77a
...
@@ -31,4 +31,6 @@ export const FETCH_ALL_TASKS_BY_MEMBERSHIP_SUCCESS = "FETCH_ALL_TASKS_BY_MEMBERS
...
@@ -31,4 +31,6 @@ export const FETCH_ALL_TASKS_BY_MEMBERSHIP_SUCCESS = "FETCH_ALL_TASKS_BY_MEMBERS
export
const
FETCH_ALL_TASKS_BY_MEMBERSHIP_FAILURE
=
"FETCH_ALL_TASKS_BY_MEMBERSHIP_FAILURE"
;
export
const
FETCH_ALL_TASKS_BY_MEMBERSHIP_FAILURE
=
"FETCH_ALL_TASKS_BY_MEMBERSHIP_FAILURE"
;
export
const
ACTIVATE_CREATE_COPY_TASKS_MODE
=
"ACTIVATE_CREATE_COPY_TASKS_MODE"
export
const
ACTIVATE_CREATE_COPY_TASKS_MODE
=
"ACTIVATE_CREATE_COPY_TASKS_MODE"
export
const
DEACTIVATE_CREATE_COPY_TASKS_MODE
=
"DEACTIVATE_CREATE_COPY_TASKS_MODE"
export
const
DEACTIVATE_CREATE_COPY_TASKS_MODE
=
"DEACTIVATE_CREATE_COPY_TASKS_MODE"
\ No newline at end of file
export
const
SORT_TASKS
=
"SORT_TASKS"
\ No newline at end of file
planner-front/src/store/actions/tasksActions.js
View file @
8faed77a
This diff is collapsed.
Click to expand it.
planner-front/src/store/reducers/tasksReducer.js
View file @
8faed77a
...
@@ -21,7 +21,8 @@ import {
...
@@ -21,7 +21,8 @@ import {
DELETE_DATETIMETASK_REQUEST
,
DELETE_DATETIMETASK_REQUEST
,
FETCH_ALL_TASKS_BY_MEMBERSHIP_SUCCESS
,
FETCH_ALL_TASKS_BY_MEMBERSHIP_SUCCESS
,
ACTIVATE_CREATE_COPY_TASKS_MODE
,
ACTIVATE_CREATE_COPY_TASKS_MODE
,
DEACTIVATE_CREATE_COPY_TASKS_MODE
DEACTIVATE_CREATE_COPY_TASKS_MODE
,
SORT_TASKS
}
from
"../actionTypes/tasksTypes"
;
}
from
"../actionTypes/tasksTypes"
;
const
initialState
=
{
const
initialState
=
{
...
@@ -31,6 +32,7 @@ const initialState = {
...
@@ -31,6 +32,7 @@ const initialState = {
},
},
tasks
:
[],
tasks
:
[],
calendarTasks
:
[],
calendarTasks
:
[],
sortedTasks
:
[],
loading
:
false
,
loading
:
false
,
error
:
null
,
error
:
null
,
};
};
...
@@ -141,6 +143,9 @@ const tasksReduсer = (state = initialState, action) => {
...
@@ -141,6 +143,9 @@ const tasksReduсer = (state = initialState, action) => {
return
{
...
state
,
copyMode
:
{
working
:
true
,
task
:
action
.
task
}
}
return
{
...
state
,
copyMode
:
{
working
:
true
,
task
:
action
.
task
}
}
case
DEACTIVATE_CREATE_COPY_TASKS_MODE
:
case
DEACTIVATE_CREATE_COPY_TASKS_MODE
:
return
{
...
state
,
copyMode
:
{
working
:
false
,
task
:
null
}
}
return
{
...
state
,
copyMode
:
{
working
:
false
,
task
:
null
}
}
case
SORT_TASKS
:
const
filteredTasks
=
state
.
tasks
.
filter
(
task
=>
action
.
projectIdListForTaskSelect
.
includes
(
task
.
project
?.
id
))
return
{
...
state
,
loading
:
false
,
sortedTasks
:
filteredTasks
};
default
:
default
:
return
state
;
return
state
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment