All files / pages AdminCreateAnnouncementsPage.jsx

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

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 791x 1x 1x 1x 1x 1x 1x   1x 6x 2x 2x 6x   1x 12x   12x 12x 12x 12x 12x 12x 12x 12x 12x 12x   12x   12x 3x 3x 3x 3x 3x 3x 3x 3x   3x   3x 3x 3x 3x 3x 3x   12x 2x 2x   12x 12x 12x 12x 12x   12x 2x 2x   12x 2x 2x   12x   12x 12x 12x 12x 12x       12x  
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 { 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 AdminCreateAnnouncementsPage() {
  const { commonsId } = useParams();
 
  // Stryker disable all
  const { data: commonsPlus } = useBackend(
    [`/api/commons/plus?id=${commonsId}`],
    {
      method: "GET",
      url: "/api/commons/plus",
      params: {
        id: commonsId,
      },
    },
  );
  // Stryker restore all
 
  const objectToAxiosParams = (announcement) => {
    const params = {
      commonsId,
      announcementText: announcement.announcementText,
    };
    nonBlankParam(
      params,
      "startDate",
      toBackendDateTime(announcement.startDate),
    );
    nonBlankParam(params, "endDate", toBackendDateTime(announcement.endDate));
 
    return {
      url: "/api/announcements/post",
      method: "POST",
      params,
    };
  };
 
  const onSuccess = (announcement) => {
    toast(`Announcement created - id: ${announcement.id}`);
  };
 
  // Stryker disable all
  const mutation = useBackendMutation(objectToAxiosParams, { onSuccess }, [
    `/api/announcements/getbycommonsid?commonsId=${commonsId}`,
  ]);
  // 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>Create Announcement for Commons {commonsName}</h1>
        <AnnouncementForm submitAction={submitAction} />
      </div>
    </BasicLayout>
  );
}