import React, { useContext, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import useDeepCompareEffect from 'use-deep-compare-effect';
import { ExpandableSection, SelectOption } from '@patternfly/react-core';
import { translate as __ } from 'foremanReact/common/I18n';
import { STATUS } from 'foremanReact/constants';
import getContentViews from '../../ContentViewsActions';
import { selectContentViewError, selectContentViews, selectContentViewStatus } from '../../ContentViewSelectors';
import CVDeleteContext from '../CVDeleteContext';
import EnvironmentPaths from '../../components/EnvironmentPaths/EnvironmentPaths';
import AffectedActivationKeys from '../../Details/Versions/Delete/affectedActivationKeys';
import ContentViewSelect from '../../components/ContentViewSelect/ContentViewSelect';
import { getCVPlaceholderText, shouldDisableCVSelect } from '../../components/ContentViewSelect/helpers';
const CVDeletionReassignActivationKeysForm = () => {
const dispatch = useDispatch();
const contentViewsInEnvResponse = useSelector(state => selectContentViews(state, 'keys'));
const contentViewsInEnvStatus = useSelector(state => selectContentViewStatus(state, 'keys'));
const contentViewsInEnvError = useSelector(state => selectContentViewError(state, 'keys'));
const cvInEnvLoading = contentViewsInEnvStatus === STATUS.PENDING;
const [cvSelectOpen, setCVSelectOpen] = useState(false);
const [cvSelectOptions, setCvSelectionOptions] = useState([]);
const [showActivationKeys, setShowActivationKeys] = useState(false);
const {
currentStep, selectedEnvForAK, cvEnvironments, cvId,
setSelectedEnvForAK, selectedCVForAK, setSelectedCVNameForAK, setSelectedCVForAK,
} = useContext(CVDeleteContext);
useDeepCompareEffect(
() => {
if (selectedEnvForAK.length) {
dispatch(getContentViews({
environment_id: selectedEnvForAK[0].id,
include_default: true,
full_result: true,
}, 'keys'));
}
setCVSelectOpen(false);
},
[selectedEnvForAK, dispatch, setCVSelectOpen],
);
useDeepCompareEffect(() => {
const { results = [] } = contentViewsInEnvResponse;
const contentViewEligible = cv => Number(cv.id) !== Number(cvId);
if (!cvInEnvLoading && results && selectedEnvForAK.length) {
setCvSelectionOptions(results.map(cv => ((contentViewEligible(cv)) ?
(
{cv.name}
) : null)).filter(n => n));
}
if (!cvInEnvLoading && results && selectedCVForAK &&
results.filter(cv => cv.id === selectedCVForAK && contentViewEligible(cv)).length === 0) {
setSelectedCVForAK(null);
setSelectedCVNameForAK(null);
}
}, [contentViewsInEnvResponse, contentViewsInEnvStatus, currentStep,
contentViewsInEnvError, selectedEnvForAK, setSelectedCVForAK, setSelectedCVNameForAK,
cvInEnvLoading, selectedCVForAK, cvId]);
const fetchSelectedCVName = (id) => {
const { results } = contentViewsInEnvResponse ?? { };
return results?.filter(cv => cv.id === id)[0]?.name;
};
const onClear = () => {
setSelectedCVForAK(null);
setSelectedCVNameForAK(null);
};
const onSelect = (_event, selection) => {
setSelectedCVForAK(selection);
setSelectedCVNameForAK(fetchSelectedCVName(selection));
setCVSelectOpen(false);
};
const placeholderText = getCVPlaceholderText({
contentSourceId: null,
environments: selectedEnvForAK,
contentViewsStatus: contentViewsInEnvStatus,
cvSelectOptions,
});
const disableCVSelect = shouldDisableCVSelect({
contentSourceId: null,
environments: selectedEnvForAK,
contentViewsStatus: contentViewsInEnvStatus,
cvSelectOptions,
});
return (
<>
setCVSelectOpen(isExpanded)}
placeholderText={placeholderText}
>
{cvSelectOptions}
setShowActivationKeys(expanded)}
isExpanded={showActivationKeys}
>
>
);
};
export default CVDeletionReassignActivationKeysForm;