]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/StorageSelector.js
ui: fix align mode of two column container
[pve-manager.git] / www / manager6 / form / StorageSelector.js
CommitLineData
7c0a43d9 1Ext.define('PVE.form.StorageSelector', {
0fc95a12 2 extend: 'Proxmox.form.ComboGrid',
4cb75dd9 3 alias: 'widget.pveStorageSelector',
76fae470
FE
4 mixins: ['Proxmox.Mixin.CBind'],
5
6 cbindData: {
7 clusterView: false,
8 },
7c0a43d9 9
a13842bf
EK
10 allowBlank: false,
11 valueField: 'storage',
12 displayField: 'storage',
13 listConfig: {
76fae470
FE
14 cbind: {
15 clusterView: '{clusterView}',
16 },
eb89111d 17 width: 450,
a13842bf
EK
18 columns: [
19 {
20 header: gettext('Name'),
21 dataIndex: 'storage',
22 hideable: false,
f6710aac 23 flex: 1,
a13842bf
EK
24 },
25 {
26 header: gettext('Type'),
eb89111d 27 width: 75,
f6710aac 28 dataIndex: 'type',
a13842bf
EK
29 },
30 {
31 header: gettext('Avail'),
eb89111d 32 width: 90,
a13842bf 33 dataIndex: 'avail',
f6710aac 34 renderer: Proxmox.Utils.format_size,
76fae470
FE
35 cbind: {
36 hidden: '{clusterView}',
37 },
a13842bf
EK
38 },
39 {
40 header: gettext('Capacity'),
eb89111d 41 width: 90,
a13842bf 42 dataIndex: 'total',
f6710aac 43 renderer: Proxmox.Utils.format_size,
76fae470
FE
44 cbind: {
45 hidden: '{clusterView}',
46 },
47 },
48 {
49 header: gettext('Nodes'),
50 width: 120,
51 dataIndex: 'nodes',
52 renderer: (value) => value ? value : '-- ' + gettext('All') + ' --',
53 cbind: {
54 hidden: '{!clusterView}',
55 },
56 },
57 {
58 header: gettext('Shared'),
59 width: 70,
60 dataIndex: 'shared',
61 renderer: Proxmox.Utils.format_boolean,
62 cbind: {
63 hidden: '{!clusterView}',
64 },
f6710aac
TL
65 },
66 ],
a13842bf
EK
67 },
68
7c0a43d9 69 reloadStorageList: function() {
4fe1ea25 70 let me = this;
7c0a43d9 71
76fae470
FE
72 if (me.clusterView) {
73 me.getStore().setProxy({
74 type: 'proxmox',
75 url: `/api2/json/storage`,
76 });
77
78 // filter here, back-end does not support it currently
79 let filters = [(storage) => !storage.data.disable];
80
81 if (me.storageContent) {
82 filters.push(
83 (storage) => storage.data.content.split(',').includes(me.storageContent),
84 );
85 }
86
87 if (me.nodename) {
88 filters.push(
89 (storage) => !storage.data.nodes || storage.data.nodes.includes(me.nodename),
90 );
91 }
92
93 me.getStore().clearFilter();
94 me.getStore().setFilters(filters);
95 } else {
96 if (!me.nodename) {
97 return;
98 }
99
100 let params = {
101 format: 1,
102 };
103 if (me.storageContent) {
104 params.content = me.storageContent;
105 }
106 if (me.targetNode) {
107 params.target = me.targetNode;
108 params.enabled = 1; // skip disabled storages
109 }
110 me.store.setProxy({
111 type: 'proxmox',
112 url: `/api2/json/nodes/${me.nodename}/storage`,
113 extraParams: params,
114 });
7c0a43d9 115 }
7c0a43d9 116
00c3ac53 117 me.store.load(() => me.validate());
7c0a43d9
DM
118 },
119
120 setTargetNode: function(targetNode) {
121 var me = this;
122
53e3ea84 123 if (!targetNode || me.targetNode === targetNode) {
7c0a43d9
DM
124 return;
125 }
126
76fae470
FE
127 if (me.clusterView) {
128 throw "setting targetNode with clusterView is not implemented";
129 }
130
7c0a43d9
DM
131 me.targetNode = targetNode;
132
133 me.reloadStorageList();
134 },
135
136 setNodename: function(nodename) {
137 var me = this;
138
1c646aa2
FE
139 nodename = nodename || '';
140
141 if (me.nodename === nodename) {
7c0a43d9
DM
142 return;
143 }
144
145 me.nodename = nodename;
146
147 me.reloadStorageList();
148 },
149
150 initComponent: function() {
151 var me = this;
152
00c3ac53 153 let nodename = me.nodename;
2a4971d8 154 me.nodename = undefined;
7c0a43d9
DM
155
156 var store = Ext.create('Ext.data.Store', {
157 model: 'pve-storage-status',
158 sorters: {
2a4971d8 159 property: 'storage',
392e3cf1 160 direction: 'ASC',
f6710aac 161 },
7c0a43d9
DM
162 });
163
164 Ext.apply(me, {
f6710aac 165 store: store,
7c0a43d9
DM
166 });
167
00c3ac53 168 me.callParent();
7c0a43d9 169
1c646aa2 170 me.setNodename(nodename);
f6710aac 171 },
7c0a43d9 172}, function() {
7c0a43d9
DM
173 Ext.define('pve-storage-status', {
174 extend: 'Ext.data.Model',
76fae470 175 fields: ['storage', 'active', 'type', 'avail', 'total', 'nodes', 'shared'],
f6710aac 176 idProperty: 'storage',
7c0a43d9 177 });
7c0a43d9 178});