import classnames from 'classnames'; import { isEmpty } from 'lodash'; import React from 'react'; import { RelativeTimestamp } from '../../RelativeTimestamp'; import { VersionOperationIcon } from './VersionOperation'; import { constraintsManager } from '../../constraints/registry'; import type { FetchVersionQueryVariables } from '../../graphql/graphql-sdk'; import { FetchVersionDocument, useRestartConstraintEvaluationMutation, useUpdateConstraintMutation, } from '../../graphql/graphql-sdk'; import { CollapsibleSection, useApplicationContextSafe } from '../../../presentation'; import type { ArtifactVersionProps, QueryConstraint } from '../types'; import { getConstraintsStatusSummary } from './utils'; import { useLogEvent } from '../../utils/logging'; import { useNotifyOnError } from '../../utils/useNotifyOnError.hook'; import { Spinner } from '../../../widgets'; import './Constraints.less'; interface IConstraintContentProps { constraint: QueryConstraint; versionProps: ArtifactVersionProps; } const ConstraintContent = ({ constraint, versionProps }: IConstraintContentProps) => { const description = constraintsManager.renderDescription(constraint); const actions = constraintsManager.getActions(constraint)?.sort((action) => (action.pass ? -1 : 1)); // positive actions first const application = useApplicationContextSafe(); const logEvent = useLogEvent('ArtifactConstraints', 'UpdateStatus'); const refetchVariables: FetchVersionQueryVariables = { appName: application.name, versions: [versionProps.version] }; const refetchQueries = [{ query: FetchVersionDocument, variables: refetchVariables }]; const showRestartButton = constraintsManager.isRestartVisible(constraint); const baseRequestProps = { application: application.name, environment: versionProps.environment, version: versionProps.version, reference: versionProps.reference, type: constraint.type, }; const [ updateConstraint, { loading: isUpdatingConstraint, error: updateConstraintError }, ] = useUpdateConstraintMutation({ refetchQueries }); const [ restartConstraint, { loading: isRestartingConstraint, error: restartConstraintError }, ] = useRestartConstraintEvaluationMutation({ variables: { payload: baseRequestProps }, refetchQueries, }); useNotifyOnError({ key: 'updateConstraintError', content: `Failed to update constraint`, error: updateConstraintError, }); useNotifyOnError({ key: 'restartConstraintError', content: `Failed to restart constraint`, error: restartConstraintError, }); return (