2020-06-16 11:13:34 +02:00
Ext . define ( 'PBS.admin.Directorylist' , {
extend : 'Ext.grid.Panel' ,
xtype : 'pbsDirectoryList' ,
stateful : true ,
stateId : 'grid-node-directory' ,
emptyText : gettext ( 'No Mount-Units found' ) ,
2023-10-10 13:37:48 +02:00
viewModel : {
data : {
path : '' ,
} ,
formulas : {
dirName : ( get ) => get ( 'path' ) ? . replace ( '/mnt/datastore/' , '' ) || undefined ,
} ,
} ,
2020-06-16 11:13:34 +02:00
controller : {
xclass : 'Ext.app.ViewController' ,
createDirectory : function ( ) {
let me = this ;
Ext . create ( 'PBS.window.CreateDirectory' , {
listeners : {
destroy : function ( ) {
me . reload ( ) ;
} ,
} ,
} ) . show ( ) ;
} ,
2023-10-10 13:37:48 +02:00
removeDirectory : function ( ) {
let me = this ;
let vm = me . getViewModel ( ) ;
let dirName = vm . get ( 'dirName' ) ;
if ( ! dirName ) {
throw "no directory name specified" ;
}
Ext . create ( 'Proxmox.window.SafeDestroy' , {
url : ` /nodes/localhost/disks/directory/ ${ dirName } ` ,
item : { id : dirName } ,
showProgress : true ,
taskName : 'dirremove' ,
listeners : {
destroy : ( ) => me . reload ( ) ,
} ,
} ) . show ( ) ;
} ,
2020-06-16 11:13:34 +02:00
reload : function ( ) {
let me = this ;
let store = me . getView ( ) . getStore ( ) ;
store . load ( ) ;
store . sort ( ) ;
} ,
init : function ( view ) {
let me = this ;
Proxmox . Utils . monStoreErrors ( view , view . getStore ( ) , true ) ;
me . reload ( ) ;
} ,
} ,
rootVisible : false ,
useArrows : true ,
tbar : [
{
text : gettext ( 'Reload' ) ,
iconCls : 'fa fa-refresh' ,
handler : 'reload' ,
} ,
{
text : gettext ( 'Create' ) + ': Directory' ,
handler : 'createDirectory' ,
} ,
2023-10-10 13:37:48 +02:00
'->' ,
{
xtype : 'tbtext' ,
data : {
dirName : undefined ,
} ,
bind : {
data : {
dirName : "{dirName}" ,
} ,
} ,
tpl : [
'<tpl if="dirName">' ,
gettext ( 'Directory' ) + ' {dirName}:' ,
'<tpl else>' ,
Ext . String . format ( gettext ( 'No {0} selected' ) , gettext ( 'directory' ) ) ,
'</tpl>' ,
] ,
} ,
{
text : gettext ( 'More' ) ,
iconCls : 'fa fa-bars' ,
disabled : true ,
bind : {
disabled : '{!dirName}' ,
} ,
menu : [
{
text : gettext ( 'Remove' ) ,
itemId : 'remove' ,
iconCls : 'fa fa-fw fa-trash-o' ,
handler : 'removeDirectory' ,
disabled : true ,
bind : {
disabled : '{!dirName}' ,
} ,
} ,
] ,
} ,
2020-06-16 11:13:34 +02:00
] ,
columns : [
2024-11-25 17:22:11 +01:00
{
text : '<span class="fa fa-plug"/>' ,
flex : 0 ,
width : 35 ,
dataIndex : 'removable' ,
renderer : function ( _text , _ , row ) {
if ( row . data . removable ) {
return ` <i class="fa fa-check"/> ` ;
} else {
return '' ;
}
} ,
} ,
2020-06-16 11:13:34 +02:00
{
text : gettext ( 'Path' ) ,
dataIndex : 'path' ,
flex : 1 ,
} ,
{
header : gettext ( 'Device' ) ,
flex : 1 ,
dataIndex : 'device' ,
} ,
{
header : gettext ( 'Filesystem' ) ,
width : 100 ,
dataIndex : 'filesystem' ,
} ,
{
header : gettext ( 'Options' ) ,
width : 100 ,
dataIndex : 'options' ,
} ,
{
header : gettext ( 'Unit File' ) ,
hidden : true ,
dataIndex : 'unitfile' ,
} ,
] ,
2023-10-10 13:37:48 +02:00
listeners : {
activate : "reload" ,
selectionchange : function ( model , selected ) {
let me = this ;
let vm = me . getViewModel ( ) ;
vm . set ( 'path' , selected [ 0 ] ? . data . path || '' ) ;
} ,
} ,
2020-06-16 11:13:34 +02:00
store : {
fields : [ 'path' , 'device' , 'filesystem' , 'options' , 'unitfile' ] ,
proxy : {
type : 'proxmox' ,
url : '/api2/json/nodes/localhost/disks/directory' ,
} ,
sorters : 'path' ,
} ,
} ) ;