forked from MapComplete/MapComplete
		
	Refactoring: move all code files into a src directory
This commit is contained in:
		
							parent
							
								
									de99f56ca8
								
							
						
					
					
						commit
						e75d2789d2
					
				
					 389 changed files with 0 additions and 12 deletions
				
			
		
							
								
								
									
										66
									
								
								src/UI/Popup/UnitInput.svelte
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/UI/Popup/UnitInput.svelte
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| <script lang="ts"> | ||||
|   import { Unit } from "../../Models/Unit" | ||||
|   import { Store, UIEventSource } from "../../Logic/UIEventSource" | ||||
|   import Tr from "../Base/Tr.svelte" | ||||
|   import { onDestroy } from "svelte" | ||||
| 
 | ||||
|   export let unit: Unit | ||||
| 
 | ||||
|   /** | ||||
|    * The current value of the input field | ||||
|    * Not necessarily a correct number | ||||
|    */ | ||||
|   export let textValue: UIEventSource<string> | ||||
|   /** | ||||
|    * The actual _valid_ value that is upstreamed | ||||
|    */ | ||||
|   export let upstreamValue: Store<string> | ||||
| 
 | ||||
|   let isSingle: Store<boolean> = textValue.map((v) => Number(v) === 1) | ||||
| 
 | ||||
|   export let selectedUnit: UIEventSource<string> = new UIEventSource<string>(undefined) | ||||
|   export let getCountry = () => "be" | ||||
|   console.log("Unit", unit) | ||||
|   onDestroy( | ||||
|     upstreamValue.addCallbackAndRun((v) => { | ||||
|       if (v === undefined) { | ||||
|         if (!selectedUnit.data) { | ||||
|           selectedUnit.setData(unit.getDefaultDenomination(getCountry).canonical) | ||||
|         } | ||||
|         return | ||||
|       } | ||||
|       const selected = unit.findDenomination(v, getCountry) | ||||
|       if (selected === undefined) { | ||||
|         selectedUnit.setData(unit.getDefaultDenomination(getCountry).canonical) | ||||
|         return | ||||
|       } | ||||
|       const [value, denomination] = selected | ||||
|       selectedUnit.setData(denomination.canonical) | ||||
|       return | ||||
|     }) | ||||
|   ) | ||||
| 
 | ||||
|   onDestroy( | ||||
|     textValue.addCallbackAndRunD((v) => { | ||||
|       // Fallback in case that the user manually types a denomination | ||||
|       const [value, denomination] = unit.findDenomination(v, getCountry) | ||||
|       if (value === undefined || denomination === undefined) { | ||||
|         return | ||||
|       } | ||||
|       textValue.setData(value) | ||||
|       selectedUnit.setData(denomination.canonical) | ||||
|     }) | ||||
|   ) | ||||
| </script> | ||||
| 
 | ||||
| <select bind:value={$selectedUnit}> | ||||
|   {#each unit.denominations as denom (denom.canonical)} | ||||
|     <option value={denom.canonical}> | ||||
|       {#if $isSingle} | ||||
|         <Tr t={denom.humanSingular} /> | ||||
|       {:else} | ||||
|         <Tr t={denom.human} /> | ||||
|       {/if} | ||||
|     </option> | ||||
|   {/each} | ||||
| </select> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue