-
Notifications
You must be signed in to change notification settings - Fork 90
/
ProcessStateUtils.ts
65 lines (50 loc) · 2.18 KB
/
ProcessStateUtils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { PredefinedActionName, ProcessStateType, Scenario } from "./types";
import {
descriptionProcessArchived,
descriptionFragment,
descriptionFragmentArchived,
unknownDescription,
unknownTooltip,
} from "./messages";
export const unknownIcon = "/assets/states/status-unknown.svg";
const fragmentIcon = "/assets/process/fragment.svg";
const archivedIcon = "/assets/process/archived.svg";
class ProcessStateUtils {
public canDeploy = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Deploy);
public canCancel = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Cancel);
public canArchive = (state: ProcessStateType): boolean => state?.allowedActions.includes(PredefinedActionName.Archive);
getStateDescription({ isArchived, isFragment }: Scenario, processState: ProcessStateType): string {
if (isArchived) {
return isFragment ? descriptionFragmentArchived() : descriptionProcessArchived();
}
if (isFragment) {
return descriptionFragment();
}
return processState?.description || unknownDescription();
}
getStatusIcon({ isArchived, isFragment, state }: Scenario, processState: ProcessStateType): string {
if (isArchived) {
return archivedIcon;
}
if (isFragment) {
return fragmentIcon;
}
return processState?.icon || state?.icon || unknownIcon;
}
getStatusTooltip({ isArchived, isFragment, state }: Scenario, processState: ProcessStateType): string {
if (isArchived) {
return isFragment ? descriptionFragmentArchived() : descriptionProcessArchived();
}
if (isFragment) {
return descriptionFragment();
}
return processState?.tooltip || state?.tooltip || unknownTooltip();
}
getTransitionKey({ name, isArchived, isFragment, state }: Scenario, processState: ProcessStateType): string {
if (isArchived || isFragment) {
return `${name}`;
}
return `${name}-${processState?.icon || state?.icon || unknownIcon}`;
}
}
export default new ProcessStateUtils();