From 0892f252a4a076d6abbdf2a98340bba313643562 Mon Sep 17 00:00:00 2001 From: ct Date: Thu, 17 Jul 2025 04:58:07 +0800 Subject: [PATCH] Update --- .../js/components/editor/EditorSkeleton.jsx | 85 +++++++++++++++++++ resources/js/pages/home/home.tsx | 9 +- resources/js/pages/memes/show.tsx | 11 +-- 3 files changed, 89 insertions(+), 16 deletions(-) create mode 100644 resources/js/components/editor/EditorSkeleton.jsx diff --git a/resources/js/components/editor/EditorSkeleton.jsx b/resources/js/components/editor/EditorSkeleton.jsx new file mode 100644 index 0000000..ebe86bd --- /dev/null +++ b/resources/js/components/editor/EditorSkeleton.jsx @@ -0,0 +1,85 @@ +import { useLayoutEffect, useState } from 'react'; +import { Skeleton } from '@/components/ui/skeleton'; +import { LAYOUT_CONSTANTS, calculateOptimalMaxWidth, calculateResponsiveWidth, calculateResponsiveScale } from '@/modules/editor/utils/layout-constants'; + +// Hook for responsive dimensions (same as Editor) +const useResponsiveDimensions = () => { + const [dimensions, setDimensions] = useState(() => ({ + maxWidth: calculateOptimalMaxWidth(), + responsiveWidth: calculateResponsiveWidth(), + })); + + useLayoutEffect(() => { + const newMaxWidth = calculateOptimalMaxWidth(); + const newResponsiveWidth = calculateResponsiveWidth(); + setDimensions({ + maxWidth: newMaxWidth, + responsiveWidth: newResponsiveWidth, + }); + }, []); + + return dimensions; +}; + +// Hook for responsive canvas scale (same as EditorCanvas) +const useResponsiveCanvas = (maxWidth = 350) => { + const [scale, setScale] = useState(() => calculateResponsiveScale(maxWidth)); + + useLayoutEffect(() => { + setScale(calculateResponsiveScale(maxWidth)); + }, [maxWidth]); + + return scale; +}; + +const EditorSkeleton = () => { + const { maxWidth, responsiveWidth } = useResponsiveDimensions(); + const scale = useResponsiveCanvas(maxWidth); + const displayWidth = LAYOUT_CONSTANTS.CANVAS_WIDTH * scale; + const displayHeight = LAYOUT_CONSTANTS.CANVAS_HEIGHT * scale; + + return ( +
+ {/* Header Skeleton - EditorHeader currently returns empty <> */} +
+ {/* Header is empty in actual component, so we skip it */} +
+ + {/* Canvas Skeleton - matching EditorCanvas structure */} +
+
+ +
+
+ + {/* Controls Skeleton - matching EditorControls structure */} +
+ {/* Play/Pause button */} + + + {/* Edit button */} + + + {/* Refresh button */} + + + {/* Download button */} + +
+
+ ); +}; + +export default EditorSkeleton; \ No newline at end of file diff --git a/resources/js/pages/home/home.tsx b/resources/js/pages/home/home.tsx index d664a44..10c60c2 100644 --- a/resources/js/pages/home/home.tsx +++ b/resources/js/pages/home/home.tsx @@ -1,3 +1,4 @@ +import EditorSkeleton from '@/components/editor/EditorSkeleton.jsx'; import { useEffect, useState } from 'react'; import BrandLogo from './partials/BrandLogo.jsx'; import FAQDiscord from './partials/FAQDiscord.jsx'; @@ -24,13 +25,7 @@ const Home = ({ faqData, popularKeywords }) => {
- {isClient && Editor ? ( - - ) : ( -
-
Loading editor...
-
- )} + {isClient && Editor ? : }
diff --git a/resources/js/pages/memes/show.tsx b/resources/js/pages/memes/show.tsx index 4b6f60b..42a2f21 100644 --- a/resources/js/pages/memes/show.tsx +++ b/resources/js/pages/memes/show.tsx @@ -1,9 +1,9 @@ import { MemeCard } from '@/components/custom/meme-card'; +import EditorSkeleton from '@/components/editor/EditorSkeleton'; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { KeywordBadge } from '@/components/ui/keyword-badge'; -import { Spinner } from '@/components/ui/spinner'; import Footer from '@/pages/home/partials/Footer'; import { Link } from '@inertiajs/react'; import { ArrowLeft } from 'lucide-react'; @@ -94,14 +94,7 @@ export default function MemeShow({ meme, relatedMemes }: Props) { setInitialText={(setText) => setText('add your meme caption here')} /> ) : ( -
-
- -
- Loading meme video editor... -
-
-
+ )}