import React, { useContext, useEffect, useState } from 'react'; import { withI18n } from '@lingui/react'; import { t, Plural } from '@lingui/macro'; import { arrayOf, func } from 'prop-types'; import { Button, DropdownItem, Tooltip } from '@patternfly/react-core'; import { KebabifiedContext } from '../../contexts/Kebabified'; import { isJobRunning } from '../../util/jobs'; import AlertModal from '../AlertModal'; import { Job } from '../../types'; function cannotCancelBecausePermissions(job) { return ( !job.summary_fields.user_capabilities.start && isJobRunning(job.status) ); } function cannotCancelBecauseNotRunning(job) { return !isJobRunning(job.status); } function JobListCancelButton({ i18n, jobsToCancel, onCancel }) { const { isKebabified, onKebabModalChange } = useContext(KebabifiedContext); const [isModalOpen, setIsModalOpen] = useState(false); const numJobsToCancel = jobsToCancel.length; const handleCancelJob = () => { onCancel(); toggleModal(); }; const toggleModal = () => { setIsModalOpen(!isModalOpen); }; useEffect(() => { if (isKebabified) { onKebabModalChange(isModalOpen); } }, [isKebabified, isModalOpen, onKebabModalChange]); const renderTooltip = () => { const cannotCancelPermissions = jobsToCancel .filter(cannotCancelBecausePermissions) .map(job => job.name); const cannotCancelNotRunning = jobsToCancel .filter(cannotCancelBecauseNotRunning) .map(job => job.name); const numJobsUnableToCancel = cannotCancelPermissions.concat( cannotCancelNotRunning ).length; if (numJobsUnableToCancel > 0) { return (