public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Alexandre Derumier <aderumier@odiso.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v10 pve-manager 18/19] sdn: add pending state column with hover tip
Date: Tue,  5 Jan 2021 10:07:08 +0100	[thread overview]
Message-ID: <20210105090709.1706377-19-aderumier@odiso.com> (raw)
In-Reply-To: <20210105090709.1706377-1-aderumier@odiso.com>

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 www/manager6/Utils.js              | 71 +++++++++++++++++++-----------
 www/manager6/sdn/ControllerView.js | 17 +++----
 www/manager6/sdn/SubnetView.js     | 12 ++++-
 www/manager6/sdn/VnetView.js       |  8 ++++
 www/manager6/sdn/ZoneView.js       | 27 +++---------
 5 files changed, 75 insertions(+), 60 deletions(-)

diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 89706c32..5a6267fe 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -176,32 +176,51 @@ Ext.define('PVE.Utils', { utilities: {
     },
 
     render_sdn_pending: function(rec,value,key, index) {
-        if (rec.data.state === 'deleted') {
-            if (value === undefined) {
-                return ' ';
-            } else {
-                return '<div style="text-decoration: line-through;">'+ value +'</div>';
-            }
-
-        } else if (rec.data.state === 'new') {
-            if(index === undefined) {
-                value = rec.data.pending[key];
-            }
-            if (value === undefined || value === null) {
-                value = ' ';
-            }
-            return '<div style="color:green">' + value + '</div>';
-        } else if (rec.data.state === 'changed') {
-            if (value === undefined || value === null) {
-                value = '<br>';
-            }
-            if (rec.data.pending[key] === undefined || rec.data.pending[key] === null) {
-                rec.data.pending[key] = value;
-            }
-           return '<div style="text-decoration: line-through;">'+ value +'</div>' + '<div style="color:orange">' + rec.data.pending[key] + '</div>';
-        } else {
-            return value;
-        }
+	if (rec.data.state === undefined || rec.data.state === null) {
+	    return value;
+	}
+
+	if (rec.data.state === 'deleted') {
+	    if (value === undefined) {
+		return ' ';
+	    } else {
+		return '<div style="text-decoration: line-through;">'+ value +'</div>';
+	    }
+	} else {
+
+	    if (rec.data.pending[key] !== undefined && rec.data.pending[key] !== null) {
+		if (rec.data.pending[key] === 'deleted') {
+		    return ' ';
+		} else {
+		    return rec.data.pending[key];
+		}
+	    } else {
+		return value;
+	    }
+	}
+	return value;
+    },
+
+    render_sdn_pending_state: function(rec,value) {
+
+	if (value === undefined || value === null) {
+	    return ' ';
+	}
+
+	let icon = `<i class="fa fa-fw fa-refresh warning"></i>`;
+
+	if (value === 'deleted') {
+	    return '<span>' + icon + value + '</span>';
+	}
+
+	let tip = 'Pending apply: <br>';
+
+	for (const [key, keyvalue] of Object.entries(rec.data.pending)) {
+	    if (((rec.data[key] !== undefined && rec.data.pending[key] !== rec.data[key]) || rec.data[key] === undefined)) {
+		tip = tip + `${key}: ${keyvalue} <br>`;
+	    }
+	}
+	return '<span data-qtip="' + tip + '">'+ icon + value + '</span>';
     },
 
     render_ceph_health: function(healthObj) {
diff --git a/www/manager6/sdn/ControllerView.js b/www/manager6/sdn/ControllerView.js
index 10c9c446..7981eba9 100644
--- a/www/manager6/sdn/ControllerView.js
+++ b/www/manager6/sdn/ControllerView.js
@@ -143,19 +143,12 @@ Ext.define('PVE.sdn.ControllerView', {
                     }
 		},
                 {
-                    header: gettext('Pending'),
-                    flex: 3,
-                    dataIndex: 'pending',
+                    header: gettext('State'),
+		    width: 100,
+                    dataIndex: 'state',
                     renderer: function(value, metaData, rec) {
-                        if(value !== undefined ) {
-                                delete value.controller;
-                                delete value.type;
-				if(!Ext.Object.isEmpty(value)){
-				    return JSON.stringify(value);
-				}
-                        }
-                        return '';
-                    }
+                        return PVE.Utils.render_sdn_pending_state(rec, value);
+		    }
                 }
 	    ],
 	    listeners: {
diff --git a/www/manager6/sdn/SubnetView.js b/www/manager6/sdn/SubnetView.js
index bff047fb..9a85bbbc 100644
--- a/www/manager6/sdn/SubnetView.js
+++ b/www/manager6/sdn/SubnetView.js
@@ -129,8 +129,16 @@ Ext.define('PVE.sdn.SubnetView', {
 		    dataIndex: 'dnszoneprefix',
                     renderer: function(value, metaData, rec) {
                         return PVE.Utils.render_sdn_pending(rec, value, 'dnszoneprefix');
-                    }
-		},
+		    }
+                },
+		{
+		    header: gettext('State'),
+		    width: 100,
+		    dataIndex: 'state',
+		    renderer: function(value, metaData, rec) {
+			return PVE.Utils.render_sdn_pending_state(rec, value);
+		    }
+		}
 
 	    ],
 	    listeners: {
diff --git a/www/manager6/sdn/VnetView.js b/www/manager6/sdn/VnetView.js
index da0234dd..a38a9c9a 100644
--- a/www/manager6/sdn/VnetView.js
+++ b/www/manager6/sdn/VnetView.js
@@ -124,6 +124,14 @@ Ext.define('PVE.sdn.VnetView', {
                     renderer: function(value, metaData, rec) {
 			return PVE.Utils.render_sdn_pending(rec, value, 'vlanaware');
 		    }
+		},
+		{
+		    header: gettext('State'),
+		    width: 100,
+		    dataIndex: 'state',
+                    renderer: function(value, metaData, rec) {
+			return PVE.Utils.render_sdn_pending_state(rec, value);
+		    }
 		}
 	    ],
 	    listeners: {
diff --git a/www/manager6/sdn/ZoneView.js b/www/manager6/sdn/ZoneView.js
index ae44f95f..0d4ce9ac 100644
--- a/www/manager6/sdn/ZoneView.js
+++ b/www/manager6/sdn/ZoneView.js
@@ -179,27 +179,14 @@ Ext.define('PVE.sdn.ZoneView', {
                         return PVE.Utils.render_sdn_pending(rec, value, 'reversedns');
                     }
 		},
-		{
-		    header: gettext('Pending'),
-		    flex: 3,
-		    dataIndex: 'pending',
+                {
+                    header: gettext('State'),
+		    width: 100,
+                    dataIndex: 'state',
                     renderer: function(value, metaData, rec) {
-			if(value !== undefined ) {
-				delete value.nodes;
-				delete value.zone;
-				delete value.type;
-				delete value.mtu;
-				delete value.ipam;
-				delete value.dns;
-				delete value.reversedns;
-				delete value.dnszone;
-				if(!Ext.Object.isEmpty(value)){
-				    return JSON.stringify(value);
- 				}
-			}
-			return '';
-                    }
-		},
+                        return PVE.Utils.render_sdn_pending_state(rec, value);
+		    }
+                }
 	    ],
 	    listeners: {
 		activate: reload,
-- 
2.20.1




  parent reply	other threads:[~2021-01-05  9:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-05  9:06 [pve-devel] [PATCH v10 pve-manager 00/19] sdn: add subnets management Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 01/19] sdn: vnetedit: add subnets && remove ip/mac Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 02/19] add sdn subnets Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 03/19] add sdn ipams Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 04/19] sdn: add PVEIpam Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 05/19] sdn: subnets: ipam is optional Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 06/19] add sdn dns Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 07/19] subnets: add dns fields Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 08/19] add vnet option to subnets and remove subnets list from vnet Alexandre Derumier
2021-01-05  9:06 ` [pve-devel] [PATCH v10 pve-manager 09/19] add vnet panel with vnet + subnets split view Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 10/19] subnets: move ipam/dns in advanced section, and use "pve" as default ipam Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 11/19] sdn: add options panel + move controller/ipam/dns view Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 12/19] sdn: display pending values Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 13/19] move ipams && dns options to zone Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 14/19] sdn: browser: add onlinehelp Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 15/19] sdn: evpn improvments Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 16/19] sdn: update onlinehelp links Alexandre Derumier
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 17/19] sdn : zone content view: add alias && resize column Alexandre Derumier
2021-01-05  9:07 ` Alexandre Derumier [this message]
2021-01-05  9:07 ` [pve-devel] [PATCH v10 pve-manager 19/19] vnets: readd missing mac address advanced field Alexandre Derumier

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=20210105090709.1706377-19-aderumier@odiso.com \
    --to=aderumier@odiso.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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal