From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 03/14] use separate view for each content type
Date: Wed, 2 Sep 2020 13:03:26 +0200 [thread overview]
Message-ID: <20200902110337.25004-4-f.ebner@proxmox.com> (raw)
In-Reply-To: <20200902110337.25004-1-f.ebner@proxmox.com>
Organized as separate "if"s to allow changing properties easily later.
statusStore is not needed anymore, now there is a single fixed content type,
and the template and upload button are disabled depending on that type.
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
Hope I didn't miss an easier existing mechanism to accomplish that.
Note that the available contents are loaded only once, if we would
want to update it periodically, we'd need to add something like
removeNodes for the configPanel AFAICT
www/manager6/storage/Browser.js | 71 ++++++++++++++++++++++++++---
www/manager6/storage/ContentView.js | 57 ++++++-----------------
2 files changed, 78 insertions(+), 50 deletions(-)
diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js
index 7537bdf1..e3822d5b 100644
--- a/www/manager6/storage/Browser.js
+++ b/www/manager6/storage/Browser.js
@@ -41,14 +41,71 @@ Ext.define('PVE.storage.Browser', {
if (caps.storage['Datastore.Allocate'] ||
caps.storage['Datastore.AllocateSpace'] ||
caps.storage['Datastore.Audit']) {
- me.insertNodes([
- {
- xtype: 'pveStorageContentView',
- title: gettext('Content'),
- iconCls: 'fa fa-th',
- itemId: 'content'
+
+ Proxmox.Utils.API2Request({
+ url: "/nodes/" + nodename + "/storage/" + storeid + "/status",
+ method: 'GET',
+ success: function(response, opts) {
+ var contents = response.result.data.content.split(',');
+ var items = [];
+
+ if (contents.includes('backup')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['backup'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentBackup',
+ content: 'backup',
+ });
+ }
+ if (contents.includes('images')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['images'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentImages',
+ content: 'images',
+ });
+ }
+ if (contents.includes('iso')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['iso'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentIso',
+ content: 'iso',
+ });
+ }
+ if (contents.includes('rootdir')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['rootdir'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentRootdir',
+ content: 'rootdir',
+ });
+ }
+ if (contents.includes('snippets')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['snippets'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentSnippets',
+ content: 'snippets',
+ });
+ }
+ if (contents.includes('vztmpl')) {
+ items.push({
+ xtype: 'pveStorageContentView',
+ title: PVE.Utils.contentTypes['vztmpl'],
+ iconCls: 'fa fa-th',
+ itemId: 'contentVztmpl',
+ content: 'vztmpl',
+ });
+ }
+ me.insertNodes(items);
},
- ]);
+ });
}
if (caps.storage['Permissions.Modify']) {
diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js
index 194ad42e..c067d3e0 100644
--- a/www/manager6/storage/ContentView.js
+++ b/www/manager6/storage/ContentView.js
@@ -376,13 +376,18 @@ Ext.define('PVE.storage.ContentView', {
throw "no storage ID specified";
}
+ var content = me.content;
+ if (!content) {
+ throw "no content type specified";
+ }
+
var baseurl = "/nodes/" + nodename + "/storage/" + storage + "/content";
var store = Ext.create('Ext.data.Store',{
model: 'pve-storage-content',
groupField: 'content',
proxy: {
type: 'proxmox',
- url: '/api2/json' + baseurl
+ url: '/api2/json' + baseurl + '?content=' + content,
},
sorters: {
property: 'volid',
@@ -394,7 +399,6 @@ Ext.define('PVE.storage.ContentView', {
var reload = function() {
store.load();
- me.statusStore.load();
};
Proxmox.Utils.monStoreErrors(me, store);
@@ -411,6 +415,9 @@ Ext.define('PVE.storage.ContentView', {
win.show();
}
});
+ if (content !== 'vztmpl') {
+ templateButton.setDisabled(true);
+ }
var uploadButton = Ext.create('Proxmox.button.Button', {
contents : ['iso','vztmpl'],
@@ -426,6 +433,11 @@ Ext.define('PVE.storage.ContentView', {
win.on('destroy', reload);
}
});
+ if (content === 'iso' || content === 'vztmpl') {
+ uploadButton.contents = [content];
+ } else {
+ uploadButton.setDisabled(true);
+ }
var imageRemoveButton;
var removeButton = Ext.create('Proxmox.button.StdRemoveButton',{
@@ -460,8 +472,6 @@ Ext.define('PVE.storage.ContentView', {
return false;
},
handler: function(btn, event, rec) {
- me = this;
-
var url = baseurl + '/' + rec.data.volid;
var vmid = rec.data.vmid;
@@ -492,19 +502,11 @@ Ext.define('PVE.storage.ContentView', {
item: { type: 'Image', id: vmid }
}).show();
win.on('destroy', function() {
- me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
- url: '/api2/json/nodes/' + nodename + '/storage/' + storage + '/status'
- });
reload();
-
});
}
});
- me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
- url: '/api2/json/nodes/' + nodename + '/storage/' + storage + '/status'
- });
-
Ext.apply(me, {
store: store,
selModel: sm,
@@ -617,37 +619,6 @@ Ext.define('PVE.storage.ContentView', {
});
me.callParent();
-
- // disable the buttons/restrict the upload window
- // if templates or uploads are not allowed
- me.mon(me.statusStore, 'load', function(s, records, success) {
- var availcontent = [];
- Ext.Array.each(records, function(item){
- if (item.id === 'content') {
- availcontent = item.data.value.split(',');
- }
- });
- var templ = false;
- var upload = false;
- var cts = [];
-
- Ext.Array.each(availcontent, function(content) {
- if (content === 'vztmpl') {
- templ = true;
- cts.push('vztmpl');
- } else if (content === 'iso') {
- upload = true;
- cts.push('iso');
- }
- });
-
- if (templ !== upload) {
- uploadButton.contents = cts;
- }
-
- templateButton.setDisabled(!templ);
- uploadButton.setDisabled(!upload && !templ);
- });
}
}, function() {
--
2.20.1
next prev parent reply other threads:[~2020-09-02 11:04 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-02 11:03 [pve-devel] [PATCH-SERIES/RFC manager 00/14] split up content view into a view for each type Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 01/14] config panel: allow new nodes to be added later Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 02/14] storage panel/browser: use insertNodes function Fabian Ebner
2020-09-02 11:03 ` Fabian Ebner [this message]
2020-09-02 11:03 ` [pve-devel] [PATCH manager 04/14] remove the now unneccessary grouping Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 05/14] content view: allow specifying title bar elements for init Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 06/14] turn nodename, storage, sm into object variables Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 07/14] add upload button conditionally Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 08/14] create and use template view Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 09/14] create and use backup view Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 10/14] get rid of unneccessary enableFns Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 11/14] create ImageView and use it for VM and CT images Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 12/14] simplify reload call Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [RFC manager 13/14] content view: allow specifying which columns to show on init Fabian Ebner
2020-09-02 11:03 ` [pve-devel] [PATCH manager 14/14] backup view: add prune window Fabian Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200902110337.25004-4-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox