1
1
import React from 'react' ;
2
2
3
- import { CirclePlus , TrashBin } from '@gravity-ui/icons' ;
3
+ import { CirclePlus , Pencil , TrashBin } from '@gravity-ui/icons' ;
4
4
import type { Column } from '@gravity-ui/react-data-table' ;
5
5
import DataTable from '@gravity-ui/react-data-table' ;
6
6
import type { DropdownMenuItem } from '@gravity-ui/uikit' ;
@@ -18,6 +18,7 @@ import {TenantNameWrapper} from '../../components/TenantNameWrapper/TenantNameWr
18
18
import {
19
19
useCreateDatabaseFeatureAvailable ,
20
20
useDeleteDatabaseFeatureAvailable ,
21
+ useEditDatabaseFeatureAvailable ,
21
22
} from '../../store/reducers/capabilities/hooks' ;
22
23
import {
23
24
ProblemFilterValues ,
@@ -70,6 +71,7 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
70
71
71
72
const isCreateDBAvailable =
72
73
useCreateDatabaseFeatureAvailable ( ) && uiFactory . onCreateDB !== undefined ;
74
+ const isEditDBAvailable = useEditDatabaseFeatureAvailable ( ) && uiFactory . onEditDB !== undefined ;
73
75
const isDeleteDBAvailable =
74
76
useDeleteDatabaseFeatureAvailable ( ) && uiFactory . onDeleteDB !== undefined ;
75
77
@@ -238,51 +240,14 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
238
240
} ,
239
241
] ;
240
242
241
- if ( isDeleteDBAvailable ) {
242
- columns . push ( {
243
- name : 'actions' ,
244
- header : '' ,
245
- width : 40 ,
246
- resizeable : false ,
247
- align : DataTable . CENTER ,
248
- render : ( { row} ) => {
249
- const databaseId = row . UserAttributes ?. database_id ;
250
- const databaseName = row . Name ;
251
-
252
- let menuItems : ( DropdownMenuItem | DropdownMenuItem [ ] ) [ ] = [ ] ;
253
-
254
- if ( clusterName && databaseName && databaseId ) {
255
- menuItems = [
256
- {
257
- text : i18n ( 'remove' ) ,
258
- iconStart : < TrashBin /> ,
259
- action : ( ) => {
260
- uiFactory . onDeleteDB ?.( {
261
- clusterName,
262
- databaseId,
263
- databaseName,
264
- } ) ;
265
- } ,
266
- className : b ( 'remove-db' ) ,
267
- } ,
268
- ] ;
269
- }
270
-
271
- if ( ! menuItems . length ) {
272
- return null ;
273
- }
274
- return (
275
- < DropdownMenu
276
- defaultSwitcherProps = { {
277
- view : 'flat' ,
278
- size : 's' ,
279
- pin : 'brick-brick' ,
280
- } }
281
- items = { menuItems }
282
- />
283
- ) ;
284
- } ,
243
+ if ( clusterName && ( isDeleteDBAvailable || isEditDBAvailable ) ) {
244
+ const actionsColumn = getDBActionsColumn ( {
245
+ clusterName,
246
+ isDeleteDBAvailable,
247
+ isEditDBAvailable,
285
248
} ) ;
249
+
250
+ columns . push ( actionsColumn ) ;
286
251
}
287
252
288
253
if ( filteredTenants . length === 0 && problemFilter !== ProblemFilterValues . ALL ) {
@@ -314,3 +279,60 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
314
279
</ div >
315
280
) ;
316
281
} ;
282
+
283
+ function getDBActionsColumn ( {
284
+ clusterName,
285
+ isEditDBAvailable,
286
+ isDeleteDBAvailable,
287
+ } : {
288
+ clusterName : string ;
289
+ isEditDBAvailable ?: boolean ;
290
+ isDeleteDBAvailable ?: boolean ;
291
+ } ) {
292
+ return {
293
+ name : 'actions' ,
294
+ header : '' ,
295
+ width : 40 ,
296
+ resizeable : false ,
297
+ align : DataTable . CENTER ,
298
+ render : ( { row} ) => {
299
+ const menuItems : ( DropdownMenuItem | DropdownMenuItem [ ] ) [ ] = [ ] ;
300
+
301
+ const databaseId = row . UserAttributes ?. database_id ;
302
+ const databaseName = row . Name ;
303
+
304
+ if ( clusterName && isEditDBAvailable ) {
305
+ menuItems . push ( {
306
+ text : i18n ( 'edit' ) ,
307
+ iconStart : < Pencil /> ,
308
+ action : ( ) => {
309
+ uiFactory . onEditDB ?.( {
310
+ clusterName,
311
+ databaseData : row ,
312
+ } ) ;
313
+ } ,
314
+ } ) ;
315
+ }
316
+ if ( clusterName && isDeleteDBAvailable && databaseName && databaseId ) {
317
+ menuItems . push ( {
318
+ text : i18n ( 'remove' ) ,
319
+ iconStart : < TrashBin /> ,
320
+ action : ( ) => {
321
+ uiFactory . onDeleteDB ?.( {
322
+ clusterName,
323
+ databaseId,
324
+ databaseName,
325
+ } ) ;
326
+ } ,
327
+ className : b ( 'remove-db' ) ,
328
+ } ) ;
329
+ }
330
+
331
+ if ( ! menuItems . length ) {
332
+ return null ;
333
+ }
334
+
335
+ return < DropdownMenu items = { menuItems } /> ;
336
+ } ,
337
+ } satisfies Column < PreparedTenant > ;
338
+ }
0 commit comments