import { Box, Image, Flex } from '@mantine/core'; import { DragDropContext, Draggable } from 'react-beautiful-dnd'; import { IconGripVertical } from '@tabler/icons-react'; import { StrictModeDroppable } from './StrictModeDroppable'; import { ActionIcon, Button, Center, Grid, Group, NumberInput, Paper, Text } from '@mantine/core'; 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, 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 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 handleDelete = (index) => { form.removeListItem('files', index); }; const fields = form.values.files.map((_, index) => ( {(provided) => ( {form.getInputProps(`files.${index}.name`).value} handleDelete(index)}> )} )); return ( { changePositionValue(source.index, destination.index); form.reorderListItem('files', { from: source.index, to: destination.index }); }} > {(provided) => ( {fields} {provided.placeholder} )} Select File(s) handleAddFiles(files)} /> ); }; export default Content;