You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					34 lines
				
				969 B
			
		
		
			
		
	
	
					34 lines
				
				969 B
			| 
											3 years ago
										 | // @flow | ||
|  | import PolishedError from './_errors' | ||
|  | 
 | ||
|  | import type { InteractionState } from '../types/interactionState' | ||
|  | 
 | ||
|  | function generateSelectors(template: Function, state: InteractionState): string { | ||
|  |   const stateSuffix = state ? `:${state}` : '' | ||
|  |   return template(stateSuffix) | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons. | ||
|  |  * @private | ||
|  |  */ | ||
|  | function statefulSelectors( | ||
|  |   states: Array<InteractionState>, | ||
|  |   template: Function, | ||
|  |   stateMap?: Array<InteractionState>, | ||
|  | ): string { | ||
|  |   if (!template) throw new PolishedError(67) | ||
|  |   if (states.length === 0) return generateSelectors(template, null) | ||
|  |   let selectors = [] | ||
|  |   for (let i = 0; i < states.length; i += 1) { | ||
|  |     if (stateMap && stateMap.indexOf(states[i]) < 0) { | ||
|  |       throw new PolishedError(68) | ||
|  |     } | ||
|  |     selectors.push(generateSelectors(template, states[i])) | ||
|  |   } | ||
|  |   selectors = selectors.join(',') | ||
|  |   return selectors | ||
|  | } | ||
|  | 
 | ||
|  | export default statefulSelectors |