@cocreate/render 1.30.1 → 1.32.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 CHANGED
@@ -1,3 +1,29 @@
1
+ # [1.32.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.31.0...v1.32.0) (2023-11-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * bug rendering forms ([abc62d4](https://github.com/CoCreate-app/CoCreate-render/commit/abc62d45c5e7cbb418e88c11fb39ee9e94b1728b))
7
+ * type replace with key ([7575216](https://github.com/CoCreate-app/CoCreate-render/commit/7575216927168b7157a7d2fb820415eb4309ccbf))
8
+
9
+
10
+ ### Features
11
+
12
+ * filter.overwite boolean to force re render ([273c71a](https://github.com/CoCreate-app/CoCreate-render/commit/273c71ad7b82a343c2b9d87ca17997584e778612))
13
+
14
+ # [1.31.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.30.1...v1.31.0) (2023-11-12)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * await renderTemplate ([7680350](https://github.com/CoCreate-app/CoCreate-render/commit/7680350b4fb1c25aaf23e04c80ea3be419c4080e))
20
+ * bump dependencies for latest features ([342de1f](https://github.com/CoCreate-app/CoCreate-render/commit/342de1feb27739de85626f90bc94d0c627ef4cfa))
21
+
22
+
23
+ ### Features
24
+
25
+ * support startingIndex ([bc3332a](https://github.com/CoCreate-app/CoCreate-render/commit/bc3332ad8ffad1a22d030c72a670356c3ac14e29))
26
+
1
27
  ## [1.30.1](https://github.com/CoCreate-app/CoCreate-render/compare/v1.30.0...v1.30.1) (2023-11-09)
2
28
 
3
29
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.30.1",
3
+ "version": "1.32.0",
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.12.1",
62
- "@cocreate/api": "^1.15.9",
63
- "@cocreate/element-prototype": "^1.11.8",
64
- "@cocreate/observer": "^1.11.7",
65
- "@cocreate/utils": "^1.26.2"
61
+ "@cocreate/actions": "^1.12.3",
62
+ "@cocreate/api": "^1.15.11",
63
+ "@cocreate/element-prototype": "^1.13.0",
64
+ "@cocreate/observer": "^1.11.9",
65
+ "@cocreate/utils": "^1.27.1"
66
66
  }
67
67
  }
package/src/index.js CHANGED
@@ -42,7 +42,7 @@ function init(element) {
42
42
  let source = sources.get(element[i])
43
43
  if (!source) {
44
44
  sources.set(element[i], { element: element[i] })
45
- element[i].renderValue = (data) => render({ source: element[i], data })
45
+ element[i].renderValue = async (data) => await render({ source: element[i], data })
46
46
  element[i].getData = () => sources.get(element[i]).data
47
47
  }
48
48
  }
@@ -71,9 +71,19 @@ async function render({ source, element, selector, data, key, index, currentInde
71
71
  }
72
72
 
73
73
  if (source) {
74
- if (!key)
74
+ if (!key) {
75
75
  key = source.getAttribute('render') || source.getAttribute('key')
76
+ if (!key) {
77
+ key = data.type
78
+ if (key == 'key')
79
+ key = 'object'
80
+ else if (!key && data.method)
81
+ key = data.method.split('.')[0]
82
+ else if (!key)
83
+ return
76
84
 
85
+ }
86
+ }
77
87
  let sourceData = sources.get(source)
78
88
  if (!sourceData) {
79
89
  sourceData = { element: source, data }
@@ -88,23 +98,16 @@ async function render({ source, element, selector, data, key, index, currentInde
88
98
  source = { data }
89
99
 
90
100
  if (data.$filter) {
91
- index = index || data.$filter.index
101
+ index = index || data.$filter.startingIndex
92
102
  update = update || data.$filter.update
93
103
  remove = remove || data.$filter.remove
94
104
  }
95
105
 
96
- let type = data.type
97
- if (!type && data.method) {
98
- type = data.method.split('.')[0]
99
- } else if (type == 'key')
100
- type = 'object'
101
-
102
-
103
106
  if (!Array.isArray(element) && !(element instanceof HTMLCollection) && !(element instanceof NodeList))
104
107
  element = [element]
105
108
 
106
109
  for (let i = 0; i < element.length; i++) {
107
- key = element[i].getAttribute('render') || key || type
110
+ key = element[i].getAttribute('render') || key
108
111
 
109
112
  let renderedNode = renderedNodes.get(element[i])
110
113
  if (source) {
@@ -115,12 +118,12 @@ async function render({ source, element, selector, data, key, index, currentInde
115
118
  }
116
119
 
117
120
  if (remove) {
118
- for (let j = 0; j < data[type].length; j++) {
121
+ for (let j = 0; j < data[key].length; j++) {
119
122
  let cloneKey
120
- if (type === 'object') {
121
- cloneKey = data[type][j]._id;
123
+ if (key === 'object') {
124
+ cloneKey = data[key][j]._id;
122
125
  } else {
123
- cloneKey = data[type][j].name;
126
+ cloneKey = data[key][j].name;
124
127
  }
125
128
 
126
129
  let clone = renderedNode.clones.get(cloneKey)
@@ -132,12 +135,12 @@ async function render({ source, element, selector, data, key, index, currentInde
132
135
  }
133
136
  } else if (key || Array.isArray(data)) {
134
137
  if (update) {
135
- for (let j = 0; j < data[type].length; j++) {
138
+ for (let j = 0; j < data[key].length; j++) {
136
139
  let clone
137
- if (type === 'object') {
138
- clone = renderedNode.clones.get(data[type][j]._id);
140
+ if (key === 'object') {
141
+ clone = renderedNode.clones.get(data[key][j]._id);
139
142
  } else {
140
- clone = renderedNode.clones.get(data[type][j].name);
143
+ clone = renderedNode.clones.get(data[key][j].name);
141
144
  }
142
145
 
143
146
  if (!currentIndex)
@@ -145,12 +148,11 @@ async function render({ source, element, selector, data, key, index, currentInde
145
148
 
146
149
  if (!clone) return
147
150
 
148
- await renderValues(clone, { object: data[type][j] });
151
+ await renderValues(clone, { object: data[key][j] });
149
152
  if (currentIndex >= 0)
150
153
  insertElement(renderedNode, clone, index, currentIndex)
151
154
  }
152
155
  } else {
153
-
154
156
  // TODO: if $auto here every subsequent clone will have same value, not replacing here will apply unique value to each clone
155
157
  if (key === '$auto')
156
158
  key = key.replace(/\$auto/g, uuid.generate(6));
@@ -158,7 +160,7 @@ async function render({ source, element, selector, data, key, index, currentInde
158
160
  if (key)
159
161
  element[i].setAttribute('render', key);
160
162
 
161
- renderTemplate(element[i], data, key, index);
163
+ await renderTemplate(element[i], data, key, index);
162
164
  }
163
165
  } else
164
166
  await renderValues(element[i], data);
@@ -209,7 +211,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
209
211
 
210
212
 
211
213
  let isInsert = data.$filter && (data.$filter.create || data.$filter.update)
212
- if (!isInsert && index === 0) {
214
+ if (!isInsert && !index || data.$filter.overwrite) {
213
215
  for (const [key, element] of template.clones) {
214
216
  renderedNodes.delete(element)
215
217
  element.remove()
@@ -300,6 +302,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
300
302
 
301
303
  function cloneTemplate(template) {
302
304
  let clone = template.element.cloneNode(true);
305
+ let cloneTagName = clone.tagName
303
306
 
304
307
  if (clone.tagName == 'TEMPLATE') {
305
308
  clone = template.element.content.firstElementChild
@@ -316,12 +319,16 @@ function cloneTemplate(template) {
316
319
  let renderAs = clone.getAttribute('render-as')
317
320
  if (renderAs) {
318
321
  clone = clone.outerHTML.replace(/\$auto/g, renderAs);
319
- } else {
320
- clone = clone.outerHTML;
321
322
  }
322
323
 
323
324
  if (typeof clone === 'string') {
324
- let container = document.createElement('tbody');
325
+ // TODO: Some elements are only allowed a specific element, need to find these elements and confirm proper rendering.
326
+ let container
327
+ if (cloneTagName === 'TR')
328
+ container = document.createElement('tbody');
329
+ else
330
+ container = document.createElement('div');
331
+
325
332
  container.innerHTML = clone;
326
333
  clone = container.firstChild
327
334
  container.remove()
@@ -337,6 +344,8 @@ function insertElement(template, element, index, currentIndex) {
337
344
  console.log('attribute eid not found')
338
345
 
339
346
  if (index !== null && index >= 0) {
347
+ if (!template.clones)
348
+ template = template.template
340
349
  const clones = Array.from(template.clones);
341
350
 
342
351
  let item