You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2020/08/10 04:59:38 UTC

[royale-asjs] 01/02: Make columns immutable for internal use. getter/setter works on copies.

This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 67a54a324fb1697a6f41b12ac266bec2e7cec8b3
Author: greg-dove <gr...@gmail.com>
AuthorDate: Mon Aug 10 16:53:02 2020 +1200

    Make columns immutable for internal use. getter/setter works on copies.
---
 .../beads/models/DataGridCollectionViewModel.as    | 26 +++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
index 29119c1..7e47d50 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridCollectionViewModel.as
@@ -61,12 +61,32 @@ package org.apache.royale.html.beads.models
 		 */
 		public function get columns():Array
 		{
-			return _columns;
+			return _columns ? _columns.slice() : []; //return a copy. Internal state is not externally mutable
 		}
 		public function set columns(value:Array):void
 		{
-			if (_columns != value) {
-				_columns = value;
+			var change:Boolean;
+			var oldCols:Array = _columns;
+			if (oldCols) {
+				var l:uint = oldCols.length;
+				if (value) {
+					change = value.length != l; //different columns lengths
+					if (!change) {
+						for (var i:uint = 0; i < l; i++) {
+							if (oldCols[i] != value[i]) {
+								change = true; //at least one non-matching column
+								break;
+							}
+						}
+					}
+				} else {
+					change = l > 0; //reset to empty
+				}
+			} else {
+				change = value && value.length; //set to something after previously empty
+			}
+			if (change) {
+				_columns = value ? value.slice() : [];
 				dispatchEvent( new Event("columnsChanged"));
 			}
 		}