You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.9 KiB

3 years ago
import React, { FC, useState } from 'react';
import CurrencyInput from '../components/CurrencyInput';
import { CurrencyInputProps, CurrencyInputOnChangeValues } from '../components/CurrencyInputProps';
export const Example1: FC = () => {
const limit = 1000;
const prefix = '£';
const [errorMessage, setErrorMessage] = useState('');
const [className, setClassName] = useState('');
const [value, setValue] = useState<string | number>(123.45);
const [values, setValues] = useState<CurrencyInputOnChangeValues>();
const [rawValue, setRawValue] = useState<string | undefined>(' ');
/**
* Handle validation
*/
const handleOnValueChange: CurrencyInputProps['onValueChange'] = (value, _, values): void => {
setValues(values);
setRawValue(value === undefined ? 'undefined' : value || ' ');
if (!value) {
setClassName('');
setValue('');
return;
}
if (Number.isNaN(Number(value))) {
setErrorMessage('Please enter a valid number');
setClassName('is-invalid');
return;
}
if (Number(value) > limit) {
setErrorMessage(`Max: ${prefix}${limit}`);
setClassName('is-invalid');
setValue(value);
return;
}
setClassName('is-valid');
setValue(value);
};
return (
<div className="row">
<div className="col-12 mb-4">
<a href="https://github.com/cchanxzy/react-currency-input-field/blob/master/src/examples/Example1.tsx">
<h2>Example 1</h2>
</a>
<ul>
<li>{`'£'`} prefix</li>
<li>Allows decimals (up to 2 decimal places)</li>
<li>Value is set programmatically (passed in via props)</li>
</ul>
<form className="needs-validation">
<div className="row">
<div className="form-group col">
<label htmlFor="validationCustom01">Please enter a value (max £1,000)</label>
<CurrencyInput
id="validationCustom01"
name="input-1"
className={`form-control ${className}`}
value={value}
onValueChange={handleOnValueChange}
placeholder="Please enter a number"
prefix={prefix}
step={1}
/>
<div className="invalid-feedback">{errorMessage}</div>
</div>
<div className="form-group col">
<pre className="h-100 p-3 bg-dark text-white">
<div className="row">
<div className="col-6">
<div className="text-muted mr-3">onValueChange:</div>
{rawValue}
</div>
<div className="col-6">
<div className="text-muted mr-3">Values:</div>
{JSON.stringify(values, undefined, ' ')}
</div>
</div>
</pre>
</div>
</div>
</form>
</div>
</div>
);
};
export default Example1;