@cocreate/elements 1.35.5 → 1.35.6
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 +9 -0
- package/package.json +1 -1
- package/src/form.js +1 -1
- package/src/index.js +58 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
## [1.35.6](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.35.5...v1.35.6) (2024-06-19)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add method update.object if upsert and filter ([3730438](https://github.com/CoCreate-app/CoCreate-elements/commit/37304389f0447cd24009c8deb406c48b85974bd7))
|
|
7
|
+
* handle isFIlter false in read function and improved handling of filter and render data ([85b6d00](https://github.com/CoCreate-app/CoCreate-elements/commit/85b6d00c128f27f378e7f5687f5fddf0a01268fe))
|
|
8
|
+
* skip-attribute to prevent form attributes from applying to an element ([72f18b3](https://github.com/CoCreate-app/CoCreate-elements/commit/72f18b3aa7dc929e300ddd225e3d961cc0007400))
|
|
9
|
+
|
|
1
10
|
## [1.35.5](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.35.4...v1.35.5) (2024-06-12)
|
|
2
11
|
|
|
3
12
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/elements",
|
|
3
|
-
"version": "1.35.
|
|
3
|
+
"version": "1.35.6",
|
|
4
4
|
"description": "Fetch content into any html element by using html5 attributes to query data stored in CoCreate headless CMS. If data is changed it will instantly reflect in html tags as changes are broadcasted in realtime",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"elements",
|
package/src/form.js
CHANGED
|
@@ -76,7 +76,7 @@ function setAttribute(form, elements) {
|
|
|
76
76
|
if (variable) {
|
|
77
77
|
for (let el of elements) {
|
|
78
78
|
// Set the value of the attribute.
|
|
79
|
-
if (!el.getAttribute(attribute.name)) {
|
|
79
|
+
if (!el.getAttribute(attribute.name) && !el.hasAttribute('skip-attribute')) {
|
|
80
80
|
el.setAttribute(attribute.name, form.getAttribute(attribute.name));
|
|
81
81
|
}
|
|
82
82
|
}
|
package/src/index.js
CHANGED
|
@@ -234,7 +234,7 @@ async function read(element, data, dataKey) {
|
|
|
234
234
|
|
|
235
235
|
for (let el of element) {
|
|
236
236
|
const isRead = el.getAttribute('read');
|
|
237
|
-
if (isRead !== 'false' && !el.hasRead) {
|
|
237
|
+
if (isRead !== 'false' && !el.hasRead && (!data.$filter || data.$filter && data.$filter.isFilter !== false)) {
|
|
238
238
|
el.hasRead = true
|
|
239
239
|
delay.elements.set(el, true)
|
|
240
240
|
} else {
|
|
@@ -362,9 +362,6 @@ async function setData(element, data) {
|
|
|
362
362
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
if (!data[type] || !data[type].length)
|
|
366
|
-
continue;
|
|
367
|
-
|
|
368
365
|
let action = el.getAttribute('actions')
|
|
369
366
|
if (action && ['database', 'array', 'object', 'key'].includes(action)) continue;
|
|
370
367
|
|
|
@@ -372,6 +369,9 @@ async function setData(element, data) {
|
|
|
372
369
|
if (el.getFilter || el.renderValue)
|
|
373
370
|
await filterData(el, data, type, key)
|
|
374
371
|
else {
|
|
372
|
+
if (!data[type] || !data[type].length)
|
|
373
|
+
continue;
|
|
374
|
+
|
|
375
375
|
if (key) {
|
|
376
376
|
let value
|
|
377
377
|
if (key.includes('$length')) {
|
|
@@ -454,11 +454,17 @@ async function filterData(element, data, type, key) {
|
|
|
454
454
|
}
|
|
455
455
|
}
|
|
456
456
|
|
|
457
|
+
let isRendered = element.querySelector('[render-clone]');
|
|
458
|
+
|
|
457
459
|
if (operator) {
|
|
458
460
|
element.setValue(value);
|
|
459
|
-
} else if (element.
|
|
461
|
+
} else if (element.renderValue && data.method && data.method.endsWith('.read') && data.$filter && (data.$filter.overwrite || !isRendered)) {
|
|
462
|
+
await element.renderValue(data);
|
|
463
|
+
} else if (data.$filter && data.$filter.loadmore || data.method && data.method.endsWith('.read') && isRendered) {
|
|
464
|
+
await loadMore(element, data, type)
|
|
465
|
+
} else if (element.getFilter && data.method && !data.method.endsWith('.read')) {
|
|
460
466
|
await checkFilters(element, data, type)
|
|
461
|
-
else if (element.renderValue) {
|
|
467
|
+
} else if (element.renderValue) {
|
|
462
468
|
await element.renderValue(data);
|
|
463
469
|
} else if (key === '$length') {
|
|
464
470
|
element.setValue(data[type].length);
|
|
@@ -481,6 +487,30 @@ async function filterData(element, data, type, key) {
|
|
|
481
487
|
element.dispatchEvent(evt);
|
|
482
488
|
}
|
|
483
489
|
|
|
490
|
+
async function loadMore(element, data, type, sort) {
|
|
491
|
+
let Data = { ...data };
|
|
492
|
+
let renderedData = await element.getData();
|
|
493
|
+
if (!renderedData || !renderedData[type]) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
for (let i = 0; i < Data[type].length; i++) {
|
|
497
|
+
let index;
|
|
498
|
+
if (type === 'object') {
|
|
499
|
+
index = renderedData[type].findIndex(obj => obj._id === Data[type][i]._id);
|
|
500
|
+
} else {
|
|
501
|
+
index = renderedData[type].findIndex(obj => obj.name === Data[type][i].name);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (index >= 0) {
|
|
505
|
+
Data[type].splice(i, 1);
|
|
506
|
+
i--; // Adjust the index to account for the removed item
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (Data[type].length > 0) {
|
|
510
|
+
await element.renderValue(Data);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
484
514
|
async function checkFilters(element, data, type) {
|
|
485
515
|
let Data
|
|
486
516
|
if (!element.getData) {
|
|
@@ -702,15 +732,30 @@ async function getData(form) {
|
|
|
702
732
|
|
|
703
733
|
// console.log(type, value, data)
|
|
704
734
|
if (!Data[Data.type] && Data.key) {
|
|
735
|
+
if (!value)
|
|
736
|
+
continue
|
|
737
|
+
else if (Array.isArray(value) && !value.length)
|
|
738
|
+
continue
|
|
739
|
+
|
|
705
740
|
Data.method = Data.type + '.create'
|
|
706
741
|
if (Data.type === 'object') {
|
|
707
|
-
if (
|
|
708
|
-
Data.object = { _id: Data.object }
|
|
709
|
-
else if (!Data.object)
|
|
742
|
+
if (!Data.object)
|
|
710
743
|
Data.object = {}
|
|
744
|
+
else if (typeof Data.object === 'string')
|
|
745
|
+
Data.object = { _id: Data.object }
|
|
711
746
|
|
|
712
|
-
|
|
713
|
-
|
|
747
|
+
|
|
748
|
+
if (Data.key) {
|
|
749
|
+
if (Data.key == '{}') {
|
|
750
|
+
if (Array.isArray(value)) {
|
|
751
|
+
Data.object = value
|
|
752
|
+
} else
|
|
753
|
+
Data.object = { ...Data.object, ...value }
|
|
754
|
+
} else
|
|
755
|
+
Data.object[Data.key] = value
|
|
756
|
+
}
|
|
757
|
+
if (Data.isUpsert && Data.$filter)
|
|
758
|
+
Data.method = 'object.update'
|
|
714
759
|
|
|
715
760
|
} else
|
|
716
761
|
Data[Data.type] = value
|
|
@@ -1090,6 +1135,8 @@ Observer.init({
|
|
|
1090
1135
|
observe: ['addedNodes'],
|
|
1091
1136
|
target: '[render-clone]',
|
|
1092
1137
|
callback: function (mutation) {
|
|
1138
|
+
if (!mutation.parentElement.hasAttribute('dnd'))
|
|
1139
|
+
return
|
|
1093
1140
|
let delayTimer = debounce.get(mutation)
|
|
1094
1141
|
clearTimeout(delayTimer);
|
|
1095
1142
|
debounce.delete(mutation.target)
|