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