All files / components/PersonalSchedules PersonalScheduleForm.js

100% Statements 9/9
100% Branches 9/9
100% Functions 2/2
100% Lines 9/9

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                          34x   34x 34x   34x             34x         34x 34x       34x                                                                                                                                               1x                      
import React, { useState } from 'react'
import { Button, Form } from 'react-bootstrap';
import { useForm } from 'react-hook-form'
import { useNavigate } from 'react-router-dom'
import SingleQuarterDropdown from '../Quarters/SingleQuarterDropdown';
import { quarterRange } from 'main/utils/quarterUtilities';
 
import { useSystemInfo } from "main/utils/systemInfo";
 
 
 
function PersonalScheduleForm({ initialPersonalSchedule, submitAction, buttonLabel = "Create" }) {
 
    const { data: systemInfo } = useSystemInfo();
    // Stryker disable OptionalChaining
    const startQtr = systemInfo?.startQtrYYYYQ || "20211";
    const endQtr = systemInfo?.endQtrYYYYQ || "20214";
    // Stryker enable OptionalChaining
    const quarters = quarterRange(startQtr, endQtr);
 
    // Stryker disable all
    const {
        register,
        formState: { errors },
        handleSubmit,
    } = useForm(
        { defaultValues: initialPersonalSchedule || {}, }
    );
    // Stryker enable all
 
    const navigate = useNavigate();
    const [quarter, setQuarter] = useState({
        quarters: quarters
    }.quarters[0]);
 
    return (
 
        <Form onSubmit={handleSubmit(submitAction)}>
 
            {initialPersonalSchedule && (
                <Form.Group className="mb-3" >
                    <Form.Label htmlFor="id">Id</Form.Label>
                    <Form.Control
                        data-testid="PersonalScheduleForm-id"
                        id="id"
                        type="text"
                        {...register("id")}
                        value={initialPersonalSchedule.id}
                        disabled
                    />
                </Form.Group>
            )}
 
            <Form.Group className="mb-3" >
                <Form.Label htmlFor="name">Name</Form.Label>
                <Form.Control
                    data-testid="PersonalScheduleForm-name"
                    id="name"
                    type="text"
                    isInvalid={Boolean(errors.name)}
                    {...register("name", {
                        required: "Name is required.",
                        maxLength : {
                            value: 15,
                            message: "Max length 15 characters"
                        }
                    })}
                />
                <Form.Control.Feedback type="invalid">
                    {errors.name?.message}
                </Form.Control.Feedback>
            </Form.Group>
 
            <Form.Group className="mb-3" >
                <Form.Label htmlFor="description">Description</Form.Label>
                <Form.Control
                    data-testid="PersonalScheduleForm-description"
                    id="description"
                    type="text"
                    isInvalid={Boolean(errors.description)}
                    {...register("description", {
                        required: "Description is required."
                    })}
                />
                <Form.Control.Feedback type="invalid">
                    {errors.description?.message}
                </Form.Control.Feedback>
            </Form.Group>
            <Form.Group className="mb-3" data-testid="PersonalScheduleForm-quarter">
                
                <SingleQuarterDropdown
                    quarter={quarter}
                    setQuarter={setQuarter} 
                    controlId={"PersonalScheduleForm-quarter"}
                    label={"Quarter"}
                    quarters={quarters}/>
            </Form.Group>
 
 
            <Button
                type="submit"
                data-testid="PersonalScheduleForm-submit"
            >
                {buttonLabel}
            </Button>
            <Button
                variant="Secondary"
                onClick={() => navigate(-1)}
                data-testid="PersonalScheduleForm-cancel"
            >
                Cancel
            </Button>
 
        </Form>
 
    )
}
 
export default PersonalScheduleForm;