@cocreate/render 1.28.3 → 1.28.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/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## [1.28.5](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.4...v1.28.5) (2023-10-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * render delete nodes ([1921e57](https://github.com/CoCreate-app/CoCreate-render/commit/1921e572051d62aa53513f5379538f3df3c76d93))
7
+ * update and delete for loop data.type ([cc5e4b5](https://github.com/CoCreate-app/CoCreate-render/commit/cc5e4b5ef33814de59159204f6af8648b6fdfbca))
8
+
9
+ ## [1.28.4](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.3...v1.28.4) (2023-10-14)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * bump dependencies ([ac79266](https://github.com/CoCreate-app/CoCreate-render/commit/ac79266c1f0934c2e9321536626074e1d4090070))
15
+ * improved finding clones to update and delete ([9bafc8b](https://github.com/CoCreate-app/CoCreate-render/commit/9bafc8b56fc20a03da8963a5888164ceb5fe28fc))
16
+ * use tbody as new element to prevent lost of tr and td elements ([88ca483](https://github.com/CoCreate-app/CoCreate-render/commit/88ca483c30e5c66c54fc70a8064d90fa8bdadff9))
17
+
1
18
  ## [1.28.3](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.2...v1.28.3) (2023-10-09)
2
19
 
3
20
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.28.3",
3
+ "version": "1.28.5",
4
4
  "description": "A simple render component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "render",
@@ -58,10 +58,10 @@
58
58
  "webpack-log": "^3.0.1"
59
59
  },
60
60
  "dependencies": {
61
- "@cocreate/actions": "^1.11.5",
62
- "@cocreate/api": "^1.15.3",
63
- "@cocreate/element-prototype": "^1.11.4",
64
- "@cocreate/observer": "^1.11.4",
65
- "@cocreate/utils": "^1.25.2"
61
+ "@cocreate/actions": "^1.11.6",
62
+ "@cocreate/api": "^1.15.4",
63
+ "@cocreate/element-prototype": "^1.11.5",
64
+ "@cocreate/observer": "^1.11.5",
65
+ "@cocreate/utils": "^1.25.3"
66
66
  }
67
67
  }
package/src/index.js CHANGED
@@ -88,12 +88,19 @@ async function render({ source, element, data, key, index, currentIndex, update,
88
88
  remove = remove || data.$filter.remove
89
89
  }
90
90
 
91
+ let type = data.type
92
+ if (!type && data.method) {
93
+ type = data.method.split('.')[1]
94
+ } else if (type == 'key')
95
+ type = 'object'
96
+
97
+
91
98
  if (!Array.isArray(element) && !(element instanceof HTMLCollection) && !(element instanceof NodeList))
92
99
  element = [element]
93
100
 
94
101
  for (let i = 0; i < element.length; i++) {
95
102
  if (!key)
96
- key = element[i].getAttribute('render')
103
+ key = element[i].getAttribute('render') || type
97
104
 
98
105
  let renderedNode = renderedNodes.get(element[i])
99
106
  if (source) {
@@ -104,47 +111,51 @@ async function render({ source, element, data, key, index, currentIndex, update,
104
111
  }
105
112
 
106
113
  if (remove) {
107
- if (renderedNode.source) {
108
- if (key)
109
- renderedNode.source.data[key].splice(index, 1)
110
- else {
111
-
114
+ for (let j = 0; j < data[type].length; j++) {
115
+ let cloneKey
116
+ if (type === 'object') {
117
+ cloneKey = data[type][j]._id;
118
+ } else {
119
+ cloneKey = data[type][j].name;
112
120
  }
113
- }
114
121
 
115
- let clone = Array.from(renderedNode.clones)[index]
116
- if (!clone) return
122
+ let clone = renderedNode.clones.get(cloneKey)
123
+ if (!clone) return
117
124
 
118
- renderedNode.clones.delete(clone[0])
119
- renderedNodes.delete(clone[1])
120
- clone[1].remove()
125
+ renderedNode.clones.delete(cloneKey)
126
+ renderedNodes.delete(clone)
127
+ clone.remove()
128
+ }
121
129
  } else if (key || Array.isArray(data)) {
122
130
  if (update) {
123
- let clone
124
-
125
- if (!currentIndex)
126
- currentIndex = data.$filter.currentIndex
131
+ for (let j = 0; j < data[type].length; j++) {
132
+ let clone
133
+ if (type === 'object') {
134
+ clone = renderedNode.clones.get(data[type][j]._id);
135
+ } else {
136
+ clone = renderedNode.clones.get(data[type][j].name);
137
+ }
127
138
 
128
- if (currentIndex >= 0)
129
- clone = Array.from(renderedNode.clones)[currentIndex]
130
- else
131
- clone = Array.from(renderedNode.clones)[index]
139
+ if (!currentIndex)
140
+ currentIndex = data.$filter.currentIndex
132
141
 
133
- if (!clone) return
142
+ if (!clone) return
134
143
 
135
- await renderValues(clone[1], data);
136
- if (currentIndex >= 0)
137
- insertElement(renderedNode, clone[1], index, currentIndex)
138
- }
144
+ await renderValues(clone, { object: data[type][j] });
145
+ if (currentIndex >= 0)
146
+ insertElement(renderedNode, clone, index, currentIndex)
147
+ }
148
+ } else {
139
149
 
140
- // TODO: if $auto here every subsequent clone will have same value, not replacing here will apply unique value to each clone
141
- if (key === '$auto')
142
- key = key.replace(/\$auto/g, uuid.generate(6));
150
+ // TODO: if $auto here every subsequent clone will have same value, not replacing here will apply unique value to each clone
151
+ if (key === '$auto')
152
+ key = key.replace(/\$auto/g, uuid.generate(6));
143
153
 
144
- if (key)
145
- element[i].setAttribute('render', key);
154
+ if (key)
155
+ element[i].setAttribute('render', key);
146
156
 
147
- renderTemplate(element[i], data, key, index);
157
+ renderTemplate(element[i], data, key, index);
158
+ }
148
159
  } else
149
160
  await renderValues(element[i], data);
150
161
 
@@ -153,8 +164,8 @@ async function render({ source, element, data, key, index, currentIndex, update,
153
164
  }
154
165
 
155
166
  async function renderTemplate(template, data, key, index, keyPath) {
156
- if (!key)
157
- key = template.getAttribute('render')
167
+ // if (!key)
168
+ // key = template.getAttribute('render')
158
169
 
159
170
  let templateData = renderedNodes.get(template)
160
171
  if (!templateData) {
@@ -297,7 +308,7 @@ function cloneTemplate(template) {
297
308
  }
298
309
 
299
310
  if (typeof clone === 'string') {
300
- let container = document.createElement('div');
311
+ let container = document.createElement('tbody');
301
312
  container.innerHTML = clone;
302
313
  clone = container.firstChild
303
314
  container.remove()