All files / components/Announcement AnnouncementForm.js

100% Statements 15/15
100% Branches 11/11
100% Functions 4/4
100% Lines 15/15

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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122          44x 32x 32x 32x 32x 32x               44x                       44x   44x   44x 7x 3x     7x     44x                                                                                                                                         1x                    
import { Button, Form } from 'react-bootstrap';
import { useForm } from 'react-hook-form';
import { useNavigate } from 'react-router-dom';
 
function AnnouncementForm({ initialContents, submitAction, buttonLabel = "Create" }) {
    const getCurrentDate = () => {
        const today = new Date();
        const year = today.getFullYear();
        const month = String(today.getMonth() + 1).padStart(2, '0');
        const day = String(today.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`;
    };
 
    // Stryker disable all
    const {
        register,
        formState: { errors },
        handleSubmit,
    } = useForm({
        defaultValues: {
            startDate: initialContents?.startDate 
                ? initialContents.startDate.split("T")[0]
                : getCurrentDate(),
            endDate: initialContents?.endDate,
            announcementText: initialContents?.announcementText || "",
            ...initialContents, 
        },
    });
    // Stryker restore all 
 
    const navigate = useNavigate();
 
    const testIdPrefix = "AnnouncementForm";
 
    const onSubmit = (data) => {
        if (!data.endDate) {
            data.endDate = null;
        }
 
        submitAction(data);
    };
 
    return (
        <Form onSubmit={handleSubmit(onSubmit)}>
 
            {initialContents && (
                <Form.Group className="mb-3">
                    <Form.Label htmlFor="id">Id</Form.Label>
                    <Form.Control
                        data-testid={testIdPrefix + "-id"}
                        id="id"
                        type="text"
                        {...register("id")}
                        value={initialContents.id}
                        disabled
                    />
                </Form.Group>
            )}
 
            <Form.Group className="mb-3">
                <Form.Label htmlFor="startDate">Start Date</Form.Label>
                <Form.Control
                    data-testid={testIdPrefix + "-startDate"}
                    id="startDate"
                    type="date" 
                    isInvalid={Boolean(errors.startDate)}
                    {...register("startDate", {
                        required: "Start Date is required.", 
                    })}
                />
                <Form.Control.Feedback type="invalid">
                    {errors.startDate && 'Start Date is required.'}
                </Form.Control.Feedback>
            </Form.Group>
 
            <Form.Group className="mb-3">
                <Form.Label htmlFor="endDate">End Date</Form.Label>
                <Form.Control
                    data-testid={testIdPrefix + "-endDate"}
                    id="endDate"
                    type="date" 
                    isInvalid={Boolean(errors.endDate)}
                    {...register("endDate")}
                />
            </Form.Group>
 
            <Form.Group className="mb-3">
                <Form.Label htmlFor="announcementText">Announcement</Form.Label>
                <Form.Control
                    as="textarea"
                    data-testid={testIdPrefix + "-announcementText"}
                    id="announcementText"
                    rows={5}
                    isInvalid={Boolean(errors.announcementText)}
                    {...register("announcementText", {
                        required: "Announcement is required."
                    })}
                />
                <Form.Control.Feedback type="invalid">
                    {errors.announcementText?.message}
                </Form.Control.Feedback>
            </Form.Group>
 
            <Button
                type="submit"
                data-testid={testIdPrefix + "-submit"}
            >
                {buttonLabel}
            </Button>
            <Button
                variant="Secondary"
                onClick={() => navigate(-1)}
                data-testid={testIdPrefix + "-cancel"}
            >
                Cancel
            </Button>
 
        </Form>
    );
}
 
export default AnnouncementForm;