All files / pages AdminEditAnnouncementsPage.jsx

100% Statements 84/84
100% Branches 9/9
100% Functions 5/5
100% Lines 84/84

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 103 104 105 106 1071x 1x 1x 1x 1x 1x 1x 1x   1x 6x 2x 2x 6x   1x 18x 18x   18x 18x 18x 18x 18x 18x 18x 18x 18x 18x     18x 18x 18x 18x 18x 18x 18x 18x 18x 18x 18x   18x   18x 3x 3x 3x 3x 3x 3x 3x 3x 3x   3x 3x 3x 3x     3x 3x 3x 3x 3x 3x   18x 2x 2x 2x   2x 2x   18x 18x 18x   18x 2x 2x   18x 4x 4x   18x   18x 18x 18x 18x 18x 18x 18x 18x 18x           18x  
import React from "react";
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import AnnouncementForm from "main/components/Announcement/AnnouncementForm";
import { Navigate, useParams } from "react-router";
import { toast } from "react-toastify";
import { useQueryClient } from "react-query";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toBackendDateTime } from "main/utils/announcementUtils";
 
const nonBlankParam = (params, key, value) => {
  if (value) {
    params[key] = value;
  }
};
 
export default function AdminEditAnnouncementsPage() {
  const { commonsId, id } = useParams();
  const queryClient = useQueryClient();
 
  // 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=${id}`],
    {
      method: "GET",
      url: "/api/announcements/getbyid",
      params: {
        id,
      },
    },
    undefined,
    { refetchOnMount: "always" },
  );
  // Stryker restore all
 
  const objectToAxiosParams = (updatedAnnouncement) => {
    const params = {
      id,
      commonsId,
      announcementText: updatedAnnouncement.announcementText,
    };
    nonBlankParam(
      params,
      "startDate",
      toBackendDateTime(updatedAnnouncement.startDate),
    );
    nonBlankParam(
      params,
      "endDate",
      toBackendDateTime(updatedAnnouncement.endDate),
    );
 
    return {
      url: "/api/announcements/put",
      method: "PUT",
      params,
    };
  };
 
  const onSuccess = () => {
    toast(`Announcement updated - id: ${id}`);
    queryClient.invalidateQueries(
      `/api/announcements/getbycommonsid?commonsId=${commonsId}`,
    );
    queryClient.invalidateQueries(`/api/announcements/getbyid?id=${id}`);
  };
 
  // Stryker disable all
  const mutation = useBackendMutation(objectToAxiosParams, { onSuccess });
  // Stryker restore all
 
  const submitAction = async (data) => {
    mutation.mutate(data);
  };
 
  if (mutation.isSuccess) {
    return <Navigate to={`/admin/announcements/${commonsId}`} />;
  }
 
  const commonsName = commonsPlus?.commons.name;
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Announcement for Commons {commonsName}</h1>
        {announcement && (
          <AnnouncementForm
            initialContents={announcement}
            submitAction={submitAction}
            buttonLabel="Update"
          />
        )}
      </div>
    </BasicLayout>
  );
}