@e-group/material-module
Version: 
EGroup Team react component modules.
64 lines (58 loc) • 2.14 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import React, { forwardRef, useEffect, useState } from 'react';
import clsx from 'clsx';
import { withStyles, createStyles } from '@material-ui/core';
import Paper from '@material-ui/core/Paper';
import usePrevious from '@e-group/hooks/usePrevious';
import SurveyContext from './SurveyContext';
const styles = () => createStyles({
  root: {
    position: 'relative'
  }
});
const Survey = /*#__PURE__*/forwardRef((props, ref) => {
  const classes = props.classes,
        className = props.className,
        data = props.data,
        onChange = props.onChange,
        selectedQuestionIdProp = props.selectedQuestionId,
        other = _objectWithoutProperties(props, ["classes", "className", "data", "onChange", "selectedQuestionId"]);
  const _useState = useState(data),
        _useState2 = _slicedToArray(_useState, 2),
        questions = _useState2[0],
        setQuestions = _useState2[1];
  const _useState3 = useState(),
        _useState4 = _slicedToArray(_useState3, 2),
        selectedQuestionId = _useState4[0],
        setSelectedQuestionId = _useState4[1];
  const prevQuestions = usePrevious(questions);
  useEffect(() => {
    if (data) {
      setQuestions(data);
    }
  }, [data]);
  useEffect(() => {
    if (onChange && JSON.stringify(questions) !== JSON.stringify(prevQuestions)) {
      onChange(questions);
    } // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [questions]);
  useEffect(() => {
    if (selectedQuestionIdProp) {
      setSelectedQuestionId(selectedQuestionIdProp);
    }
  }, [selectedQuestionIdProp]);
  return /*#__PURE__*/React.createElement(SurveyContext.Provider, {
    value: {
      questions,
      setQuestions,
      selectedQuestionId,
      setSelectedQuestionId
    }
  }, /*#__PURE__*/React.createElement(Paper, _extends({
    ref: ref,
    className: clsx(className, classes.root)
  }, other)));
});
export default withStyles(styles)(Survey);