@joist/element 4.2.3-next.4 → 4.2.3-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -95,21 +95,24 @@ export class JositForElement extends HTMLElement {
|
|
|
95
95
|
// to their correct positions based on the current iteration order
|
|
96
96
|
createFromEmpty(): void {
|
|
97
97
|
const template = this.#template();
|
|
98
|
+
const templateContent = template.content;
|
|
99
|
+
const keyProperty = this.key;
|
|
98
100
|
const fragment = document.createDocumentFragment();
|
|
99
101
|
|
|
100
102
|
let index = 0;
|
|
101
|
-
|
|
102
103
|
for (const value of this.#items) {
|
|
103
|
-
const key =
|
|
104
|
+
const key =
|
|
105
|
+
keyProperty && hasProperty(value, keyProperty)
|
|
106
|
+
? value[keyProperty]
|
|
107
|
+
: index;
|
|
104
108
|
|
|
105
109
|
const scope = new JForScope();
|
|
106
|
-
scope.append(document.importNode(
|
|
110
|
+
scope.append(document.importNode(templateContent, true));
|
|
107
111
|
scope.key = String(key);
|
|
108
112
|
scope.each = { position: index + 1, index, value };
|
|
109
113
|
|
|
110
114
|
fragment.appendChild(scope);
|
|
111
115
|
this.#scopes.set(key, scope);
|
|
112
|
-
|
|
113
116
|
index++;
|
|
114
117
|
}
|
|
115
118
|
|
|
@@ -121,11 +124,16 @@ export class JositForElement extends HTMLElement {
|
|
|
121
124
|
updateItems(): void {
|
|
122
125
|
const template = this.#template();
|
|
123
126
|
const leftoverScopes = new Map<unknown, JForScope>(this.#scopes);
|
|
127
|
+
const keyProperty = this.key; // Cache the key property
|
|
124
128
|
|
|
125
129
|
let index = 0;
|
|
126
130
|
|
|
127
131
|
for (const value of this.#items) {
|
|
128
|
-
|
|
132
|
+
// Optimize key lookup by caching the property check
|
|
133
|
+
const key =
|
|
134
|
+
keyProperty && hasProperty(value, keyProperty)
|
|
135
|
+
? value[keyProperty]
|
|
136
|
+
: index;
|
|
129
137
|
|
|
130
138
|
let scope = leftoverScopes.get(key);
|
|
131
139
|
|
|
@@ -137,8 +145,11 @@ export class JositForElement extends HTMLElement {
|
|
|
137
145
|
leftoverScopes.delete(key); // Remove from map to track unused scopes
|
|
138
146
|
}
|
|
139
147
|
|
|
140
|
-
|
|
141
|
-
scope.
|
|
148
|
+
// Only update if values have changed
|
|
149
|
+
if (scope.key !== key || scope.each.value !== value) {
|
|
150
|
+
scope.key = String(key);
|
|
151
|
+
scope.each = { position: index + 1, index, value };
|
|
152
|
+
}
|
|
142
153
|
|
|
143
154
|
const child = this.children[index + 1];
|
|
144
155
|
|
|
@@ -168,6 +179,7 @@ export class JositForElement extends HTMLElement {
|
|
|
168
179
|
function isIterable<T = unknown>(obj: any): obj is Iterable<T> {
|
|
169
180
|
return obj != null && typeof obj[Symbol.iterator] === "function";
|
|
170
181
|
}
|
|
182
|
+
|
|
171
183
|
function hasProperty(
|
|
172
184
|
item: unknown,
|
|
173
185
|
key: string,
|
|
@@ -119,12 +119,16 @@ let JositForElement = (() => {
|
|
|
119
119
|
}
|
|
120
120
|
createFromEmpty() {
|
|
121
121
|
const template = this.#template();
|
|
122
|
+
const templateContent = template.content;
|
|
123
|
+
const keyProperty = this.key;
|
|
122
124
|
const fragment = document.createDocumentFragment();
|
|
123
125
|
let index = 0;
|
|
124
126
|
for (const value of this.#items) {
|
|
125
|
-
const key = hasProperty(value,
|
|
127
|
+
const key = keyProperty && hasProperty(value, keyProperty)
|
|
128
|
+
? value[keyProperty]
|
|
129
|
+
: index;
|
|
126
130
|
const scope = new JForScope();
|
|
127
|
-
scope.append(document.importNode(
|
|
131
|
+
scope.append(document.importNode(templateContent, true));
|
|
128
132
|
scope.key = String(key);
|
|
129
133
|
scope.each = { position: index + 1, index, value };
|
|
130
134
|
fragment.appendChild(scope);
|
|
@@ -136,9 +140,12 @@ let JositForElement = (() => {
|
|
|
136
140
|
updateItems() {
|
|
137
141
|
const template = this.#template();
|
|
138
142
|
const leftoverScopes = new Map(this.#scopes);
|
|
143
|
+
const keyProperty = this.key;
|
|
139
144
|
let index = 0;
|
|
140
145
|
for (const value of this.#items) {
|
|
141
|
-
const key = hasProperty(value,
|
|
146
|
+
const key = keyProperty && hasProperty(value, keyProperty)
|
|
147
|
+
? value[keyProperty]
|
|
148
|
+
: index;
|
|
142
149
|
let scope = leftoverScopes.get(key);
|
|
143
150
|
if (!scope) {
|
|
144
151
|
scope = new JForScope();
|
|
@@ -148,8 +155,10 @@ let JositForElement = (() => {
|
|
|
148
155
|
else {
|
|
149
156
|
leftoverScopes.delete(key);
|
|
150
157
|
}
|
|
151
|
-
scope.key
|
|
152
|
-
|
|
158
|
+
if (scope.key !== key || scope.each.value !== value) {
|
|
159
|
+
scope.key = String(key);
|
|
160
|
+
scope.each = { position: index + 1, index, value };
|
|
161
|
+
}
|
|
153
162
|
const child = this.children[index + 1];
|
|
154
163
|
if (child !== scope) {
|
|
155
164
|
this.insertBefore(scope, child);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"for.element.js","sourceRoot":"","sources":["../../../../src/lib/templating/elements/for.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;IAoBxB,SAAS;4BALrB,OAAO,CAAC;YACP,OAAO,EAAE,aAAa;YAEtB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBAC0C,WAAW;;;;;;;yBAAnB,SAAQ,WAAW;;;;gCACpD,IAAI,EAAE;+BAON,IAAI,EAAE;YANP,iKAAS,IAAI,6BAAJ,IAAI,mFAIX;YAGF,8JAAS,GAAG,6BAAH,GAAG,iFAAM;YATpB,6KAUC;;;YAVY,uDAAS;;QAEpB,qEAA4B;YAC1B,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,IAAI;SACf,EAAC;QAJF,IAAS,IAAI,0CAIX;QAJF,IAAS,IAAI,gDAIX;QAGF,sHAAe,EAAE,GAAC;QAAlB,IAAS,GAAG,yCAAM;QAAlB,IAAS,GAAG,+CAAM;;;;;;;;SATP,SAAS;IAiBT,eAAe;4BAL3B,OAAO,CAAC;YACP,OAAO,EAAE,OAAO;YAEhB,SAAS,EAAE,CAAC,GAAG,CAAA,0BAA0B,EAAE,IAAI,CAAA,eAAe,CAAC;SAChE,CAAC;;;;sBACmC,WAAW;;;;;;;+BAAnB,SAAQ,WAAW;;;;gCAC7C,IAAI,EAAE;+BAGN,IAAI,EAAE;YAFP,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAGnB,8JAAS,GAAG,6BAAH,GAAG,iFAAM;YALpB,
|
|
1
|
+
{"version":3,"file":"for.element.js","sourceRoot":"","sources":["../../../../src/lib/templating/elements/for.element.ts"],"names":[],"mappings":"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"}
|