11import React from 'react' ;
22
3- import { CirclePlus , TrashBin } from '@gravity-ui/icons' ;
3+ import { CirclePlus , Pencil , TrashBin } from '@gravity-ui/icons' ;
44import type { Column } from '@gravity-ui/react-data-table' ;
55import DataTable from '@gravity-ui/react-data-table' ;
66import type { DropdownMenuItem } from '@gravity-ui/uikit' ;
@@ -18,6 +18,7 @@ import {TenantNameWrapper} from '../../components/TenantNameWrapper/TenantNameWr
1818import {
1919 useCreateDatabaseFeatureAvailable ,
2020 useDeleteDatabaseFeatureAvailable ,
21+ useEditDatabaseFeatureAvailable ,
2122} from '../../store/reducers/capabilities/hooks' ;
2223import {
2324 ProblemFilterValues ,
@@ -70,6 +71,7 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
7071
7172 const isCreateDBAvailable =
7273 useCreateDatabaseFeatureAvailable ( ) && uiFactory . onCreateDB !== undefined ;
74+ const isEditDBAvailable = useEditDatabaseFeatureAvailable ( ) && uiFactory . onEditDB !== undefined ;
7375 const isDeleteDBAvailable =
7476 useDeleteDatabaseFeatureAvailable ( ) && uiFactory . onDeleteDB !== undefined ;
7577
@@ -238,51 +240,14 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
238240 } ,
239241 ] ;
240242
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,
285248 } ) ;
249+
250+ columns . push ( actionsColumn ) ;
286251 }
287252
288253 if ( filteredTenants . length === 0 && problemFilter !== ProblemFilterValues . ALL ) {
@@ -314,3 +279,69 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
314279 </ div >
315280 ) ;
316281} ;
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 (
336+ < DropdownMenu
337+ defaultSwitcherProps = { {
338+ view : 'flat' ,
339+ size : 's' ,
340+ pin : 'brick-brick' ,
341+ } }
342+ items = { menuItems }
343+ />
344+ ) ;
345+ } ,
346+ } satisfies Column < PreparedTenant > ;
347+ }
0 commit comments