import React, { FC, useState, useRef, useEffect } from 'react'; import Button from '../../blocks/Button'; import Form from '../../blocks/Form'; import Textarea from '../../blocks/Textarea'; import Rating from 'react-rating'; import css from './index.module.css'; import IconStarEmptySVG from '../../assets/icons/icon-star-empty.svg'; import IconStarFullSVG from '../../assets/icons/icon-star-full.svg'; import classnames from 'classnames'; export interface FormCustomerFeedbackValues { isSolvedMatter?: boolean; technicianPerformanceRating?: number; technicianImproveWork?: string[]; technicianImproveWorkReason?: string; milaServiceRating?: number; milaServiceRatingReason?: string; } export interface FormCustomerFeedbackLabels { isSolvedMatter?: string; yes?: string; no?: string; technicianPerformanceRating?: string; unhappy?: string; happy?: string; technicianImproveWork?: string; technicianImproveWorkOptions?: { [key: string]: string }; technicianImproveWorkReason?: string; milaServiceRating?: string; leastLikely?: string; mostLikely?: string; milaServiceRatingReason?: string; thanksText?: string; feedbackButton?: string; } export interface FormCustomerFeedbackErrors { isSolvedMatter?: string; technicianPerformanceRating?: string; technicianImproveWork?: string; technicianImproveWorkReason?: string; milaServiceRating?: string; milaServiceRatingReason?: string; } export interface FormCustomerFeedbackTouched { [key: string]: unknown; } export interface FormCustomerFeedbackProps { values: FormCustomerFeedbackValues; touched: FormCustomerFeedbackTouched; errors: FormCustomerFeedbackErrors; labels: FormCustomerFeedbackLabels; setFieldValue: (field, value) => void; handleChange: (e) => void; handleBlur: (e) => void; handleSubmit: (e) => void; isSubmitting?: boolean; technician: string; status?: { msg: string; }; } const FormCustomerFeedback: FC = ({ values, errors, handleChange, handleSubmit, labels, isSubmitting, technician, setFieldValue, }) => { const [isSolvedMatter, setIsSolvedMatter] = useState(null); const inputEl = useRef(null); const [isDisabled, setDisable] = useState(true); const [rating, setRating] = useState(0); const [selectedValues, setSelectedValues] = useState([]); const [scrollToError, setScrollToError] = useState(true); const startRating = useRef(null); const [ technicianPerformanceRating, setTechnicianPerformanceRating, ] = useState(0); const ratingChanged = (newRating): void => { setTechnicianPerformanceRating(newRating); setFieldValue('technicianPerformanceRating', newRating); }; const createRatingButton = (value): JSX.Element => { value += 1; return (
  • ); }; values.technicianImproveWork = selectedValues; useEffect(() => { setDisable(Object.keys(errors).length != 0); }, [errors]); useEffect(() => { if (errors.technicianImproveWork && scrollToError) { setScrollToError(false); window.scrollTo({ top: startRating.current.offsetTop, behavior: 'smooth', }); } }, [errors.technicianImproveWork]); useEffect(() => { setFieldValue('technicianImproveWork', selectedValues); }, [selectedValues, values.technicianPerformanceRating]); return (

    {labels.isSolvedMatter}

    {labels.technicianPerformanceRating + ' ' + technician + ' ' + '?'}

    {labels.unhappy}
    {labels.happy}
    } fullSymbol={} onClick={ratingChanged} />
    {technicianPerformanceRating > 0 && ( <>
    {technicianPerformanceRating < 5 && ( <>
    {labels.technicianImproveWork}
    {errors && errors.technicianImproveWork ? (
    {errors.technicianImproveWork}
    ) : ( '' )}
    {labels.technicianImproveWorkOptions && Object.keys(labels.technicianImproveWorkOptions).length > 0 && Object.entries(labels.technicianImproveWorkOptions).map( ([key, value]) => (
    ), )}
    )}