@nest-util/nest-crud 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/interfaces/approval-pipeline.interface.d.ts +7 -0
- package/dist/lib/interfaces/approval-pipeline.interface.d.ts.map +1 -1
- package/dist/lib/interfaces/hooks.interface.d.ts +29 -0
- package/dist/lib/interfaces/hooks.interface.d.ts.map +1 -1
- package/dist/lib/services/nest-crud.service.d.ts +4 -1
- package/dist/lib/services/nest-crud.service.d.ts.map +1 -1
- package/dist/lib/services/nest-crud.service.js +61 -7
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ApprovalHooks } from './hooks.interface';
|
|
1
2
|
/**
|
|
2
3
|
* Lifecycle of an approval status row.
|
|
3
4
|
*
|
|
@@ -99,6 +100,12 @@ export interface ApprovalPipelineConfig {
|
|
|
99
100
|
* of approval state.
|
|
100
101
|
*/
|
|
101
102
|
visibleStatuses?: readonly ApprovalStatus[];
|
|
103
|
+
/**
|
|
104
|
+
* Before/after hooks for each approval transition, mirroring the generic
|
|
105
|
+
* `CrudHooks` API. Each hook receives the approval row view and (for
|
|
106
|
+
* `after*`) the previous status.
|
|
107
|
+
*/
|
|
108
|
+
hooks?: ApprovalHooks;
|
|
102
109
|
}
|
|
103
110
|
export interface RequestModificationPayload {
|
|
104
111
|
modifications: ModificationItem[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-pipeline.interface.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/approval-pipeline.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,CAAC;IAClB,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAEtC;;;OAGG;IACH,WAAW,CAAC,EAAE,2BAA2B,CAAC;IAE1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-pipeline.interface.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/approval-pipeline.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,CAAC;IAClB,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAEtC;;;OAGG;IACH,WAAW,CAAC,EAAE,2BAA2B,CAAC;IAE1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAE5C;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ApprovalStatus, ApprovalStatusView, ModificationItem } from './approval-pipeline.interface';
|
|
2
|
+
import { OwnershipUser } from './find-mine.interface';
|
|
1
3
|
export type CrudHook<TContext = any> = (context: TContext) => Promise<any> | any;
|
|
2
4
|
export interface CrudHookConfig<TContext = any> {
|
|
3
5
|
handler: CrudHook<TContext>;
|
|
@@ -49,4 +51,31 @@ export interface TransactionConfig {
|
|
|
49
51
|
isolationLevel?: 'READ UNCOMMITTED' | 'READ COMMITTED' | 'REPEATABLE READ' | 'SERIALIZABLE';
|
|
50
52
|
timeout?: number;
|
|
51
53
|
}
|
|
54
|
+
export interface ApprovalHookContext {
|
|
55
|
+
id: number;
|
|
56
|
+
user?: OwnershipUser;
|
|
57
|
+
approval: ApprovalStatusView;
|
|
58
|
+
}
|
|
59
|
+
export interface AfterApprovalHookContext extends ApprovalHookContext {
|
|
60
|
+
previousStatus: ApprovalStatus;
|
|
61
|
+
}
|
|
62
|
+
export interface RequestModificationApprovalHookContext extends ApprovalHookContext {
|
|
63
|
+
modifications: ModificationItem[];
|
|
64
|
+
note?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface AfterRequestModificationApprovalHookContext extends RequestModificationApprovalHookContext {
|
|
67
|
+
previousStatus: ApprovalStatus;
|
|
68
|
+
}
|
|
69
|
+
export interface ApprovalHooks {
|
|
70
|
+
beforeSubmit?: CrudHookConfig<ApprovalHookContext>;
|
|
71
|
+
afterSubmit?: CrudHookConfig<AfterApprovalHookContext>;
|
|
72
|
+
beforeApprove?: CrudHookConfig<ApprovalHookContext>;
|
|
73
|
+
afterApprove?: CrudHookConfig<AfterApprovalHookContext>;
|
|
74
|
+
beforeReject?: CrudHookConfig<ApprovalHookContext>;
|
|
75
|
+
afterReject?: CrudHookConfig<AfterApprovalHookContext>;
|
|
76
|
+
beforeRequestModification?: CrudHookConfig<RequestModificationApprovalHookContext>;
|
|
77
|
+
afterRequestModification?: CrudHookConfig<AfterRequestModificationApprovalHookContext>;
|
|
78
|
+
beforeResubmit?: CrudHookConfig<ApprovalHookContext>;
|
|
79
|
+
afterResubmit?: CrudHookConfig<AfterApprovalHookContext>;
|
|
80
|
+
}
|
|
52
81
|
//# sourceMappingURL=hooks.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.interface.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/hooks.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAEjF,MAAM,WAAW,cAAc,CAAC,QAAQ,GAAG,GAAG;IAC5C,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,EAAE,UAAU;IACtD,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB,CAAC,OAAO,EAAE,UAAU;IACrD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,EAAE,UAAU;IACtD,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB,CAAC,OAAO,EAAE,UAAU;IACrD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU;IACxD,YAAY,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACxE,WAAW,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACxE,WAAW,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACjD,aAAa,CAAC,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EACX,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"hooks.interface.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/hooks.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { CursorPaginationDto } from '../dtos/cursor-pagination.dto';
|
|
|
6
6
|
import { FilterDto } from '../dtos/filter.dto';
|
|
7
7
|
import { CrudEndpoint, CrudInterface, CursorPaginationResult } from '../interfaces/crud.interface';
|
|
8
8
|
import { CursorStrategy } from '../interfaces/cursor-strategy.interface';
|
|
9
|
-
import { CrudHooks, TransactionConfig } from '../interfaces/hooks.interface';
|
|
9
|
+
import { ApprovalHooks, CrudHooks, TransactionConfig } from '../interfaces/hooks.interface';
|
|
10
10
|
import { FindMineConfig, OwnershipUser } from '../interfaces/find-mine.interface';
|
|
11
11
|
import { StatusPipelineConfig, StatusTransitionAction, StatusValue } from '../interfaces/status-pipeline.interface';
|
|
12
12
|
import { ApprovalPipelineConfig, ApprovalStatusView, ApprovalHistoryView, RequestModificationPayload } from '../interfaces/approval-pipeline.interface';
|
|
@@ -63,6 +63,7 @@ export declare class NestCrudService<Entity extends ObjectLiteral, CreateDto = P
|
|
|
63
63
|
action?: StatusTransitionAction<Entity>;
|
|
64
64
|
}>;
|
|
65
65
|
protected readonly approvalPipeline?: ApprovalPipelineConfig;
|
|
66
|
+
protected readonly approvalHooks: ApprovalHooks;
|
|
66
67
|
constructor(options: CrudServiceOptions<Entity, ResponseDto>);
|
|
67
68
|
private normalizeStatusTransitions;
|
|
68
69
|
private resolveRelations;
|
|
@@ -132,6 +133,8 @@ export declare class NestCrudService<Entity extends ObjectLiteral, CreateDto = P
|
|
|
132
133
|
private sanitizeForJsonb;
|
|
133
134
|
private loadApprovalStatus;
|
|
134
135
|
private transitionApproval;
|
|
136
|
+
private fireApprovalBeforeHook;
|
|
137
|
+
private fireApprovalAfterHook;
|
|
135
138
|
private assertTransitionAllowed;
|
|
136
139
|
private userHasPermission;
|
|
137
140
|
private applyApprovalVisibility;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nest-crud.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/nest-crud.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAe,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"nest-crud.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/nest-crud.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ let NestCrudService = class NestCrudService {
|
|
|
46
46
|
this.statusTransitions = this.normalizeStatusTransitions(options.statusPipeline.transitions);
|
|
47
47
|
}
|
|
48
48
|
this.approvalPipeline = options.approvalPipeline;
|
|
49
|
+
this.approvalHooks = options.approvalPipeline?.hooks ?? {};
|
|
49
50
|
}
|
|
50
51
|
normalizeStatusTransitions(transitions) {
|
|
51
52
|
const result = new Map();
|
|
@@ -635,20 +636,28 @@ let NestCrudService = class NestCrudService {
|
|
|
635
636
|
throw (0, nest_error_1.keyed)(common_1.HttpStatus.NOT_FOUND, nest_error_1.ErrorKey.CRUD_RESOURCE_NOT_FOUND);
|
|
636
637
|
}
|
|
637
638
|
const current = approval.status;
|
|
639
|
+
const previousStatus = current;
|
|
638
640
|
const now = new Date();
|
|
639
641
|
const userId = user?.id != null ? String(user.id) : null;
|
|
640
642
|
const reviewable = [
|
|
641
643
|
approval_pipeline_interface_1.APPROVAL_STATUS.submitted,
|
|
642
644
|
approval_pipeline_interface_1.APPROVAL_STATUS.resubmitted,
|
|
643
645
|
];
|
|
646
|
+
// Already in a reviewable/terminal state (e.g. the pipeline was
|
|
647
|
+
// configured with initialStatus: 'submitted'): no submit transition is
|
|
648
|
+
// needed, so this is a harmless no-op returning the current status. Hooks
|
|
649
|
+
// are skipped because no transition actually occurs.
|
|
650
|
+
if (action === 'submit' && current !== approval_pipeline_interface_1.APPROVAL_STATUS.draft) {
|
|
651
|
+
return this.toApprovalStatusView(approval);
|
|
652
|
+
}
|
|
653
|
+
const beforeContext = {
|
|
654
|
+
id,
|
|
655
|
+
user,
|
|
656
|
+
approval: this.toApprovalStatusView(approval),
|
|
657
|
+
};
|
|
658
|
+
await this.fireApprovalBeforeHook(action, beforeContext, modifications ?? [], note);
|
|
644
659
|
switch (action) {
|
|
645
660
|
case 'submit':
|
|
646
|
-
// Already in a reviewable/terminal state (e.g. the pipeline was
|
|
647
|
-
// configured with initialStatus: 'submitted'): no submit transition is
|
|
648
|
-
// needed, so this is a harmless no-op returning the current status.
|
|
649
|
-
if (current !== approval_pipeline_interface_1.APPROVAL_STATUS.draft) {
|
|
650
|
-
return this.toApprovalStatusView(approval);
|
|
651
|
-
}
|
|
652
661
|
approval.status = approval_pipeline_interface_1.APPROVAL_STATUS.submitted;
|
|
653
662
|
approval.requestedBy = userId;
|
|
654
663
|
break;
|
|
@@ -697,7 +706,52 @@ let NestCrudService = class NestCrudService {
|
|
|
697
706
|
break;
|
|
698
707
|
}
|
|
699
708
|
const saved = await this.getApprovalRepository().save(approval);
|
|
700
|
-
|
|
709
|
+
const afterContext = {
|
|
710
|
+
id,
|
|
711
|
+
user,
|
|
712
|
+
approval: this.toApprovalStatusView(saved),
|
|
713
|
+
previousStatus,
|
|
714
|
+
};
|
|
715
|
+
await this.fireApprovalAfterHook(action, afterContext, modifications ?? [], note);
|
|
716
|
+
return afterContext.approval;
|
|
717
|
+
}
|
|
718
|
+
async fireApprovalBeforeHook(action, context, modifications, note) {
|
|
719
|
+
switch (action) {
|
|
720
|
+
case 'submit':
|
|
721
|
+
await this.executeHook(this.approvalHooks.beforeSubmit, context);
|
|
722
|
+
break;
|
|
723
|
+
case 'approve':
|
|
724
|
+
await this.executeHook(this.approvalHooks.beforeApprove, context);
|
|
725
|
+
break;
|
|
726
|
+
case 'reject':
|
|
727
|
+
await this.executeHook(this.approvalHooks.beforeReject, context);
|
|
728
|
+
break;
|
|
729
|
+
case 'resubmit':
|
|
730
|
+
await this.executeHook(this.approvalHooks.beforeResubmit, context);
|
|
731
|
+
break;
|
|
732
|
+
case 'requestModification':
|
|
733
|
+
await this.executeHook(this.approvalHooks.beforeRequestModification, { ...context, modifications, note });
|
|
734
|
+
break;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
async fireApprovalAfterHook(action, context, modifications, note) {
|
|
738
|
+
switch (action) {
|
|
739
|
+
case 'submit':
|
|
740
|
+
await this.executeHook(this.approvalHooks.afterSubmit, context);
|
|
741
|
+
break;
|
|
742
|
+
case 'approve':
|
|
743
|
+
await this.executeHook(this.approvalHooks.afterApprove, context);
|
|
744
|
+
break;
|
|
745
|
+
case 'reject':
|
|
746
|
+
await this.executeHook(this.approvalHooks.afterReject, context);
|
|
747
|
+
break;
|
|
748
|
+
case 'resubmit':
|
|
749
|
+
await this.executeHook(this.approvalHooks.afterResubmit, context);
|
|
750
|
+
break;
|
|
751
|
+
case 'requestModification':
|
|
752
|
+
await this.executeHook(this.approvalHooks.afterRequestModification, { ...context, modifications, note });
|
|
753
|
+
break;
|
|
754
|
+
}
|
|
701
755
|
}
|
|
702
756
|
assertTransitionAllowed(action, current, allowedFrom) {
|
|
703
757
|
if (!allowedFrom.includes(current)) {
|