tuxones / filament-js-money-field
A Laravel Filament plugin for dynamic international currency masking using JavaScript Intl, supporting flexible currency and locale configuration via closures.
Requires
- php: ^8.1
- ext-intl: *
- filament/forms: ^3.0
- moneyphp/money: ^4.6
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- nunomaduro/collision: ^7.9
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.1
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
README
A Filament plugin for dynamic international currency masking using JavaScript Intl, supporting flexible currency and locale configuration via closures.
This plugin extends the functionality of a standard text field by adding a dynamic currency mask. All properties and behaviors of the standard field remain intact.
Supported Column Types
The plugin supports integer
, decimal
, double
, and float
. However, it is highly recommended to use integer
or decimal
for better precision and consistency when handling currency values.
If the column is of type integer
, the entered value is stored as an integer, including the decimal cents, without any currency symbols or formatting.
Installation
You can install the package via composer:
composer require tuxones/filament-js-money-field
Usage
Form
use Tuxones\JsMoneyField\Forms\Components\JSMoneyInput; JSMoneyInput::make('consumption_limit') ->currency('USD') // ISO 4217 Currency Code, example: USD ->locale('en-US') // BCP 47 Locale Code, example: en-US // OR JSMoneyInput::make('consumption_limit') ->hidden(fn (Get $get) => !$get('country')) ->currency(fn (Get $get) => $get('country') ? Country::find($get('country'))->currency : 'USD') ->locale(fn (Get $get) => $get('country') ? Country::find($get('country'))->locale : 'en-US')
Table column
use Tuxones\JsMoneyField\Tables\Columns\JSMoneyColumn; JSMoneyColumn::make('consumption_limit') ->currency('USD') // ISO 4217 Currency Code, example: USD ->locale('en-US') // BCP 47 Locale Code, example: en-US // OR JSMoneyColumn::make('consumption_limit') ->currency(fn (Model $record) => $record->country ? $record->country->currency : 'USD') ->locale(fn (Model $record) => $record->country ? $record->country->locale : 'en-US')
InfoList
use Tuxones\JsMoneyField\Infolists\Components\JSMoneyEntry; JSMoneyEntry::make('consumption_limit') ->currency('USD') // ISO 4217 Currency Code, example: USD ->locale('en-US') // BCP 47 Locale Code, example: en-US // OR JSMoneyEntry::make('consumption_limit') ->currency(fn (Model $record) => $record->country ? $record->country->currency : 'USD') ->locale(fn (Model $record) => $record->country ? $record->country->locale : 'en-US')
Changelog
Please see CHANGELOG for more information on what has changed recently.
License
The MIT License (MIT). Please see License File for more information.