]> git.proxmox.com Git - proxmox-backup.git/blob - www/tape/DriveConfig.js
ui: tapeRestore: make window non-resizable
[proxmox-backup.git] / www / tape / DriveConfig.js
1 Ext.define('pbs-model-drives', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'path', 'model', 'name', 'serial', 'vendor',
5 { name: 'changer', defaultValue: '' },
6 {
7 name: 'changer-drivenum',
8 defaultValue: 0,
9 },
10 'changer-slot',
11 ],
12 idProperty: 'name',
13 });
14
15 Ext.define('PBS.TapeManagement.DrivePanel', {
16 extend: 'Ext.grid.Panel',
17 alias: 'widget.pbsTapeDrivePanel',
18
19 controller: {
20 xclass: 'Ext.app.ViewController',
21
22 reloadTapeStore: function() {
23 let navtree = Ext.ComponentQuery.query('navigationtree')[0];
24 navtree.reloadTapeStore();
25 },
26
27 onAdd: function() {
28 let me = this;
29 Ext.create('PBS.TapeManagement.DriveEditWindow', {
30 listeners: {
31 destroy: function() {
32 me.reload();
33 },
34 },
35 }).show();
36 },
37
38 onEdit: function() {
39 let me = this;
40 let view = me.getView();
41 let selection = view.getSelection();
42 if (!selection || selection.length < 1) {
43 return;
44 }
45 Ext.create('PBS.TapeManagement.DriveEditWindow', {
46 driveid: selection[0].data.name,
47 autoLoad: true,
48 listeners: {
49 destroy: () => me.reload(),
50 },
51 }).show();
52 },
53
54 status: function(view, rI, cI, button, el, record) {
55 let me = this;
56 let drive = record.data.name;
57 PBS.Utils.driveCommand(drive, 'status', {
58 waitMsgTarget: me.getView(),
59 success: PBS.Utils.showDriveStatusWindow,
60 });
61 },
62
63 reload: function() {
64 this.getView().getStore().rstore.load();
65 this.reloadTapeStore();
66 },
67
68 stopStore: function() {
69 this.getView().getStore().rstore.stopUpdate();
70 },
71
72 startStore: function() {
73 this.getView().getStore().rstore.startUpdate();
74 },
75
76 init: function(view) {
77 Proxmox.Utils.monStoreErrors(view, view.getStore().rstore);
78 },
79 },
80
81 listeners: {
82 beforedestroy: 'stopStore',
83 deactivate: 'stopStore',
84 activate: 'startStore',
85 itemdblclick: 'onEdit',
86 },
87
88 store: {
89 type: 'diff',
90 rstore: {
91 type: 'update',
92 storeid: 'proxmox-tape-drives',
93 model: 'pbs-model-drives',
94 proxy: {
95 type: 'proxmox',
96 url: "/api2/json/tape/drive",
97 },
98 },
99 sorters: 'name',
100 groupField: 'changer',
101 },
102
103 features: [
104 {
105 ftype: 'grouping',
106 groupHeaderTpl: [
107 '{name:this.formatName} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})',
108 {
109 formatName: function(changer) {
110 if (changer === "") {
111 return "Standalone Drives";
112 } else {
113 return `Changer ${changer}`;
114 }
115 },
116 },
117 ],
118 },
119 ],
120
121 tbar: [
122 {
123 text: gettext('Add'),
124 xtype: 'proxmoxButton',
125 handler: 'onAdd',
126 selModel: false,
127 },
128 '-',
129 {
130 text: gettext('Edit'),
131 xtype: 'proxmoxButton',
132 handler: 'onEdit',
133 disabled: true,
134 },
135 {
136 xtype: 'proxmoxStdRemoveButton',
137 baseurl: '/api2/extjs/config/drive',
138 callback: 'reload',
139 },
140 ],
141 columns: [
142 {
143 text: gettext('Name'),
144 dataIndex: 'name',
145 flex: 1,
146 },
147 {
148 text: gettext('Path'),
149 dataIndex: 'path',
150 flex: 2,
151 },
152 {
153 text: gettext('Vendor'),
154 dataIndex: 'vendor',
155 flex: 1,
156 },
157 {
158 text: gettext('Model'),
159 dataIndex: 'model',
160 flex: 1,
161 },
162 {
163 text: gettext('Serial'),
164 dataIndex: 'serial',
165 flex: 1,
166 },
167 {
168 text: gettext('Drive Number'),
169 dataIndex: 'changer-drivenum',
170 renderer: function(value, mD, record) {
171 return record.data.changer ? value : '';
172 },
173 },
174 ],
175 });
176