How can fix notification problem in axios search method?

Viewed 20

I have such a problem. I want to receive a notification after entering a keyword in the input and submitting. If there is a movie, then the movies should be listed, if there is not movies, let the toast notification appear. But the problem, even movies there are still toast works. How can i fix it? I want only when there are no movies for example search results doesnt find any film that toast will come. But toast comes every moment

import React, { useState } from "react";
import axios from "axios";
import { API_KEY } from "../../utils/api";
import MovieItem from "../../components/MovieItem/MovieItem";
import { Button, Input, Form } from "antd";
import "antd/dist/antd.min.css";
import "./Search.scss";
import Loader from "../../components/Loader/Loader";
import { toast } from "react-toastify";

const Search = () => {
  const [movies, setMovies] = useState([]);
  const [searchTerm, setSearchTerm] = useState("");
  const [loading, setLoading] = useState(false);

  const fetchSearch = () => {
    setLoading(true)
    axios
      .get(
        `https://api.themoviedb.org/3/search/movie?api_key=${API_KEY}&language=en-US&query=${searchTerm}&page=1&include_adult=false`
      )
      .then((res) => res.data)
      .then((res) => {
        if (!res.errors) {
          setMovies(res.results);
          setLoading(false)
          if (movies.length === 0) {
            toast("Movies doesnt find");
          }
          setSearchTerm("");
          console.log("yes");
        } else {
          setMovies([]);
          console.log("no");
        }
      });
  };

  const handleChange = (e) => {
    setSearchTerm(e.target.value);
  };

  return (
    <>
      <div className="search">
        <div className="container">
          <div className="row">
            <div className="col-lg-12 mb-3 mt-3">
              <h2>Suggest me</h2>
            </div>
            <Form onFinish={fetchSearch}>
              <Form.Item>
                <Input
                  value={searchTerm}
                  onChange={handleChange}
                  placeholder="Search  Movies"
                />
              </Form.Item>
              <Button htmlType="submit">Search</Button>
            </Form>
          </div>
        </div>
      </div>

      <div className="movies">
        <div className="container-fluid">
          <div className="row">
          {loading
           ? 
          <Loader/>
          : movies?.map((movie, index) => (
            <div className="col-lg-3 p-3" key={index}>
            <MovieItem movie={movie} page='top_Rated'/>
          </div>
          ))}
          </div>
        </div>
      </div>

      
    </>
  );
};

export default Search;

1 Answers

Problem is solved. Res.results.length was my problem's solution

Related