1.0.5 • Published 4 years ago
react-amount v1.0.5
React component formatting numbers in an input field
Live demo

Installation
yarn add react-amountor
npm install react-amountUsage
import React, { useState } from 'react';
import { Amount } from 'react-amount';
import '~/react-amount/dist/style/index.min.css';
interface MyComponentProps {
  value: string | number | undefined;
}
const MyComponent = (props: MyComponentProps): React.Element => {
  const { value } = props;
  const [currentValue, setCurrentValue] = useState<string | number | undefined>(
    value,
  );
  return (
    <Amount
      value={currentValue}
      suffix="€"
      onChange={(newValue) => setCurrentValue(newValue.raw)}
      decimalSeparator=","
      thousandSeparator=" "
    />
  );
};
export default MyComponent;Options
| Option | Type | Default value | Description | 
|---|---|---|---|
| value | string | number | undefined | Initial value of the control | 
| readOnly | boolean | false | Input value is not editable | 
| disabled | boolean | false | Input value is disabled | 
| textOnly | boolean | false | Input value is displayed as formatted text only value | 
| name | string | Name of the input field | |
| className | string | undefined | Class to be added to the wrapper of the component | 
| onChange | (update: FormattedValues) => void | undefined | Callback function to handle value changes | 
| decimals | number | 2 | Number of decimals | 
| decimalSeparator | string | "." | Decimal separator | 
| thousandSeparator | string | "," | Thousand separator | 
| thousandGrouping | ThousandGroupingStyle: "thousand" | "wan" | "lakh" | "thousand" | Thousand grouping style | 
| displayOnInvalid | string | "-" | Value displayed on invalid input in textOnly | 
| dataTestId | string | undefined | Id value for testing | 
| required | boolean | false | Required of the input field | 
| prefix | string | undefined | Prefix | 
| suffix | string | undefined | Suffix | 
Contributing
We very much welcome contributions.
- Submit GitHub issues to report bugs or ask questions.
 - Propose Pull Request to improve our code.
 
Types
FormattedValues
export interface FormattedValues {
  formatted: string;
  float: number;
  raw: string;
}This structure is used in the onChange handler to provide flexibility on the format.
formattedis for display purpose.floatis for numerical representation, but suffer from precision limitations.rawis for numerical representation as a string with full precision.
ThousandGroupingStyle
export enum ThousandGroupingStyle {
  THOUSAND = 'thousand',
  WAN = 'wan',
  LAKH = 'lakh',
}THOUSAND: groups of 3 digits example: 123,456,789WAN: 1 group of 4 digits, then groups of 3 digits example: 12,345,6789LAKH: 1 group of 3 digits, then groups of 2 digits example: 12,34,56,789