11mod utils;
22mod task_inner;
33
4+ use std:: fmt:: Error ;
5+
46use once_cell:: sync:: Lazy ;
57use regex:: Regex ;
68use wasm_bindgen:: prelude:: * ;
@@ -24,7 +26,9 @@ fn dcmnt() -> Document {
2426}
2527
2628fn value_test ( str : String ) -> bool {
27- static RE : Lazy < Regex > = Lazy :: new ( || Regex :: new ( r"[^a-zA-Z\s]" ) . unwrap ( ) ) ;
29+ static RE : Lazy < Regex > = Lazy :: new ( ||
30+ Regex :: new ( r"(^$|[^a-zA-Z\s])" ) . unwrap ( )
31+ ) ;
2832 RE . is_match ( & str)
2933}
3034
@@ -33,6 +37,7 @@ fn value_test(str: String) -> bool {
3337pub fn create_task ( task_name : String ) -> Result < ( ) , JsValue > {
3438 let render: Document = dcmnt ( ) ;
3539 let body: HtmlElement = render. body ( ) . expect ( "document should have a body" ) ;
40+ let _ = delete_not_valide ( ) ;
3641 let tasks_list: web_sys:: Element = body
3742 . query_selector ( ".tasks-list" )
3843 . unwrap ( )
@@ -46,7 +51,20 @@ pub fn create_task(task_name: String) -> Result<(), JsValue> {
4651}
4752
4853#[ wasm_bindgen]
49- pub fn not_valide_input ( ) -> Result < ( ) , JsValue > {
54+ pub fn delete_task ( ) -> Result < ( ) , JsError > {
55+ let item = dcmnt ( )
56+ . query_selector ( ".tasks-list__item" )
57+ . map_err ( |_| JsError :: new ( "Query selector failed" ) ) ?
58+ . ok_or_else ( || JsError :: new ( "No tasks found" ) ) ?;
59+
60+ item. remove ( ) ;
61+
62+ Ok ( ( ) )
63+ }
64+
65+ // not valide input
66+ #[ wasm_bindgen]
67+ pub fn not_valide ( ) -> Result < ( ) , JsValue > {
5068 let render: Document = dcmnt ( ) ;
5169 let body: HtmlElement = render. body ( ) . expect ( "document should have a body" ) ;
5270 let not_valide_message: web_sys:: Element = body
@@ -70,44 +88,76 @@ pub fn not_valide_input() -> Result<(), JsValue> {
7088 Ok ( ( ) )
7189}
7290
91+ // for delete not valide input
7392#[ wasm_bindgen]
74- pub fn greet ( ) -> Result < ( ) , JsValue > {
93+ pub fn delete_not_valide ( ) -> Result < ( ) , JsValue > {
7594 let render: Document = dcmnt ( ) ;
95+ let body: HtmlElement = render. body ( ) . expect ( "document should have a body" ) ;
96+ match body. query_selector ( ".not-valid" ) {
97+ Ok ( Some ( _) ) => {
98+ let valid = body. query_selector ( ".not-valid" ) . unwrap ( ) . expect ( "" ) ;
99+ valid. remove ( ) ;
100+ }
101+ Ok ( None ) => {
102+ console_log ! ( "not exists" ) ;
103+ }
104+ Err ( e) => {
105+ console_log ! ( "{:?}" , e) ;
106+ }
107+ }
108+ Ok ( ( ) )
109+ }
76110
77- // let body: HtmlElement = render.body().expect("document should have a body");
78- // let container: Element = body
79- // .query_selector(".container")
80- // .unwrap()
81- // .expect("");
111+ // main function
112+ #[ wasm_bindgen]
113+ pub fn greet ( ) -> Result < ( ) , JsValue > {
114+ let render: Document = dcmnt ( ) ;
82115
83116 // event-listener
84- let closure : Closure < dyn FnMut ( HtmlElement ) > = Closure :: < dyn FnMut ( _ ) > :: new (
85- move |_ : web_sys :: HtmlElement | {
86- let input_value : String = dcmnt ( )
87- . get_element_by_id ( "input-task" )
88- . unwrap ( )
89- . dyn_into :: < HtmlInputElement > ( )
90- . unwrap ( )
91- . value ( ) ;
92-
93- if ! value_test ( input_value . clone ( ) ) {
94- console_log ! ( "{}" , input_value) ;
95- let _ = create_task ( input_value) ;
96- } else {
97- let _ = not_valide_input ( ) ;
98- }
117+ let add_closure : Closure < dyn FnMut ( HtmlElement ) > = Closure :: <
118+ dyn FnMut ( _ )
119+ > :: new ( move |_ : web_sys :: HtmlElement | {
120+ let input_value : String = dcmnt ( )
121+ . get_element_by_id ( "input-task" )
122+ . unwrap ( )
123+ . dyn_into :: < HtmlInputElement > ( )
124+ . unwrap ( )
125+ . value ( ) ;
126+
127+ if ! value_test ( input_value. clone ( ) ) {
128+ console_log ! ( "{}" , input_value) ;
129+ let _ = create_task ( input_value ) ;
130+ } else {
131+ let _ = not_valide ( ) ;
99132 }
100- ) ;
133+ } ) ;
134+
135+ // event-listener
136+ let delete_closure: Closure < dyn FnMut ( HtmlElement ) > = Closure :: <
137+ dyn FnMut ( _)
138+ > :: new ( move |_: web_sys:: HtmlElement | {
139+ let _ = delete_task ( ) ;
140+ } ) ;
101141
142+ // buttons
102143 let _button: Result < ( ) , JsValue > = render
103144 . get_element_by_id ( "add-task" )
104145 . unwrap ( )
105146 . add_event_listener_with_callback (
106147 "click" ,
107- closure. as_ref ( ) . unchecked_ref ( )
148+ add_closure. as_ref ( ) . unchecked_ref ( )
149+ ) ;
150+
151+ let _delete_btn: Result < ( ) , JsValue > = render
152+ . get_element_by_id ( "remove-all" )
153+ . unwrap ( )
154+ . add_event_listener_with_callback (
155+ "click" ,
156+ delete_closure. as_ref ( ) . unchecked_ref ( )
108157 ) ;
109158
110- closure. forget ( ) ;
159+ add_closure. forget ( ) ;
160+ delete_closure. forget ( ) ;
111161
112162 // testing
113163 // let i: u32 = 1;
0 commit comments