@@ -93,10 +93,7 @@ export default function BlockPane({
93
93
94
94
if ( appContext . isPrivate ) {
95
95
isAllowedBlock =
96
- appContext . blocksConfig . allow . includes ( blockKey ) ||
97
- ( manageBlockResult . status === "success" &&
98
- block . owner === "githubnext" &&
99
- block . repo === "blocks-examples" ) ;
96
+ ! ! block && isBlockOnAllowList ( appContext . blocksConfig . allow , block ) ;
100
97
}
101
98
102
99
return (
@@ -161,14 +158,13 @@ const NotAllowedWarning = ({
161
158
isBranchable : boolean ;
162
159
branchName : string ;
163
160
} ) => {
164
- const [ isAdding , setIsAdding ] = useState ( false ) ;
165
- const allowList = blocksConfig . allow ;
161
+ const [ proposedBlock , setProposedBlock ] = useState < AllowBlock | null > ( null ) ;
166
162
const queryClient = useQueryClient ( ) ;
167
163
168
164
return (
169
165
< div className = "overflow-y-auto w-full flex-1 pb-10 flex items-center justify-center" >
170
166
< div className = "max-w-3xl p-10" >
171
- < Flash variant = "danger" sx = { { mb : 3 } } >
167
+ < Flash variant = "danger" sx = { { mb : 4 } } >
172
168
< p className = "text-red-700" >
173
169
< StyledOcticon icon = { AlertFillIcon } />
174
170
This block is not allowed to be used in this repository.
@@ -180,33 +176,58 @@ const NotAllowedWarning = ({
180
176
it to the allowlist in{ " " }
181
177
< code className = "text-sm" > .github/blocks/config.json</ code > .
182
178
</ p >
183
- < div className = "flex space-x-2" >
179
+ < div className = "flex mt-6 space-x-2" >
184
180
< Button
185
- onClick = { ( ) => setIsAdding ( true ) }
181
+ onClick = { ( ) =>
182
+ setProposedBlock ( {
183
+ owner : block . owner ,
184
+ repo : block . repo ,
185
+ id : block . id ,
186
+ } )
187
+ }
186
188
variant = "primary"
187
- className = "mt-4"
189
+ className = "!font-normal"
190
+ size = "large"
191
+ >
192
+ Add < span className = "font-semibold" > { block . title } </ span > to
193
+ allowlist
194
+ </ Button >
195
+ < Button
196
+ onClick = { ( ) =>
197
+ setProposedBlock ( {
198
+ owner : block . owner ,
199
+ repo : block . repo ,
200
+ id : "*" ,
201
+ } )
202
+ }
203
+ variant = "default"
204
+ className = "!font-normal"
188
205
size = "large"
189
206
>
190
- Add { block . title } to allowlist
207
+ Add{ " " }
208
+ < span className = "font-semibold" >
209
+ all blocks in { block . owner } /{ block . repo }
210
+ </ span > { " " }
211
+ to allowlist
191
212
</ Button >
192
213
</ div >
193
214
</ div >
194
- { isAdding && (
215
+ { ! ! proposedBlock && (
195
216
< CommitCodeDialog
196
217
repo = { context . repo }
197
218
owner = { context . owner }
198
219
path = ".github/blocks/config.json"
199
220
newCode = { JSON . stringify (
200
221
{
201
222
...blocksConfig ,
202
- allow : [ ...( blocksConfig . allow || [ ] ) , blockKey ] ,
223
+ allow : [ ...( blocksConfig . allow || [ ] ) , proposedBlock ] ,
203
224
} ,
204
225
null ,
205
226
2
206
227
) }
207
228
currentCode = { JSON . stringify ( blocksConfig , null , 2 ) }
208
229
onCommit = { ( ) => {
209
- setIsAdding ( false ) ;
230
+ setProposedBlock ( null ) ;
210
231
queryClient . invalidateQueries (
211
232
QueryKeyMap . file . factory ( {
212
233
owner : context . owner ,
@@ -217,7 +238,7 @@ const NotAllowedWarning = ({
217
238
) ;
218
239
} }
219
240
onCancel = { ( ) => {
220
- setIsAdding ( false ) ;
241
+ setProposedBlock ( null ) ;
221
242
} }
222
243
isOpen
223
244
branchName = { branchName }
@@ -227,3 +248,20 @@ const NotAllowedWarning = ({
227
248
</ div >
228
249
) ;
229
250
} ;
251
+
252
+ const isBlockOnAllowList = ( allowList : AllowBlock [ ] , block : Block ) => {
253
+ if ( ! allowList ) return false ;
254
+ // always allow example blocks
255
+ if ( block . owner === "githubnext" && block . repo === "blocks-examples" )
256
+ return true ;
257
+ return allowList . some ( ( allowBlock ) => {
258
+ return doesAllowBlockMatch ( allowBlock , block ) ;
259
+ } ) ;
260
+ } ;
261
+
262
+ const doesAllowBlockMatch = ( allowBlock : AllowBlock , block : Block ) => {
263
+ return [ "owner" , "repo" , "id" ] . every ( ( key ) => {
264
+ if ( ! allowBlock [ key ] ) return false ;
265
+ return pm ( [ allowBlock [ key ] ] , { bash : true , dot : true } ) ( block [ key ] ) ;
266
+ } ) ;
267
+ } ;
0 commit comments