diff --git a/app/Http/Controllers/FrontMemeController.php b/app/Http/Controllers/FrontMemeController.php
index 3c7cc56..d45dfb2 100644
--- a/app/Http/Controllers/FrontMemeController.php
+++ b/app/Http/Controllers/FrontMemeController.php
@@ -90,6 +90,22 @@ public function show(string $slug): Response
->limit(6)
->get();
+ // If we have less than 6 related memes, fill up with random ones
+ if ($relatedMemes->count() < 6) {
+ $excludeIds = $relatedMemes->pluck('id')->push($meme->id)->toArray();
+ $needed = 6 - $relatedMemes->count();
+
+ $randomMemes = MemeMedia::where('is_enabled', true)
+ ->whereNotIn('id', $excludeIds)
+ ->inRandomOrder()
+ ->limit($needed)
+ ->get();
+
+ $relatedMemes = $relatedMemes->merge($randomMemes);
+ }
+
+ //dd($meme);
+
return Inertia::render('memes/show', [
'meme' => $meme,
'relatedMemes' => $relatedMemes,
diff --git a/app/Models/MemeMedia.php b/app/Models/MemeMedia.php
index f1f92a4..49fddc2 100644
--- a/app/Models/MemeMedia.php
+++ b/app/Models/MemeMedia.php
@@ -80,7 +80,7 @@ class MemeMedia extends Model
'type',
'sub_type',
'original_id',
- 'description',
+ //'description',
'mov_uuid',
'webm_uuid',
'gif_uuid',
@@ -98,7 +98,7 @@ class MemeMedia extends Model
protected function ids(): Attribute
{
return Attribute::make(
- get: fn ($value, $attributes) => hashids_encode($attributes['id']),
+ get: fn($value, $attributes) => hashids_encode($attributes['id']),
);
}
}
diff --git a/resources/js/components/custom/meme-card.tsx b/resources/js/components/custom/meme-card.tsx
new file mode 100644
index 0000000..bdbb052
--- /dev/null
+++ b/resources/js/components/custom/meme-card.tsx
@@ -0,0 +1,89 @@
+import { Badge } from '@/components/ui/badge';
+import { Button } from '@/components/ui/button';
+import { Card } from '@/components/ui/card';
+import { KeywordBadge } from '@/components/ui/keyword-badge';
+import { Link } from '@inertiajs/react';
+import { Edit } from 'lucide-react';
+import { route } from 'ziggy-js';
+
+interface MemeMedia {
+ ids: string;
+ name: string;
+ description: string;
+ keywords: string[];
+ action_keywords: string[];
+ emotion_keywords: string[];
+ misc_keywords: string[];
+ mov_url: string;
+ webm_url: string;
+ gif_url: string;
+ webp_url: string;
+ slug: string;
+}
+
+interface MemeCardProps {
+ meme: MemeMedia;
+ showButton?: boolean;
+ showKeywords?: boolean;
+ className?: string;
+}
+
+export function MemeCard({ meme, showButton = true, showKeywords = true, className = '' }: MemeCardProps) {
+ return (
+
+
+

+
+
+
+
+
+
{meme.name}
+ {showKeywords && (
+
+ {meme.keywords?.slice(0, 6).map((keyword, index) => (
+
+ ))}
+ {meme.keywords && meme.keywords.length > 6 && (
+
+ +{meme.keywords.length - 6} more
+
+ )}
+
+ )}
+ {showButton && (
+
+
+
+
+
+ )}
+
+
+ );
+}
\ No newline at end of file
diff --git a/resources/js/modules/editor/editor.jsx b/resources/js/modules/editor/editor.jsx
index 4ba0880..407be4b 100644
--- a/resources/js/modules/editor/editor.jsx
+++ b/resources/js/modules/editor/editor.jsx
@@ -173,7 +173,7 @@ const Editor = () => {
return (
<>
-
+
diff --git a/resources/js/modules/editor/partials/editor-header.jsx b/resources/js/modules/editor/partials/editor-header.jsx
index bd483bf..8130514 100644
--- a/resources/js/modules/editor/partials/editor-header.jsx
+++ b/resources/js/modules/editor/partials/editor-header.jsx
@@ -1,4 +1,3 @@
-import BrandLogo from '@/pages/home/partials/BrandLogo';
import { useMitt } from '@/plugins/MittContext';
import useLocalSettingsStore from '@/stores/localSettingsStore';
@@ -12,7 +11,8 @@ const EditorHeader = ({ className = '', onNavClick = () => {}, isNavActive = fal
};
return (
-
+ <>>
+ //
//
//