From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 4FA0469BBD for ; Tue, 23 Mar 2021 18:27:47 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 399CA32053 for ; Tue, 23 Mar 2021 18:27:17 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 85E2D32043 for ; Tue, 23 Mar 2021 18:27:15 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 4A948463E5 for ; Tue, 23 Mar 2021 18:27:15 +0100 (CET) Message-ID: Date: Tue, 23 Mar 2021 18:27:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:87.0) Gecko/20100101 Thunderbird/87.0 Content-Language: en-US From: Thomas Lamprecht To: Wolfgang Bumiller Cc: pmg-devel@lists.proxmox.com References: <20210323162916.23803-1-t.lamprecht@proxmox.com> In-Reply-To: <20210323162916.23803-1-t.lamprecht@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.045 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment NICE_REPLY_A -0.001 Looks like a legit reply (A) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [sencha.com] Subject: Re: [pmg-devel] applied: [PATCH] panel/acme-domains: fix cyclic dependency in view model X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Mar 2021 17:27:47 -0000 On 23.03.21 17:29, Thomas Lamprecht wrote: > A view model forumla cannot depend on itself, as that is a dependency > cycle. > > In this specific case we can just drop the `hasUsage` forumla entry > completely, it is bogus as it was just returning its value, and that > is actually taken care of by the `hasUsage` data binding. > > The debug build of ExtJS throws an exception on such cycles, the > release build does not cares to much and seems to do the right thing > already here. > > Signed-off-by: Thomas Lamprecht > --- > > @Wolfgang, or was there an actual reason this formula got added in the first > place? > > src/panel/ACMEDomains.js | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/src/panel/ACMEDomains.js b/src/panel/ACMEDomains.js > index f66975f..2b6c204 100644 > --- a/src/panel/ACMEDomains.js > +++ b/src/panel/ACMEDomains.js > @@ -47,7 +47,6 @@ Ext.define('Proxmox.panel.ACMEDomains', { > editBtnIcon: (get) => 'fa black fa-' + (get('accountEditable') ? 'check' : 'pencil'), > accountTextHidden: (get) => get('accountEditable') || !get('accountsAvailable'), > accountValueHidden: (get) => !get('accountEditable') || !get('accountsAvailable'), Oh, and note that statements like above may break "change detection" for ExtJS. With view model formulas, it first executes every formula and records the keys all the get() calls use, this is then tracked as dependencies for a formula and used to see what subsequent formulas need to be updated if any other formula or data binding changes. So, if on evaluation a get(X) is missed due to it being not always called, like with boolean statements where a single truthy is enough for an or expression like above, that data dependency is lost and one may see bug like behaviour. Use intermediate variables to combat that, for example, above `accountValueHidden` formula should read: accountValueHidden: (get) => { let editable = get('accountEditable'), available = get('accountsAvailable'); return !editable || !available; }, Alternatively, one can tell ExtJS explicitly what a formula binds too: accountValueHidden: { bind: { editable: '{accountEditable}', available: '{accountsAvailable}', }, get: data => !data.editable || !data.available, }, https://docs.sencha.com/extjs/6.0.2/guides/application_architecture/view_models_data_binding.html#application_architecture-_-view_models_data_binding_-_formulas_with_explicit_binding