From 3084b848a052824eb5ba3eb7b5f9d53f89b4a0f1 Mon Sep 17 00:00:00 2001 From: shiva raj badu Date: Tue, 5 Aug 2025 19:48:11 +0545 Subject: [PATCH] refactor: Seperate layouts.tsx for schema & rest of routes --- .../components/NewSlide.tsx | 2 +- .../dashboard/components/DashboardPage.tsx | 5 +- .../dashboard/components/EmptyState.tsx | 0 .../dashboard/components/Header.tsx | 0 .../dashboard/components/PresentationCard.tsx | 2 +- .../dashboard/components/PresentationGrid.tsx | 2 +- .../components/PresentationListItem.tsx | 3 +- .../dashboard/loading.tsx | 0 .../dashboard/page.tsx | 0 .../dashboard/types.ts | 0 .../components/DocumentPreviewPage.tsx | 2 +- .../documents-preview/loading.tsx | 2 +- .../layout-preview/[slug]/page.tsx | 2 +- .../components/LoadingStates.tsx | 2 +- .../hooks/useGroupLayoutLoader.ts | 0 .../layout-preview/hooks/useLayoutLoader.ts | 0 .../layout-preview/page.tsx | 0 .../layout-preview/types/index.ts | 0 .../app/(presentation-generator)/layout.tsx | 13 + .../outline/components/GroupLayouts.tsx | 2 +- .../(presentation-generator)/outline/page.tsx | 2 +- .../pdf-maker/PdfMakerPage.tsx | 2 +- .../presentation/hooks/usePresentationData.ts | 2 +- .../services}/api/dashboard.ts | 0 .../settings/SettingPage.tsx | 2 +- .../settings/loading.tsx | 0 .../settings/page.tsx | 0 .../upload/loading.tsx | 2 +- .../(presentation-generator)/upload/page.tsx | 2 +- ...lizer.tsx => ConfigurationInitializer.tsx} | 2 +- servers/nextjs/app/api/layouts/route.ts | 2 +- .../utils/sampleDataGenerator.ts | 305 ------------------ servers/nextjs/app/layout.tsx | 2 - servers/nextjs/app/providers.tsx | 3 +- 34 files changed, 33 insertions(+), 330 deletions(-) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/DashboardPage.tsx (89%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/EmptyState.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/Header.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/PresentationCard.tsx (97%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/PresentationGrid.tsx (97%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/components/PresentationListItem.tsx (95%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/loading.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/page.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/dashboard/types.ts (100%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/[slug]/page.tsx (98%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/components/LoadingStates.tsx (99%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/hooks/useGroupLayoutLoader.ts (100%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/hooks/useLayoutLoader.ts (100%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/page.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/layout-preview/types/index.ts (100%) create mode 100644 servers/nextjs/app/(presentation-generator)/layout.tsx rename servers/nextjs/app/{dashboard => (presentation-generator)/services}/api/dashboard.ts (100%) rename servers/nextjs/app/{ => (presentation-generator)}/settings/SettingPage.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/settings/loading.tsx (100%) rename servers/nextjs/app/{ => (presentation-generator)}/settings/page.tsx (100%) rename servers/nextjs/app/{storeInitializer.tsx => ConfigurationInitializer.tsx} (98%) delete mode 100644 servers/nextjs/app/layout-preview/utils/sampleDataGenerator.ts diff --git a/servers/nextjs/app/(presentation-generator)/components/NewSlide.tsx b/servers/nextjs/app/(presentation-generator)/components/NewSlide.tsx index f57a39e4..8deb3685 100644 --- a/servers/nextjs/app/(presentation-generator)/components/NewSlide.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/NewSlide.tsx @@ -3,7 +3,7 @@ import React from 'react' import { useDispatch } from 'react-redux'; import { addNewSlide } from '@/store/slices/presentationGeneration'; import { Loader2 } from 'lucide-react'; -import { useGroupLayoutLoader } from '@/app/layout-preview/hooks/useGroupLayoutLoader'; +import { useGroupLayoutLoader } from '@/app/(presentation-generator)/layout-preview/hooks/useGroupLayoutLoader'; import { v4 as uuidv4 } from 'uuid'; import { toast } from 'sonner'; interface NewSlideProps { diff --git a/servers/nextjs/app/dashboard/components/DashboardPage.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/DashboardPage.tsx similarity index 89% rename from servers/nextjs/app/dashboard/components/DashboardPage.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/DashboardPage.tsx index 645f3e8f..6e93f342 100644 --- a/servers/nextjs/app/dashboard/components/DashboardPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/dashboard/components/DashboardPage.tsx @@ -3,9 +3,8 @@ import React, { useState, useEffect } from "react"; import Wrapper from "@/components/Wrapper"; - -import { DashboardApi } from "../api/dashboard"; -import { PresentationGrid } from "./PresentationGrid"; +import { DashboardApi } from "@/app/(presentation-generator)/services/api/dashboard"; +import { PresentationGrid } from "@/app/(presentation-generator)/dashboard/components/PresentationGrid"; import Header from "./Header"; diff --git a/servers/nextjs/app/dashboard/components/EmptyState.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/EmptyState.tsx similarity index 100% rename from servers/nextjs/app/dashboard/components/EmptyState.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/EmptyState.tsx diff --git a/servers/nextjs/app/dashboard/components/Header.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/Header.tsx similarity index 100% rename from servers/nextjs/app/dashboard/components/Header.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/Header.tsx diff --git a/servers/nextjs/app/dashboard/components/PresentationCard.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationCard.tsx similarity index 97% rename from servers/nextjs/app/dashboard/components/PresentationCard.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationCard.tsx index 385a7ded..c950a2e8 100644 --- a/servers/nextjs/app/dashboard/components/PresentationCard.tsx +++ b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationCard.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from "react"; import { Card } from "@/components/ui/card"; -import { DashboardApi } from "../api/dashboard"; +import { DashboardApi } from "@/app/(presentation-generator)/services/api/dashboard"; import { DotsVerticalIcon, TrashIcon } from "@radix-ui/react-icons"; import { Popover, diff --git a/servers/nextjs/app/dashboard/components/PresentationGrid.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationGrid.tsx similarity index 97% rename from servers/nextjs/app/dashboard/components/PresentationGrid.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationGrid.tsx index e009eb1a..1a6ca543 100644 --- a/servers/nextjs/app/dashboard/components/PresentationGrid.tsx +++ b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationGrid.tsx @@ -2,7 +2,7 @@ import React from "react"; import { PresentationCard } from "./PresentationCard"; import { PlusIcon } from "@radix-ui/react-icons"; import { useRouter } from "next/navigation"; -import { PresentationResponse } from "../api/dashboard"; +import { PresentationResponse } from "@/app/(presentation-generator)/services/api/dashboard"; interface PresentationGridProps { presentations: PresentationResponse[]; diff --git a/servers/nextjs/app/dashboard/components/PresentationListItem.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationListItem.tsx similarity index 95% rename from servers/nextjs/app/dashboard/components/PresentationListItem.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationListItem.tsx index b957b641..54958ce0 100644 --- a/servers/nextjs/app/dashboard/components/PresentationListItem.tsx +++ b/servers/nextjs/app/(presentation-generator)/dashboard/components/PresentationListItem.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import Image from 'next/image'; -// import { formatDistanceToNow } from 'date-fns'; + import { Card, CardContent } from "@/components/ui/card"; import { Presentation } from '../types'; diff --git a/servers/nextjs/app/dashboard/loading.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/loading.tsx similarity index 100% rename from servers/nextjs/app/dashboard/loading.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/loading.tsx diff --git a/servers/nextjs/app/dashboard/page.tsx b/servers/nextjs/app/(presentation-generator)/dashboard/page.tsx similarity index 100% rename from servers/nextjs/app/dashboard/page.tsx rename to servers/nextjs/app/(presentation-generator)/dashboard/page.tsx diff --git a/servers/nextjs/app/dashboard/types.ts b/servers/nextjs/app/(presentation-generator)/dashboard/types.ts similarity index 100% rename from servers/nextjs/app/dashboard/types.ts rename to servers/nextjs/app/(presentation-generator)/dashboard/types.ts diff --git a/servers/nextjs/app/(presentation-generator)/documents-preview/components/DocumentPreviewPage.tsx b/servers/nextjs/app/(presentation-generator)/documents-preview/components/DocumentPreviewPage.tsx index 18a0babd..ecd63b04 100644 --- a/servers/nextjs/app/(presentation-generator)/documents-preview/components/DocumentPreviewPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/documents-preview/components/DocumentPreviewPage.tsx @@ -27,7 +27,7 @@ import MarkdownRenderer from "./MarkdownRenderer"; import { getIconFromFile } from "../../utils/others"; import { ChevronRight, PanelRightOpen, X } from "lucide-react"; import ToolTip from "@/components/ToolTip"; -import Header from "@/app/dashboard/components/Header"; +import Header from "@/app/(presentation-generator)/dashboard/components/Header"; // Types interface LoadingState { diff --git a/servers/nextjs/app/(presentation-generator)/documents-preview/loading.tsx b/servers/nextjs/app/(presentation-generator)/documents-preview/loading.tsx index 85ee26d0..c656bc31 100644 --- a/servers/nextjs/app/(presentation-generator)/documents-preview/loading.tsx +++ b/servers/nextjs/app/(presentation-generator)/documents-preview/loading.tsx @@ -1,4 +1,4 @@ -import Header from '@/app/dashboard/components/Header' +import Header from '@/app/(presentation-generator)/dashboard/components/Header' import { Skeleton } from '@/components/ui/skeleton' import React from 'react' diff --git a/servers/nextjs/app/layout-preview/[slug]/page.tsx b/servers/nextjs/app/(presentation-generator)/layout-preview/[slug]/page.tsx similarity index 98% rename from servers/nextjs/app/layout-preview/[slug]/page.tsx rename to servers/nextjs/app/(presentation-generator)/layout-preview/[slug]/page.tsx index fd093d1f..d1582f0c 100644 --- a/servers/nextjs/app/layout-preview/[slug]/page.tsx +++ b/servers/nextjs/app/(presentation-generator)/layout-preview/[slug]/page.tsx @@ -5,7 +5,7 @@ import { useGroupLayoutLoader } from '../hooks/useGroupLayoutLoader' import LoadingStates from '../components/LoadingStates' import { Card } from '@/components/ui/card' import { Button } from '@/components/ui/button' -import { ArrowLeft, Home, Wifi, WifiOff, RefreshCw } from 'lucide-react' +import { ArrowLeft, Home, } from 'lucide-react' const GroupLayoutPreview = () => { const params = useParams() diff --git a/servers/nextjs/app/layout-preview/components/LoadingStates.tsx b/servers/nextjs/app/(presentation-generator)/layout-preview/components/LoadingStates.tsx similarity index 99% rename from servers/nextjs/app/layout-preview/components/LoadingStates.tsx rename to servers/nextjs/app/(presentation-generator)/layout-preview/components/LoadingStates.tsx index e2d3e548..8b9d78f1 100644 --- a/servers/nextjs/app/layout-preview/components/LoadingStates.tsx +++ b/servers/nextjs/app/(presentation-generator)/layout-preview/components/LoadingStates.tsx @@ -2,7 +2,7 @@ import React from 'react' import { Card, CardContent } from '@/components/ui/card' import { Button } from '@/components/ui/button' -import { Loader2, AlertCircle, RefreshCw, FileX, Layers } from 'lucide-react' +import { Loader2, AlertCircle, RefreshCw, FileX } from 'lucide-react' interface LoadingStatesProps { type: 'loading' | 'error' | 'empty' diff --git a/servers/nextjs/app/layout-preview/hooks/useGroupLayoutLoader.ts b/servers/nextjs/app/(presentation-generator)/layout-preview/hooks/useGroupLayoutLoader.ts similarity index 100% rename from servers/nextjs/app/layout-preview/hooks/useGroupLayoutLoader.ts rename to servers/nextjs/app/(presentation-generator)/layout-preview/hooks/useGroupLayoutLoader.ts diff --git a/servers/nextjs/app/layout-preview/hooks/useLayoutLoader.ts b/servers/nextjs/app/(presentation-generator)/layout-preview/hooks/useLayoutLoader.ts similarity index 100% rename from servers/nextjs/app/layout-preview/hooks/useLayoutLoader.ts rename to servers/nextjs/app/(presentation-generator)/layout-preview/hooks/useLayoutLoader.ts diff --git a/servers/nextjs/app/layout-preview/page.tsx b/servers/nextjs/app/(presentation-generator)/layout-preview/page.tsx similarity index 100% rename from servers/nextjs/app/layout-preview/page.tsx rename to servers/nextjs/app/(presentation-generator)/layout-preview/page.tsx diff --git a/servers/nextjs/app/layout-preview/types/index.ts b/servers/nextjs/app/(presentation-generator)/layout-preview/types/index.ts similarity index 100% rename from servers/nextjs/app/layout-preview/types/index.ts rename to servers/nextjs/app/(presentation-generator)/layout-preview/types/index.ts diff --git a/servers/nextjs/app/(presentation-generator)/layout.tsx b/servers/nextjs/app/(presentation-generator)/layout.tsx new file mode 100644 index 00000000..ea8aaf2a --- /dev/null +++ b/servers/nextjs/app/(presentation-generator)/layout.tsx @@ -0,0 +1,13 @@ +import React from 'react' +import { ConfigurationInitializer } from '../ConfigurationInitializer' +const layout = ({ children }: { children: React.ReactNode }) => { + return ( +
+ + {children} + +
+ ) +} + +export default layout diff --git a/servers/nextjs/app/(presentation-generator)/outline/components/GroupLayouts.tsx b/servers/nextjs/app/(presentation-generator)/outline/components/GroupLayouts.tsx index 0c9f259b..8e8cd656 100644 --- a/servers/nextjs/app/(presentation-generator)/outline/components/GroupLayouts.tsx +++ b/servers/nextjs/app/(presentation-generator)/outline/components/GroupLayouts.tsx @@ -1,7 +1,7 @@ import { CheckCircle } from 'lucide-react'; import React from 'react'; import { LayoutGroup } from "../types/index"; -import { useGroupLayoutLoader } from '@/app/layout-preview/hooks/useGroupLayoutLoader'; +import { useGroupLayoutLoader } from '@/app/(presentation-generator)/layout-preview/hooks/useGroupLayoutLoader'; interface GroupLayoutsProps { group: LayoutGroup; onSelectLayoutGroup: (group: LayoutGroup) => void; diff --git a/servers/nextjs/app/(presentation-generator)/outline/page.tsx b/servers/nextjs/app/(presentation-generator)/outline/page.tsx index d47a1e80..9b78f966 100644 --- a/servers/nextjs/app/(presentation-generator)/outline/page.tsx +++ b/servers/nextjs/app/(presentation-generator)/outline/page.tsx @@ -1,5 +1,5 @@ import React from 'react' -import Header from '@/app/dashboard/components/Header' +import Header from '@/app/(presentation-generator)/dashboard/components/Header' import { Metadata } from 'next' import OutlinePage from './components/OutlinePage' export const metadata: Metadata = { diff --git a/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx b/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx index f996c597..5fb51ee5 100644 --- a/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx @@ -5,7 +5,7 @@ import { RootState } from "@/store/store"; import { Skeleton } from "@/components/ui/skeleton"; -import { DashboardApi } from "@/app/dashboard/api/dashboard"; +import { DashboardApi } from "@/app/(presentation-generator)/dashboard/api/dashboard"; import { toast } from "sonner"; diff --git a/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationData.ts b/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationData.ts index 90d60c2c..3ca208d9 100644 --- a/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationData.ts +++ b/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationData.ts @@ -1,8 +1,8 @@ import { useCallback, useEffect } from 'react'; import { useDispatch } from "react-redux"; import { toast } from "sonner"; -import { DashboardApi } from "@/app/dashboard/api/dashboard"; import { setPresentationData } from "@/store/slices/presentationGeneration"; +import { DashboardApi } from '../../services/api/dashboard'; export const usePresentationData = ( presentationId: string, diff --git a/servers/nextjs/app/dashboard/api/dashboard.ts b/servers/nextjs/app/(presentation-generator)/services/api/dashboard.ts similarity index 100% rename from servers/nextjs/app/dashboard/api/dashboard.ts rename to servers/nextjs/app/(presentation-generator)/services/api/dashboard.ts diff --git a/servers/nextjs/app/settings/SettingPage.tsx b/servers/nextjs/app/(presentation-generator)/settings/SettingPage.tsx similarity index 100% rename from servers/nextjs/app/settings/SettingPage.tsx rename to servers/nextjs/app/(presentation-generator)/settings/SettingPage.tsx index b6e447ca..1a9dd661 100644 --- a/servers/nextjs/app/settings/SettingPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/settings/SettingPage.tsx @@ -1,6 +1,5 @@ "use client"; import React, { useState, useEffect } from "react"; -import Header from "../dashboard/components/Header"; import { Loader2, Download, CheckCircle } from "lucide-react"; import { toast } from "sonner"; import { RootState } from "@/store/store"; @@ -13,6 +12,7 @@ import { } from "@/utils/providerUtils"; import { useRouter } from "next/navigation"; import LLMProviderSelection from "@/components/LLMSelection"; +import Header from "../dashboard/components/Header"; // Button state interface interface ButtonState { diff --git a/servers/nextjs/app/settings/loading.tsx b/servers/nextjs/app/(presentation-generator)/settings/loading.tsx similarity index 100% rename from servers/nextjs/app/settings/loading.tsx rename to servers/nextjs/app/(presentation-generator)/settings/loading.tsx diff --git a/servers/nextjs/app/settings/page.tsx b/servers/nextjs/app/(presentation-generator)/settings/page.tsx similarity index 100% rename from servers/nextjs/app/settings/page.tsx rename to servers/nextjs/app/(presentation-generator)/settings/page.tsx diff --git a/servers/nextjs/app/(presentation-generator)/upload/loading.tsx b/servers/nextjs/app/(presentation-generator)/upload/loading.tsx index a3e5e55b..6cf32ede 100644 --- a/servers/nextjs/app/(presentation-generator)/upload/loading.tsx +++ b/servers/nextjs/app/(presentation-generator)/upload/loading.tsx @@ -1,4 +1,4 @@ -import Header from '@/app/dashboard/components/Header' +import Header from '@/app/(presentation-generator)/dashboard/components/Header' import { Skeleton } from '@/components/ui/skeleton' import React from 'react' diff --git a/servers/nextjs/app/(presentation-generator)/upload/page.tsx b/servers/nextjs/app/(presentation-generator)/upload/page.tsx index a2d2caf1..d05ce1ee 100644 --- a/servers/nextjs/app/(presentation-generator)/upload/page.tsx +++ b/servers/nextjs/app/(presentation-generator)/upload/page.tsx @@ -1,7 +1,7 @@ import React from 'react' import UploadPage from './components/UploadPage' -import Header from '@/app/dashboard/components/Header' +import Header from '@/app/(presentation-generator)/dashboard/components/Header' import { Metadata } from 'next' export const metadata: Metadata = { diff --git a/servers/nextjs/app/storeInitializer.tsx b/servers/nextjs/app/ConfigurationInitializer.tsx similarity index 98% rename from servers/nextjs/app/storeInitializer.tsx rename to servers/nextjs/app/ConfigurationInitializer.tsx index 13ac3153..9868876c 100644 --- a/servers/nextjs/app/storeInitializer.tsx +++ b/servers/nextjs/app/ConfigurationInitializer.tsx @@ -7,7 +7,7 @@ import { usePathname, useRouter } from 'next/navigation'; import { useDispatch } from 'react-redux'; import { checkIfSelectedOllamaModelIsPulled } from '@/utils/providerUtils'; -export function StoreInitializer({ children }: { children: React.ReactNode }) { +export function ConfigurationInitializer({ children }: { children: React.ReactNode }) { const dispatch = useDispatch(); const [isLoading, setIsLoading] = useState(true); diff --git a/servers/nextjs/app/api/layouts/route.ts b/servers/nextjs/app/api/layouts/route.ts index 3f4dca34..4d16ac98 100644 --- a/servers/nextjs/app/api/layouts/route.ts +++ b/servers/nextjs/app/api/layouts/route.ts @@ -1,7 +1,7 @@ import { NextResponse } from 'next/server' import { promises as fs } from 'fs' import path from 'path' -import { GroupSetting } from '@/app/layout-preview/types' +import { GroupSetting } from '@/app/(presentation-generator)/layout-preview/types' export async function GET() { try { diff --git a/servers/nextjs/app/layout-preview/utils/sampleDataGenerator.ts b/servers/nextjs/app/layout-preview/utils/sampleDataGenerator.ts deleted file mode 100644 index dd54b854..00000000 --- a/servers/nextjs/app/layout-preview/utils/sampleDataGenerator.ts +++ /dev/null @@ -1,305 +0,0 @@ -/** - * Sample Data Generator Utility - * - * Generates realistic sample data from Zod schemas for layout previews. - * Provides context-aware data generation based on field names and types. - */ - -export const generateSampleDataFromSchema = (schema: any, layoutName: string): any => { - if (!schema) return {} - - try { - // Generate realistic sample data for all fields first - const generatedData = generateRealisticData(schema._def?.shape || schema.shape, layoutName) - - - // Merge generated data with defaults, giving priority to defaults - return generatedData - } catch (error) { - console.error(`Error generating sample data for ${layoutName}:`, error) - return {} - } -} - - - -const generateRealisticData = (shape: any, layoutName: string): any => { - if (!shape) return {} - - const data: any = {} - - for (const [key, fieldSchema] of Object.entries(shape as any)) { - const field = fieldSchema as any - - // Generate data for all fields (both required and optional) - // We'll let the defaults override this later if they exist - data[key] = generateFieldValue(key, field, layoutName) - } - - return data -} - -// const arrayMock = (length:number,element:any) => { -// return Array.from({length},()=>generateFieldValue(fieldName, element, layoutName)) -// } -// const mockObject = (shapes:any) => { -// let obj:any = {} -// for(const [key,shape] of Object.entries(shapes)){ -// const defaultValue = shape.def.defaultValue -// obj[key] = defaultValue ? defaultValue : generateFieldValue(key, shape, layoutName) -// } -// return obj -// } - - -// const generateMockValue = (fileType:string,format?:string)=>{ -// switch(fileType){ -// case 'number': -// return Math.floor(Math.random() * 100) + 1 -// case 'string': -// return generateStringValue(fieldName, fieldSchema, layoutName) -// case 'boolean': -// return Math.random() > 0.5 -// case 'object': -// return mockObject(fieldSchema.def.shape) -// case 'array': -// return arrayMock(fieldSchema.def.length,fieldSchema.def.element) -// } - -// } - - - -const generateFieldValue = (fieldName: string, fieldSchema: any, layoutName: string): any => { - console.log('BADU',fieldSchema,fieldName,layoutName) - const defaultValue = fieldSchema.def.defaultValue; - - if(defaultValue){ - console.log('DEFAULT VALUE',defaultValue) - return defaultValue; - } - - if(fieldSchema.def.type ==='optional'){ - return generateFieldValue(fieldName, fieldSchema.def.innerType, layoutName) - } - - // Get the actual field type - handle optional fields properly - let actualFieldSchema = fieldSchema - let fieldType = fieldSchema._def?.typeName - - // If this is an optional field (ZodOptional), get the inner type - if (fieldType === 'ZodOptional') { - actualFieldSchema = fieldSchema._def?.innerType - fieldType = actualFieldSchema?._def?.typeName - } - - // For preview purposes, always generate data for optional fields - // (users want to see how the layout looks with content) - - // Handle different field types - switch (fieldType) { - case 'ZodString': - return generateStringValue(fieldName, actualFieldSchema, layoutName) - case 'ZodArray': - return generateArrayValue(fieldName, actualFieldSchema, layoutName) - case 'ZodObject': - return generateObjectValue(fieldName, actualFieldSchema, layoutName) - case 'ZodEnum': - const options = actualFieldSchema._def?.values || [] - return options[Math.floor(Math.random() * options.length)] - case 'ZodBoolean': - return Math.random() > 0.5 - case 'ZodNumber': - return Math.floor(Math.random() * 100) + 1 - default: - return generateStringValue(fieldName, actualFieldSchema, layoutName) - } -} - - - -const generateStringValue = (fieldName: string, fieldSchema: any, layoutName: string): string => { - const lowerField = fieldName.toLowerCase() - - // Handle URLs (images, logos, backgrounds, etc.) - if (lowerField.includes('url') || lowerField.includes('image') || lowerField.includes('logo')) { - if (lowerField.includes('logo')) { - return 'https://images.unsplash.com/photo-1611224923853-80b023f02d71?w=200&h=200&fit=crop' - } - if (lowerField.includes('background')) { - const backgrounds = [ - 'https://images.unsplash.com/photo-1557804506-669a67965ba0?w=1920&h=1080&fit=crop', - 'https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=1920&h=1080&fit=crop', - 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=1920&h=1080&fit=crop' - ] - return backgrounds[Math.floor(Math.random() * backgrounds.length)] - } - // Regular images - const images = [ - 'https://images.unsplash.com/photo-1551434678-e076c223a692?w=800&h=600&fit=crop', - 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=800&h=600&fit=crop', - 'https://images.unsplash.com/photo-1504384308090-c894fdcc538d?w=800&h=600&fit=crop', - 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800&h=600&fit=crop' - ] - return images[Math.floor(Math.random() * images.length)] - } - - // Handle email - if (lowerField.includes('email')) { - const domains = ['example.com', 'company.com', 'business.org'] - const names = ['contact', 'info', 'hello', 'support'] - return `${names[Math.floor(Math.random() * names.length)]}@${domains[Math.floor(Math.random() * domains.length)]}` - } - - // Handle phone - if (lowerField.includes('phone')) { - return `+1 (555) ${Math.floor(Math.random() * 900) + 100}-${Math.floor(Math.random() * 9000) + 1000}` - } - - // Handle website - if (lowerField.includes('website')) { - const sites = ['https://example.com', 'https://company.com', 'https://business.org'] - return sites[Math.floor(Math.random() * sites.length)] - } - - // Handle LinkedIn - if (lowerField.includes('linkedin')) { - return 'https://linkedin.com/company/example' - } - - // Handle specific field names - if (lowerField.includes('title')) { - const titles = [ - 'Welcome to Our Presentation', - 'Key Business Insights', - 'Product Overview', - 'Market Analysis', - 'Future Vision', - 'Strategic Goals' - ] - return titles[Math.floor(Math.random() * titles.length)] - } - - if (lowerField.includes('subtitle')) { - const subtitles = [ - 'Driving innovation through technology', - 'Transforming the way we work', - 'Building solutions for tomorrow', - 'Excellence in every detail', - 'Your success is our mission' - ] - return subtitles[Math.floor(Math.random() * subtitles.length)] - } - - if (lowerField.includes('author') || lowerField.includes('name')) { - const names = ['Alex Johnson', 'Sarah Chen', 'Michael Rodriguez', 'Emily Davis', 'David Kim'] - return names[Math.floor(Math.random() * names.length)] - } - - if (lowerField.includes('organization') || lowerField.includes('company')) { - const orgs = ['Tech Innovations Inc.', 'Future Solutions Ltd.', 'Global Dynamics Corp.', 'NextGen Enterprises'] - return orgs[Math.floor(Math.random() * orgs.length)] - } - - if (lowerField.includes('date')) { - return new Date().toLocaleDateString() - } - - if (lowerField.includes('content')) { - const contents = [ - 'Our innovative approach combines cutting-edge technology with proven methodologies to deliver exceptional results. We focus on scalability, reliability, and user experience.', - 'Through strategic partnerships and continuous innovation, we\'ve established ourselves as leaders in the industry. Our solutions are designed to meet evolving market demands.', - 'With over a decade of experience, our team brings deep expertise and fresh perspectives to every project. We\'re committed to exceeding expectations and driving growth.' - ] - return contents[Math.floor(Math.random() * contents.length)] - } - - if (lowerField.includes('caption')) { - const captions = [ - 'Innovative solutions driving business transformation', - 'Real-time analytics and insights at your fingertips', - 'Seamless integration with existing workflows', - 'Empowering teams to achieve more' - ] - return captions[Math.floor(Math.random() * captions.length)] - } - - if (lowerField.includes('action') || lowerField.includes('cta')) { - const actions = [ - 'Get Started Today!', - 'Schedule a Demo', - 'Contact Our Team', - 'Learn More', - 'Try It Free' - ] - return actions[Math.floor(Math.random() * actions.length)] - } - - // Default text based on field length constraints - const minLength = fieldSchema._def?.checks?.find((c: any) => c.kind === 'min')?.value || 10 - const maxLength = fieldSchema._def?.checks?.find((c: any) => c.kind === 'max')?.value || 100 - - if (maxLength <= 50) { - return 'Sample short text content' - } else if (maxLength <= 150) { - return 'This is sample medium-length text content for preview purposes' - } else { - return 'This is sample long-form text content that demonstrates how the layout will look with realistic data. It provides a good representation of the final presentation slide.' - } -} - -const generateArrayValue = (fieldName: string, fieldSchema: any, layoutName: string): any[] => { - const itemSchema = fieldSchema._def?.type - const minItems = fieldSchema._def?.minLength?.value || 2 - const maxItems = Math.min(fieldSchema._def?.maxLength?.value || 5, 6) - const itemCount = Math.floor(Math.random() * (maxItems - minItems + 1)) + minItems - - const lowerField = fieldName.toLowerCase() - - if (lowerField.includes('bullet') || lowerField.includes('point')) { - const bulletPoints = [ - 'Increased efficiency and productivity', - 'Cost-effective solutions', - 'Enhanced user experience', - 'Scalable architecture', - 'Real-time analytics', - '24/7 customer support', - 'Seamless integration capabilities', - 'Advanced security features' - ] - return bulletPoints.slice(0, itemCount) - } - - if (lowerField.includes('takeaway') || lowerField.includes('key')) { - const takeaways = [ - 'Strategic advantage through innovation', - 'Proven ROI within 6 months', - 'Comprehensive support included', - 'Future-ready technology stack', - 'Industry-leading performance' - ] - return takeaways.slice(0, itemCount) - } - - // Generate generic array items - const items = [] - for (let i = 0; i < itemCount; i++) { - if (itemSchema) { - items.push(generateFieldValue(`${fieldName}Item`, itemSchema, layoutName)) - } else { - items.push(`Sample item ${i + 1}`) - } - } - return items -} - -const generateObjectValue = (fieldName: string, fieldSchema: any, layoutName: string): any => { - const shape = fieldSchema._def?.shape - if (!shape) return {} - - const obj: any = {} - for (const [key, subSchema] of Object.entries(shape)) { - obj[key] = generateFieldValue(key, subSchema, layoutName) - } - return obj -} \ No newline at end of file diff --git a/servers/nextjs/app/layout.tsx b/servers/nextjs/app/layout.tsx index a90f163d..4b739142 100644 --- a/servers/nextjs/app/layout.tsx +++ b/servers/nextjs/app/layout.tsx @@ -5,8 +5,6 @@ import "./globals.css"; import { Providers } from "./providers"; import { LayoutProvider } from "./(presentation-generator)/context/LayoutContext"; import { Toaster } from "@/components/ui/sonner"; - - const inter = localFont({ src: [ { diff --git a/servers/nextjs/app/providers.tsx b/servers/nextjs/app/providers.tsx index c0f205df..5338b9bd 100644 --- a/servers/nextjs/app/providers.tsx +++ b/servers/nextjs/app/providers.tsx @@ -2,10 +2,9 @@ import { Provider } from 'react-redux'; import { store } from '../store/store'; -import { StoreInitializer } from './storeInitializer'; export function Providers({ children }: { children: React.ReactNode }) { return - {children} + {children} ; }