All files / src/sections/PayBuilder/Checkout/components ConfirmationSection.tsx

100% Statements 10/10
100% Branches 2/2
100% Functions 3/3
100% Lines 10/10

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                    45x 22x 22x 22x 22x 22x   22x                           22x             44x                         4x                                                    
import { Stack } from "@mui/material";
import { CheckCircleIcon } from "@phosphor-icons/react";
import GiveText from "@shared/Text/GiveText";
import CheckoutDetailsSectionItem from "./CheckoutDetailsSectionItem";
import { Controller, useFormContext } from "react-hook-form";
import { usePayBuilderForm } from "@sections/PayBuilder/provider/PayBuilderFormProvider";
import { GiveInput } from "@shared/GiveInputs/GiveInput";
import { FormDataType } from "@sections/PayBuilder/utils";
import { MAX_CONFIRMATION_MESSAGE_LEN } from "../consts";
 
const ConfirmationSection = () => {
  const methods = useFormContext();
  const { methods: leftSidepanelMethods } = usePayBuilderForm();
  const checkoutValues = leftSidepanelMethods.watch().Checkout;
  const isThankYouEnabled = checkoutValues.thankYouMessage.render;
  const isReceiptMessageEnabled = checkoutValues.receiptMessage.render;
 
  const messageSections = [
    {
      name: "thankYouMessage",
      condition: isThankYouEnabled,
      label: "Custom Thank You Message",
    },
    {
      name: "receiptMessage",
      condition: isReceiptMessageEnabled,
      label: "Custom Message for Receipt",
      isLastItem: true,
    },
  ];
 
  return (
    <Stack gap="12px">
      <Stack direction="row" spacing={2}>
        <CheckCircleIcon size={24} />
        <GiveText variant="bodyL">Confirmation</GiveText>
      </Stack>
      {messageSections.map(({ name, condition, label, isLastItem }, index) => {
        return (
          <CheckoutDetailsSectionItem
            key={index}
            label={label}
            name={name as keyof FormDataType["Checkout"]}
            isLastItem={isLastItem}
            optionalInput={
              condition ? (
                <Stack paddingLeft="28px">
                  <Controller
                    control={methods.control}
                    name={`Checkout.${name}.optionalMessage`}
                    render={({ field: { onChange, value } }) => {
                      return (
                        <GiveInput
                          name={`${name}.optionalMessage`}
                          value={value}
                          onChange={onChange}
                          maxLength={MAX_CONFIRMATION_MESSAGE_LEN}
                          displayCounter
                          multiline
                          rows={6}
                        />
                      );
                    }}
                  />
                </Stack>
              ) : (
                <></>
              )
            }
          />
        );
      })}
    </Stack>
  );
};
 
export default ConfirmationSection;