Katello/katello

View on GitHub
webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js

Summary

Maintainability
B
4 hrs
Test Coverage
import React, { useState, useEffect, useContext } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useHistory } from 'react-router-dom';
import { STATUS } from 'foremanReact/constants';
import useDeepCompareEffect from 'use-deep-compare-effect';
import { translate as __ } from 'foremanReact/common/I18n';
import { selectRemoveCVVersionStatus } from '../../../ContentViewDetailSelectors';
import getContentViewDetails, { removeContentViewVersion } from '../../../ContentViewDetailActions';
import Loading from '../../../../../../components/Loading';
import DeleteContext from '../DeleteContext';

const CVVersionDeleteFinish = () => {
  const {
    cvId, versionIdToRemove, versionEnvironments,
    setIsOpen, selectedEnvSet,
    selectedCVForAK, selectedEnvForAK, selectedCVForHosts,
    selectedEnvForHost, affectedActivationKeys, affectedHosts,
    deleteFlow, removeDeletionFlow,
  } = useContext(DeleteContext);

  const dispatch = useDispatch();
  const removeCVVersionStatus = useSelector(state =>
    selectRemoveCVVersionStatus(state, versionIdToRemove, versionEnvironments));
  const [removeDispatched, setRemoveDispatched] = useState(false);
  const selectedEnv = versionEnvironments.filter(env => selectedEnvSet.has(env.id));
  const { push, location: { pathname } } = useHistory();

  useEffect(() => {
    if (removeCVVersionStatus === STATUS.ERROR) {
      setIsOpen(false);
    }
  }, [setIsOpen, removeCVVersionStatus]);


  useDeepCompareEffect(() => {
    if (!removeDispatched) {
      setRemoveDispatched(true);

      const environmentIdParams = (deleteFlow || removeDeletionFlow) ?
        versionEnvironments.map(env => env.id) :
        selectedEnv.map(env => env.id);

      let params = {
        id: cvId,
        environment_ids: environmentIdParams,
      };

      if (affectedActivationKeys) {
        params = {
          ...params,
          key_content_view_id: selectedCVForAK,
          key_environment_id: selectedEnvForAK[0].id,
        };
      }

      if (affectedHosts) {
        params = {
          ...params,
          system_content_view_id: selectedCVForHosts,
          system_environment_id: selectedEnvForHost[0].id,
        };
      }

      if (deleteFlow || removeDeletionFlow) {
        params = {
          ...params,
          content_view_version_ids: [versionIdToRemove],
        };
      }

      dispatch(removeContentViewVersion(
        cvId,
        versionIdToRemove,
        versionEnvironments,
        params,
        () => {
          dispatch(getContentViewDetails(cvId));
          if (pathname !== '/versions') push('/versions');
        },
      ));
    }
  }, [affectedActivationKeys, affectedHosts, cvId, deleteFlow,
    dispatch, pathname, push, removeDeletionFlow, removeDispatched,
    selectedCVForAK, selectedCVForHosts, selectedEnv, selectedEnvForAK,
    selectedEnvForHost, setIsOpen, versionEnvironments, versionIdToRemove]);

  return <Loading loadingText={__('Please wait while the task starts..')} />;
};

export default CVVersionDeleteFinish;