From 434ccc60027c54416b61db1d32c94371f1993531 Mon Sep 17 00:00:00 2001 From: soufiane Date: Mon, 8 Sep 2025 11:00:24 +0200 Subject: [PATCH] wip #7697 @10:00 --- app/FileCollection.php | 8 ++ app/Http/Controllers/Controller.php | 7 ++ app/SearchableText.php | 42 +++++-- config/scout.php | 34 +++++- resources/js/app.js | 6 +- .../js/components/FileSearch/FileHit.vue | 18 +-- .../FileSearch/FileInstantSearch.vue | 108 ++++++++++-------- resources/js/components/FileSearch/Search.vue | 44 +++++++ resources/js/components/Home/cover.vue | 3 - resources/sass/_fonts.scss | 20 ++-- resources/sass/_home.scss | 1 + resources/sass/app.scss | 2 +- resources/views/archives/index.blade.php | 15 ++- resources/views/home/index.blade.php | 8 +- routes/web.php | 2 + 15 files changed, 214 insertions(+), 104 deletions(-) create mode 100644 resources/js/components/FileSearch/Search.vue diff --git a/app/FileCollection.php b/app/FileCollection.php index 06a59e3..68abeb7 100644 --- a/app/FileCollection.php +++ b/app/FileCollection.php @@ -35,4 +35,12 @@ class FileCollection extends Model return $this->name; } + public function fileByRef($refs) + { + $results = $this->files()->whereIn('id', $refs) + ->get(['id', 'title', 'file_slug', 'cover_url']); + + return response()->json($results); + } + } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c343073..a59cc79 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\FileCollection; +use App\PdfFile; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; @@ -43,4 +44,10 @@ class Controller extends BaseController ->get() ); } + + public function getPdfBySlug() { + $refs = request('refs', []); + $pdfFile = new PdfFile(); + return $pdfFile->whereIn('slug', $refs)->get()->toArray(); + } } diff --git a/app/SearchableText.php b/app/SearchableText.php index a80fc7e..a43ac07 100644 --- a/app/SearchableText.php +++ b/app/SearchableText.php @@ -4,6 +4,7 @@ namespace App; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; +use Typesense\LaravelTypesense\Tests\Fixtures\SearchableUserModel; /** * Class SearchableText @@ -19,21 +20,40 @@ class SearchableText extends Model protected $guarded = []; - public function toSearchableArray() + public function toSearchableArray(): array { return [ - 'file' => [ - 'slug' => $this->file->slug, - 'tags' => $this->file->fileTags()->pluck('content')->toArray(), - 'collection' => (string) $this->file->collection, - 'collection_slug' => $this->file->collection->slug, - 'visible' => $this->file->is_visible && $this->file->published, - 'title' => $this->file->title, - 'cover' => $this->file->coverUrl, - 'created_at' => $this->file->created_at->format('U'), - ], + 'id' => (string) $this->file->id, + 'file_slug' => $this->file->slug, + 'file_tags' => $this->file->fileTags()->pluck('content')->toArray(), + 'file_collection' => "fluidbooks", + 'file_collection_slug' => $this->file->collection->slug, + 'file_visible' => $this->file->is_visible && $this->file->published, + 'file_title' => $this->file->title, + 'file_cover' => $this->file->coverUrl, + 'file_created_at' => $this->file->created_at->format('U'), 'content' => $this->content, 'page' => $this->page, ]; } + + public function getCollectionSchema(): array + { + return [ + 'name' => 'prod_searchable_texts', + 'fields' => [ + [ + 'name' => '.*', + ], + ], + 'default_sorting_field' => 'created_at', + ]; + } + + public function typesenseQueryBy(): array + { + return [ + 'title', + ]; + } } diff --git a/config/scout.php b/config/scout.php index be69739..8a9fadc 100644 --- a/config/scout.php +++ b/config/scout.php @@ -1,5 +1,7 @@ [ [ 'host' => env('TYPESENSE_HOST', 'localhost'), - 'port' => env('TYPESENSE_PORT', '8108'), - 'path' => env('TYPESENSE_PATH', ''), - 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), + 'port' => '', + 'protocol' => env('TYPESENSE_PROTOCOL', 'https'), ], ], 'nearest_node' => [ 'host' => env('TYPESENSE_HOST', 'localhost'), - 'port' => env('TYPESENSE_PORT', '8108'), + 'port' => '', 'path' => env('TYPESENSE_PATH', ''), 'protocol' => env('TYPESENSE_PROTOCOL', 'http'), ], @@ -111,6 +112,29 @@ return [ 'healthcheck_interval_seconds' => 30, 'num_retries' => 3, 'retry_interval_seconds' => 1, + 'model-settings' => [ + User::class => [ + 'collection-schema' => [ + 'name' => 'prod_searchable_texts', + 'fields' => [ + ['name' => 'id', 'type' => 'int32' ], + ['name' => 'file_slug', 'type' => 'string' ], + ['name' => 'file_tags', 'type' => 'string[]' ], // tableau de strings + ['name' => 'file_collection', 'type' => 'string' ], + ['name' => 'file_collection_slug','type' => 'string' ], + ['name' => 'file_visible', 'type' => 'bool' ], + ['name' => 'file_title', 'type' => 'string' ], + ['name' => 'file_cover', 'type' => 'string' ], + ['name' => 'file_created_at', 'type' => 'int64' ], + ['name' => 'content', 'type' => 'string' ], + ['name' => 'page', 'type' => 'int32' ], + ], + 'default_sorting_field' => 'id', + ], + 'search-parameters' => [ + 'query_by' => 'email', + ], + ] + ], ], - ]; diff --git a/resources/js/app.js b/resources/js/app.js index 7d2283a..ab1d4db 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -9,8 +9,6 @@ const Swal = require('sweetalert2') window.Vue = require('vue'); /** @todo fix vue material design issue */ - - import 'selectize/dist/js/standalone/selectize.min.js'; import 'selectize/dist/css/selectize.css'; import '@fortawesome/fontawesome-free/css/all.min.css'; @@ -64,6 +62,10 @@ const app = new Vue({ }, }); +$("#search").on("keydown", function(){ + console.log($(this).val()) +}) + document.addEventListener("DOMContentLoaded", () => { const el = document.getElementById("openmenu") el.addEventListener("click", () => { diff --git a/resources/js/components/FileSearch/FileHit.vue b/resources/js/components/FileSearch/FileHit.vue index 748cd24..bb350f4 100644 --- a/resources/js/components/FileSearch/FileHit.vue +++ b/resources/js/components/FileSearch/FileHit.vue @@ -1,26 +1,12 @@ diff --git a/resources/js/components/FileSearch/FileInstantSearch.vue b/resources/js/components/FileSearch/FileInstantSearch.vue index 34aab29..127da49 100644 --- a/resources/js/components/FileSearch/FileInstantSearch.vue +++ b/resources/js/components/FileSearch/FileInstantSearch.vue @@ -1,74 +1,82 @@ + diff --git a/resources/js/components/FileSearch/Search.vue b/resources/js/components/FileSearch/Search.vue new file mode 100644 index 0000000..576be8e --- /dev/null +++ b/resources/js/components/FileSearch/Search.vue @@ -0,0 +1,44 @@ + + diff --git a/resources/js/components/Home/cover.vue b/resources/js/components/Home/cover.vue index b14e073..455788c 100644 --- a/resources/js/components/Home/cover.vue +++ b/resources/js/components/Home/cover.vue @@ -34,9 +34,6 @@ }), computed: { dimensions() { - - - return { width: this.width, height: Math.round(this.c_height)+'px' diff --git a/resources/sass/_fonts.scss b/resources/sass/_fonts.scss index 307d38e..8e220ac 100644 --- a/resources/sass/_fonts.scss +++ b/resources/sass/_fonts.scss @@ -1,7 +1,7 @@ @font-face { font-family: 'Poppins'; - src: url('public/fonts/poppins/Poppins-SemiBold.woff2') format('woff2'), - url('public/fonts/poppins/Poppins-SemiBold.woff') format('woff'); + src: url('../../public/fonts/poppins/Poppins-SemiBold.woff2') format('woff2'), + url('../../public/fonts/poppins/Poppins-SemiBold.woff') format('woff'); font-weight: 600; font-style: normal; font-display: swap; @@ -9,8 +9,8 @@ @font-face { font-family: 'Poppins'; - src: url('public/fonts/poppins/Poppins-Medium.woff2') format('woff2'), - url('public/fonts/poppins/Poppins-Medium.woff') format('woff'); + src: url('../../public/fonts/poppins/Poppins-Medium.woff2') format('woff2'), + url('../../public/fonts/poppins/Poppins-Medium.woff') format('woff'); font-weight: 500; font-style: normal; font-display: swap; @@ -18,8 +18,8 @@ @font-face { font-family: 'Poppins'; - src: url('public/fonts/poppins/Poppins-Regular.woff2') format('woff2'), - url('public/fonts/poppins/Poppins-Regular.woff') format('woff'); + src: url('../../public/fonts/poppins/Poppins-Regular.woff2') format('woff2'), + url('../../public/fonts/poppins/Poppins-Regular.woff') format('woff'); font-weight: normal; font-style: normal; font-display: swap; @@ -27,8 +27,8 @@ @font-face { font-family: 'Poppins'; - src: url('public/fonts/poppins/Poppins-Bold.woff2') format('woff2'), - url('public/fonts/poppins/Poppins-Bold.woff') format('woff'); + src: url('../../public/fonts/poppins/Poppins-Bold.woff2') format('woff2'), + url('../../public/fonts/poppins/Poppins-Bold.woff') format('woff'); font-weight: bold; font-style: normal; font-display: swap; @@ -36,8 +36,8 @@ @font-face { font-family: 'Poppins'; - src: url('public/fonts/poppins/Poppins-Light.woff2') format('woff2'), - url('public/fonts/poppins/Poppins-Light.woff') format('woff'); + src: url('../../public/fonts/poppins/Poppins-Light.woff2') format('woff2'), + url('../../public/fonts/poppins/Poppins-Light.woff') format('woff'); font-weight: 300; font-style: normal; font-display: swap; diff --git a/resources/sass/_home.scss b/resources/sass/_home.scss index c059d7d..5eb9737 100644 --- a/resources/sass/_home.scss +++ b/resources/sass/_home.scss @@ -274,6 +274,7 @@ } .embla__viewport { overflow: hidden; + max-width: 1280px; } .embla__container { display: flex; diff --git a/resources/sass/app.scss b/resources/sass/app.scss index b0a4252..71ebabe 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -5,7 +5,7 @@ @import "tailwindcss"; @import 'mixins'; @import "ais"; -//@import "fonts"; +@import "fonts"; @import "colors"; @import "nav"; @import "footer"; diff --git a/resources/views/archives/index.blade.php b/resources/views/archives/index.blade.php index b886694..6d44166 100644 --- a/resources/views/archives/index.blade.php +++ b/resources/views/archives/index.blade.php @@ -8,13 +8,13 @@
Lancer la recherche
- + @endsection @section('main') -
+ {{--
@foreach($all_pdf as $key => $pdf)
@@ -23,5 +23,14 @@
@endforeach
-
+
--}} + @endsection + + diff --git a/resources/views/home/index.blade.php b/resources/views/home/index.blade.php index 7f8972d..6af6eed 100644 --- a/resources/views/home/index.blade.php +++ b/resources/views/home/index.blade.php @@ -39,7 +39,8 @@

