Skip to content

Commit 71ec778

Browse files
author
Frank Pagan
committed
feat: render-key supports defing custom attribute by applying attribute name as a param in action. renderKey(customAttr)
1 parent da5dc56 commit 71ec778

File tree

2 files changed

+36
-19
lines changed

2 files changed

+36
-19
lines changed

demo/renderKey.html

+9-8
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@
1111
<body class="padding:20px">
1212

1313
<form>
14-
<input render-key="renderKey.name">
15-
<div template_id="renderKey">
16-
<div>This is <b>{{renderKey.name}}</b></div>
17-
<p>This {{renderKey.name}}</p>
18-
<input value="{{renderKey.name}}">
19-
<button actions='renderKey' href="https://{{renderKey.name}}/admin/signin.html">Create Form</button>
14+
<input render-key="name" value="test">
15+
<input render-key="domain" value="test.com">
16+
<div template_id="render-key">
17+
<div>This is <b>{{render-key.name}}</b></div>
18+
<p>This {{render-key.name}}</p>
19+
<input value="{{render-key.name}}">
20+
<input value="{{render-key.domain}}">
21+
<button actions='renderKey'>Create Form</button>
2022
</div>
2123
</form>
2224

2325
<!-- <script src="../dist/CoCreate-render-key.js"></script> -->
24-
<script src="https://cdn.cocreate.app/latest/CoCreate.min.js"></script>
25-
<!-- <script src="https://cdn.cocreate.app/1.49.2/CoCreate.min.js"></script> -->
26+
<script src="../../../CoCreateJS/dist/CoCreate.js"></script>
2627

2728
</body>
2829

src/index.js

+27-11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import action from '@cocreate/actions';
33
import observer from '@cocreate/observer';
44
import uuid from '@cocreate/uuid';
5-
import { queryDocumentSelector, getValueFromObject } from '@cocreate/utils';
5+
import { queryDocumentSelector, getValueFromObject, dotNotationToObject } from '@cocreate/utils';
66
import '@cocreate/element-prototype';
77
import './index.css';
88
// import api from '@cocreate/api';
@@ -415,14 +415,31 @@ const CoCreateRender = {
415415

416416
};
417417

418-
function renderKey(element) {
418+
function renderKey(element, params) {
419+
// ToDo: custom render-keys
419420
const form = element.closest("form") || document;
420-
let data = CoCreate.api.getFormData('render-key', 'renderKey', form);
421-
422-
CoCreateRender.data({
423-
selector: "[template='renderKey']",
424-
data: {renderKey: data}
425-
});
421+
if (!params)
422+
params = 'render-key'
423+
424+
let data = {}
425+
let selector = `[${params}]`
426+
let elements = form.querySelectorAll(selector);
427+
for (let el of elements) {
428+
let attribute = el.getAttribute(params)
429+
if (attribute)
430+
data[attribute] = el.getValue()
431+
}
432+
data = dotNotationToObject(data)
433+
let renderData = {data: {[params]: data}}
434+
435+
let templateSelector = `[template_id='${params}']`
436+
let template = document.querySelectorAll(templateSelector);
437+
if (template)
438+
renderData.elements = template
439+
else
440+
renderData.selector = `[template='${params}']`
441+
442+
CoCreateRender.data(renderData);
426443

427444
document.dispatchEvent(new CustomEvent('renderKey', {
428445
detail: { data }
@@ -431,9 +448,8 @@ function renderKey(element) {
431448

432449
action.init({
433450
name: "renderKey",
434-
endEvent: "renderKey",
435-
callback: (btn, data) => {
436-
renderKey(btn);
451+
callback: (btn, params) => {
452+
renderKey(btn, params);
437453
}
438454
});
439455

0 commit comments

Comments
 (0)