Files
firefly-iii/resources/js/ComponentDemo/react-element-to-jsx-string/formatter/formatProp.js.flow

59 lines
1.6 KiB
Plaintext

/* @flow */
import spacer from './spacer';
import formatPropValue from './formatPropValue';
import type { Options } from './../options';
export default (
name: string,
hasValue: boolean,
value: any,
hasDefaultValue: boolean,
defaultValue: any,
inline: boolean,
lvl: number,
options: Options
): {
attributeFormattedInline: string,
attributeFormattedMultiline: string,
isMultilineAttribute: boolean,
} => {
if (!hasValue && !hasDefaultValue) {
throw new Error(
`The prop "${name}" has no value and no default: could not be formatted`
);
}
const usedValue = hasValue ? value : defaultValue;
const { useBooleanShorthandSyntax, tabStop } = options;
const formattedPropValue = formatPropValue(usedValue, inline, lvl, options);
let attributeFormattedInline = ' ';
let attributeFormattedMultiline = `\n${spacer(lvl + 1, tabStop)}`;
const isMultilineAttribute = formattedPropValue.includes('\n');
if (
useBooleanShorthandSyntax &&
formattedPropValue === '{false}' &&
!hasDefaultValue
) {
// If a boolean is false and not different from it's default, we do not render the attribute
attributeFormattedInline = '';
attributeFormattedMultiline = '';
} else if (useBooleanShorthandSyntax && formattedPropValue === '{true}') {
attributeFormattedInline += `${name}`;
attributeFormattedMultiline += `${name}`;
} else {
attributeFormattedInline += `${name}=${formattedPropValue}`;
attributeFormattedMultiline += `${name}=${formattedPropValue}`;
}
return {
attributeFormattedInline,
attributeFormattedMultiline,
isMultilineAttribute,
};
};