|
@@ -1,33 +1,40 @@
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
-const currency = (value = 0, symbol = '$', symbolPosition = 'before', thousandsSeparator = '.', decimalPlaces = 2, decimalSeparator = ',', decimalZeros = false) => {
|
|
|
+const currency = (value = 0, options = {}) => {
|
|
|
value = value.toString()
|
|
|
|
|
|
- if (decimalPlaces > 2) {
|
|
|
- decimalPlaces = 2
|
|
|
+ if (!(options instanceof Object)) {
|
|
|
+ options = {}
|
|
|
}
|
|
|
|
|
|
- if (!!(`${thousandsSeparator}${decimalSeparator}`).replace(/\.,|,\./g, '')) {
|
|
|
+ options.symbol = options.symbol || '$'
|
|
|
+ options.position = options.position || 'before'
|
|
|
+ options.thousandsSeparator = options.thousandsSeparator || '.'
|
|
|
+ options.decimalPlaces = options.decimalPlaces >= 0 || options.decimalPlaces <= 2 ? options.decimalPlaces : 2
|
|
|
+ options.decimalSeparator = options.decimalSeparator || ','
|
|
|
+ options.decimalZeros = !!options.decimalZeros
|
|
|
+
|
|
|
+ if (!!(`${options.thousandsSeparator}${options.decimalSeparator}`).replace(/\.,|,\./g, '')) {
|
|
|
throw new Error('Same thousands and decimal separator is not allowed')
|
|
|
}
|
|
|
|
|
|
value = value.split('.')
|
|
|
|
|
|
- value[0] = value[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, `$1${thousandsSeparator}`)
|
|
|
+ value[0] = value[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, `$1${options.thousandsSeparator}`)
|
|
|
|
|
|
if (!!value[1]) {
|
|
|
- value[1] = Number.parseFloat(`1.${value[1]}e${decimalPlaces}`)
|
|
|
+ value[1] = Number.parseFloat(`1.${value[1]}e${options.decimalPlaces}`)
|
|
|
value[1] = Math.round(value[1]).toString().replace(/^1/, '')
|
|
|
}
|
|
|
|
|
|
- value = value.join(decimalSeparator)
|
|
|
+ value = value.join(options.decimalSeparator)
|
|
|
|
|
|
- if (!decimalZeros) {
|
|
|
+ if (!options.decimalZeros) {
|
|
|
value = value.replace(/([\.|,]\d)0$/, '$1')
|
|
|
}
|
|
|
|
|
|
- return symbolPosition === 'before' ? `${symbol} ${value}` : `${value} ${symbol}`
|
|
|
+ return options.position === 'before' ? `${options.symbol} ${value}` : `${value} ${options.symbol}`
|
|
|
}
|
|
|
|
|
|
export default currency
|