diff --git a/resources/js/Components/ui/number-field/NumberField.vue b/resources/js/Components/ui/number-field/NumberField.vue index 94fb5992..aeb59381 100644 --- a/resources/js/Components/ui/number-field/NumberField.vue +++ b/resources/js/Components/ui/number-field/NumberField.vue @@ -2,22 +2,61 @@ import type { NumberFieldRootEmits, NumberFieldRootProps } from 'reka-ui' import { cn } from '@/lib/utils' import { NumberFieldRoot, useForwardPropsEmits } from 'reka-ui' -import { computed, type HTMLAttributes } from 'vue' +import { computed, type HTMLAttributes, inject, type ComputedRef } from 'vue' +import type { Organization } from '@/packages/api/src' -const props = defineProps() +const props = defineProps() const emits = defineEmits() const delegatedProps = computed(() => { - const { class: _, ...delegated } = props - + const { class: _, formatOptions: __, ...delegated } = props return delegated }) +const organization = inject>('organization') + +const locale = computed(() => { + const format = organization?.value?.number_format || 'comma-point' + + // space poin is not supported in reka-ui + switch (format) { + case 'point-comma': + return 'de-DE' // Uses point for thousands and comma for decimal + case 'comma-point': + return 'en-US' // Uses comma for thousands and point for decimal + case 'space-comma': + return 'sv-SE' // Uses space for thousands and comma for decimal + case 'apostrophe-point': + return 'de-CH' // Uses apostrophe for thousands and point for decimal + default: + return 'en-US' + } +}) + +const defaultFormatOptions = { + maximumFractionDigits: 2 +} + +const formatOptions = computed(() => ({ + ...defaultFormatOptions, + ...props.formatOptions +})) + const forwarded = useForwardPropsEmits(delegatedProps, emits)