forked from MapComplete/MapComplete
		
	UX: fix #2416, small code cleanup
This commit is contained in:
		
							parent
							
								
									a4fe5a11ed
								
							
						
					
					
						commit
						77afd8b426
					
				
					 8 changed files with 57 additions and 66 deletions
				
			
		
							
								
								
									
										44
									
								
								src/Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								src/Utils.ts
									
										
									
									
									
								
							|  | @ -175,10 +175,10 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|     } | ||||
| 
 | ||||
|     public static NoNull<T>(array: ReadonlyArray<T> | undefined): T[] | undefined | ||||
|     public static NoNull<T>(array: undefined): undefined | ||||
|     public static NoNull(array: undefined): undefined | ||||
|     public static NoNull<T>(array: ReadonlyArray<T>): T[] | ||||
|     public static NoNull<T>(array: ReadonlyArray<T>): NonNullable<T>[] { | ||||
|         return <any>array?.filter((o) => o !== undefined && o !== null) | ||||
|         return <NonNullable<T>[]><unknown>array?.filter((o) => o !== undefined && o !== null) | ||||
|     } | ||||
| 
 | ||||
|     public static Hist(array: ReadonlyArray<string>): Map<string, number> { | ||||
|  | @ -332,7 +332,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|      * @param toKey | ||||
|      * @constructor | ||||
|      */ | ||||
|     public static DedupOnId<T = { id: string }>(arr: T[], toKey?: (t: T) => string): T[] { | ||||
|     public static DedupOnId<T = { id: string }>(arr: T[], toKey?: (t: T) => string | string[]): T[] { | ||||
|         const uniq: T[] = [] | ||||
|         const seen = new Set<string>() | ||||
|         if (toKey === undefined) { | ||||
|  | @ -342,10 +342,21 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|             if (!img) { | ||||
|                 continue | ||||
|             } | ||||
|             const k = toKey(img) | ||||
|             if (!seen.has(k)) { | ||||
|                 seen.add(k) | ||||
|                 uniq.push(img) | ||||
|             const ks = toKey(img) | ||||
|             if (typeof ks === "string") { | ||||
|                 if (!seen.has(ks)) { | ||||
|                     seen.add(ks) | ||||
|                     uniq.push(img) | ||||
|                 } | ||||
|             } else { | ||||
|                 const ksNoNull = Utils.NoNull(ks) | ||||
|                 const hasBeenSeen = ksNoNull.some(k => seen.has(k)) | ||||
|                 if (!hasBeenSeen) { | ||||
|                     uniq.push(img) | ||||
|                 } | ||||
|                 for (const k of ksNoNull) { | ||||
|                     seen.add(k) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return uniq | ||||
|  | @ -1657,7 +1668,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|             return obj | ||||
|         } | ||||
|         const newObj = {} | ||||
|         for (let objKey in obj) { | ||||
|         for (const objKey in obj) { | ||||
|             let cleanKey = objKey | ||||
|             if (objKey.startsWith("+") || objKey.startsWith("=")) { | ||||
|                 cleanKey = objKey.substring(1) | ||||
|  | @ -1794,19 +1805,6 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|         href = href.replaceAll(/ /g, "%20") | ||||
|         return href | ||||
|     } | ||||
| 
 | ||||
|     /** Randomize array in-place using Durstenfeld shuffle algorithm | ||||
|      * Source: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
 | ||||
|      * */ | ||||
|     static shuffle(array: any[]) { | ||||
|         for (let i = array.length - 1; i > 0; i--) { | ||||
|             const j = Math.floor(Math.random() * (i + 1)) | ||||
|             const temp = array[i] | ||||
|             array[i] = array[j] | ||||
|             array[j] = temp | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private static emojiRegex = /[\p{Extended_Pictographic}🛰️]/u | ||||
| 
 | ||||
|     /** | ||||
|  | @ -1826,4 +1824,8 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|     public static isEmojiFlag(string: string) { | ||||
|         return /[🇦-🇿]{2}/u.test(string) // flags, see https://stackoverflow.com/questions/53360006/detect-with-regex-if-emoji-is-country-flag | ||||
|     } | ||||
| 
 | ||||
|     public static concat<T>(param: T[][]): T[] { | ||||
|         return [].concat(...param) | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue