@zohodesk/dot
Version:
In this Library, we Provide Some Basic Components to Build Your Application
189 lines (179 loc) • 5.36 kB
JavaScript
/**** Libraries ****/
import React, { PureComponent } from 'react';
import { defaultProps } from "./props/defaultProps";
import { propTypes } from "./props/propTypes";
/**** Components ****/
import Label from '@zohodesk/components/lib/Label/Label';
import TextBoxIcon from '@zohodesk/components/lib/TextBoxIcon/TextBoxIcon';
import ValidationMessage from "../ValidationMessage/ValidationMessage";
import { getUniqueId } from '@zohodesk/components/lib/Provider/IdProvider';
import FieldContainer from "../FieldContainer/FieldContainer";
/**** CSS ****/
import style from "../Fields.module.css";
export default class CurrencyField extends PureComponent {
constructor(props) {
super(props);
this.state = {
isActive: false
};
this.handleChange = this.handleChange.bind(this);
this.handleGetRef = this.handleGetRef.bind(this);
this.getNextId = getUniqueId(this);
this.onFocus = this.onFocus.bind(this);
this.onBlur = this.onBlur.bind(this);
}
handleChange(value) {
let {
id,
onChange
} = this.props;
onChange && onChange(id, value);
}
handleGetRef(el) {
let {
getRef,
id
} = this.props;
this.textBox = el;
getRef && getRef(el, id);
}
onFocus() {
let {
onFocus
} = this.props;
this.setState({
isActive: true
});
onFocus && onFocus();
}
onBlur() {
let {
onBlur
} = this.props;
this.setState({
isActive: false
});
onBlur && onBlur();
}
render() {
let {
labelName,
id,
textBoxSize,
textBoxVariant,
textBoxType,
isMandatory,
validationMessage,
validationPalette,
maxLength,
isReadOnly,
value,
errorType,
isDisabled,
title,
dataId,
validationRuleMessage,
validationRulePalette,
onKeyDown,
placeHolder,
infoText,
borderColor,
fieldSize,
labelPalette,
labelCustomClass,
htmlId,
dataSelectorId,
lockedInfoText,
isLocked,
needReadOnlyStyle,
isClickable,
userCurrencyType,
customProps,
formatCurrency,
renderLabelProps
} = this.props;
const {
LabelProps = {},
TextBoxIconProps = {},
ValidationMessageProps1 = {},
ValidationMessageProps2 = {}
} = customProps;
let {
isActive
} = this.state;
let formatValue = value;
if (!isActive) {
formatValue = formatCurrency(value, userCurrencyType);
} else {
formatValue = value;
}
let uniqueId = htmlId ? htmlId : this.getNextId();
const isFocusable = !needReadOnlyStyle || !isReadOnly && needReadOnlyStyle;
return /*#__PURE__*/React.createElement("div", {
className: `${style.container} ${isDisabled ? style.disabled : isReadOnly ? style.readonly : ''}`,
"data-title": isDisabled ? title : null,
"data-selector-id": dataSelectorId
}, labelName && /*#__PURE__*/React.createElement(FieldContainer, {
infoText: infoText,
isLocked: isLocked,
lockedInfoText: lockedInfoText,
renderProps: renderLabelProps
}, /*#__PURE__*/React.createElement(Label, {
text: labelName,
size: fieldSize === 'small' ? 'small' : 'medium',
palette: isMandatory ? 'mandatory' : isDisabled ? 'primary' : labelPalette,
customClass: `${style.fieldLabel} ${labelCustomClass} ${isMandatory ? style.labelMandatory : ''}`,
htmlFor: uniqueId,
dataId: isDisabled ? `${dataId}_label_disabled` : isMandatory ? `${dataId}_label_mandatory` : `${dataId}_label`,
...LabelProps
})), /*#__PURE__*/React.createElement("div", {
className: `${style.fieldContainer} ${labelName ? style[`fieldMargin_${fieldSize}`] : ''}`
}, /*#__PURE__*/React.createElement(TextBoxIcon, {
htmlId: uniqueId,
id: id,
type: textBoxType,
variant: textBoxVariant,
size: fieldSize === 'medium' ? textBoxSize : 'xsmall',
maxLength: maxLength,
isReadOnly: isReadOnly,
inputRef: this.handleGetRef,
value: formatValue,
onChange: this.handleChange,
dataId: dataId,
onBlur: this.onBlur,
onFocus: isFocusable && this.onFocus,
onKeyDown: onKeyDown,
placeHolder: placeHolder,
borderColor: borderColor,
isDisabled: isDisabled,
needEffect: isReadOnly || isDisabled ? false : true,
isClickable: isClickable,
needReadOnlyStyle: needReadOnlyStyle,
a11y: {
ariaLabelledby: labelName
},
...TextBoxIconProps
}), validationMessage && /*#__PURE__*/React.createElement(ValidationMessage, {
text: validationMessage,
palette: validationPalette,
type: errorType,
dataId: `${dataId}_ValidationMessage`,
htmlFor: uniqueId,
...ValidationMessageProps1
}), validationRuleMessage && /*#__PURE__*/React.createElement(ValidationMessage, {
text: validationRuleMessage,
palette: validationRulePalette,
type: errorType,
htmlFor: uniqueId,
dataId: `${dataId}_ValidationRuleMessage`,
...ValidationMessageProps2
})));
}
}
CurrencyField.propTypes = propTypes;
CurrencyField.defaultProps = defaultProps; // if (__DOCS__) {
// CurrencyField.docs = {
// componentGroup: 'Form Fields',
// folderName: 'General'
// };
// }