Skip to content

Instantly share code, notes, and snippets.

@AntonioErdeljac
Last active June 9, 2025 14:34
Show Gist options
  • Save AntonioErdeljac/742df57011c55c365841daca78f53c1f to your computer and use it in GitHub Desktop.
Save AntonioErdeljac/742df57011c55c365841daca78f53c1f to your computer and use it in GitHub Desktop.
Funroad assets
const categories = [
{
name: "All",
slug: "all",
},
{
name: "Business & Money",
color: "#FFB347",
slug: "business-money",
subcategories: [
{ name: "Accounting", slug: "accounting" },
{
name: "Entrepreneurship",
slug: "entrepreneurship",
},
{ name: "Gigs & Side Projects", slug: "gigs-side-projects" },
{ name: "Investing", slug: "investing" },
{ name: "Management & Leadership", slug: "management-leadership" },
{
name: "Marketing & Sales",
slug: "marketing-sales",
},
{ name: "Networking, Careers & Jobs", slug: "networking-careers-jobs" },
{ name: "Personal Finance", slug: "personal-finance" },
{ name: "Real Estate", slug: "real-estate" },
],
},
{
name: "Software Development",
color: "#7EC8E3",
slug: "software-development",
subcategories: [
{ name: "Web Development", slug: "web-development" },
{ name: "Mobile Development", slug: "mobile-development" },
{ name: "Game Development", slug: "game-development" },
{ name: "Programming Languages", slug: "programming-languages" },
{ name: "DevOps", slug: "devops" },
],
},
{
name: "Writing & Publishing",
color: "#D8B5FF",
slug: "writing-publishing",
subcategories: [
{ name: "Fiction", slug: "fiction" },
{ name: "Non-Fiction", slug: "non-fiction" },
{ name: "Blogging", slug: "blogging" },
{ name: "Copywriting", slug: "copywriting" },
{ name: "Self-Publishing", slug: "self-publishing" },
],
},
{
name: "Other",
slug: "other",
},
{
name: "Education",
color: "#FFE066",
slug: "education",
subcategories: [
{ name: "Online Courses", slug: "online-courses" },
{ name: "Tutoring", slug: "tutoring" },
{ name: "Test Preparation", slug: "test-preparation" },
{ name: "Language Learning", slug: "language-learning" },
],
},
{
name: "Self Improvement",
color: "#96E6B3",
slug: "self-improvement",
subcategories: [
{ name: "Productivity", slug: "productivity" },
{ name: "Personal Development", slug: "personal-development" },
{ name: "Mindfulness", slug: "mindfulness" },
{ name: "Career Growth", slug: "career-growth" },
],
},
{
name: "Fitness & Health",
color: "#FF9AA2",
slug: "fitness-health",
subcategories: [
{ name: "Workout Plans", slug: "workout-plans" },
{ name: "Nutrition", slug: "nutrition" },
{ name: "Mental Health", slug: "mental-health" },
{ name: "Yoga", slug: "yoga" },
],
},
{
name: "Design",
color: "#B5B9FF",
slug: "design",
subcategories: [
{ name: "UI/UX", slug: "ui-ux" },
{ name: "Graphic Design", slug: "graphic-design" },
{ name: "3D Modeling", slug: "3d-modeling" },
{ name: "Typography", slug: "typography" },
],
},
{
name: "Drawing & Painting",
color: "#FFCAB0",
slug: "drawing-painting",
subcategories: [
{ name: "Watercolor", slug: "watercolor" },
{ name: "Acrylic", slug: "acrylic" },
{ name: "Oil", slug: "oil" },
{ name: "Pastel", slug: "pastel" },
{ name: "Charcoal", slug: "charcoal" },
],
},
{
name: "Music",
color: "#FFD700",
slug: "music",
subcategories: [
{ name: "Songwriting", slug: "songwriting" },
{ name: "Music Production", slug: "music-production" },
{ name: "Music Theory", slug: "music-theory" },
{ name: "Music History", slug: "music-history" },
],
},
{
name: "Photography",
color: "#FF6B6B",
slug: "photography",
subcategories: [
{ name: "Portrait", slug: "portrait" },
{ name: "Landscape", slug: "landscape" },
{ name: "Street Photography", slug: "street-photography" },
{ name: "Nature", slug: "nature" },
{ name: "Macro", slug: "macro" },
],
},
]
{
"name": "multitenant-ecommerce",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"generate:types": "payload generate:types",
"db:fresh": "payload migrate:fresh",
"db:seed": "bun run src/seed.ts"
},
"dependencies": {
"@hookform/resolvers": "^5.0.1",
"@payloadcms/db-mongodb": "3.34.0",
"@payloadcms/next": "3.34.0",
"@payloadcms/payload-cloud": "3.34.0",
"@payloadcms/plugin-multi-tenant": "3.34.0",
"@payloadcms/richtext-lexical": "3.34.0",
"@payloadcms/storage-vercel-blob": "3.34.0",
"@radix-ui/react-accordion": "^1.2.3",
"@radix-ui/react-alert-dialog": "^1.1.6",
"@radix-ui/react-aspect-ratio": "^1.1.2",
"@radix-ui/react-avatar": "^1.1.3",
"@radix-ui/react-checkbox": "^1.1.4",
"@radix-ui/react-collapsible": "^1.1.3",
"@radix-ui/react-context-menu": "^2.2.6",
"@radix-ui/react-dialog": "^1.1.6",
"@radix-ui/react-dropdown-menu": "^2.1.6",
"@radix-ui/react-hover-card": "^1.1.6",
"@radix-ui/react-label": "^2.1.2",
"@radix-ui/react-menubar": "^1.1.6",
"@radix-ui/react-navigation-menu": "^1.2.5",
"@radix-ui/react-popover": "^1.1.6",
"@radix-ui/react-progress": "^1.1.2",
"@radix-ui/react-radio-group": "^1.2.3",
"@radix-ui/react-scroll-area": "^1.2.3",
"@radix-ui/react-select": "^2.1.6",
"@radix-ui/react-separator": "^1.1.2",
"@radix-ui/react-slider": "^1.2.3",
"@radix-ui/react-slot": "^1.1.2",
"@radix-ui/react-switch": "^1.1.3",
"@radix-ui/react-tabs": "^1.1.3",
"@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@tanstack/react-query": "5.72.1",
"@trpc/client": "11.0.3",
"@trpc/server": "11.0.3",
"@trpc/tanstack-react-query": "11.0.3",
"class-variance-authority": "^0.7.1",
"client-only": "0.0.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"date-fns": "^4.1.0",
"embla-carousel-react": "^8.6.0",
"graphql": "^16.8.1",
"input-otp": "^1.4.2",
"lucide-react": "^0.487.0",
"next": "15.2.4",
"next-themes": "^0.4.6",
"nuqs": "^2.4.1",
"payload": "^3.33.0",
"react": "^19.0.0",
"react-day-picker": "8.10.1",
"react-dom": "^19.0.0",
"react-hook-form": "^7.55.0",
"react-resizable-panels": "^2.1.7",
"recharts": "^2.15.2",
"server-only": "0.0.1",
"sonner": "^2.0.3",
"stripe": "^18.0.0",
"superjson": "^2.2.2",
"tailwind-merge": "^3.1.0",
"tw-animate-css": "^1.2.5",
"vaul": "^1.1.2",
"zod": "3.24.2",
"zustand": "^5.0.3"
},
"devDependencies": {
"typescript": "^5",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@tailwindcss/postcss": "^4",
"tailwindcss": "^4",
"eslint": "^9",
"eslint-config-next": "15.2.4",
"@eslint/eslintrc": "^3"
}
}
@aniketSingh0310
Copy link

//product-list.tsx

const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =
useSuspenseInfiniteQuery(
trpc.products.getMany.infiniteQueryOptions(
{
...filters,
category,
limit: DEFAULT_LIMIT,
},
{
getNextPageParam: (lastPage) => {
return lastPage.docs.length > 0 ? lastPage.nextPage : undefined;
},
}
)
);

// error : on    trpc.products.getMany.infiniteQueryOptions line >>
Cannot invoke an object which is possibly 'undefined'.ts(2722)

@AntonioErdeljac  @AntonioErdeljac  please help

@Ashish1022
Copy link

Provide full context of the error

@aniketSingh0310
Copy link

Provide full context of the error

@Ashish1022 , resolved, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment