@@ -10,13 +10,14 @@ import useStoryEmitEvent from "../../hooks/pages/backlog/useStoryEmitEvent";
10
10
import changeEpicListToStoryList from "../../utils/changeEpicListToStoryList" ;
11
11
import getDragElementIndex from "../../utils/getDragElementIndex" ;
12
12
import { BacklogSocketData } from "../../types/common/backlog" ;
13
- import { BacklogDTO } from "../../types/DTO/backlogDTO" ;
13
+ import { BacklogDTO , TaskDTO } from "../../types/DTO/backlogDTO" ;
14
14
import StoryDragContainer from "../../components/backlog/StoryDragContainer" ;
15
15
import TaskBlock from "../../components/backlog/TaskBlock" ;
16
16
import TaskDragContainer from "../../components/backlog/TaskDragContainer" ;
17
17
import TaskContainer from "../../components/backlog/TaskContainer" ;
18
18
import TaskHeader from "../../components/backlog/TaskHeader" ;
19
19
import TaskCreateBlock from "../../components/backlog/TaskCreateBlock" ;
20
+ import useTaskEmitEvent from "../../hooks/pages/backlog/useTaskEmitEvent" ;
20
21
21
22
const UnfinishedStoryPage = ( ) => {
22
23
const { socket, backlog } : { socket : Socket ; backlog : BacklogDTO } =
@@ -37,6 +38,20 @@ const UnfinishedStoryPage = () => {
37
38
const storyList = useMemo (
38
39
( ) =>
39
40
changeEpicListToStoryList ( backlog . epicList )
41
+ . filter ( ( { status } ) => status !== "완료" )
42
+ . map ( ( story ) => {
43
+ const newTaskList = story . taskList . slice ( ) ;
44
+ newTaskList . sort ( ( taskA , taskB ) => {
45
+ if ( taskA . rankValue < taskB . rankValue ) {
46
+ return - 1 ;
47
+ }
48
+ if ( taskA . rankValue > taskB . rankValue ) {
49
+ return 1 ;
50
+ }
51
+ return 0 ;
52
+ } ) ;
53
+ return { ...story , taskList : newTaskList } ;
54
+ } )
40
55
. sort ( ( storyA , storyB ) => {
41
56
if ( storyA . rankValue < storyB . rankValue ) {
42
57
return - 1 ;
@@ -45,8 +60,7 @@ const UnfinishedStoryPage = () => {
45
60
return 1 ;
46
61
}
47
62
return 0 ;
48
- } )
49
- . filter ( ( { status } ) => status !== "완료" ) ,
63
+ } ) ,
50
64
[ backlog . epicList ]
51
65
) ;
52
66
const epicCategoryList = useMemo (
@@ -60,6 +74,7 @@ const UnfinishedStoryPage = () => {
60
74
[ backlog . epicList ]
61
75
) ;
62
76
const { emitStoryUpdateEvent } = useStoryEmitEvent ( socket ) ;
77
+ const { emitTaskUpdateEvent } = useTaskEmitEvent ( socket ) ;
63
78
64
79
const setStoryComponentRef = ( index : number ) => ( element : HTMLDivElement ) => {
65
80
storyComponentRefList . current [ index ] = element ;
@@ -181,6 +196,45 @@ const UnfinishedStoryPage = () => {
181
196
} ;
182
197
183
198
const handleTaskDragEnd = ( ) => {
199
+ const { storyId, taskIndex } = taskElementIndex ;
200
+ const taskList = storyList . find ( ( { id } ) => id === storyId )
201
+ ?. taskList as TaskDTO [ ] ;
202
+ const targetIndex = taskList ?. findIndex ( ( { id } ) => id === draggingTaskId ) ;
203
+
204
+ let rankValue ;
205
+
206
+ if ( taskIndex === targetIndex ) {
207
+ setDraggingTaskId ( undefined ) ;
208
+ setTaskElementIndex ( { storyId : undefined , taskIndex : undefined } ) ;
209
+ return ;
210
+ }
211
+
212
+ if ( taskIndex === 0 && ! taskList . length ) {
213
+ console . log ( "아무 것도 없을 때" ) ;
214
+
215
+ rankValue = LexoRank . middle ( ) . toString ( ) ;
216
+ } else if ( taskIndex === 0 ) {
217
+ const firstTaskRank = taskList [ 0 ] . rankValue ;
218
+ rankValue = LexoRank . parse ( firstTaskRank ) . genPrev ( ) . toString ( ) ;
219
+ } else if ( taskIndex === taskList . length ) {
220
+ const lastTaskRank = taskList [ taskList . length - 1 ] . rankValue ;
221
+ rankValue = LexoRank . parse ( lastTaskRank ) . genNext ( ) . toString ( ) ;
222
+ } else {
223
+ const prevTaskRank = LexoRank . parse (
224
+ taskList [ ( taskIndex as number ) - 1 ] . rankValue
225
+ ) ;
226
+ const nextTaskRank = LexoRank . parse (
227
+ taskList [ taskIndex as number ] . rankValue
228
+ ) ;
229
+ rankValue = prevTaskRank . between ( nextTaskRank ) . toString ( ) ;
230
+ }
231
+
232
+ emitTaskUpdateEvent ( {
233
+ id : draggingTaskId as number ,
234
+ storyId,
235
+ rankValue,
236
+ } ) ;
237
+
184
238
setDraggingTaskId ( undefined ) ;
185
239
setTaskElementIndex ( { storyId : undefined , taskIndex : undefined } ) ;
186
240
} ;
0 commit comments