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

// @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