diff --git a/client/src/components/new-recipe/RecipeStep1.tsx b/client/src/components/new-recipe/RecipeStep1.tsx index 8ce566c..9303f23 100644 --- a/client/src/components/new-recipe/RecipeStep1.tsx +++ b/client/src/components/new-recipe/RecipeStep1.tsx @@ -1,6 +1,5 @@ - -import { useState } from 'react' -import type { Dispatch, SetStateAction } from 'react' +import { useEffect, useState } from 'react' +import type { ChangeEvent, Dispatch, SetStateAction } from 'react' import Rating from '@mui/material/Rating' import { Button } from '../ui/Button' @@ -11,7 +10,6 @@ import TagDialog from './TagDialog' import type { RecipeFormData } from '../../routes/NewRecipePage' -// Sånn at informasjonen blir lagret mellom stegene type RecipeStep1Props = { data: RecipeFormData setData: Dispatch> @@ -19,75 +17,47 @@ type RecipeStep1Props = { } const MAX_TAGS = 6 +const categories = ['Frokost', 'Lunsj', 'Middag', 'Dessert', 'Snacks', 'Drikke'] -const categories = [ - 'Frokost', - 'Lunsj', - 'Middag', - 'Dessert', - 'Snacks', - 'Drikke', -] +export default function RecipeStep1({ data, setData, onNext }: RecipeStep1Props) { + const [tagDialogOpen, setTagDialogOpen] = useState(false) + const [sourceOpen, setSourceOpen] = useState(false) + const [imagePreview, setImagePreview] = useState(null) -const dietaryTags = [ - 'Vegetar', - 'Vegansk', - 'Pescetar', - 'Glutenfri', - 'Laktosefri', - 'Under 30 min', -] + useEffect(() => { + if (!data.imageFile) { + setImagePreview(null) + return + } -export default function RecipeStep1({ - data, - setData, - onNext, -}: RecipeStep1Props) { - const [tagDialogOpen, setTagDialogOpen] = useState(false) + const objectUrl = URL.createObjectURL(data.imageFile) + setImagePreview(objectUrl) + return () => URL.revokeObjectURL(objectUrl) + }, [data.imageFile]) - // Oppdaterer ett felt i oppskriften og beholder resten const update = ( key: K, value: RecipeFormData[K], ) => { - setData((prev) => ({ - ...prev, - [key]: value, - })) + setData((prev) => ({ ...prev, [key]: value })) } - // Legger til eller fjerner en tag (maks 6 totalt) const toggleTag = (tag: string) => { - if (data.tags.includes(tag)) { - update( - 'tags', - data.tags.filter((item) => item !== tag), - ) - } else if (data.tags.length < MAX_TAGS) { - update('tags', [...data.tags, tag]) - } + setData((prev) => { + const tags = prev.tags.includes(tag) + ? prev.tags.filter((item) => item !== tag) + : prev.tags.length < MAX_TAGS + ? [...prev.tags, tag] + : prev.tags + return { ...prev, tags } + }) } - // Tags som er valgt fra dialogen - const extraTags = data.tags.filter( - (tag) => !dietaryTags.includes(tag), - ) - - // Når brukeren velger et bilde - const handleImageChange = ( - event: React.ChangeEvent, - ) => { + const handleImageChange = (event: ChangeEvent) => { const file = event.target.files?.[0] - if (!file) return - const allowedTypes = [ - 'image/jpeg', - 'image/png', - 'image/webp', - ] - - if (!allowedTypes.includes(file.type)) { + if (!['image/jpeg', 'image/png', 'image/webp'].includes(file.type)) { alert('Du kan bare laste opp JPG, PNG eller WebP.') event.target.value = '' return @@ -100,31 +70,53 @@ export default function RecipeStep1({ } update('imageFile', file) + event.target.value = '' } return ( -
-

+

+

Lag din egen oppskrift og del den med andre.

-
- {/* VENSTRE SIDE */} -
- {/* BILDEOPPLASTING */} +
+ {/* VENSTRE: BILDE, TID, PORSJONER, VURDERING OG KILDE */} +
-
-
-
- - {/* BESKRIVELSE */} - -