@cocreate/render 1.41.5 → 1.42.0
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/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/src/index.js +51 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [1.42.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.41.5...v1.42.0) (2024-09-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* render-reverse attribute to trigger reverse rendering for chats , etc ([f688f61](https://github.com/CoCreate-app/CoCreate-render/commit/f688f61ae4446a18356515c6d88d6bd8cc0be142))
|
|
7
|
+
|
|
1
8
|
## [1.41.5](https://github.com/CoCreate-app/CoCreate-render/compare/v1.41.4...v1.41.5) (2024-08-24)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -283,6 +283,13 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
283
283
|
if (templateData.source && templateData.source.element)
|
|
284
284
|
renderType = templateData.source.element.getAttribute('render-type');
|
|
285
285
|
|
|
286
|
+
let renderReverse
|
|
287
|
+
if (templateData.source && templateData.source.element) {
|
|
288
|
+
renderReverse = templateData.source.element.getAttribute('render-reverse');
|
|
289
|
+
if (!renderReverse)
|
|
290
|
+
renderReverse = template.element.getAttribute('render-reverse');
|
|
291
|
+
}
|
|
292
|
+
|
|
286
293
|
if (key && !Array.isArray(renderData) || renderType === "object") {
|
|
287
294
|
if (renderType && Array.isArray(renderData) && renderData.length === 1)
|
|
288
295
|
renderData = renderData[0]
|
|
@@ -356,7 +363,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
356
363
|
if (key !== 'data')
|
|
357
364
|
index = i
|
|
358
365
|
await renderValues(clone.element, object, key, renderAs, null, null, index);
|
|
359
|
-
insertElement(template, clone.element, index);
|
|
366
|
+
insertElement(template, clone.element, index, '', data, renderReverse);
|
|
360
367
|
}
|
|
361
368
|
}
|
|
362
369
|
}
|
|
@@ -400,7 +407,7 @@ function cloneTemplate(template) {
|
|
|
400
407
|
return renderedNode;
|
|
401
408
|
}
|
|
402
409
|
|
|
403
|
-
function insertElement(template, element, index, currentIndex) {
|
|
410
|
+
function insertElement(template, element, index, currentIndex, data, renderReverse) {
|
|
404
411
|
let eid = element.getAttribute('eid')
|
|
405
412
|
if (!eid) {
|
|
406
413
|
eid = uuid.generate(6)
|
|
@@ -410,22 +417,54 @@ function insertElement(template, element, index, currentIndex) {
|
|
|
410
417
|
if (index !== null && index >= 0) {
|
|
411
418
|
if (!template.clones)
|
|
412
419
|
template = template.template
|
|
413
|
-
const clones = Array.from(template.clones);
|
|
420
|
+
// const clones = Array.from(template.clones);
|
|
414
421
|
|
|
415
422
|
let item
|
|
416
|
-
if (currentIndex) {
|
|
423
|
+
if (!currentIndex && currentIndex !== 0) {
|
|
424
|
+
if (template.clones.has(eid))
|
|
425
|
+
return
|
|
426
|
+
item = [eid, element];
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
const clones = Array.from(template.clones);
|
|
430
|
+
|
|
431
|
+
if (currentIndex || currentIndex === 0) {
|
|
417
432
|
item = clones.splice(currentIndex, 1)[0];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (data.$filter && data.$filter.startingIndex)
|
|
436
|
+
index += data.$filter.startingIndex
|
|
437
|
+
clones.splice(index, 0, item); // Insert item into clones at the specified index
|
|
438
|
+
|
|
439
|
+
if (renderReverse) {
|
|
440
|
+
// Chat-specific logic: reverse rendering but still inserting based on sorting
|
|
441
|
+
|
|
442
|
+
// If we're rendering in reverse order, we want to respect the insertion index
|
|
443
|
+
if (clones[index + 1] && clones[index + 1][1] !== element) {
|
|
444
|
+
// Insert before the next element (reverse order means newer items come before older ones)
|
|
445
|
+
clones[index + 1][1].insertAdjacentElement('afterend', element);
|
|
446
|
+
} else if (clones[index] && clones[index][1] !== element) {
|
|
447
|
+
// Insert after the current element if there's no next element
|
|
448
|
+
clones[index][1].insertAdjacentElement('beforeend', element);
|
|
449
|
+
} else {
|
|
450
|
+
// Fallback: insert before the template if clones are empty or undefined
|
|
451
|
+
template.element.insertAdjacentElement('afterend', element);
|
|
452
|
+
}
|
|
453
|
+
|
|
418
454
|
} else {
|
|
419
|
-
|
|
455
|
+
// Non-chat logic: handle ascending or descending order as usual
|
|
456
|
+
if (clones[index + 1] && clones[index + 1][1] !== element) {
|
|
457
|
+
// Insert before the next element
|
|
458
|
+
clones[index + 1][1].insertAdjacentElement('beforebegin', element);
|
|
459
|
+
} else if (clones[index] && clones[index][1] !== element) {
|
|
460
|
+
// Insert after the current element if there's no next element
|
|
461
|
+
clones[index][1].insertAdjacentElement('afterend', element);
|
|
462
|
+
} else {
|
|
463
|
+
// Fallback: insert before the template if clones are empty or undefined
|
|
464
|
+
template.element.insertAdjacentElement('beforebegin', element);
|
|
465
|
+
}
|
|
420
466
|
}
|
|
421
467
|
|
|
422
|
-
clones.splice(index, 0, item);
|
|
423
|
-
if (clones[index + 1] && clones[index][1] !== element)
|
|
424
|
-
clones[index][1].insertAdjacentElement('beforebegin', element);
|
|
425
|
-
else if (clones[index] && clones[index][1] !== element)
|
|
426
|
-
clones[index][1].insertAdjacentElement('afterend', element);
|
|
427
|
-
else
|
|
428
|
-
template.element.insertAdjacentElement('beforebegin', element);
|
|
429
468
|
template.clones = new Map(clones);
|
|
430
469
|
} else {
|
|
431
470
|
template.clones.set(eid, element)
|