1
1
#![ cfg( feature = "wasm" ) ]
2
- use std:: collections:: HashMap ;
3
-
4
- use gloo:: file:: callbacks:: FileReader ;
5
- use web_sys:: HtmlInputElement ;
6
2
use yew:: prelude:: * ;
7
3
8
4
use cega:: wasm:: image:: * ;
9
- use cega:: wasm:: FileUpload ;
5
+ use cega:: wasm:: { FileInput , FileUpload } ;
10
6
11
7
pub enum Msg {
12
8
Loaded ( FileUpload ) ,
13
- Submit ( Event ) ,
14
9
}
15
10
16
11
pub struct App {
17
- readers : HashMap < String , FileReader > ,
18
12
files : Vec < FileUpload > ,
19
13
}
20
14
@@ -24,53 +18,23 @@ impl Component for App {
24
18
25
19
fn create ( _ctx : & Context < Self > ) -> Self {
26
20
Self {
27
- readers : HashMap :: default ( ) ,
28
21
files : Vec :: default ( ) ,
29
22
}
30
23
}
31
24
32
- fn update ( & mut self , ctx : & Context < Self > , msg : Self :: Message ) -> bool {
25
+ fn update ( & mut self , _ctx : & Context < Self > , msg : Self :: Message ) -> bool {
33
26
match msg {
34
27
Msg :: Loaded ( file) => {
35
- self . readers . remove ( & file. name ) ;
36
28
self . files . push ( file) ;
37
29
}
38
- Msg :: Submit ( e) => {
39
- let input: HtmlInputElement = e. target_unchecked_into ( ) ;
40
- if let Some ( files) = input. files ( ) {
41
- for file in gloo:: file:: FileList :: from ( files) . iter ( ) {
42
- let link = ctx. link ( ) . clone ( ) ;
43
- let name = file. name ( ) . clone ( ) ;
44
- let mime_type = file. raw_mime_type ( ) ;
45
- let task = {
46
- gloo:: file:: callbacks:: read_as_bytes ( & file, move |res| {
47
- link. send_message ( Msg :: Loaded ( FileUpload {
48
- data : res. expect ( "failed to read file" ) ,
49
- mime_type,
50
- name,
51
- } ) )
52
- } )
53
- } ;
54
- self . readers . insert ( file. name ( ) , task) ;
55
- }
56
- }
57
- }
58
30
}
59
31
true
60
32
}
61
33
62
34
fn view ( & self , ctx : & Context < Self > ) -> Html {
63
35
html ! {
64
36
<div id="wrapper" >
65
- <label for ="file-upload" >
66
- </label>
67
- <input
68
- id="file-upload"
69
- type ="file"
70
- accept="image/*,.bin,.cga,.ega"
71
- multiple={ false }
72
- onchange={ ctx. link( ) . callback( Msg :: Submit ) }
73
- />
37
+ <FileInput accept="image/*,.bin,.cga,.ega" multiple=false onload={ ctx. link( ) . callback( Msg :: Loaded ) } />
74
38
<div id="preview-area" >
75
39
{ for self . files. iter( ) . map( |f|
76
40
html! { <ImageComponent file={ f. clone( ) } /> }
0 commit comments