add percent format

pull/663/merge
Pete Matsyburka 1 month ago
parent e52830c9b4
commit 99ca0136ed

@ -643,6 +643,10 @@ export default {
return new Intl.NumberFormat('de-DE').format(number) return new Intl.NumberFormat('de-DE').format(number)
} else if (format === 'space') { } else if (format === 'space') {
return new Intl.NumberFormat('fr-FR').format(number) return new Intl.NumberFormat('fr-FR').format(number)
} else if (format === 'percent') {
return `${number}%`
} else if (format === 'percent_space') {
return `${String(number).replace('.', ',')} %`
} else { } else {
return number return number
} }

@ -620,6 +620,10 @@ export default {
return new Intl.NumberFormat('de-DE').format(number) return new Intl.NumberFormat('de-DE').format(number)
} else if (format === 'space') { } else if (format === 'space') {
return new Intl.NumberFormat('fr-FR').format(number) return new Intl.NumberFormat('fr-FR').format(number)
} else if (format === 'percent') {
return `${number}%`
} else if (format === 'percent_space') {
return `${String(number).replace('.', ',')} %`
} else { } else {
return number return number
} }

@ -248,7 +248,7 @@ export default {
FieldType, FieldType,
IconSettings IconSettings
}, },
inject: ['t', 'save', 'backgroundColor', 'dateFormats'], inject: ['t', 'save', 'backgroundColor', 'dateFormats', 'locale'],
provide () { provide () {
return { return {
fieldTypes: ['text', 'number', 'date', 'checkbox', 'radio', 'select'] fieldTypes: ['text', 'number', 'date', 'checkbox', 'radio', 'select']
@ -308,15 +308,18 @@ export default {
return { text: 'string', number: 'number', date: 'date', checkbox: 'boolean', radio: 'string', select: 'string' } return { text: 'string', number: 'number', date: 'date', checkbox: 'boolean', radio: 'string', select: 'string' }
}, },
numberFormats () { numberFormats () {
return [ const formats = ['none', 'usd', 'eur', 'gbp', 'comma', 'dot', 'space']
'none', const spaceLocales = ['fr-FR', 'es-ES', 'pt-PT', 'de-DE', 'it-IT', 'nl-NL']
'usd',
'eur', formats.push(spaceLocales.includes(this.locale) ? 'percent_space' : 'percent')
'gbp',
'comma', const selectedFormat = this.schema.format
'dot',
'space' if (selectedFormat && !formats.includes(selectedFormat)) {
] formats.push(selectedFormat)
}
return formats
}, },
availableDateFormats () { availableDateFormats () {
const formats = this.dateFormats.length const formats = this.dateFormats.length
@ -397,6 +400,10 @@ export default {
return new Intl.NumberFormat('de-DE').format(number) return new Intl.NumberFormat('de-DE').format(number)
} else if (format === 'space') { } else if (format === 'space') {
return new Intl.NumberFormat('fr-FR').format(number) return new Intl.NumberFormat('fr-FR').format(number)
} else if (format === 'percent') {
return `${number}%`
} else if (format === 'percent_space') {
return `${String(number).replace('.', ',')} %`
} else { } else {
return number return number
} }

@ -514,7 +514,7 @@ export default {
ContextSubmenu, ContextSubmenu,
ContextModal ContextModal
}, },
inject: ['t', 'getFieldTypeIndex', 'template', 'withCustomFields', 'currencies', 'dateFormats'], inject: ['t', 'getFieldTypeIndex', 'template', 'withCustomFields', 'currencies', 'dateFormats', 'locale'],
props: { props: {
contextMenu: { contextMenu: {
type: Object, type: Object,

@ -610,7 +610,7 @@ export default {
IconTypography, IconTypography,
IconX IconX
}, },
inject: ['template', 't', 'dateFormats'], inject: ['template', 't', 'dateFormats', 'locale'],
props: { props: {
field: { field: {
type: Object, type: Object,
@ -691,15 +691,18 @@ export default {
} }
}, },
numberFormats () { numberFormats () {
return [ const formats = ['none', 'usd', 'eur', 'gbp', 'comma', 'dot', 'space']
'none', const spaceLocales = ['fr-FR', 'es-ES', 'pt-PT', 'de-DE', 'it-IT', 'nl-NL']
'usd',
'eur', formats.push(spaceLocales.includes(this.locale) ? 'percent_space' : 'percent')
'gbp',
'comma', const selectedFormat = this.field.preferences?.format
'dot',
'space' if (selectedFormat && !formats.includes(selectedFormat)) {
] formats.push(selectedFormat)
}
return formats
}, },
availableDateFormats () { availableDateFormats () {
const formats = this.dateFormats.length const formats = this.dateFormats.length
@ -824,6 +827,10 @@ export default {
return new Intl.NumberFormat('de-DE').format(number) return new Intl.NumberFormat('de-DE').format(number)
} else if (format === 'space') { } else if (format === 'space') {
return new Intl.NumberFormat('fr-FR').format(number) return new Intl.NumberFormat('fr-FR').format(number)
} else if (format === 'percent') {
return `${number}%`
} else if (format === 'percent_space') {
return `${String(number).replace('.', ',')} %`
} else { } else {
return number return number
} }

@ -25,6 +25,10 @@ module NumberUtils
ApplicationController.helpers.number_to_currency(number, locale:, precision: 2, unit: CURRENCY_SYMBOLS[format]) ApplicationController.helpers.number_to_currency(number, locale:, precision: 2, unit: CURRENCY_SYMBOLS[format])
elsif locale elsif locale
ApplicationController.helpers.number_with_delimiter(number, locale:) ApplicationController.helpers.number_with_delimiter(number, locale:)
elsif format == 'percent'
"#{number}%"
elsif format == 'percent_space'
"#{number.to_s.tr('.', ',')} %"
else else
number number
end end

Loading…
Cancel
Save