diff --git a/public/background.png b/public/background.png new file mode 100644 index 0000000..3014c51 Binary files /dev/null and b/public/background.png differ diff --git a/src/components/add-movie-form/add-movie-form.tsx b/src/components/add-movie-form/add-movie-form.tsx new file mode 100644 index 0000000..c396622 --- /dev/null +++ b/src/components/add-movie-form/add-movie-form.tsx @@ -0,0 +1,26 @@ +import MovieForm from '../movie-form/movie-form'; +import Dialog from '../dialog/dialog'; +import React from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useMovieService } from '../../services'; +import { Movie } from '../../models'; + +export default function AddMovieFormDialog() { + const { addMovie } = useMovieService(); + const navigate = useNavigate(); + + const handleAdd = (addedMovie: Movie) => { + addMovie(addedMovie); + closeDialog() + } + + const closeDialog = () => { + navigate('/'); + } + + return <> + + + + +} \ No newline at end of file diff --git a/src/components/edit-movie-form/edit-movie-form.tsx b/src/components/edit-movie-form/edit-movie-form.tsx new file mode 100644 index 0000000..26af95c --- /dev/null +++ b/src/components/edit-movie-form/edit-movie-form.tsx @@ -0,0 +1,39 @@ +import MovieForm from '../movie-form/movie-form'; +import Dialog from '../dialog/dialog'; +import React, { useEffect, useState } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; +import { useMovieService } from '../../services'; +import { Movie } from '../../models'; + +export default function EditMovieFormDialog() { + const { movieId } = useParams(); + const [ movie, setMovie] = useState(null); + const { loading, getMovie, editMovie } = useMovieService(); + const navigate = useNavigate(); + + useEffect(() => { + if(movieId) { + getMovie(movieId).then( + movie => setMovie(movie), + ) + } + }, [movieId]) + + const handleEdit = (editedMovie: Movie) => { + editMovie(editedMovie); + closeDialog(); + } + + const closeDialog = () => { + navigate('/'); + } + + return <> + { loading + ? + : + + + } + +} \ No newline at end of file diff --git a/src/components/movie-form/movie-form.tsx b/src/components/movie-form/movie-form.tsx index c8fbf8c..b1e8a2e 100644 --- a/src/components/movie-form/movie-form.tsx +++ b/src/components/movie-form/movie-form.tsx @@ -1,31 +1,23 @@ import React from 'react'; import { useForm } from 'react-hook-form'; +import { Movie } from '../../models'; import './movie-form.scss'; -interface MovieInfo { - title: string; - movieUrl: string; - genre: string; - overview: string; - releaseDate: string; - rating: string; - timing: string; -} - export interface MovieFormProps { - initialData?: MovieInfo; - onSubmit: (data: MovieInfo) => void; + initialData?: Movie; + onSubmit: (data: Movie) => void; } export default function MovieForm({ initialData, onSubmit }: MovieFormProps) { - const { register, handleSubmit, formState: { errors }, reset } = useForm({ defaultValues: initialData }); + const { register, handleSubmit, formState: { errors }, reset } = useForm({ defaultValues: initialData }); + console.log('initialData =', initialData) return (
- - {errors.title &&

This field is required

} + + {errors.movieName &&

This field is required

}
@@ -36,8 +28,8 @@ export default function MovieForm({ initialData, onSubmit }: MovieFormProps) {
- - {errors.movieUrl &&

This field is required

} + + {errors.imageUrl &&

This field is required

}
@@ -48,24 +40,24 @@ export default function MovieForm({ initialData, onSubmit }: MovieFormProps) {
- - {errors.genre &&

This field is required

} + {errors.genres &&

This field is required

}
- - {errors.timing &&

This field is required

} + + {errors.duration &&

This field is required

}
-