Herstructureer src/ naar feature-based folderstructuur #8

Merged
Sluijsens merged 1 commits from feature/restructure-folder-layout into master 2026-08-01 00:38:23 +02:00
25 changed files with 34 additions and 33 deletions
Showing only changes of commit 0037b0d304 - Show all commits
@@ -1,7 +1,7 @@
import { useState } from 'react'; import { useState } from 'react';
import { navLinks } from '../data/content'; import { navLinks } from '../../features/landing/data/content';
import { ThemeToggle } from './ThemeToggle'; import { ThemeToggle } from '../ui/ThemeToggle';
import { handleAnchorClick } from '../utils/scrollToHash'; import { handleAnchorClick } from '../../utils/scrollToHash';
export function Nav() { export function Nav() {
const [isMenuOpen, setIsMenuOpen] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false);
@@ -1,8 +1,8 @@
import type { ReactNode } from 'react'; import type { ReactNode } from 'react';
import { Nav } from './Nav'; import { Nav } from './Nav';
import { Footer } from './Footer'; import { Footer } from './Footer';
import { UmamiAnalytics } from './UmamiAnalytics'; import { UmamiAnalytics } from '../shared/UmamiAnalytics';
import { SentryTestButton } from './SentryTestButton'; import { SentryTestButton } from '../shared/SentryTestButton';
export function RootLayout({ children }: { children: ReactNode }) { export function RootLayout({ children }: { children: ReactNode }) {
return ( return (
@@ -1,7 +1,7 @@
import { render, screen, fireEvent } from '@testing-library/react'; import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect, beforeEach } from 'vitest'; import { describe, it, expect, beforeEach } from 'vitest';
import { Nav } from '../Nav'; import { Nav } from '../Nav';
import { ThemeProvider } from '../../theme/ThemeProvider'; import { ThemeProvider } from '../../../theme/ThemeProvider';
function renderNav() { function renderNav() {
return render( return render(
@@ -1,4 +1,4 @@
import { useTheme } from '../theme/ThemeProvider'; import { useTheme } from '../../theme/ThemeProvider';
/** /**
* Visible theme switcher (requirements FR-3, Functional Design Q1/Q7). * Visible theme switcher (requirements FR-3, Functional Design Q1/Q7).
@@ -1,8 +1,8 @@
import { render, screen, waitFor } from '@testing-library/react'; import { render, screen, waitFor } from '@testing-library/react';
import { describe, it, expect } from 'vitest'; import { describe, it, expect } from 'vitest';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { PackagesSection } from '../PackagesSection'; import { PackagesSection } from '../components/PackagesSection';
import { packages } from '../../data/content'; import { packages } from '../data/content';
function renderWithQueryClient() { function renderWithQueryClient() {
const queryClient = new QueryClient(); const queryClient = new QueryClient();
@@ -1,5 +1,5 @@
import { heroContent } from '../data/content'; import { heroContent } from '../data/content';
import { handleAnchorClick } from '../utils/scrollToHash'; import { handleAnchorClick } from '../../../utils/scrollToHash';
export function Hero() { export function Hero() {
return ( return (
@@ -1,5 +1,5 @@
import type { PackageCardData } from '../data/content'; import type { PackageCardData } from '../data/content';
import { handleAnchorClick } from '../utils/scrollToHash'; import { handleAnchorClick } from '../../../utils/scrollToHash';
export function PackageCard({ pkg }: { pkg: PackageCardData }) { export function PackageCard({ pkg }: { pkg: PackageCardData }) {
return ( return (
@@ -7,7 +7,7 @@
* *
* This module is the current source of truth for content (requirements FR-1/FR-6). * This module is the current source of truth for content (requirements FR-1/FR-6).
* It is deliberately structured so it can be swapped for TanStack Query data later * It is deliberately structured so it can be swapped for TanStack Query data later
* (see src/hooks/usePackagesQuery.ts) with minimal changes (requirements FR-5). * (see src/features/landing/hooks/usePackagesQuery.ts) with minimal changes (requirements FR-5).
*/ */
export interface NavLink { export interface NavLink {
@@ -0,0 +1,17 @@
import { Hero } from '../components/Hero';
import { PackagesSection } from '../components/PackagesSection';
import { ProcessSection } from '../components/ProcessSection';
import { AboutSection } from '../components/AboutSection';
import { ContactSection } from '../components/ContactSection';
export function LandingPage() {
return (
<>
<Hero />
<PackagesSection />
<ProcessSection />
<AboutSection />
<ContactSection />
</>
);
}
+3 -3
View File
@@ -1,9 +1,9 @@
import { createRootRoute, Outlet } from '@tanstack/react-router'; import { createRootRoute, Outlet } from '@tanstack/react-router';
import { QueryClientProvider } from '@tanstack/react-query'; import { QueryClientProvider } from '@tanstack/react-query';
import { ErrorBoundary } from '../components/ErrorBoundary'; import { ErrorBoundary } from '../components/shared/ErrorBoundary';
import { ThemeProvider } from '../theme/ThemeProvider'; import { ThemeProvider } from '../theme/ThemeProvider';
import { RootLayout } from '../components/RootLayout'; import { RootLayout } from '../components/layout/RootLayout';
import { queryClient } from '../queryClient'; import { queryClient } from '../lib/queryClient';
/** /**
* Root route composition (Functional Design / NFR Design logical components): * Root route composition (Functional Design / NFR Design logical components):
+2 -18
View File
@@ -1,25 +1,9 @@
import { createRoute } from '@tanstack/react-router'; import { createRoute } from '@tanstack/react-router';
import { rootRoute } from './__root'; import { rootRoute } from './__root';
import { Hero } from '../components/Hero'; import { LandingPage } from '../features/landing/pages/LandingPage';
import { PackagesSection } from '../components/PackagesSection';
import { ProcessSection } from '../components/ProcessSection';
import { AboutSection } from '../components/AboutSection';
import { ContactSection } from '../components/ContactSection';
function IndexPage() {
return (
<>
<Hero />
<PackagesSection />
<ProcessSection />
<AboutSection />
<ContactSection />
</>
);
}
export const indexRoute = createRoute({ export const indexRoute = createRoute({
getParentRoute: () => rootRoute, getParentRoute: () => rootRoute,
path: '/', path: '/',
component: IndexPage, component: LandingPage,
}); });