@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 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.5",
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.getFilter && data.method && !data.method.endsWith('.read'))
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 (typeof Data.object === 'string')
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
- if (Data.key)
713
- Data.object[Data.key] = value
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)