@cocreate/render 1.31.0 → 1.33.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,28 @@
1
+ # [1.33.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.32.0...v1.33.0) (2023-11-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * use action.form and action.params ([90f9428](https://github.com/CoCreate-app/CoCreate-render/commit/90f9428a5c87473d51aec4111b15a0f194f46cb1))
7
+
8
+
9
+ ### Features
10
+
11
+ * update dependecies for th latest features and bug fixes ([733e8cf](https://github.com/CoCreate-app/CoCreate-render/commit/733e8cfa7b601c2c5b494fb132588a67f6d6f433))
12
+
13
+ # [1.32.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.31.0...v1.32.0) (2023-11-16)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * bug rendering forms ([abc62d4](https://github.com/CoCreate-app/CoCreate-render/commit/abc62d45c5e7cbb418e88c11fb39ee9e94b1728b))
19
+ * type replace with key ([7575216](https://github.com/CoCreate-app/CoCreate-render/commit/7575216927168b7157a7d2fb820415eb4309ccbf))
20
+
21
+
22
+ ### Features
23
+
24
+ * filter.overwite boolean to force re render ([273c71a](https://github.com/CoCreate-app/CoCreate-render/commit/273c71ad7b82a343c2b9d87ca17997584e778612))
25
+
1
26
  # [1.31.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.30.1...v1.31.0) (2023-11-12)
2
27
 
3
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.31.0",
3
+ "version": "1.33.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.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"
61
+ "@cocreate/actions": "^1.12.4",
62
+ "@cocreate/api": "^1.15.12",
63
+ "@cocreate/element-prototype": "^1.13.2",
64
+ "@cocreate/observer": "^1.12.0",
65
+ "@cocreate/utils": "^1.27.4"
66
66
  }
67
67
  }
package/src/index.js CHANGED
@@ -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 }
@@ -93,18 +103,11 @@ async function render({ source, element, selector, data, key, index, currentInde
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));
@@ -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()
@@ -645,9 +652,12 @@ function getRenderValue(node, data, key, renderAs) {
645
652
  return value
646
653
  }
647
654
 
648
- async function renderKey(element, params) {
655
+ async function renderKey(action) {
649
656
  // TODO: custom render-keys
650
- const form = element.closest("form") || document;
657
+ let element = action.element
658
+ let form = action.form || document
659
+ let params = action.params
660
+
651
661
  if (!params)
652
662
  params = 'render-key'
653
663
 
@@ -676,7 +686,7 @@ async function renderKey(element, params) {
676
686
  Actions.init({
677
687
  name: "renderKey",
678
688
  callback: (action) => {
679
- renderKey(action.element, action.params);
689
+ renderKey(action);
680
690
  }
681
691
  });
682
692