import { currency } from '@intlayer/core';
import { computed, inject } from 'vue';
import {
INTLAYER_SYMBOL,
type IntlayerProvider,
} from '../client/installIntlayer';
/**
* Vue composable that provides a currency formatter
* bound to the current application locale.
*
* @example
* ```vue
* const formatCurrency = useCurrency();
*
* formatCurrency(1500, { currency: "USD" });
* // "$1,500.00"
*
* formatCurrency(1500, { currency: "EUR", locale: "de-DE" });
* // "1.500,00 €"
*
* formatCurrency(9876543.21, {
* currency: "JPY",
* fractionDigits: 0,
* });
* // "¥9,876,543"
* ```
*/
export const useCurrency = () => {
const intlayer = inject<IntlayerProvider>(INTLAYER_SYMBOL)!;
return computed(() => {
const locale = intlayer.locale.value;
return (...args: Parameters<typeof currency>) =>
currency(args[0], {
...args[1],
locale: args[1]?.locale ?? locale,
});
});
};