@@ -26,7 +26,7 @@ import Observer from '@cocreate/observer';
26
26
import Crud from '@cocreate/crud-client' ;
27
27
import Elements from '@cocreate/elements' ;
28
28
import Actions from '@cocreate/actions' ;
29
- import render from '@cocreate/render' ;
29
+ import { render } from '@cocreate/render' ;
30
30
import { queryElements } from '@cocreate/utils' ;
31
31
import '@cocreate/element-prototype' ;
32
32
@@ -42,7 +42,7 @@ const Files = new Map();
42
42
* - If a single element is provided, it initializes that element (assuming it is of type "file").
43
43
* - If an array of elements is provided, each element in the array is initialized.
44
44
*/
45
- function init ( elements ) {
45
+ async function init ( elements ) {
46
46
if ( ! elements )
47
47
elements = document . querySelectorAll ( '[type="file"]' )
48
48
else if ( ! Array . isArray ( elements ) )
@@ -56,6 +56,13 @@ function init(elements) {
56
56
elements [ i ] . getValue = async ( ) => await getFiles ( [ elements [ i ] ] )
57
57
elements [ i ] . getFiles = async ( ) => await getFiles ( [ elements [ i ] ] )
58
58
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
+ // }
59
66
60
67
if ( elements [ i ] . hasAttribute ( 'directory' ) ) {
61
68
if ( ! isInput && window . showDirectoryPicker )
@@ -163,7 +170,7 @@ async function fileEvent(event) {
163
170
console . log ( "Files selected:" , selected ) ;
164
171
165
172
if ( input . renderValue )
166
- input . renderValue ( selected . values ( ) )
173
+ input . renderValue ( Array . from ( selected . values ( ) ) )
167
174
168
175
const isImport = input . getAttribute ( 'import' )
169
176
const isRealtime = input . getAttribute ( 'realtime' )
@@ -222,7 +229,7 @@ async function getFiles(fileInputs) {
222
229
for ( let input of fileInputs ) {
223
230
const selected = inputs . get ( input )
224
231
if ( selected ) {
225
- for ( let file of selected . values ( ) ) {
232
+ for ( let file of Array . from ( selected . values ( ) ) ) {
226
233
if ( ! file . src )
227
234
await readFile ( file )
228
235
@@ -292,8 +299,11 @@ function readFile(file) {
292
299
}
293
300
294
301
function setFiles ( element , files ) {
302
+ if ( ! files ) return
295
303
if ( ! Array . isArray ( files ) )
296
304
files = [ files ]
305
+ else if ( ! files . length )
306
+ return
297
307
298
308
let selected = inputs . get ( element ) || new Map ( )
299
309
for ( let i = 0 ; i < files . length ; i ++ ) {
@@ -302,6 +312,8 @@ function setFiles(element, files) {
302
312
Files . set ( files [ i ] . id , files [ i ] )
303
313
}
304
314
inputs . set ( element , selected ) ;
315
+ if ( element . renderValue )
316
+ render ( { source : element , data : Array . from ( selected . values ( ) ) } )
305
317
}
306
318
307
319
async function save ( element , action , data ) {
0 commit comments