-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Expand file tree
/
Copy pathbuild-navigation-command-menu-item-operations-or-throw.util.ts
More file actions
102 lines (93 loc) · 3.58 KB
/
Copy pathbuild-navigation-command-menu-item-operations-or-throw.util.ts
File metadata and controls
102 lines (93 loc) · 3.58 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
import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application';
import { isDefined } from 'twenty-shared/utils';
import { v4, v5 } from 'uuid';
import { type FlatCommandMenuItem } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item.type';
import {
buildNavigationConditionalAvailabilityExpression,
buildNavigationFlatCommandMenuItem,
NAVIGATION_COMMAND_UUID_NAMESPACE,
} from 'src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatEntityToCreateDeleteUpdate } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-to-create-delete-update.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
export const buildNavigationCommandMenuItemOperationsOrThrow = ({
existingFlatCommandMenuItemMaps,
objectMetadatasForNavigation,
applicationId,
workspaceId,
now,
renamedCollisionObjectMetadatas,
}: {
existingFlatCommandMenuItemMaps: FlatEntityMaps<FlatCommandMenuItem>;
objectMetadatasForNavigation: FlatObjectMetadata[];
applicationId: string;
workspaceId: string;
now: string;
renamedCollisionObjectMetadatas: {
universalIdentifier: string;
nameSingular: string;
}[];
}): FlatEntityToCreateDeleteUpdate<'commandMenuItem'> => {
const flatEntityToCreate: FlatCommandMenuItem[] = [];
const flatEntityToUpdate: FlatCommandMenuItem[] = [];
let nextPosition =
Object.values(existingFlatCommandMenuItemMaps.byUniversalIdentifier)
.filter(isDefined)
.reduce(
(maxPosition, commandMenuItem) =>
Math.max(maxPosition, commandMenuItem.position),
-1,
) + 1;
for (const objectMetadata of objectMetadatasForNavigation) {
const commandMenuItemUniversalIdentifier = v5(
objectMetadata.universalIdentifier,
NAVIGATION_COMMAND_UUID_NAMESPACE,
);
if (
!objectMetadata.isActive ||
isDefined(
existingFlatCommandMenuItemMaps.byUniversalIdentifier[
commandMenuItemUniversalIdentifier
],
)
) {
continue;
}
flatEntityToCreate.push(
buildNavigationFlatCommandMenuItem({
objectMetadata,
commandMenuItemId: v4(),
applicationId,
applicationUniversalIdentifier:
TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER,
workspaceId,
position: nextPosition++,
now,
universalIdentifier: commandMenuItemUniversalIdentifier,
}),
);
}
for (const renamedCollisionObjectMetadata of renamedCollisionObjectMetadatas) {
const renamedNavigationCommandMenuItemUniversalIdentifier = v5(
renamedCollisionObjectMetadata.universalIdentifier,
NAVIGATION_COMMAND_UUID_NAMESPACE,
);
const staleNavigationCommandMenuItem =
existingFlatCommandMenuItemMaps.byUniversalIdentifier[
renamedNavigationCommandMenuItemUniversalIdentifier
];
if (isDefined(staleNavigationCommandMenuItem)) {
flatEntityToUpdate.push({
...staleNavigationCommandMenuItem,
conditionalAvailabilityExpression:
buildNavigationConditionalAvailabilityExpression({
universalIdentifier:
renamedCollisionObjectMetadata.universalIdentifier,
nameSingular: renamedCollisionObjectMetadata.nameSingular,
}),
updatedAt: now,
});
}
}
return { flatEntityToCreate, flatEntityToDelete: [], flatEntityToUpdate };
};