Skip to content
Snippets Groups Projects
Commit 34d8fd83 authored by Albin Henriksson's avatar Albin Henriksson
Browse files

Remake front-end code for moving slides

parent e4c5147f
No related branches found
No related tags found
1 merge request!132Resolve "Fix move slides on backend"
...@@ -51,7 +51,7 @@ interface CompetitionParams { ...@@ -51,7 +51,7 @@ interface CompetitionParams {
const PresentationEditorPage: React.FC = () => { const PresentationEditorPage: React.FC = () => {
const { competitionId }: CompetitionParams = useParams() const { competitionId }: CompetitionParams = useParams()
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const [slides, setSlides] = useState<RichSlide[]>([]) const [sortedSlides, setSortedSlides] = useState<RichSlide[]>([])
const activeSlideId = useAppSelector((state) => state.editor.activeSlideId) const activeSlideId = useAppSelector((state) => state.editor.activeSlideId)
const activeViewTypeId = useAppSelector((state) => state.editor.activeViewTypeId) const activeViewTypeId = useAppSelector((state) => state.editor.activeViewTypeId)
const competition = useAppSelector((state) => state.editor.competition) const competition = useAppSelector((state) => state.editor.competition)
...@@ -63,7 +63,7 @@ const PresentationEditorPage: React.FC = () => { ...@@ -63,7 +63,7 @@ const PresentationEditorPage: React.FC = () => {
}, []) }, [])
useEffect(() => { useEffect(() => {
setSlides(competition.slides) setSortedSlides(competition.slides.sort((a, b) => (a.order > b.order ? 1 : -1)))
}, [competition]) }, [competition])
const setActiveSlideId = (id: number) => { const setActiveSlideId = (id: number) => {
...@@ -122,30 +122,11 @@ const PresentationEditorPage: React.FC = () => { ...@@ -122,30 +122,11 @@ const PresentationEditorPage: React.FC = () => {
return return
} }
const draggedIndex = result.source.index const draggedIndex = result.source.index
const draggedSlideId = slides.find((slide) => slide.order === draggedIndex)?.id const draggedSlideId = sortedSlides.find((slide) => slide.order === draggedIndex)?.id
const slidesCopy = slides const slidesCopy = [...sortedSlides]
const diff = result.destination.index - result.source.index const [removed] = slidesCopy.splice(draggedIndex, 1)
slides.map((slide) => { slidesCopy.splice(result.destination.index, 0, removed)
if (slide.order === draggedIndex && result.destination) { setSortedSlides(slidesCopy)
slide.order = result.destination.index
} else if (
result.destination &&
diff > 0 &&
slide.order > result.source.index &&
slide.order <= result.destination.index
) {
slide.order = slide.order - 1
} else if (
result.destination &&
diff < 0 &&
slide.order < result.source.index &&
slide.order >= result.destination.index
) {
slide.order = slide.order + 1
}
})
setSlides(slidesCopy)
if (draggedSlideId) { if (draggedSlideId) {
await axios await axios
.put(`/api/competitions/${competitionId}/slides/${draggedSlideId}/order`, { order: result.destination.index }) .put(`/api/competitions/${competitionId}/slides/${draggedSlideId}/order`, { order: result.destination.index })
...@@ -190,27 +171,25 @@ const PresentationEditorPage: React.FC = () => { ...@@ -190,27 +171,25 @@ const PresentationEditorPage: React.FC = () => {
<Droppable droppableId="droppable"> <Droppable droppableId="droppable">
{(provided) => ( {(provided) => (
<div ref={provided.innerRef} {...provided.droppableProps}> <div ref={provided.innerRef} {...provided.droppableProps}>
{slides {sortedSlides.map((slide, index) => (
.sort((a, b) => (a.order > b.order ? 1 : -1)) <Draggable key={slide.id} draggableId={slide.id.toString()} index={index}>
.map((slide, index) => ( {(provided, snapshot) => (
<Draggable key={slide.id} draggableId={slide.id.toString()} index={index}> <div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>
{(provided, snapshot) => ( <SlideListItem
<div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}> divider
<SlideListItem key={slide.order}
divider button
key={slide.order} selected={slide.id === activeSlideId}
button onClick={() => setActiveSlideId(slide.id)}
selected={slide.id === activeSlideId} onContextMenu={(event) => handleRightClick(event, slide.id)}
onClick={() => setActiveSlideId(slide.id)} >
onContextMenu={(event) => handleRightClick(event, slide.id)} {renderSlideIcon(slide)}
> <ListItemText primary={`Sida ${slide.id}`} />
{renderSlideIcon(slide)} </SlideListItem>
<ListItemText primary={`Sida ${slide.id}`} /> </div>
</SlideListItem> )}
</div> </Draggable>
)} ))}
</Draggable>
))}
{provided.placeholder} {provided.placeholder}
</div> </div>
)} )}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment