Skip to content
This repository has been archived by the owner on May 15, 2023. It is now read-only.

Commit

Permalink
multiple instance from array (#195)
Browse files Browse the repository at this point in the history
fix for nuxt 2.12.1

Co-authored-by: sysaib <sysa.i@wezom.com.ua>
  • Loading branch information
SysaIvan and sysaib authored May 7, 2020
1 parent 885cd03 commit d2ae805
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 62 deletions.
45 changes: 45 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,30 @@ Vue.use(VueCurrencyFilter,
})
```

### Add Multiple Instance

```javascript
Vue.use(VueCurrencyFilter, [
{ // default name 'currency'
symbol: '$',
thousandsSeparator: ',',
fractionCount: 2,
fractionSeparator: '.',
symbolPosition: 'front',
symbolSpacing: true
},
{ // default name 'currency_2'
name: 'currency_2',
symbol: 'usd',
thousandsSeparator: ' ',
fractionCount: 2,
fractionSeparator: '.',
symbolPosition: 'front',
symbolSpacing: false
}
])
```

### Use in View

```html
Expand All @@ -99,6 +123,27 @@ Add `vue-currency-filter/nuxt` to modules section of `nuxt.config.js`
symbolPosition: 'front',
symbolSpacing: true
}],

// for multiple instance
['vue-currency-filter/nuxt', [
{ // default name 'currency'
symbol: '$',
thousandsSeparator: ',',
fractionCount: 2,
fractionSeparator: '.',
symbolPosition: 'front',
symbolSpacing: true
},
{ // default name 'currency_2'
name: 'currency_2',
symbol: 'usd',
thousandsSeparator: ' ',
fractionCount: 2,
fractionSeparator: '.',
symbolPosition: 'front',
symbolSpacing: false
}
]],
]
}
```
Expand Down
132 changes: 70 additions & 62 deletions packages/vue-currency-filter/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,80 +12,88 @@ const defaultConfig = {
}

const VueCurrencyFilter = {
install (Vue, options) {
if (__isNull(options)) options = {}
const globalConfigs = __defaults(options, defaultConfig)
let { name, ...configs } = globalConfigs

const filterCurrency = function (value,
_symbol,
_thousandsSeparator,
_fractionCount,
_fractionSeparator,
_symbolPosition,
_symbolSpacing) {

let runtimeConfig = __defaults({
symbol: _symbol,
thousandsSeparator: _thousandsSeparator,
fractionCount: _fractionCount,
fractionSeparator: _fractionSeparator,
symbolPosition: _symbolPosition,
symbolSpacing: _symbolSpacing
}, configs)

if (typeof _symbol === 'object') {
runtimeConfig = __defaults(_symbol, configs)
}
install (Vue, pluginOptions) {
const createFilter = (options) => {
if (__isNull(options)) options = {}
const globalConfigs = __defaults(options, defaultConfig)
let { name, ...configs } = globalConfigs

let result = 0.0
const isNegative = String(value).charAt(0) === '-'
const filterCurrency = function (value,
_symbol,
_thousandsSeparator,
_fractionCount,
_fractionSeparator,
_symbolPosition,
_symbolSpacing) {

if (isNegative) {
value = String(value).slice(1)
}
let runtimeConfig = __defaults({
symbol: _symbol,
thousandsSeparator: _thousandsSeparator,
fractionCount: _fractionCount,
fractionSeparator: _fractionSeparator,
symbolPosition: _symbolPosition,
symbolSpacing: _symbolSpacing
}, configs)

const amount = parseFloat(value)
if (!isNaN(amount)) {
result = amount
}
if (typeof _symbol === 'object') {
runtimeConfig = __defaults(_symbol, configs)
}

let formatConfig = '%s%v'
if (runtimeConfig.symbolPosition === 'front') {
formatConfig = runtimeConfig.symbolSpacing ? '%s %v' : '%s%v'
} else {
formatConfig = runtimeConfig.symbolSpacing ? '%v %s' : '%v%s'
}
let result = 0.0
const isNegative = String(value).charAt(0) === '-'

if (runtimeConfig.fractionCount > 0) {
value = toFixed(value, runtimeConfig.fractionCount)
}
if (isNegative) {
value = String(value).slice(1)
}

const amount = parseFloat(value)
if (!isNaN(amount)) {
result = amount
}

// @ts-ignore
result = formatMoney(value, {
format: formatConfig,
symbol: runtimeConfig.symbol,
precision: runtimeConfig.fractionCount,
thousand: runtimeConfig.thousandsSeparator,
decimal: runtimeConfig.fractionSeparator
})
let formatConfig = '%s%v'
if (runtimeConfig.symbolPosition === 'front') {
formatConfig = runtimeConfig.symbolSpacing ? '%s %v' : '%s%v'
} else {
formatConfig = runtimeConfig.symbolSpacing ? '%v %s' : '%v%s'
}

if (runtimeConfig.fractionCount > 0) {
value = toFixed(value, runtimeConfig.fractionCount)
}

if (isNegative) {
// @ts-ignore
result = '-' + result
result = formatMoney(value, {
format: formatConfig,
symbol: runtimeConfig.symbol,
precision: runtimeConfig.fractionCount,
thousand: runtimeConfig.thousandsSeparator,
decimal: runtimeConfig.fractionSeparator
})

if (isNegative) {
// @ts-ignore
result = '-' + result
}

return result
}

return result
Vue.filter(name, filterCurrency)
Vue.prototype['$' + name] = {
setConfig: (options) => {
configs = __defaults(options, defaultConfig)
},
getConfig: () => {
return configs
}
}
}

Vue.filter(name, filterCurrency)
Vue.prototype.$CurrencyFilter = {
setConfig: (options) => {
configs = __defaults(options, defaultConfig)
},
getConfig: () => {
return configs
}
if (Array.isArray(pluginOptions)) {
pluginOptions.forEach(options => createFilter(options))
} else {
createFilter(pluginOptions)
}
}
}
Expand Down

0 comments on commit d2ae805

Please # to comment.