diff --git a/assets/app.js b/assets/app.js index e671a9f..edc04bf 100644 --- a/assets/app.js +++ b/assets/app.js @@ -1,4 +1,3 @@ -import { registerReactControllerComponents } from '@symfony/ux-react'; import './bootstrap.js'; import '@fortawesome/fontawesome-free/js/all.js'; @@ -15,4 +14,4 @@ import './styles/app.scss'; // start the Stimulus application import './bootstrap'; -//registerReactControllerComponents(require.context('./react/controllers', true, /\.(j|t)sx?$/)); +// La ligne registerReactControllerComponents a déjà été commentée diff --git a/assets/vue/app/domain/manga/application/store/mangaStore.js b/assets/vue/app/domain/manga/application/store/mangaStore.js index 624caaa..d486e8f 100644 --- a/assets/vue/app/domain/manga/application/store/mangaStore.js +++ b/assets/vue/app/domain/manga/application/store/mangaStore.js @@ -128,6 +128,19 @@ export const useMangaStore = defineStore('manga', { } finally { this.addingManga = false; } + }, + + // --- Chapter Actions --- + async searchChapter(chapterId) { + try { + await mangaRepository.searchChapter(chapterId); + // Rafraîchir la collection après la recherche + await this.refreshCollectionInBackground(); + return true; + } catch (error) { + console.error('Erreur lors de la recherche du chapitre:', error); + return false; + } } } }); diff --git a/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js b/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js index 6be0b50..15e27aa 100644 --- a/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js +++ b/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js @@ -119,4 +119,23 @@ export class ApiMangaRepository { throw error; } } + + async searchChapter(chapterId) { + try { + const response = await fetch('https://localhost/api/scraping/chapters', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ chapterId }) + }); + if (!response.ok) { + throw new Error('Échec de la recherche du chapitre'); + } + return await response.json(); + } catch (error) { + console.error('API Error:', error); + throw error; + } + } } diff --git a/assets/vue/app/domain/manga/presentation/components/MangaChapter.vue b/assets/vue/app/domain/manga/presentation/components/MangaChapter.vue index 379f933..0cbd1b2 100644 --- a/assets/vue/app/domain/manga/presentation/components/MangaChapter.vue +++ b/assets/vue/app/domain/manga/presentation/components/MangaChapter.vue @@ -52,8 +52,11 @@ const store = useMangaStore(); const handleSearch = async () => { - // TODO: Implémenter la recherche de chapitre - console.log('Recherche du chapitre:', props.chapter.id); + try { + await store.searchChapter(props.chapter.id); + } catch (error) { + console.error('Erreur lors de la recherche du chapitre:', error); + } }; const handleDelete = async () => { diff --git a/assets/vue/app/domain/manga/presentation/components/MangaGrid.vue b/assets/vue/app/domain/manga/presentation/components/MangaGrid.vue index 35d6b2b..e991865 100644 --- a/assets/vue/app/domain/manga/presentation/components/MangaGrid.vue +++ b/assets/vue/app/domain/manga/presentation/components/MangaGrid.vue @@ -1,20 +1,16 @@ \ No newline at end of file + defineProps({ + mangas: { + type: Array, + required: true + } + }); + diff --git a/config/routes.yaml b/config/routes.yaml index bf69893..d737208 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -4,15 +4,6 @@ controllers: namespace: App\Controller type: attribute -react_app: - path: /react/{req} - controller: Symfony\Bundle\FrameworkBundle\Controller\TemplateController - defaults: - template: 'react/index.html.twig' - req: '' - requirements: - req: ".*" - vue_app: path: /vue/{req} controller: Symfony\Bundle\FrameworkBundle\Controller\TemplateController diff --git a/tailwind.config.js b/tailwind.config.js index 51b2456..c674222 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,20 +1,16 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: [ - './templates/**/*.html.twig', - './assets/react/**/*.{js,jsx}', - './assets/**/*.{js,jsx}' - ], - theme: { - extend: {}, - }, - plugins: [ - // require("daisyui"), - ], - safelist: [ - 'bg-red-500', - 'bg-blue-500', - 'bg-yellow-500', - 'bg-green-500', - ], -} + content: [ + './templates/**/*.html.twig', + './assets/react/**/*.{js,jsx}', + './assets/**/*.{js,jsx}', + './assets/vue/**/*.{js,vue}' + ], + theme: { + extend: {} + }, + plugins: [ + // require("daisyui"), + ], + safelist: ['bg-red-500', 'bg-blue-500', 'bg-yellow-500', 'bg-green-500'] +}; diff --git a/webpack.config.js b/webpack.config.js index ba37835..205fd97 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,6 @@ Encore * and one CSS file (e.g. app.css) if your JavaScript imports CSS. */ .addEntry('app', './assets/app.js') - .addEntry('react-app', './assets/react/app/index.jsx') .addEntry('vue-app', './assets/vue/app/index.js') // .addEntry('alpine', 'alpinejs') @@ -31,7 +30,6 @@ Encore // When enabled, Webpack "splits" your files into smaller pieces for greater optimization. .splitEntryChunks() - .enableReactPreset() .enableVueLoader() // will require an extra script tag for runtime.js @@ -57,7 +55,7 @@ Encore // }) // enables and configure @babel/preset-env polyfills - .configureBabelPresetEnv((config) => { + .configureBabelPresetEnv(config => { config.useBuiltIns = 'usage'; config.corejs = '3.23'; }) @@ -68,17 +66,9 @@ Encore // uncomment if you use TypeScript //.enableTypeScriptLoader() - // uncomment if you use React - //.enableReactPreset() - - // uncomment to get integrity="..." attributes on your script & link tags - // requires WebpackEncoreBundle 1.4 or higher - //.enableIntegrityHashes(Encore.isProduction()) - // uncomment if you're having problems with a jQuery plugin //.autoProvidejQuery() - .enablePostCssLoader() -; + .enablePostCssLoader(); module.exports = Encore.getWebpackConfig();