diff --git a/assets/controllers/mydropzone_controller.js b/assets/controllers/mydropzone_controller.js index 7807d25..11dba72 100644 --- a/assets/controllers/mydropzone_controller.js +++ b/assets/controllers/mydropzone_controller.js @@ -30,10 +30,14 @@ export default class extends Controller { _onChange(event) { // The dropzone just changed - console.info(event); console.info('onchange'); - - event.target.closest('form').submit(); + axios.post(document.URL, new FormData(event.target.closest('form')), { + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(() => { + event.target.querySelector('.dropzone-preview-button').click() + }) } diff --git a/assets/js/book.js b/assets/js/book.js index e9d166b..d6395f3 100644 --- a/assets/js/book.js +++ b/assets/js/book.js @@ -1,6 +1,5 @@ import Vue from 'vue'; import Book from './pages/book' -import App from "./pages/files"; Vue.component('Book', Book); diff --git a/assets/js/files.js b/assets/js/files.js index 4bfbd44..4923a82 100644 --- a/assets/js/files.js +++ b/assets/js/files.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import App from './pages/files' - +import Files from "./pages/files"; +Vue.component('Files', Files); new Vue().$mount('#app'); \ No newline at end of file diff --git a/assets/js/pages/files.vue b/assets/js/pages/files.vue index 034d88e..52bd1fb 100644 --- a/assets/js/pages/files.vue +++ b/assets/js/pages/files.vue @@ -1,24 +1,58 @@ \ No newline at end of file diff --git a/src/Controller/BookController.php b/src/Controller/BookController.php index 7f9b099..d8e1014 100644 --- a/src/Controller/BookController.php +++ b/src/Controller/BookController.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Techtube\Bookinfo\BookFinder; #[Route('/book')] @@ -114,6 +115,13 @@ class BookController extends AbstractController ]); } + #[Route('/{id}/files', name: 'app_book_file', methods: ['GET'])] + public function files(Book $book): JsonResponse + { + return $this->json($book->getFiles(), context: [AbstractNormalizer::IGNORED_ATTRIBUTES => ['book']]); + } + + #[Route('/{id}/edit', name: 'app_book_edit', methods: ['GET', 'POST'])] public function edit( Request $request, diff --git a/src/Form/FileType.php b/src/Form/FileType.php index 2497f6b..c8400ae 100644 --- a/src/Form/FileType.php +++ b/src/Form/FileType.php @@ -20,14 +20,15 @@ class FileType extends AbstractType [ 'mapped' => false, 'data_class' => null, - 'required' => false, + 'required' => true, 'attr' => [ 'data-controller' => 'mydropzone', 'accept' => ".pdf, .epub, .mobi", 'placeholder' => 'Drag and drop or browse' ] ] - ); + ) + ; } public function configureOptions(OptionsResolver $resolver): void diff --git a/templates/book/show.html.twig b/templates/book/show.html.twig index 9af5814..4577332 100644 --- a/templates/book/show.html.twig +++ b/templates/book/show.html.twig @@ -34,36 +34,12 @@ -
| Id | -File name | -File size | -Extension | -Download | -Remove | -
|---|---|---|---|---|---|
| {{ file.id }} | -{{ file.fileName }} | -{{ file.fileSize | bytes_format }} | -{{ file.extension }} | -download | -remove | -
| no files found | -|||||