Files
recipe-app/frontend/app/recipes/page.tsx
T

57 lines
2.3 KiB
TypeScript

import Link from 'next/link';
import { fetchJson } from '../../lib/api';
import type { Recipe } from '../../features/inventory/types';
import RecipePreview from './RecipePreview';
import Navigation from '../Navigation';
export default async function RecipesPage() {
const recipes = await fetchJson<Recipe[]>('/api/recipes');
return (
<main style={{ padding: '1rem', maxWidth: '1000px', margin: '0 auto' }}>
<Navigation />
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '1.5rem' }}>
<h1 style={{ margin: 0 }}>Recept</h1>
<Link
href="/recipes/create"
style={{
padding: '0.5rem 1rem',
background: '#0070f3',
color: 'white',
borderRadius: '4px',
textDecoration: 'none',
fontWeight: 500,
fontSize: '1rem',
transition: 'background 0.2s',
}}
>
Lägg till nytt recept
</Link>
</div>
<p>Här kan du jämföra recept mot nuvarande hemmavaror.</p>
<RecipePreview recipes={recipes} />
</main>
);
}
function parseQuantityInput(input: string, defaultUnit: string) {
const match = input.trim().match(/^([\d.,]+)\s*([a-zA-Z]*)$/);
if (!match) return { quantity: NaN, unit: defaultUnit };
let [, num, unit] = match;
num = num.replace(',', '.');
unit = unit.toLowerCase() || defaultUnit;
const value = parseFloat(num);
// Konvertera alltid till defaultUnit
if (defaultUnit === 'kg') {
if (unit === 'g' || unit === 'gram') return { quantity: value / 1000, unit: 'kg' };
if (unit === 'hg' || unit === 'hektogram') return { quantity: value / 10, unit: 'kg' };
if (unit === 'kg' || unit === 'kilogram' || unit === '') return { quantity: value, unit: 'kg' };
}
if (defaultUnit === 'g') {
if (unit === 'kg' || unit === 'kilogram') return { quantity: value * 1000, unit: 'g' };
if (unit === 'hg' || unit === 'hektogram') return { quantity: value * 100, unit: 'g' };
if (unit === 'g' || unit === 'gram' || unit === '') return { quantity: value, unit: 'g' };
}
// Lägg till fler konverteringar vid behov
return { quantity: value, unit: defaultUnit };
}