1
- import { HTTPError } from "@budibase/backend-core"
1
+ import { context , HTTPError } from "@budibase/backend-core"
2
2
import sdk from "../.."
3
- import { AppNavigation } from "@budibase/types"
3
+ import { App , AppNavigation } from "@budibase/types"
4
4
5
5
export async function addLink ( {
6
6
label,
@@ -26,6 +26,24 @@ export async function addLink({
26
26
} )
27
27
28
28
await sdk . workspaceApps . update ( workspaceApp )
29
+
30
+ if ( workspaceApp . isDefault ) {
31
+ // TODO: remove when cleaning the flag FeatureFlag.WORKSPACE_APPS
32
+ const appMetadata = await sdk . applications . metadata . get ( )
33
+ appMetadata . navigation ??= {
34
+ navigation : "Top" ,
35
+ }
36
+ appMetadata . navigation . links ??= [ ]
37
+ appMetadata . navigation . links . push ( {
38
+ text : label ,
39
+ url,
40
+ roleId,
41
+ type : "link" ,
42
+ } )
43
+
44
+ const db = context . getAppDB ( )
45
+ await db . put ( appMetadata )
46
+ }
29
47
}
30
48
31
49
export async function deleteLink ( route : string , workspaceAppId : string ) {
@@ -48,6 +66,35 @@ export async function deleteLink(route: string, workspaceAppId: string) {
48
66
...workspaceApp ,
49
67
navigation : { ...workspaceApp . navigation , links : updatedLinks } ,
50
68
} )
69
+
70
+ if ( workspaceApp . isDefault ) {
71
+ // TODO: remove when cleaning the flag FeatureFlag.WORKSPACE_APPS
72
+ const appMetadata = await sdk . applications . metadata . get ( )
73
+ const navigation = appMetadata . navigation
74
+ if ( ! navigation || ! navigation . links ?. length ) {
75
+ return
76
+ }
77
+
78
+ // Filter out top level links pointing to these URLs
79
+ const updatedLinks = navigation . links . filter ( link => link . url !== route )
80
+
81
+ // Filter out nested links pointing to these URLs
82
+ updatedLinks . forEach ( link => {
83
+ if ( link . type === "sublinks" && link . subLinks ?. length ) {
84
+ link . subLinks = link . subLinks . filter ( subLink => subLink . url !== route )
85
+ }
86
+ } )
87
+
88
+ const db = context . getAppDB ( )
89
+ const updatedMetadata : App = {
90
+ ...appMetadata ,
91
+ navigation : {
92
+ ...navigation ,
93
+ links : updatedLinks ,
94
+ } ,
95
+ }
96
+ await db . put ( updatedMetadata )
97
+ }
51
98
}
52
99
53
100
export async function update (
@@ -59,4 +106,12 @@ export async function update(
59
106
throw new HTTPError ( "Workspace app not found" , 400 )
60
107
}
61
108
await sdk . workspaceApps . update ( { ...workspaceApp , navigation } )
109
+
110
+ if ( workspaceApp . isDefault ) {
111
+ const appMetadata = await sdk . applications . metadata . get ( )
112
+ appMetadata . navigation = navigation
113
+
114
+ const db = context . getAppDB ( )
115
+ await db . put ( appMetadata )
116
+ }
62
117
}
0 commit comments