Skip to content

Commit 4e3308a

Browse files
committed
fix: renderValue
1 parent 44d4012 commit 4e3308a

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

demo/index.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,26 @@
3232
<button actions="upload">upload</button>
3333
</form>
3434

35+
<div
36+
type="file"
37+
array="test"
38+
object=""
39+
key="image"
40+
accept="image/*"
41+
placeholder="Upload Image or Video Thumbnail"
42+
class="floating-label min-height:40px active"
43+
render-selector="[template]"
44+
active>
45+
<div template>
46+
<img src="{{image.src}}" alt="image" width="100%" />
47+
</div>
48+
</div>
49+
3550
<form>
3651
<input
3752
type="file"
3853
directory
54+
realtime="false"
3955
render-selector="document; [template]" />
4056

4157
<button actions="saveLocally">saveLocally</button>

src/client.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import Observer from '@cocreate/observer';
2626
import Crud from '@cocreate/crud-client';
2727
import Elements from '@cocreate/elements';
2828
import Actions from '@cocreate/actions';
29-
import render from '@cocreate/render';
29+
import { render } from '@cocreate/render';
3030
import { queryElements } from '@cocreate/utils';
3131
import '@cocreate/element-prototype';
3232

@@ -42,7 +42,7 @@ const Files = new Map();
4242
* - If a single element is provided, it initializes that element (assuming it is of type "file").
4343
* - If an array of elements is provided, each element in the array is initialized.
4444
*/
45-
function init(elements) {
45+
async function init(elements) {
4646
if (!elements)
4747
elements = document.querySelectorAll('[type="file"]')
4848
else if (!Array.isArray(elements))
@@ -56,6 +56,13 @@ function init(elements) {
5656
elements[i].getValue = async () => await getFiles([elements[i]])
5757
elements[i].getFiles = async () => await getFiles([elements[i]])
5858
elements[i].setValue = (files) => setFiles(elements[i], files);
59+
elements[i].renderValue = (files) => setFiles(elements[i], files);
60+
61+
// if (elements[i].renderValue) {
62+
// let data = await elements[i].getValue()
63+
// if (data)
64+
// elements[i].setValue(data)
65+
// }
5966

6067
if (elements[i].hasAttribute('directory')) {
6168
if (!isInput && window.showDirectoryPicker)
@@ -163,7 +170,7 @@ async function fileEvent(event) {
163170
console.log("Files selected:", selected);
164171

165172
if (input.renderValue)
166-
input.renderValue(selected.values())
173+
input.renderValue(Array.from(selected.values()))
167174

168175
const isImport = input.getAttribute('import')
169176
const isRealtime = input.getAttribute('realtime')
@@ -222,7 +229,7 @@ async function getFiles(fileInputs) {
222229
for (let input of fileInputs) {
223230
const selected = inputs.get(input)
224231
if (selected) {
225-
for (let file of selected.values()) {
232+
for (let file of Array.from(selected.values())) {
226233
if (!file.src)
227234
await readFile(file)
228235

@@ -292,8 +299,11 @@ function readFile(file) {
292299
}
293300

294301
function setFiles(element, files) {
302+
if (!files) return
295303
if (!Array.isArray(files))
296304
files = [files]
305+
else if (!files.length)
306+
return
297307

298308
let selected = inputs.get(element) || new Map()
299309
for (let i = 0; i < files.length; i++) {
@@ -302,6 +312,8 @@ function setFiles(element, files) {
302312
Files.set(files[i].id, files[i])
303313
}
304314
inputs.set(element, selected);
315+
if (element.renderValue)
316+
render({ source: element, data: Array.from(selected.values()) })
305317
}
306318

307319
async function save(element, action, data) {

0 commit comments

Comments
 (0)