-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Expand file tree
/
Copy pathbuild-navigation-flat-command-menu-item.util.ts
More file actions
110 lines (102 loc) · 3.63 KB
/
Copy pathbuild-navigation-flat-command-menu-item.util.ts
File metadata and controls
110 lines (102 loc) · 3.63 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import { STANDARD_OBJECTS } from 'twenty-shared/metadata';
import { FeatureFlagKey } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum';
import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum';
import { type FlatCommandMenuItem } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item.type';
export const NAVIGATION_COMMAND_UUID_NAMESPACE =
'b31830da-2ae0-48eb-a915-12fa4ab96dd3';
export const NAVIGATION_INTERPOLATED_LABEL =
'Go to ${navigateToObjectMetadataItem.labelPlural}';
export const NAVIGATION_INTERPOLATED_SHORT_LABEL =
'${navigateToObjectMetadataItem.labelPlural}';
export const NAVIGATION_INTERPOLATED_ICON =
'${navigateToObjectMetadataItem.icon}';
const NAVIGATION_FEATURE_FLAG_GATE_BY_OBJECT_UNIVERSAL_IDENTIFIER: Partial<
Record<string, FeatureFlagKey>
> = {
[STANDARD_OBJECTS.callRecording.universalIdentifier]:
FeatureFlagKey.IS_CALL_RECORDING_ENABLED,
[STANDARD_OBJECTS.messageCampaign.universalIdentifier]:
FeatureFlagKey.IS_EMAIL_GROUP_ENABLED,
[STANDARD_OBJECTS.messageList.universalIdentifier]:
FeatureFlagKey.IS_EMAIL_GROUP_ENABLED,
};
export const buildNavigationConditionalAvailabilityExpression = ({
universalIdentifier,
nameSingular,
}: {
universalIdentifier: string;
nameSingular: string;
}): string => {
const targetObjectReadPermissionExpression = `targetObjectReadPermissions.${nameSingular}`;
const featureFlagGate =
NAVIGATION_FEATURE_FLAG_GATE_BY_OBJECT_UNIVERSAL_IDENTIFIER[
universalIdentifier
];
return isDefined(featureFlagGate)
? `featureFlags.${featureFlagGate} and ${targetObjectReadPermissionExpression}`
: targetObjectReadPermissionExpression;
};
export const buildNavigationFlatCommandMenuItem = ({
objectMetadata,
commandMenuItemId,
applicationId,
applicationUniversalIdentifier,
workspaceId,
position,
now,
universalIdentifier,
}: {
objectMetadata: {
id: string;
universalIdentifier: string;
nameSingular: string;
shortcut: string | null;
};
commandMenuItemId: string;
applicationId: string;
applicationUniversalIdentifier: string;
workspaceId: string;
position: number;
now: string;
universalIdentifier: string;
}): FlatCommandMenuItem => {
const conditionalAvailabilityExpression =
buildNavigationConditionalAvailabilityExpression({
universalIdentifier: objectMetadata.universalIdentifier,
nameSingular: objectMetadata.nameSingular,
});
return {
id: commandMenuItemId,
universalIdentifier,
applicationId,
applicationUniversalIdentifier,
workspaceId,
label: NAVIGATION_INTERPOLATED_LABEL,
shortLabel: NAVIGATION_INTERPOLATED_SHORT_LABEL,
icon: NAVIGATION_INTERPOLATED_ICON,
position,
isPinned: false,
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression,
frontComponentId: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.NAVIGATION,
payload: { objectMetadataItemId: objectMetadata.id },
hotKeys: isDefined(objectMetadata.shortcut)
? ['G', objectMetadata.shortcut]
: null,
workflowVersionId: null,
availabilityObjectMetadataId: null,
availabilityObjectMetadataUniversalIdentifier: null,
pageLayoutId: null,
pageLayoutUniversalIdentifier: null,
isActive: true,
isSystemSideEffect: true,
overrides: null,
universalOverrides: null,
createdAt: now,
updatedAt: now,
};
};