@@ -5,6 +5,8 @@ import * as TypesGen from "../../api/typesGenerated"
5
5
interface TemplatesContext {
6
6
organizations ?: TypesGen . Organization [ ]
7
7
templates ?: TypesGen . Template [ ]
8
+ canCreateTemplate ?: boolean
9
+ permissionsError ?: Error | unknown
8
10
organizationsError ?: Error | unknown
9
11
templatesError ?: Error | unknown
10
12
}
@@ -18,6 +20,9 @@ export const templatesMachine = createMachine(
18
20
getOrganizations : {
19
21
data : TypesGen . Organization [ ]
20
22
}
23
+ getPermissions : {
24
+ data : boolean
25
+ }
21
26
getTemplates : {
22
27
data : TypesGen . Template [ ]
23
28
}
@@ -34,7 +39,7 @@ export const templatesMachine = createMachine(
34
39
onDone : [
35
40
{
36
41
actions : [ "assignOrganizations" , "clearOrganizationsError" ] ,
37
- target : "gettingTemplates " ,
42
+ target : "gettingPermissions " ,
38
43
} ,
39
44
] ,
40
45
onError : [
@@ -46,6 +51,26 @@ export const templatesMachine = createMachine(
46
51
} ,
47
52
tags : "loading" ,
48
53
} ,
54
+ gettingPermissions : {
55
+ entry : "clearPermissionsError" ,
56
+ invoke : {
57
+ src : "getPermissions" ,
58
+ id : "getPermissions" ,
59
+ onDone : [
60
+ {
61
+ target : "gettingTemplates" ,
62
+ actions : [ "assignPermissions" , "clearPermissionsError" ] ,
63
+ } ,
64
+ ] ,
65
+ onError : [
66
+ {
67
+ actions : "assignPermissionsError" ,
68
+ target : "error" ,
69
+ } ,
70
+ ] ,
71
+ } ,
72
+ tags : "loading" ,
73
+ } ,
49
74
gettingTemplates : {
50
75
entry : "clearTemplatesError" ,
51
76
invoke : {
@@ -78,6 +103,16 @@ export const templatesMachine = createMachine(
78
103
...context ,
79
104
organizationsError : undefined ,
80
105
} ) ) ,
106
+ assignPermissions : assign ( {
107
+ canCreateTemplate : ( _ , event ) => event . data ,
108
+ } ) ,
109
+ assignPermissionsError : assign ( {
110
+ permissionsError : ( _ , event ) => event . data ,
111
+ } ) ,
112
+ clearPermissionsError : assign ( ( context ) => ( {
113
+ ...context ,
114
+ permissionsError : undefined ,
115
+ } ) ) ,
81
116
assignTemplates : assign ( {
82
117
templates : ( _ , event ) => event . data ,
83
118
} ) ,
@@ -88,6 +123,20 @@ export const templatesMachine = createMachine(
88
123
} ,
89
124
services : {
90
125
getOrganizations : API . getOrganizations ,
126
+ getPermissions : async ( ) => {
127
+ const permName = "createTemplates"
128
+ const resp = await API . checkUserPermissions ( "me" , {
129
+ checks : {
130
+ [ permName ] : {
131
+ action : "write" ,
132
+ object : {
133
+ resource_type : "template" ,
134
+ } ,
135
+ } ,
136
+ } ,
137
+ } )
138
+ return resp [ permName ]
139
+ } ,
91
140
getTemplates : async ( context ) => {
92
141
if ( ! context . organizations || context . organizations . length === 0 ) {
93
142
throw new Error ( "no organizations" )
0 commit comments