Skip to content

Commit 1ad0353

Browse files
committed
Require approval from EarlyConversations to have engagements
1 parent b7e5c26 commit 1ad0353

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

src/components/project/workflow/project-workflow.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import {
1212
BackToActive,
1313
ResolveParams,
1414
} from './transitions/dynamic-step';
15-
import { ImplicitlyNotifyTeamMembers } from './transitions/enhancers';
15+
import {
16+
ApprovalFromEarlyConversationsRequiresEngagements,
17+
ImplicitlyNotifyTeamMembers,
18+
} from './transitions/enhancers';
1619
import { EmailDistro, FinancialApprovers } from './transitions/notifiers';
1720

1821
// This also controls the order shown in the UI.
@@ -37,6 +40,7 @@ export const ProjectWorkflow = defineWorkflow({
3740
context: defineContext<ResolveParams>,
3841
transitionEnhancers: [
3942
ImplicitlyNotifyTeamMembers, //
43+
ApprovalFromEarlyConversationsRequiresEngagements,
4044
],
4145
})({
4246
// In Development

src/components/project/workflow/transitions/conditions.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ export const IsMultiplication: Condition = {
2323
},
2424
};
2525

26+
export const HasEngagement: Condition = {
27+
description: 'Has an engagement',
28+
resolve({ project }) {
29+
return {
30+
status: project.engagementTotal > 0 ? 'ENABLED' : 'DISABLED',
31+
disabledReason: `Create an engagement first`,
32+
};
33+
},
34+
};
35+
2636
export const RequireOngoingEngagementsToBeFinalizingCompletion: Condition = {
2737
description:
2838
'All engagements must be Finalizing Completion or in a terminal status',

src/components/project/workflow/transitions/enhancers.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TransitionEnhancer } from '../../../workflow/define-workflow';
22
import { ProjectStep as Step } from '../../dto';
3+
import { HasEngagement } from './conditions';
34
import { ResolveParams } from './dynamic-step';
45
import { TeamMembers } from './notifiers';
56

@@ -9,3 +10,13 @@ export const ImplicitlyNotifyTeamMembers: Enhancer = (transition) => ({
910
...transition,
1011
notifiers: transition.notifiers.concat(TeamMembers),
1112
});
13+
14+
export const ApprovalFromEarlyConversationsRequiresEngagements: Enhancer = (
15+
transition,
16+
) =>
17+
transition.type === 'Approve' && transition.from?.has('EarlyConversations')
18+
? {
19+
...transition,
20+
conditions: transition.conditions.concat(HasEngagement),
21+
}
22+
: transition;

0 commit comments

Comments
 (0)