@workday/canvas-kit-react
Version:
The parent module that contains all Workday Canvas Kit React components
48 lines (40 loc) • 1.21 kB
text/typescript
import {PropCombination, PropDeclaration, Props, PropsDeclaration} from './propTypes';
export const permutateProps = (
allProps: PropsDeclaration,
filter?: (props: Props) => boolean,
remainingProps: string[] = Object.keys(allProps),
values: {[key: string]: PropDeclaration} = {}
): PropCombination[] => {
// When there are no more props to combine with, return result
const prop = remainingProps[0];
if (!prop) {
const props: Props = {};
Object.keys(values).forEach(prop => {
props[prop] = values?.[prop]?.value;
});
if (filter && !filter(props)) {
return [];
}
const label = Object.keys(values)
.map(prop => values?.[prop]?.label)
.join(' ');
return [
{
label,
props,
},
];
}
const possiblePropValues = allProps[prop];
const permutations = possiblePropValues?.map((value: PropDeclaration) => {
const newValues = {...values}; // Required so we don't overwrite previous references
newValues[prop] = value;
return permutateProps(
allProps,
filter,
remainingProps!.slice(1, remainingProps!.length),
newValues
);
});
return (permutations as any).flat();
};