[pve-devel] [PATCH manager 6/6] ui: dc/Auth: add sync button
Dominik Csapak
d.csapak at proxmox.com
Mon Apr 27 12:29:36 CEST 2020
On 4/27/20 12:15 PM, Thomas Lamprecht wrote:
> On 4/9/20 4:10 PM, Dominik Csapak wrote:
>> opens a window with the parameters for the sync and two buttons:
>> 'preview' and 'sync'
>>
>> both open the taskviewer, but the 'preview' one sets the 'no-write'
>> parameter so that it does not get written out to the user.cfg
>>
>> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
>> ---
>> www/manager6/Makefile | 1 +
>> www/manager6/dc/AuthView.js | 21 ++++++
>> www/manager6/dc/SyncWindow.js | 125 ++++++++++++++++++++++++++++++++++
>> 3 files changed, 147 insertions(+)
>> create mode 100644 www/manager6/dc/SyncWindow.js
>
>
> Works OK, after the s/no-write/dry-run/ fix which was required to a change to
> the API patch coming after you sent this one - obviously.
>
> Some UX changes I'd like to see though, mainly regarding the default sync options.
> I'd like to have their values visible in the Realm Sync window and ideally, if a
> non-optional property is not set in the default-sync-options we should require that
> one.
make sense
>
> For display the value(s) of the default-sync-options for this realm we could either
> add another section at the top of the window, having all set fields there (or a
> "emptyText"-like "No default-sync-option set", if none).
i'd rather go with the emptyText here (otherwise we have each field
twice, one field and one display, which i would find confusing)
>
> An alternative could be to show it after the "Default". Oh, and the "Enable new"
> default entry "Yes (Default)" can be really confusing, because if one set the
> sync-options to "do not enable new" this would do the opposite the user got told.
>
>>
>> diff --git a/www/manager6/Makefile b/www/manager6/Makefile
>> index a06d349c..67f81b20 100644
>> --- a/www/manager6/Makefile
>> +++ b/www/manager6/Makefile
>> @@ -232,6 +232,7 @@ JSSRC= \
>> dc/RoleView.js \
>> dc/RoleEdit.js \
>> dc/ACLView.js \
>> + dc/SyncWindow.js \
>> dc/AuthView.js \
>> dc/AuthEditBase.js \
>> dc/AuthEditAD.js \
>> diff --git a/www/manager6/dc/AuthView.js b/www/manager6/dc/AuthView.js
>> index a2486fef..3e5a8517 100644
>> --- a/www/manager6/dc/AuthView.js
>> +++ b/www/manager6/dc/AuthView.js
>> @@ -73,6 +73,19 @@ Ext.define('PVE.dc.AuthView', {
>> me.openEditWindow(rec.data.type, rec.data.realm);
>> },
>>
>> + open_sync_window: function() {
>> + let me = this;
>> + let rec = me.getSelection()[0];
>> + if (!rec) {
>> + return;
>> + }
>> + Ext.create('PVE.dc.SyncWindow', {
>> + realm: rec.data.realm,
>> + listeners: {
>> + destroy: () => me.reload(),
>> + },
>> + }).show();
>> + },
>>
>> initComponent: function() {
>> var me = this;
>> @@ -107,6 +120,14 @@ Ext.define('PVE.dc.AuthView', {
>> enableFn: (rec) => PVE.Utils.authSchema[rec.data.type].add,
>> callback: () => me.reload(),
>> },
>> + '-',
>> + {
>> + xtype: 'proxmoxButton',
>> + text: gettext('Sync'),
>> + disabled: true,
>> + enableFn: (rec) => Boolean(PVE.Utils.authSchema[rec.data.type].syncipanel),
>> + handler: () => me.open_sync_window(),
>> + },
>> ],
>> listeners: {
>> activate: () => me.reload(),
>> diff --git a/www/manager6/dc/SyncWindow.js b/www/manager6/dc/SyncWindow.js
>> new file mode 100644
>> index 00000000..21d4fbfb
>> --- /dev/null
>> +++ b/www/manager6/dc/SyncWindow.js
>> @@ -0,0 +1,125 @@
>> +Ext.define('PVE.dc.SyncWindow', {
>> + extend: 'Ext.window.Window',
>> +
>> + title: gettext('Realm Sync'),
>> +
>> + bodyPadding: 10,
>> + modal: true,
>> + resizable: false,
>> +
>> + sync_realm: function(is_preview) {
>> + let me = this;
>> + let ipanel = me.down('inputpanel');
>> + let params = ipanel.getValues();
>> + params['no-write'] = is_preview ? 1 : 0;
>> + Proxmox.Utils.API2Request({
>> + url: `/access/domains/${me.realm}/sync`,
>> + waitMsgTarget: me,
>> + method: 'POST',
>> + params,
>> + failure: function(response) {
>> + me.show();
>> + Ext.Msg.alert(gettext('Error'), response.htmlStatus);
>> + },
>> + success: function(response) {
>> + me.hide();
>> + Ext.create('Proxmox.window.TaskViewer', {
>> + upid: response.result.data,
>> + listeners: {
>> + destroy: function() {
>> + me.close();
>> + },
>> + },
>> + }).show();
>> + },
>> + });
>> + },
>> +
>> + items: [
>> + {
>> + xtype: 'inputpanel',
>> + column1: [
>> + {
>> + xtype: 'proxmoxKVComboBox',
>> + name: 'scope',
>> + fieldLabel: gettext('Scope'),
>> + value: '__default__',
>> + deleteEmpty: false,
>> + comboItems: [
>> + ['__default__', Proxmox.Utils.defaultText],
>> + ['users', gettext('Users')],
>> + ['groups', gettext('Groups')],
>> + ['both', gettext('Users and Groups')],
>> + ],
>> + },
>> + {
>> + xtype: 'proxmoxKVComboBox',
>> + value: '__default__',
>> + deleteEmpty: false,
>> + comboItems: [
>> + ['__default__', Proxmox.Utils.defaultText],
>> + ['1', Proxmox.Utils.yesText],
>> + ['0', Proxmox.Utils.noText],
>> + ],
>> + name: 'full',
>> + fieldLabel: gettext('Full'),
>> + },
>> + ],
>> +
>> + column2: [
>> + {
>> + xtype: 'proxmoxKVComboBox',
>> + value: '__default__',
>> + deleteEmpty: false,
>> + comboItems: [
>> + [
>> + '__default__',
>> + Ext.String.format(
>> + gettext("{0} ({1})"),
>> + Proxmox.Utils.yesText,
>> + Proxmox.Utils.defaultText,
>> + ),
>> + ],
>> + ['1', Proxmox.Utils.yesText],
>> + ['0', Proxmox.Utils.noText],
>> + ],
>> + name: 'enable-new',
>> + fieldLabel: gettext('Enable new'),
>> + },
>> + {
>> + xtype: 'proxmoxKVComboBox',
>> + value: '__default__',
>> + deleteEmpty: false,
>> + comboItems: [
>> + ['__default__', Proxmox.Utils.defaultText],
>> + ['1', Proxmox.Utils.yesText],
>> + ['0', Proxmox.Utils.noText],
>> + ],
>> + name: 'purge',
>> + fieldLabel: gettext('Purge'),
>> + },
>> + ],
>> + },
>> + ],
>> +
>> + buttons: [
>> + {
>> + text: gettext('Preview'),
>
> maybe add a tooltip here, something like:
>
> tooltip: gettext('Preview the changes made through a sync'),
>
> ?
ok
>
>> + handler: function() { this.up('window').sync_realm(true); },
>> + },
>> + {
>> + text: gettext('Sync'),
>> + handler: function() { this.up('window').sync_realm(false); },
>> + },
>> + ],
>> +
>> + initComponent: function() {
>> + let me = this;
>> +
>> + if (!me.realm) {
>> + throw "no realm defined";
>> + }
>> +
>> + me.callParent();
>> + },
>> +});
>>
>
More information about the pve-devel
mailing list