All files / pages AdminEditAnnouncementsPage.jsx

100% Statements 83/83
100% Branches 13/13
100% Functions 4/4
100% Lines 83/83

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 1031x 1x 1x 1x 1x 1x 1x 1x   1x 22x   22x 22x 22x 22x 22x 22x 22x 22x 22x 22x   22x 22x 22x 22x 22x 22x 22x 22x 22x   22x   22x   22x 7x 7x 7x 7x 7x 7x 7x 7x 7x 4x 4x 7x 7x 7x 7x 7x 7x   22x 3x 3x   3x 3x 3x 3x 3x 3x 3x 3x     3x   22x 22x 22x 22x 22x 22x   22x   22x 2x 2x   22x 2x 2x   19x 19x 19x 19x 19x 19x 19x       19x   1x  
import React from "react";
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import AnnouncementForm from "main/components/Announcement/AnnouncementForm";
import { Navigate } from "react-router";
import { toast } from "react-toastify";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { datetimeLocalToIsoDateTime } from "main/utils/announcementUtils";
import { useParams } from "react-router";
 
const AdminEditAnnouncementsPage = () => {
  const { commonsId, announcementId } = useParams();
 
  // Stryker disable all
  const { data: commonsPlus } = useBackend(
    [`/api/commons/plus?id=${commonsId}`],
    {
      method: "GET",
      url: "/api/commons/plus",
      params: {
        id: commonsId,
      },
    },
  );
  const { data: announcement } = useBackend(
    [`/api/announcements/getbyid?id=${announcementId}`],
    {
      method: "GET",
      url: "/api/announcements/getbyid",
      params: {
        id: announcementId,
      },
    },
  );
  // Stryker restore all
 
  const commonsName = commonsPlus?.commons.name;
 
  const objectToAxiosParams = (editedAnnouncement) => {
    const idToUse = editedAnnouncement?.id ?? announcementId;
    const endDate = editedAnnouncement?.endDate;
    const params = {
      id: idToUse,
      commonsId,
      startDate: datetimeLocalToIsoDateTime(editedAnnouncement?.startDate),
      announcementText: editedAnnouncement?.announcementText,
    };
    if (endDate) {
      params.endDate = datetimeLocalToIsoDateTime(endDate);
    }
    return {
      url: "/api/announcements/put",
      method: "PUT",
      params,
    };
  };
 
  const onSuccess = (editedAnnouncement) => {
    toast(
      <div>
        Announcement successfully edited!
        <br />
        {`commonsId: ${editedAnnouncement.id}`}
        <br />
        {`startDate: ${editedAnnouncement.startDate}`}
        <br />
        {`endDate: ${editedAnnouncement.endDate}`}
        <br />
        {`announcementText: ${editedAnnouncement.announcementText}`}
      </div>,
    );
  };
 
  // Stryker disable all
  const mutation = useBackendMutation(
    objectToAxiosParams,
    { onSuccess },
    // Stryker disable next-line all : hard to set up test for caching
    [`/api/announcements?id=${announcementId}`],
  );
  // Stryker restore all
 
  const submitAction = async (data) => {
    mutation.mutate(data);
  };
 
  if (mutation.isSuccess) {
    return <Navigate to={`/admin/announcements/${commonsId}`} />;
  }
 
  return (
    <BasicLayout>
      <h2>Edit Announcement for Commons {commonsName}</h2>
      <AnnouncementForm
        initialContents={announcement}
        submitAction={submitAction}
        buttonLabel="Update"
      />
    </BasicLayout>
  );
};
 
export default AdminEditAnnouncementsPage;