{!! $settings->byKey('main_title') !!}

{{ ucfirst($last_pdf->first()->created_at->translatedFormat('l d F Y')) }}

- Lire le quotidien + {{-- /view/{{ $last_pdf->first()['slug'] }} --}} + Lire le quotidien
@@ -113,13 +114,14 @@

{!! $settings->byKey('subtitle_bloc_image_home') !!}

{!! $settings->byKey('text_bloc_image_home') !!} - {!! $settings->byKey('not_register_link') !!} + {!! $settings->byKey('not_register_link') !!}

{{ $settings->byKey('title_quotidien_home') }}

- Feuilleter un quotidien + {{-- /view/{{ $last_pdf->first()['slug'] }} --}} + Feuilleter un quotidien
diff --git a/routes/web.php b/routes/web.php index 02d47db..882afcf 100644 --- a/routes/web.php +++ b/routes/web.php @@ -142,6 +142,8 @@ Route::domain(env('CLIENT_DOMAIN_NAME'))->group(function() { Route::get('devenez-annonceurs', 'AdvertisersController@index')->name('annonceurs.index'); Route::post('devenez-annonceurs', 'AdvertisersController@requestMail')->name('annonceurs.store'); + + Route::post('retrieveLetter', 'Controller@getPdfBySlug'); }); /** Public routes + NGROK routes */ -- 2.39.5