1
1
import React , { useState , useEffect } from 'react' ;
2
2
import {
3
3
closestCenter ,
4
- DndContext ,
4
+ DndContext ,
5
5
DragOverlay ,
6
6
KeyboardSensor ,
7
7
PointerSensor ,
@@ -90,11 +90,14 @@ export default function Feed(): JSX.Element {
90
90
// Note: There's a small bug here and in PostProblems.tsx
91
91
// where immediately after creating a new post the post ordering and post length will be off...
92
92
setItems (
93
- group . posts . filter ( post => {
93
+ group . posts
94
+ . filter ( post => {
94
95
if ( ! group . showAdminView && ! post . isPublished ) return false ;
95
96
if ( currentFeed === 'all' ) return true ;
96
- if ( currentFeed === 'assignments' ) return post . type === 'assignment' ;
97
- if ( currentFeed === 'announcements' ) return post . type === 'announcement' ;
97
+ if ( currentFeed === 'assignments' )
98
+ return post . type === 'assignment' ;
99
+ if ( currentFeed === 'announcements' )
100
+ return post . type === 'announcement' ;
98
101
throw 'unknown feed ' + this . currentFeed ;
99
102
} )
100
103
. sort ( sortPostsComparator )
@@ -105,29 +108,29 @@ export default function Feed(): JSX.Element {
105
108
setItems ( group . groupData . postOrdering ) ;
106
109
}
107
110
} , [ group . groupData ?. postOrdering , group . posts ] ) ;
108
-
109
- const handleDragStart = ( event ) => {
110
- const { active} = event ;
111
-
111
+
112
+ const handleDragStart = event => {
113
+ const { active } = event ;
114
+
112
115
setActiveId ( active . id ) ;
113
- }
114
-
115
- const handleDragEnd = ( event ) => {
116
- const { active, over} = event ;
117
-
116
+ } ;
117
+
118
+ const handleDragEnd = event => {
119
+ const { active, over } = event ;
120
+
118
121
if ( active . id !== over . id ) {
119
- setItems ( ( items ) => {
122
+ setItems ( items => {
120
123
const oldIndex = items . indexOf ( active . id ) ;
121
124
const newIndex = items . indexOf ( over . id ) ;
122
-
125
+
123
126
const newArr = arrayMove ( items , oldIndex , newIndex ) ;
124
127
updatePostOrdering ( group . activeGroupId , newArr ) ;
125
128
return newArr ;
126
129
} ) ;
127
130
}
128
-
131
+
129
132
setActiveId ( null ) ;
130
- }
133
+ } ;
131
134
132
135
return (
133
136
< >
@@ -147,38 +150,50 @@ export default function Feed(): JSX.Element {
147
150
{ group . isLoading && 'Loading posts...' }
148
151
{ ! group . isLoading &&
149
152
( group . showAdminView ? (
150
- < DndContext
153
+ < DndContext
151
154
sensors = { sensors }
152
155
collisionDetection = { closestCenter }
153
156
onDragStart = { handleDragStart }
154
157
onDragEnd = { handleDragEnd }
155
158
>
156
- < SortableContext
159
+ < SortableContext
157
160
items = { items }
158
161
strategy = { verticalListSortingStrategy }
159
162
>
160
163
< div className = "divide-y divide-solid divide-gray-200 dark:divide-gray-600 sm:divide-none sm:space-y-4" >
161
- { items . map ( id => < SortableItem key = { id } id = { id } group = { group . groupData } post = { group . posts . find ( x => x . id === id ) } isBeingDragged = { activeId === id } /> ) }
164
+ { items . map ( id => (
165
+ < SortableItem
166
+ key = { id }
167
+ id = { id }
168
+ group = { group . groupData }
169
+ post = { group . posts . find ( x => x . id === id ) }
170
+ isBeingDragged = { activeId === id }
171
+ />
172
+ ) ) }
162
173
</ div >
163
174
</ SortableContext >
164
175
< DragOverlay >
165
- { activeId ? < FeedItem
166
- group = { group . groupData }
167
- post = { group . posts . find ( x => x . id === activeId ) }
168
- dragHandle = { (
169
- < div
170
- className = "self-stretch flex items-center px-2"
171
- >
172
- < MenuIcon className = "h-5 w-5 text-gray-300" / >
173
- </ div >
174
- ) }
175
- /> : null }
176
+ { activeId ? (
177
+ < FeedItem
178
+ group = { group . groupData }
179
+ post = { group . posts . find ( x => x . id === activeId ) }
180
+ dragHandle = {
181
+ < div className = "self-stretch flex items-center px-2" >
182
+ < MenuIcon className = "h-5 w-5 text-gray-300" / >
183
+ </ div >
184
+ }
185
+ />
186
+ ) : null }
176
187
</ DragOverlay >
177
188
</ DndContext >
178
189
) : (
179
190
< div className = "divide-y divide-solid divide-gray-200 dark:divide-gray-600 sm:divide-none sm:space-y-4" >
180
191
{ items . map ( id => (
181
- < FeedItem group = { group . groupData } post = { group . posts . find ( x => x . id === id ) } key = { id } />
192
+ < FeedItem
193
+ group = { group . groupData }
194
+ post = { group . posts . find ( x => x . id === id ) }
195
+ key = { id }
196
+ />
182
197
) ) }
183
198
</ div >
184
199
) ) }
0 commit comments