choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
254 lines (219 loc) • 6.66 kB
JavaScript
import { isArrayLike } from 'mobx';
import isNumber from 'lodash/isNumber';
import isString from 'lodash/isString';
import isObject from 'lodash/isObject';
import { pxToRem } from '../../../es/_util/UnitConvertor';
import { LabelLayout, RequiredMarkAlign, SpacingType } from './enum';
export var defaultLabelWidth = 100;
export var defaultLabelLayout = LabelLayout.horizontal;
export var defaultColumns = 1;
export var FIELD_SUFFIX = 'field';
export function normalizeLabelWidth(labelWidth, columns) {
if (isNumber(labelWidth) || labelWidth === 'auto') {
return new Array(columns).fill(labelWidth);
}
var labelWidths = new Array(columns).fill(defaultLabelWidth);
labelWidth.slice(0, columns).forEach(function (width, index) {
return labelWidths[index] = width;
});
return labelWidths;
}
export function getProperty(props, key, dataSet, record) {
if (props[key]) {
return props[key];
}
var name = props.name;
var field = dataSet && dataSet.getField(name);
if (field) {
var fieldProperty = field.get(key, record);
if (fieldProperty) {
return fieldProperty;
}
}
}
/**
* 有ds时,仅以ds field属性为准;无ds则以组件属性为准
* @param props
* @param key
* @param dataSet
* @param record
* @returns
*/
export function getPropertyDSFirst(props, key, dataSet, record) {
var name = props.name;
var field = dataSet && dataSet.getField(name);
if (field) {
var fieldProperty = field.get(key, record);
if (fieldProperty) {
return fieldProperty;
}
} else if (props[key]) {
return props[key];
}
}
export var defaultExcludeUseColonTag = ['div', 'button', 'Button'];
export function hasParentElement(parentElement, tagName) {
while (parentElement) {
if (parentElement.tagName.toLowerCase() === tagName) {
return true;
}
parentElement = parentElement.parentElement;
}
return false;
}
export function normalizeSeparateSpacing(separateSpacing) {
if (isNumber(separateSpacing)) {
return {
width: separateSpacing,
height: separateSpacing
};
}
if (isArrayLike(separateSpacing)) {
return {
width: separateSpacing[0] || 0,
height: separateSpacing[1] || 0
};
}
return separateSpacing;
}
var defaultSpacingType = SpacingType.between;
export function normalizeSpacingType(spacingType) {
if (isString(spacingType) && [SpacingType.around, SpacingType.evenly, SpacingType.between].includes(spacingType)) {
return {
width: spacingType,
height: spacingType
};
}
if (isArrayLike(spacingType)) {
return {
width: spacingType[0] || defaultSpacingType,
height: spacingType[1] || defaultSpacingType
};
}
if (isObject(spacingType)) {
return spacingType;
}
return {
width: defaultSpacingType,
height: defaultSpacingType
};
}
export function getSpacingProperties(separateSpacing, spacingType, isHorizontal) {
var properties = {
paddingHorizontal: 0,
paddingVertical: 0,
marginHorizontal: 0,
marginVertical: 0,
style: {}
};
var style = properties.style;
var width = separateSpacing.width,
height = separateSpacing.height;
var spacingTypeH = spacingType.width,
spacingTypeV = spacingType.height;
var borderSpacing = [];
var spacingWidth = width / 2;
var spacingHeight = height / 2;
switch (spacingTypeH) {
case SpacingType.evenly:
{
if (isHorizontal) {
properties.paddingHorizontal = spacingWidth;
properties.marginHorizontal = spacingWidth;
} else {
borderSpacing[0] = width;
}
break;
}
case SpacingType.around:
properties.paddingHorizontal = spacingWidth;
break;
default:
properties.paddingHorizontal = spacingWidth;
properties.marginHorizontal = -spacingWidth;
break;
}
switch (spacingTypeV) {
case SpacingType.evenly:
borderSpacing[1] = height;
break;
case SpacingType.around:
properties.paddingVertical = spacingHeight;
break;
default:
properties.paddingVertical = spacingHeight;
properties.marginVertical = -spacingHeight;
break;
}
if (borderSpacing.length) {
style.borderCollapse = 'separate';
style.borderSpacing = "".concat(pxToRem(borderSpacing[0] || 0), " ").concat(pxToRem(borderSpacing[1] || 0));
}
var marginHorizontal = properties.marginHorizontal;
if (marginHorizontal < 0) {
style.marginRight = pxToRem(marginHorizontal);
style.marginLeft = pxToRem(marginHorizontal);
style.width = "calc(100% + ".concat(pxToRem(-marginHorizontal * 2), ")");
} else if (marginHorizontal > 0) {
style.paddingRight = pxToRem(marginHorizontal);
style.paddingLeft = pxToRem(marginHorizontal);
}
return properties;
}
export function getSpacingLabelStyle(properties, isHorizontal, rowIndex) {
if (properties) {
var paddingHorizontal = properties.paddingHorizontal,
paddingVertical = properties.paddingVertical,
marginVertical = properties.marginVertical;
var style = {};
if (paddingHorizontal) {
style.paddingLeft = pxToRem(paddingHorizontal);
if (!isHorizontal) {
style.paddingRight = pxToRem(paddingHorizontal);
}
}
if (paddingVertical) {
if (marginVertical && marginVertical === -paddingVertical) {
if (rowIndex !== 0) {
style.paddingTop = pxToRem(paddingVertical * 2);
}
} else {
style.paddingTop = pxToRem(paddingVertical);
style.paddingBottom = pxToRem(paddingVertical);
}
}
return style;
}
}
export function getSpacingFieldStyle(properties, isHorizontal, rowIndex) {
if (properties) {
var paddingHorizontal = properties.paddingHorizontal,
paddingVertical = properties.paddingVertical,
marginVertical = properties.marginVertical;
var style = {};
if (paddingHorizontal) {
style.paddingRight = pxToRem(paddingHorizontal);
if (!isHorizontal) {
style.paddingLeft = pxToRem(paddingHorizontal);
}
}
if (paddingVertical) {
if (marginVertical && marginVertical === -paddingVertical) {
if (rowIndex !== 0) {
style.paddingTop = pxToRem(paddingVertical * 2);
}
} else {
style.paddingTop = pxToRem(paddingVertical);
style.paddingBottom = pxToRem(paddingVertical);
}
}
return style;
}
}
export function getRequiredMarkAlign(align) {
if ([RequiredMarkAlign.left, RequiredMarkAlign.right].includes(align)) {
return align;
}
return RequiredMarkAlign.left;
}
//# sourceMappingURL=utils.js.map