Add Navigation component and integrate it into multiple pages for consistent navigation
This commit is contained in:
@@ -0,0 +1,79 @@
|
|||||||
|
import Link from 'next/link';
|
||||||
|
|
||||||
|
export default function Navigation() {
|
||||||
|
return (
|
||||||
|
<nav
|
||||||
|
style={{
|
||||||
|
background: '#f9f9f9',
|
||||||
|
borderBottom: '1px solid #ddd',
|
||||||
|
padding: '0.75rem 1rem',
|
||||||
|
display: 'flex',
|
||||||
|
gap: '0.5rem',
|
||||||
|
flexWrap: 'wrap',
|
||||||
|
marginBottom: '1.5rem',
|
||||||
|
alignItems: 'center',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Link
|
||||||
|
href="/"
|
||||||
|
style={{
|
||||||
|
padding: '0.5rem 0.75rem',
|
||||||
|
background: '#fff',
|
||||||
|
border: '1px solid #ddd',
|
||||||
|
borderRadius: '4px',
|
||||||
|
textDecoration: 'none',
|
||||||
|
color: '#0070f3',
|
||||||
|
fontSize: '0.9rem',
|
||||||
|
fontWeight: 500,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
🏠 Hem
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="/inventory"
|
||||||
|
style={{
|
||||||
|
padding: '0.5rem 0.75rem',
|
||||||
|
background: '#fff',
|
||||||
|
border: '1px solid #ddd',
|
||||||
|
borderRadius: '4px',
|
||||||
|
textDecoration: 'none',
|
||||||
|
color: '#0070f3',
|
||||||
|
fontSize: '0.9rem',
|
||||||
|
fontWeight: 500,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
🛒 Varor
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="/recipes"
|
||||||
|
style={{
|
||||||
|
padding: '0.5rem 0.75rem',
|
||||||
|
background: '#fff',
|
||||||
|
border: '1px solid #ddd',
|
||||||
|
borderRadius: '4px',
|
||||||
|
textDecoration: 'none',
|
||||||
|
color: '#0070f3',
|
||||||
|
fontSize: '0.9rem',
|
||||||
|
fontWeight: 500,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
📖 Recept
|
||||||
|
</Link>
|
||||||
|
<Link
|
||||||
|
href="/admin/products"
|
||||||
|
style={{
|
||||||
|
padding: '0.5rem 0.75rem',
|
||||||
|
background: '#fff',
|
||||||
|
border: '1px solid #ddd',
|
||||||
|
borderRadius: '4px',
|
||||||
|
textDecoration: 'none',
|
||||||
|
color: '#0070f3',
|
||||||
|
fontSize: '0.9rem',
|
||||||
|
fontWeight: 500,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
⚙️ Admin
|
||||||
|
</Link>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,12 +2,14 @@ import { fetchJson } from '../../../lib/api';
|
|||||||
import type { Product } from '../../../features/inventory/types';
|
import type { Product } from '../../../features/inventory/types';
|
||||||
import MergePreviewForm from './MergePreviewForm';
|
import MergePreviewForm from './MergePreviewForm';
|
||||||
import AdminProductList from './AdminProductList';
|
import AdminProductList from './AdminProductList';
|
||||||
|
import Navigation from '../../Navigation';
|
||||||
|
|
||||||
export default async function AdminProductsPage() {
|
export default async function AdminProductsPage() {
|
||||||
const products = await fetchJson<Product[]>('/api/products');
|
const products = await fetchJson<Product[]>('/api/products');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1.5rem', maxWidth: '1100px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '1100px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<h1 style={{ marginBottom: '1.5rem' }}>Admin: Produkter</h1>
|
<h1 style={{ marginBottom: '1.5rem' }}>Admin: Produkter</h1>
|
||||||
<p>Här kan du granska och standardisera produktnamn.</p>
|
<p>Här kan du granska och standardisera produktnamn.</p>
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Link from 'next/link';
|
|||||||
import { fetchJson } from '../../lib/api';
|
import { fetchJson } from '../../lib/api';
|
||||||
import type { InventoryItem, Product } from '../../features/inventory/types';
|
import type { InventoryItem, Product } from '../../features/inventory/types';
|
||||||
import InventoryList from './InventoryList';
|
import InventoryList from './InventoryList';
|
||||||
|
import Navigation from '../Navigation';
|
||||||
|
|
||||||
function formatDate(value: string | null) {
|
function formatDate(value: string | null) {
|
||||||
if (!value) return null;
|
if (!value) return null;
|
||||||
@@ -104,7 +105,8 @@ export default async function InventoryPage({ searchParams }: InventoryPageProps
|
|||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1.5rem', maxWidth: '1000px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<h1 style={{ marginBottom: '1.5rem' }}>Varor hemma</h1>
|
<h1 style={{ marginBottom: '1.5rem' }}>Varor hemma</h1>
|
||||||
|
|
||||||
<ProductForm />
|
<ProductForm />
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import Navigation from './Navigation';
|
||||||
|
|
||||||
export default function HomePage() {
|
export default function HomePage() {
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '2rem', maxWidth: '700px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '700px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<h1 style={{ marginBottom: '1.5rem' }}>Recipe App</h1>
|
<h1 style={{ marginBottom: '1.5rem' }}>Recipe App</h1>
|
||||||
<div style={{ display: 'grid', gap: '1rem' }}>
|
<div style={{ display: 'grid', gap: '1rem' }}>
|
||||||
<Link href="/inventory" style={{ padding: '0.5rem', background: '#eee', borderRadius: '4px', textDecoration: 'none', color: '#222' }}>
|
<Link href="/inventory" style={{ padding: '0.5rem', background: '#eee', borderRadius: '4px', textDecoration: 'none', color: '#222' }}>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useRouter, useParams } from 'next/navigation';
|
|||||||
import { fetchJson } from '../../../../lib/api';
|
import { fetchJson } from '../../../../lib/api';
|
||||||
import { parseErrorResponse } from '../../../../lib/error-handler';
|
import { parseErrorResponse } from '../../../../lib/error-handler';
|
||||||
import type { Product, Recipe } from '../../../../features/inventory/types';
|
import type { Product, Recipe } from '../../../../features/inventory/types';
|
||||||
|
import Navigation from '../../../Navigation';
|
||||||
|
|
||||||
const MARKDOWN_HELP = `
|
const MARKDOWN_HELP = `
|
||||||
**Fetstil:** **text** eller __text__
|
**Fetstil:** **text** eller __text__
|
||||||
@@ -181,6 +182,7 @@ export default function EditRecipePage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<h1 style={{ marginBottom: '1rem' }}>Redigera recept</h1>
|
<h1 style={{ marginBottom: '1rem' }}>Redigera recept</h1>
|
||||||
|
|
||||||
{error && <p style={{ color: 'crimson', backgroundColor: '#ffe5e5', padding: '0.75rem', borderRadius: '4px', marginBottom: '1rem' }}>{error}</p>}
|
{error && <p style={{ color: 'crimson', backgroundColor: '#ffe5e5', padding: '0.75rem', borderRadius: '4px', marginBottom: '1rem' }}>{error}</p>}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation';
|
|||||||
import { fetchJson } from '../../../lib/api';
|
import { fetchJson } from '../../../lib/api';
|
||||||
import { parseErrorResponse } from '../../../lib/error-handler';
|
import { parseErrorResponse } from '../../../lib/error-handler';
|
||||||
import type { Product } from '../../../features/inventory/types';
|
import type { Product } from '../../../features/inventory/types';
|
||||||
|
import Navigation from '../../Navigation';
|
||||||
|
|
||||||
const MARKDOWN_HELP = `
|
const MARKDOWN_HELP = `
|
||||||
**Fetstil:** **text** eller __text__
|
**Fetstil:** **text** eller __text__
|
||||||
@@ -136,6 +137,7 @@ export default function CreateRecipePage() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<h1 style={{ marginBottom: '1rem' }}>Lägg till nytt recept</h1>
|
<h1 style={{ marginBottom: '1rem' }}>Lägg till nytt recept</h1>
|
||||||
|
|
||||||
{error && <p style={{ color: 'crimson', backgroundColor: '#ffe5e5', padding: '0.75rem', borderRadius: '4px', marginBottom: '1rem' }}>{error}</p>}
|
{error && <p style={{ color: 'crimson', backgroundColor: '#ffe5e5', padding: '0.75rem', borderRadius: '4px', marginBottom: '1rem' }}>{error}</p>}
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ import Link from 'next/link';
|
|||||||
import { fetchJson } from '../../lib/api';
|
import { fetchJson } from '../../lib/api';
|
||||||
import type { Recipe } from '../../features/inventory/types';
|
import type { Recipe } from '../../features/inventory/types';
|
||||||
import RecipePreview from './RecipePreview';
|
import RecipePreview from './RecipePreview';
|
||||||
|
import Navigation from '../Navigation';
|
||||||
|
|
||||||
export default async function RecipesPage() {
|
export default async function RecipesPage() {
|
||||||
const recipes = await fetchJson<Recipe[]>('/api/recipes');
|
const recipes = await fetchJson<Recipe[]>('/api/recipes');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1.5rem', maxWidth: '1000px', margin: '0 auto' }}>
|
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
|
||||||
|
<Navigation />
|
||||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '1.5rem' }}>
|
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '1.5rem' }}>
|
||||||
<h1 style={{ margin: 0 }}>Recept</h1>
|
<h1 style={{ margin: 0 }}>Recept</h1>
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
Reference in New Issue
Block a user