first commit
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled

This commit is contained in:
Arian Tron
2026-03-10 19:37:31 +03:30
commit 61f56f997c
27684 changed files with 2784175 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
'use client'
import { TabNavItem } from './TabNavItem'
import { useSelectedLayoutSegments } from 'next/navigation'
const CategoryNav = ({ categories }) => {
const selectedLayoutSegment = useSelectedLayoutSegments()
return (
<div style={{ display: 'flex' }}>
<TabNavItem href="/nested-navigation" isActive={!selectedLayoutSegment}>
Home
</TabNavItem>
{categories.map((item) => (
<TabNavItem
key={item.slug}
href={`/nested-navigation/${item.slug}`}
isActive={item.slug === selectedLayoutSegment}
prefetch={item.prefetch}
>
{item.name}
</TabNavItem>
))}
</div>
)
}
export default CategoryNav

View File

@@ -0,0 +1,13 @@
import Link from 'next/link'
export const TabNavItem = ({ children, href, prefetch }) => {
return (
<Link
href={href}
style={{ margin: '10px', display: 'block' }}
prefetch={prefetch}
>
{children}
</Link>
)
}

View File

@@ -0,0 +1,31 @@
'use client'
import { TabNavItem } from '../TabNavItem'
import { useSelectedLayoutSegments } from 'next/navigation'
const SubCategoryNav = ({ category }) => {
const selectedLayoutSegment = useSelectedLayoutSegments()
return (
<div style={{ display: 'flex' }}>
<TabNavItem
href={`/nested-navigation/${category.slug}`}
isActive={!selectedLayoutSegment}
>
All
</TabNavItem>
{category.items.map((item) => (
<TabNavItem
key={item.slug}
href={`/nested-navigation/${category.slug}/${item.slug}`}
isActive={item.slug === selectedLayoutSegment}
>
{item.name}
</TabNavItem>
))}
</div>
)
}
export default SubCategoryNav

View File

@@ -0,0 +1,11 @@
import { use } from 'react'
import { fetchSubCategory } from '../../getCategories'
export default function Page({ params }) {
const category = use(
fetchSubCategory(use(params).categorySlug, use(params).subCategorySlug)
)
if (!category) return null
return <h1 id={category.name.toLowerCase()}>{category.name}</h1>
}

View File

@@ -0,0 +1,13 @@
import { fetchCategoryBySlug } from '../getCategories'
import SubCategoryNav from './SubCategoryNav'
export default async function Layout({ children, params }) {
const category = await fetchCategoryBySlug((await params).categorySlug)
if (!category) return null
return (
<>
<SubCategoryNav category={category} />
{children}
</>
)
}

View File

@@ -0,0 +1,8 @@
import { fetchCategoryBySlug } from '../getCategories'
export default async function Page({ params }) {
const category = await fetchCategoryBySlug((await params).categorySlug)
if (!category) return null
return <h1 id={`all-${category.name.toLowerCase()}`}>All {category.name}</h1>
}

View File

@@ -0,0 +1,57 @@
export const getCategories = () => [
{
name: 'Electronics',
slug: 'electronics',
count: 11,
items: [
{ name: 'Phones', slug: 'phones', count: 4 },
{ name: 'Tablets', slug: 'tablets', count: 5 },
{ name: 'Laptops', slug: 'laptops', count: 2 },
],
},
{
name: 'Clothing',
slug: 'clothing',
count: 12,
items: [
{ name: 'Tops', slug: 'tops', count: 3 },
{ name: 'Shorts', slug: 'shorts', count: 4 },
{ name: 'Shoes', slug: 'shoes', count: 5 },
],
},
{
name: 'Books',
slug: 'books',
count: 10,
items: [
{ name: 'Fiction', slug: 'fiction', count: 5 },
{ name: 'Biography', slug: 'biography', count: 2 },
{ name: 'Education', slug: 'education', count: 3 },
],
},
{
name: 'Shoes',
slug: 'shoes',
count: 5,
items: [],
prefetch: false,
},
]
export async function fetchCategoryBySlug(slug) {
// Assuming it always return expected categories
return getCategories().find((category) => category.slug === slug)
}
export async function fetchCategories() {
return getCategories()
}
async function findSubCategory(category, subCategorySlug) {
return category?.items.find((category) => category.slug === subCategorySlug)
}
export async function fetchSubCategory(categorySlug, subCategorySlug) {
const category = await fetchCategoryBySlug(categorySlug)
return findSubCategory(category, subCategorySlug)
}

View File

@@ -0,0 +1,17 @@
import { use } from 'react'
import { fetchCategories } from './getCategories'
import React from 'react'
import CategoryNav from './CategoryNav'
export default function Layout({ children }) {
const categories = use(fetchCategories())
return (
<div>
<div>
<CategoryNav categories={categories} />
</div>
<div>{children}</div>
</div>
)
}

View File

@@ -0,0 +1,3 @@
export default function Page() {
return <h1>Home</h1>
}