diff --git a/src/pages/playlist/content.jsx b/src/pages/playlist/content.jsx index 96eeae0..6fe4f1f 100644 --- a/src/pages/playlist/content.jsx +++ b/src/pages/playlist/content.jsx @@ -1,4 +1,4 @@ -import { Box } from '@mantine/core'; +import { Box, Image, Flex } from '@mantine/core'; import { DragDropContext, Draggable } from 'react-beautiful-dnd'; import { IconGripVertical } from '@tabler/icons-react'; import { StrictModeDroppable } from './StrictModeDroppable'; @@ -6,64 +6,93 @@ import { ActionIcon, Button, Center, Grid, Group, NumberInput, Paper, Text } fro import { IconTrash } from '@tabler/icons-react'; import { useState } from 'react'; import ModalFileSelector from '../files/file-selector'; +import API from '../../services/api'; +import setNotification from '../errors/error-notification'; -const Content = ({ form }) => { +const Content = ({ form, playlistId }) => { console.log(form.values); const [fileSelector, setFileSelector] = useState(true); const toggleFileSelector = () => setFileSelector(!fileSelector); const handleAddFiles = (files) => { + console.log('handle add file'); + console.log(files); + let formFiles = form.values.files; + let max_position = formFiles[formFiles.length - 1]?.position ?? 0; files.forEach((file) => { + max_position++; + + file.position = max_position; file.seconds = 10; form.insertListItem('files', file); + API.addFileToPlaylist(playlistId, { position: file.position, file_id: file.id, seconds: file.seconds }) + .then((res) => { + if (res.status !== 200) { + setNotification(true, `Error when adding file (${res.status})`); + } + }) + .catch((err) => { + setNotification(true, err.message); + }); }); }; - const handleDelete = (fileId) => { - console.log(form.values); - const index = form.values.files.findIndex((file) => file.id === fileId); - console.log(index, fileId); - if (index) { - form.removeListItem('files', index); + const changePositionValue = (from, to) => { + const formFiles = form.values.files; + let below_position = to === 0 ? 0 : formFiles[to].position; + let above_position = formFiles[to].position; + if (to > from) { + if (to === formFiles.length - 1) { + // last element so nothing above + above_position = formFiles.length + 1; + } else { + // not last to taking element above + above_position = formFiles[to + 1].position; + } } + let newPosition = (below_position + above_position) / 2 + form.values.files[from].position = newPosition; + + // sending modification to server + API.playlistChangeOrder(playlistId, {file_id: formFiles[from].id, position: newPosition}) + .then((res) => { + if (res.status !== 200) { + setNotification(true, `Error when changing order (${res.status})`); + } + }) + .catch((err) => { + setNotification(true, err.message); + }); }; - const fields = form.values.files.map((el, index) => ( + const handleDelete = (index) => { + form.removeListItem('files', index); + }; + + const fields = form.values.files.map((_, index) => ( {(provided) => ( -
- -
- -
- - - - {form.getInputProps(`files.${index}.name`).value} - - - - - - handleDelete(el.id)} - > - - - - - -
-
+ +
+ +
+ + + + {form.getInputProps(`files.${index}.name`).value} + + handleDelete(index)}> + + + + +
)}
)); @@ -71,9 +100,10 @@ const Content = ({ form }) => { return ( - form.reorderListItem('files', { from: source.index, to: destination.index }) - } + onDragEnd={({ destination, source }) => { + changePositionValue(source.index, destination.index); + form.reorderListItem('files', { from: source.index, to: destination.index }); + }} > {(provided) => (