@cocreate/render 1.12.1 → 1.13.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,24 @@
1
+ # [1.13.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.12.3...v1.13.0) (2022-08-23)
2
+
3
+
4
+ ### Features
5
+
6
+ * add a map containing rendered keys to templates, if key not rendered clone template and render key ([0fd8cfd](https://github.com/CoCreate-app/CoCreate-render/commit/0fd8cfd3695280e19b6e518fd45d873d1637ed6e))
7
+
8
+ ## [1.12.3](https://github.com/CoCreate-app/CoCreate-render/compare/v1.12.2...v1.12.3) (2022-08-19)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add css file for class template display none ([4cfa7ee](https://github.com/CoCreate-app/CoCreate-render/commit/4cfa7ee8a6a1d4105f9144ce713a3435db4090f6))
14
+
15
+ ## [1.12.2](https://github.com/CoCreate-app/CoCreate-render/compare/v1.12.1...v1.12.2) (2022-08-01)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * renderKey action does not work with renderMap. added isRenderKey to skip renderMap as temp solution ([7e90de8](https://github.com/CoCreate-app/CoCreate-render/commit/7e90de81b596154d3ab0b36e7326dfb8e67e6684))
21
+
1
22
  ## [1.12.1](https://github.com/CoCreate-app/CoCreate-render/compare/v1.12.0...v1.12.1) (2022-07-31)
2
23
 
3
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.12.1",
3
+ "version": "1.13.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",
package/src/index.css ADDED
@@ -0,0 +1 @@
1
+ .template {display: none !important;}
package/src/index.js CHANGED
@@ -3,12 +3,13 @@ import action from '@cocreate/actions';
3
3
  import observer from '@cocreate/observer';
4
4
  import uuid from '@cocreate/uuid';
5
5
  import { queryDocumentSelector } from '@cocreate/utils';
6
+ import './index.css';
6
7
  // import { getValue } from '../../CoCreate-elements/src/getValue';
7
8
  // import api from '@cocreate/api';
8
9
 
9
10
  const CoCreateRender = {
10
11
  // Can be called from crud getObjectValueByPath
11
- __getValueFromObject : function(json, path) {
12
+ __getValueFromObject: function(json, path) {
12
13
  try {
13
14
  if(typeof json == 'undefined' || !path)
14
15
  return false;
@@ -113,6 +114,7 @@ const CoCreateRender = {
113
114
 
114
115
  render: function(template, data) {
115
116
  const self = this;
117
+ const templateId = template.getAttribute('templateId')
116
118
  let type = '';
117
119
  let arrayData = data;
118
120
 
@@ -131,14 +133,20 @@ const CoCreateRender = {
131
133
  }
132
134
 
133
135
  let renderKey = template.getAttribute('render-key') || type;
134
-
136
+
137
+ if (!template.renderedKeys)
138
+ template.renderedKeys = new Map()
139
+
135
140
  if (isRenderObject && type) {
136
141
  let Data = self.__getValueFromObject(arrayData, type);
137
142
  let array = self.isRenderObject(Data, renderKey)
138
143
  for (let item of array) {
139
- let cloneEl = this.cloneEl(template);
140
- self.setValue([cloneEl], item, renderArray, renderKey);
141
- template.insertAdjacentElement('beforebegin', cloneEl);
144
+ if (!template.renderedKeys.has(item[renderKey].key)){
145
+ template.renderedKeys.set(item[renderKey].key, '')
146
+ let cloneEl = this.cloneEl(template);
147
+ self.setValue([cloneEl], item, renderArray, renderKey);
148
+ template.insertAdjacentElement('beforebegin', cloneEl);
149
+ }
142
150
  }
143
151
  } else {
144
152
 
@@ -153,10 +161,14 @@ const CoCreateRender = {
153
161
 
154
162
  if(type && Array.isArray(arrayData)) {
155
163
  arrayData.forEach((item) => {
156
- let cloneEl = this.cloneEl(template);
157
- let object = self.__createObject(item, renderKey);
158
- self.setValue([cloneEl], object, renderArray, renderKey);
159
- template.insertAdjacentElement('beforebegin', cloneEl);
164
+ if (!template.renderedKeys.has(item)){
165
+ template.renderedKeys.set(item, '')
166
+
167
+ let cloneEl = this.cloneEl(template);
168
+ let object = self.__createObject(item, renderKey);
169
+ self.setValue([cloneEl], object, renderArray, renderKey);
170
+ template.insertAdjacentElement('beforebegin', cloneEl);
171
+ }
160
172
  });
161
173
  }
162
174
  }
@@ -197,6 +209,10 @@ const CoCreateRender = {
197
209
 
198
210
  setValue: function(els, data, renderArray, renderKey){
199
211
  if (!data) return;
212
+ let isRenderKey
213
+ if (data.renderKey)
214
+ isRenderKey = true
215
+
200
216
  const that = this;
201
217
  Array.from(els).forEach(el => {
202
218
  let updateData;
@@ -205,16 +221,16 @@ const CoCreateRender = {
205
221
  if (el.hasAttribute('render-clone')) {
206
222
  el.renderData = {...data}
207
223
  }
208
- if (el.renderMap) {
224
+ if (el.renderMap && !isRenderKey) {
209
225
  let placeholder = el.renderMap.get(el)
210
226
  if (placeholder){
211
227
  let valueType = el.getAttribute('value-type')
212
228
  renderKey = placeholder.renderKey
213
229
  renderArray = placeholder.renderArray
214
- if (renderArray)
215
- updateData = data[renderArray][0]
230
+ if (renderArray && Array.isArray(data[renderArray]))
231
+ updateData = data[renderArray][0]
216
232
  if (renderKey)
217
- updateData = {[renderKey]: updateData}
233
+ updateData = {[renderKey]: updateData}
218
234
  let textContent = placeholder.placeholder
219
235
  let text = that.__replaceValue(updateData, textContent, renderKey, valueType);
220
236
  if (text && text != el.renderedValue)
@@ -225,20 +241,19 @@ const CoCreateRender = {
225
241
  Array.from(el.attributes).forEach(attr=>{
226
242
  let attr_name = attr.name.toLowerCase();
227
243
  let attrValue = attr.value;
228
-
229
244
  let placeholder
230
245
  if (attr.renderMap)
231
246
  placeholder = attr.renderMap.get(attr)
232
247
  else
233
248
  that.renderMap(attr, attr.value, renderArray, renderKey)
234
249
 
235
- if(placeholder){
250
+ if(placeholder && !isRenderKey){
236
251
  let updateData = data;
237
252
  // let oldValue = attrValue
238
253
  let temp = placeholder.placeholder;
239
254
  renderKey = placeholder.renderKey
240
255
  renderArray = placeholder.renderArray
241
- if (renderArray)
256
+ if (renderArray && Array.isArray(data[renderArray]))
242
257
  updateData = data[renderArray][0]
243
258
  if (renderKey)
244
259
  updateData = {[renderKey]: updateData}
@@ -261,7 +276,7 @@ const CoCreateRender = {
261
276
  if(el.childNodes.length > 0) {
262
277
  that.setValue(el.childNodes, updateData || data, renderArray, renderKey);
263
278
  }
264
- if (el.classList.contains('template') && !el.hasAttribute('template_id')) {
279
+ if ((el.tagName == 'TEMPLATE' || el.classList.contains('template')) && !el.hasAttribute('template_id')) {
265
280
  that.render(el, data);
266
281
  }
267
282
  // if (el.hasAttribute('render-array') || el.hasAttribute('render-object')) {
@@ -278,12 +293,12 @@ const CoCreateRender = {
278
293
  let textContent, placeholder, text;
279
294
  if (el.renderMap)
280
295
  placeholder = el.renderMap.get(el)
281
- if (placeholder) {
296
+ if (placeholder && !isRenderKey) {
282
297
  let updateData = data;
283
298
  textContent = placeholder.placeholder
284
299
  renderKey = placeholder.renderKey
285
300
  renderArray = placeholder.renderArray
286
- if (renderArray)
301
+ if (renderArray && Array.isArray(data[renderArray]))
287
302
  updateData = data[renderArray][0]
288
303
  if (renderKey)
289
304
  updateData = {[renderKey]: updateData}
@@ -291,7 +306,8 @@ const CoCreateRender = {
291
306
  }
292
307
  if (!placeholder && !text) {
293
308
  textContent = el.textContent;
294
- that.renderMap(el, textContent, renderArray, renderKey)
309
+ if (!el.renderMap)
310
+ that.renderMap(el, textContent, renderArray, renderKey)
295
311
  text = that.__replaceValue(data, textContent, renderKey, valueType);
296
312
  }
297
313
 
@@ -334,6 +350,8 @@ const CoCreateRender = {
334
350
  if (selector) {
335
351
  let template = queryDocumentSelector(selector);
336
352
  if (!template) return;
353
+ if (template.tagNmae === 'TEMPLATE')
354
+ template = template.childNodes;
337
355
  template.dataOriginal = {...data}
338
356
  if (template.classList.contains('template')) {
339
357
  this.render(template, data);