@e-group/hooks
Version: 
eGroup team react-hooks that share across projects.
50 lines (43 loc) • 1.47 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import { useEffect, useState } from 'react';
import { Map } from '@e-group/immutable';
import { useDispatch, useSelector } from 'react-redux';
import { hasSubmitSucceeded, getFormValues, reset // @ts-ignore
, submit } from 'redux-form/immutable';
export default function makeEditableFieldUtils(FORM) {
  const successSelector = state => hasSubmitSucceeded(FORM)(state);
  const valueSelector = state => getFormValues(FORM)(state) || Map();
  return function useEditableFieldUtils() {
    const dispatch = useDispatch();
    const _useState = useState({}),
          _useState2 = _slicedToArray(_useState, 2),
          afterSubmitActions = _useState2[0],
          setAfterSubmitActions = _useState2[1];
    const submitSucceeded = useSelector(successSelector);
    const formValues = useSelector(valueSelector);
    useEffect(() => {
      if (submitSucceeded && afterSubmitActions.closeEditing) {
        afterSubmitActions.closeEditing();
      }
    }, [afterSubmitActions, submitSucceeded]);
    const handleSave = (e, {
      closeEditing
    }) => {
      dispatch(submit(FORM));
      setAfterSubmitActions({
        closeEditing
      });
    };
    const handleClose = () => {
      dispatch(reset(FORM));
    };
    return {
      formValues: formValues,
      afterSubmitActions,
      setAfterSubmitActions,
      handleClose,
      handleSave,
      submitSucceeded
    };
  };
}