feature/layout-updates #1
							
								
								
									
										53
									
								
								src/store.js
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								src/store.js
									
									
									
									
									
								
							| @ -212,4 +212,55 @@ export const Provider =(props)=> | ||||
| }; | ||||
| 
 | ||||
| /** @type {()=>Store.Binding} */ | ||||
| export const Consumer =()=> React.useContext(Context); | ||||
| export const Consumer =()=> React.useContext(Context); | ||||
| 
 | ||||
| /** @type {(inTest:Store.Test|undefined)=>Store.Grade} */ | ||||
| export const Grade =(inTest)=> | ||||
| { | ||||
|     /** @type {Store.Grade} */ | ||||
|     const output = { Total:0, Done:0, Score:0 }; | ||||
| 
 | ||||
|     /** @type {(inGoal:number, inResult:number)=>number} */ | ||||
|     const Mapper =(inGoal, inResult)=> | ||||
|     { | ||||
|         const err = Math.abs(inGoal-inResult); | ||||
|         if(err == 0){ return 1; } | ||||
|         else if(err > 0 && err <= 5){ return 0.9; } | ||||
|         else if(err > 5 && err <= 10){ return 0.7; } | ||||
|         else if(err > 10 && err <= 15){ return 0.2; } | ||||
|         else{ return 0; } | ||||
|     } | ||||
| 
 | ||||
|     if(inTest) | ||||
|     { | ||||
|         for(let i=0; i<inTest.Plot.length; i++) | ||||
|         { | ||||
|             const {TestL, TestR, UserL, UserR} = inTest.Plot[i]; | ||||
|             if(TestL) | ||||
|             { | ||||
|                 output.Total ++; | ||||
|                 if(UserL) | ||||
|                 { | ||||
|                     output.Done++; | ||||
|                     output.Score += Mapper(TestL.Stim, UserL.Stim); | ||||
|                 } | ||||
|             } | ||||
|             if(TestR) | ||||
|             { | ||||
|                 output.Total ++; | ||||
|                 if(UserR) | ||||
|                 { | ||||
|                     output.Done++; | ||||
|                     output.Score += Mapper(TestR.Stim, UserR.Stim); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if(output.Done > 0) | ||||
|     { | ||||
|         output.Score = Math.floor((output.Score/output.Done) * 10000)/100; | ||||
|     } | ||||
| 
 | ||||
|     return output; | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/ui.js
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/ui.js
									
									
									
									
									
								
							| @ -51,6 +51,20 @@ export const Select =()=> | ||||
|     </div>`; | ||||
| } | ||||
| 
 | ||||
| /** @type {BasicElement} */ | ||||
| export const Grade =()=> | ||||
| { | ||||
|     const [State] = Store.Consumer(); | ||||
|     const grade = Store.Grade(State.Live.Test); | ||||
|     return html`<div class="font-sans">
 | ||||
|         <div>Complete: ${grade.Done} of ${grade.Total}</div> | ||||
|         <div>Accuracy: ${grade.Score}%</div> | ||||
|         <div class="h-4 bg-gray-200 rounded-full overflow-hidden"> | ||||
|             <div class=${`h-full w-[${grade.Done/grade.Total*100}%] bg-emerald-500 shadow-sss`}></div> | ||||
|         </div> | ||||
|     </div>` | ||||
| }; | ||||
| 
 | ||||
| /** @type {BasicElement} */ | ||||
| export const Controls =()=> | ||||
| { | ||||
| @ -79,6 +93,7 @@ export const Controls =()=> | ||||
|     }, [playGet]); | ||||
| 
 | ||||
|     return html` | ||||
|     <${Grade}/> | ||||
|     <div class="flex"> | ||||
|         <div>Channel</div> | ||||
|         <div>${State.Chan.Value}</div> | ||||
|  | ||||
							
								
								
									
										6
									
								
								store.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								store.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -49,4 +49,10 @@ declare namespace Store { | ||||
|   type DrawChart = { Cross?:DrawPoint, UserL: DrawGroup, UserR: DrawGroup, TestL: DrawGroup, TestR: DrawGroup }; | ||||
| 
 | ||||
|   type Binding = [state:State, dispatch:(inAction:Action)=>void] | ||||
| 
 | ||||
|   type Grade = { | ||||
|     Total:number, | ||||
|     Done:number, | ||||
|     Score:number | ||||
|   }; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user