FLASH SUCCESSES (ALERTS)

 WE ADD STYLING TO SUCCESS FLASH MESSAGES.

WE CREATE A NEW FILE IN INCLUDES(VIEWS FOLDER)- FLASH.EJS

FLASH.EJS

<% if(success.length){ %>
<div class="alert alert-success alert-dismissible fade show col-6 offset-3" role="alert">
  <%=success%><button
    type="button"
    class="btn-close"
    data-bs-dismiss="alert"
    aria-label="Close"
  ></button>
</div>
<%} %>

HERE,SUCCESS IS AN ARRAY.     res.locals.success = req.flash("success");

SO,WHENEVER SUCCESS.LENGTH IS TRUE AN ALERT IS GENERATED.

IT IS REQUIRED IN boilerplate.ejs

  <%- include("../includes/navbar.ejs") %>
    <div class="container">
      <%- include("../includes/flash.ejs") %>

      <%- body %></div>
    <%- include("../includes/footer.ejs") %>

LISTINGS.JS

FLASH MESSAGES ARE ADDED ,WHENEVER A NEW LISTING IS CREATED, AND WHEN A LISTING IS UPDATED OR DELETED.

// NEW ROUTE
router.get("/new", (req, res) => {
  res.render("listings/new.ejs");
});
router.post(
  "/",
  ValidateListing,
  wrapAsync(async (req, res, next) => {
    const newListing = new Listing(req.body.listing);

    await newListing.save();
    req.flash("success", "New Listing Added!");
    res.redirect("/listings");
  })
);// UPDATE ROUTE
router.put(
  "/:id",
  ValidateListing,
  wrapAsync(async (req, res) => {
    if (!req.body.listing) {
      throw new ExpressError(400, "send valid data!");
    }
    let { id } = req.params;
    await Listing.findByIdAndUpdate(id, { ...req.body.listing });
    req.flash("success", "Updated Successful!");

    res.redirect(`/listings/${id}`);
  })
);

// DELETE ROUTE
router.delete(
  "/:id",
  wrapAsync(async (req, res) => {
    let { id } = req.params;
    let deletedList = await Listing.findByIdAndDelete(id);
    console.log(deletedList);
    req.flash("success", "Listing Deleted!");

    res.redirect("/listings");
  })
);

REVIEW.JS

ALERTS ARE GENERATED WHEN A REVIEW IS CREATED OR DELETED.


// REVIEWS
router.post(
  "/",
  ValidateReview,
  wrapAsync(async (req, res) => {
    let { id } = req.params;
    let listing = await Listing.findById(id);
    let newRev = new Review(req.body.review);
    console.log(newRev);

    await newRev.save();
    listing.reviews.push(newRev);
    await listing.save();

    console.log("review saved");
    req.flash("success", "New Review Added!");

    res.redirect(`/listings/${id}`);
  })
);

// DELETE REVIEW
router.delete(
  "/:reviewId",
  wrapAsync(async (req, res) => {
    let { id, reviewId } = req.params;

    await Listing.findByIdAndUpdate(id, { $pull: { reviews: reviewId } });
    await Review.findByIdAndDelete(reviewId);
    req.flash("success", "Review Deleted!");

    res.redirect(`/listings/${id}`);
  })
);










Comments