From 4fecd096120f4ef0227374b5737f72b795ce0380 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Fri, 23 Feb 2024 12:56:09 +0000 Subject: [PATCH 1/3] fix: Laravel Number:: formatting --- .../actions/src/Concerns/CanExportRecords.php | 5 +- .../actions/src/Concerns/CanImportRecords.php | 7 +- packages/infolists/docs/03-entries/02-text.md | 51 +++++++++-- .../Components/Concerns/CanFormatState.php | 71 +++++++++------ .../components/pagination/index.blade.php | 6 +- packages/support/src/Enums/ArgumentValue.php | 8 ++ packages/support/src/helpers.php | 15 +-- packages/tables/docs/03-columns/02-text.md | 51 +++++++++-- packages/tables/docs/07-summaries.md | 52 ++++++++++- .../src/Columns/Concerns/CanFormatState.php | 71 +++++++++------ .../Summarizers/Concerns/CanFormatState.php | 91 ++++++++----------- .../Operators/EqualsOperator.php | 3 +- .../Operators/IsMaxOperator.php | 3 +- .../Operators/IsMinOperator.php | 3 +- 14 files changed, 300 insertions(+), 137 deletions(-) create mode 100644 packages/support/src/Enums/ArgumentValue.php diff --git a/packages/actions/src/Concerns/CanExportRecords.php b/packages/actions/src/Concerns/CanExportRecords.php index c5116d7bc9..376220b185 100644 --- a/packages/actions/src/Concerns/CanExportRecords.php +++ b/packages/actions/src/Concerns/CanExportRecords.php @@ -25,6 +25,7 @@ use Illuminate\Foundation\Bus\PendingChain; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Bus; +use Illuminate\Support\Number; use Illuminate\Support\Str; use Livewire\Component; @@ -127,7 +128,7 @@ trait CanExportRecords Notification::make() ->title(__('filament-actions::export.notifications.max_rows.title')) ->body(trans_choice('filament-actions::export.notifications.max_rows.body', $maxRows, [ - 'count' => format_number($maxRows), + 'count' => Number::format($maxRows), ])) ->danger() ->send(); @@ -239,7 +240,7 @@ trait CanExportRecords Notification::make() ->title($action->getSuccessNotificationTitle()) ->body(trans_choice('filament-actions::export.notifications.started.body', $export->total_rows, [ - 'count' => format_number($export->total_rows), + 'count' => Number::format($export->total_rows), ])) ->success() ->send(); diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index 12e8fc7931..bd045fe9ae 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -26,6 +26,7 @@ use Illuminate\Filesystem\AwsS3V3Adapter; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Bus; use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Number; use League\Csv\Info; use League\Csv\Reader as CsvReader; use League\Csv\Statement; @@ -181,7 +182,7 @@ trait CanImportRecords Notification::make() ->title(__('filament-actions::import.notifications.max_rows.title')) ->body(trans_choice('filament-actions::import.notifications.max_rows.body', $maxRows, [ - 'count' => format_number($maxRows), + 'count' => Number::format($maxRows), ])) ->danger() ->send(); @@ -271,7 +272,7 @@ trait CanImportRecords fn (Notification $notification) => $notification->actions([ NotificationAction::make('downloadFailedRowsCsv') ->label(trans_choice('filament-actions::import.notifications.completed.actions.download_failed_rows_csv.label', $failedRowsCount, [ - 'count' => format_number($failedRowsCount), + 'count' => Number::format($failedRowsCount), ])) ->color('danger') ->url(route('filament.imports.failed-rows.download', ['import' => $import], absolute: false), shouldOpenInNewTab: true) @@ -285,7 +286,7 @@ trait CanImportRecords Notification::make() ->title($action->getSuccessNotificationTitle()) ->body(trans_choice('filament-actions::import.notifications.started.body', $import->total_rows, [ - 'count' => format_number($import->total_rows), + 'count' => Number::format($import->total_rows), ])) ->success() ->send(); diff --git a/packages/infolists/docs/03-entries/02-text.md b/packages/infolists/docs/03-entries/02-text.md index 669aad78fe..1e2a3228fc 100644 --- a/packages/infolists/docs/03-entries/02-text.md +++ b/packages/infolists/docs/03-entries/02-text.md @@ -58,17 +58,39 @@ TextEntry::make('created_at') ## Number formatting -The `numeric()` method allows you to format an entry as a number, using PHP's `number_format()`: +The `numeric()` method allows you to format an entry as a number: ```php use Filament\Infolists\Components\TextEntry; TextEntry::make('stock') - ->numeric( - decimalPlaces: 0, - decimalSeparator: '.', - thousandsSeparator: ',', - ) + ->numeric() +``` + +If you would like to customize the number of decimal places used to format the number with, you can use the `decimalPlaces` argument: + +```php +use Filament\Infolists\Components\TextEntry; + +TextEntry::make('stock') + ->numeric(decimalPlaces: 0) +``` + +By default, your app's locale will be used to format the number suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Infolists\Components\TextEntry; + +TextEntry::make('stock') + ->numeric(locale: 'nl') +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); ``` ## Currency formatting @@ -91,6 +113,23 @@ TextEntry::make('price') ->money('EUR', divideBy: 100) ``` +By default, your app's locale will be used to format the money suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Infolists\Components\TextEntry; + +TextEntry::make('price') + ->money(currency: 'EUR', locale: 'nl') +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); +``` + ## Limiting text length You may `limit()` the length of the entry's value: diff --git a/packages/infolists/src/Components/Concerns/CanFormatState.php b/packages/infolists/src/Components/Concerns/CanFormatState.php index c0e5ffbe38..8f9ed0a9e3 100644 --- a/packages/infolists/src/Components/Concerns/CanFormatState.php +++ b/packages/infolists/src/Components/Concerns/CanFormatState.php @@ -6,8 +6,11 @@ use Closure; use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Infolist; use Filament\Support\Contracts\HasLabel as LabelInterface; +use Filament\Support\Enums\ArgumentValue; +use Filament\Tables\Table; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Support\Carbon; +use Illuminate\Support\Number; use Illuminate\Support\Str; use function Filament\Support\format_money; @@ -99,28 +102,11 @@ trait CanFormatState return $this; } - public function money(string | Closure | null $currency = null, int $divideBy = 0): static + public function money(string | Closure | null $currency = null, int $divideBy = 0, string | Closure | null $locale = null): static { $this->isMoney = true; - $this->formatStateUsing(static function (TextEntry $component, $state) use ($currency, $divideBy): ?string { - if (blank($state)) { - return null; - } - - $currency = $component->evaluate($currency) ?? Infolist::$defaultCurrency; - - return format_money($state, $currency, $divideBy); - }); - - return $this; - } - - public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null $decimalSeparator = '.', string | Closure | null $thousandsSeparator = ','): static - { - $this->isNumeric = true; - - $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $thousandsSeparator): ?string { + $this->formatStateUsing(static function (TextEntry $component, $state) use ($currency, $divideBy, $locale): ?string { if (blank($state)) { return null; } @@ -129,16 +115,47 @@ trait CanFormatState return $state; } - if ($decimalPlaces === null) { - return format_number($state); + $currency = $component->evaluate($currency) ?? Table::$defaultCurrency; + + if ($divideBy) { + $state /= $divideBy; } - return number_format( - $state, - $component->evaluate($decimalPlaces), - $component->evaluate($decimalSeparator), - $component->evaluate($thousandsSeparator), - ); + return Number::currency($state, $currency, $component->evaluate($locale)); + }); + + return $this; + } + + public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null | ArgumentValue $decimalSeparator = ArgumentValue::Default, string | Closure | null | ArgumentValue $thousandsSeparator = ArgumentValue::Default, int | Closure | null $maxDecimalPlaces = null, string | Closure | null $locale = null): static + { + $this->isNumeric = true; + + $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { + if (blank($state)) { + return null; + } + + if (! is_numeric($state)) { + return $state; + } + + $decimalSeparator = $component->evaluate($decimalSeparator); + $thousandsSeparator = $component->evaluate($thousandsSeparator); + + if ( + ($decimalSeparator !== ArgumentValue::Default) || + ($thousandsSeparator !== ArgumentValue::Default) + ) { + return number_format( + $state, + $component->evaluate($decimalPlaces), + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, + ); + } + + return Number::format($state, $decimalPlaces, $maxDecimalPlaces, locale: $component->evaluate($loale)); }); return $this; diff --git a/packages/support/resources/views/components/pagination/index.blade.php b/packages/support/resources/views/components/pagination/index.blade.php index 106be9704a..4768d5be62 100644 --- a/packages/support/resources/views/components/pagination/index.blade.php +++ b/packages/support/resources/views/components/pagination/index.blade.php @@ -51,9 +51,9 @@ 'filament::components/pagination.overview', $paginator->total(), [ - 'first' => \Filament\Support\format_number($paginator->firstItem() ?? 0), - 'last' => \Filament\Support\format_number($paginator->lastItem() ?? 0), - 'total' => \Filament\Support\format_number($paginator->total()), + 'first' => \Illuminate\Support\Number::format($paginator->firstItem() ?? 0), + 'last' => \Illuminate\Support\Number::format($paginator->lastItem() ?? 0), + 'total' => \Illuminate\Support\Number::format($paginator->total()), ], ) }} diff --git a/packages/support/src/Enums/ArgumentValue.php b/packages/support/src/Enums/ArgumentValue.php new file mode 100644 index 0000000000..c7e900123a --- /dev/null +++ b/packages/support/src/Enums/ArgumentValue.php @@ -0,0 +1,8 @@ +getLocale(), NumberFormatter::CURRENCY); - if ($divideBy) { $money /= $divideBy; } - return $formatter->formatCurrency($money, $currency); + return Number::currency($money, $currency); } } if (! function_exists('Filament\Support\format_number')) { + /** + * @deprecated Use `Illuminate\Support\Number::format()` instead. + */ function format_number(float | int $number): string { - $formatter = new NumberFormatter(app()->getLocale(), NumberFormatter::DECIMAL); - - return $formatter->format($number); + return Number::format($number); } } diff --git a/packages/tables/docs/03-columns/02-text.md b/packages/tables/docs/03-columns/02-text.md index 11f319a96b..816b7a2610 100644 --- a/packages/tables/docs/03-columns/02-text.md +++ b/packages/tables/docs/03-columns/02-text.md @@ -84,17 +84,39 @@ TextColumn::make('created_at') ## Number formatting -The `numeric()` method allows you to format a column as a number, using PHP's `number_format()`: +The `numeric()` method allows you to format an entry as a number: ```php use Filament\Tables\Columns\TextColumn; TextColumn::make('stock') - ->numeric( - decimalPlaces: 0, - decimalSeparator: '.', - thousandsSeparator: ',', - ) + ->numeric() +``` + +If you would like to customize the number of decimal places used to format the number with, you can use the `decimalPlaces` argument: + +```php +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('stock') + ->numeric(decimalPlaces: 0) +``` + +By default, your app's locale will be used to format the number suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('stock') + ->numeric(locale: 'nl') +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); ``` ## Currency formatting @@ -117,6 +139,23 @@ TextColumn::make('price') ->money('EUR', divideBy: 100) ``` +By default, your app's locale will be used to format the money suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('price') + ->money('EUR', locale: 'nl') +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); +``` + ## Limiting text length You may `limit()` the length of the cell's value: diff --git a/packages/tables/docs/07-summaries.md b/packages/tables/docs/07-summaries.md index 061be9d05b..66041651e5 100644 --- a/packages/tables/docs/07-summaries.md +++ b/packages/tables/docs/07-summaries.md @@ -221,7 +221,17 @@ In this example, the table will calculate how many posts are published. ### Number formatting -The `numeric()` method allows you to format a summary as a number, using PHP's `number_format()`: +The `numeric()` method allows you to format an entry as a number: + +```php +use Filament\Tables\Columns\Summarizers\Average; +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('rating') + ->summarize(Average::make()->numeric()) +``` + +If you would like to customize the number of decimal places used to format the number with, you can use the `decimalPlaces` argument: ```php use Filament\Tables\Columns\Summarizers\Average; @@ -230,11 +240,29 @@ use Filament\Tables\Columns\TextColumn; TextColumn::make('rating') ->summarize(Average::make()->numeric( decimalPlaces: 0, - decimalSeparator: '.', - thousandsSeparator: ',', )) ``` +By default, your app's locale will be used to format the number suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Tables\Columns\Summarizers\Average; +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('rating') + ->summarize(Average::make()->numeric( + locale: 'nl', + )) +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); +``` + ### Currency formatting The `money()` method allows you to easily format monetary values, in any currency: @@ -257,6 +285,24 @@ TextColumn::make('price') ->summarize(Sum::make()->money('EUR', divideBy: 100)) ``` +By default, your app's locale will be used to format the money suitably. If you would like to customize the locale used, you can pass it to the `locale` argument: + +```php +use Filament\Tables\Columns\Summarizers\Average; +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('price') + ->summarize(Sum::make()->money(currency: 'EUR', locale: 'nl')) +``` + +Alternatively, you can set the default locale used across your app using the `Number::useLocale()` method in the `boot()` method of a service provider: + +```php +use Illuminate\Support\Number; + +Number::useLocale('nl'); +``` + ### Limiting text length You may `limit()` the length of the summary's value: diff --git a/packages/tables/src/Columns/Concerns/CanFormatState.php b/packages/tables/src/Columns/Concerns/CanFormatState.php index c1eb759e53..e8505baadc 100644 --- a/packages/tables/src/Columns/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Concerns/CanFormatState.php @@ -3,11 +3,14 @@ namespace Filament\Tables\Columns\Concerns; use Closure; +use Filament\Infolists\Components\TextEntry; use Filament\Support\Contracts\HasLabel as LabelInterface; +use Filament\Support\Enums\ArgumentValue; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Support\Carbon; +use Illuminate\Support\Number; use Illuminate\Support\Str; use function Filament\Support\format_money; @@ -99,28 +102,11 @@ trait CanFormatState return $this; } - public function money(string | Closure | null $currency = null, int $divideBy = 0): static + public function money(string | Closure | null $currency = null, int $divideBy = 0, string | Closure | null $locale = null): static { $this->isMoney = true; - $this->formatStateUsing(static function (TextColumn $column, $state) use ($currency, $divideBy): ?string { - if (blank($state)) { - return null; - } - - $currency = $column->evaluate($currency) ?? Table::$defaultCurrency; - - return format_money($state, $currency, $divideBy); - }); - - return $this; - } - - public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null $decimalSeparator = '.', string | Closure | null $thousandsSeparator = ','): static - { - $this->isNumeric = true; - - $this->formatStateUsing(static function (TextColumn $column, $state) use ($decimalPlaces, $decimalSeparator, $thousandsSeparator): ?string { + $this->formatStateUsing(static function (TextColumn $column, $state) use ($currency, $divideBy, $locale): ?string { if (blank($state)) { return null; } @@ -129,16 +115,47 @@ trait CanFormatState return $state; } - if ($decimalPlaces === null) { - return format_number($state); + $currency = $column->evaluate($currency) ?? Table::$defaultCurrency; + + if ($divideBy) { + $state /= $divideBy; } - return number_format( - $state, - $column->evaluate($decimalPlaces), - $column->evaluate($decimalSeparator), - $column->evaluate($thousandsSeparator), - ); + return Number::currency($state, $currency, $column->evaluate($locale)); + }); + + return $this; + } + + public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null | ArgumentValue $decimalSeparator = ArgumentValue::Default, string | Closure | null | ArgumentValue $thousandsSeparator = ArgumentValue::Default, int | Closure | null $maxDecimalPlaces = null, string | Closure | null $locale = null): static + { + $this->isNumeric = true; + + $this->formatStateUsing(static function (TextColumn $column, $state) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { + if (blank($state)) { + return null; + } + + if (! is_numeric($state)) { + return $state; + } + + $decimalSeparator = $column->evaluate($decimalSeparator); + $thousandsSeparator = $column->evaluate($thousandsSeparator); + + if ( + ($decimalSeparator !== ArgumentValue::Default) || + ($thousandsSeparator !== ArgumentValue::Default) + ) { + return number_format( + $state, + $column->evaluate($decimalPlaces), + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, + ); + } + + return Number::format($state, $decimalPlaces, $maxDecimalPlaces, locale: $column->evaluate($locale)); }); return $this; diff --git a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php index 3a1440362f..0abb7d79f4 100644 --- a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php @@ -3,9 +3,12 @@ namespace Filament\Tables\Columns\Summarizers\Concerns; use Closure; +use Filament\Infolists\Components\TextEntry; +use Filament\Support\Enums\ArgumentValue; use Filament\Tables\Columns\Summarizers\Summarizer; use Filament\Tables\Table; use Illuminate\Support\Arr; +use Illuminate\Support\Number; use Illuminate\Support\Str; use function Filament\Support\format_money; @@ -26,83 +29,69 @@ trait CanFormatState public function limit(int $length = 100, ?string $end = '...'): static { - $this->formatStateUsing(static function ($state) use ($end, $length) { - $isArrayState = is_array($state); - - $state = array_map(function ($state) use ($end, $length) { - if (blank($state)) { - return null; - } - - return Str::limit(strval($state), $length, $end ?? ''); - }, Arr::wrap($state)); - - if (! $isArrayState) { - return Arr::first($state); + $this->formatStateUsing(static function ($state) use ($end, $length): ?string { + if (blank($state)) { + return null; } - return $state; + return Str::limit(strval($state), $length, $end ?? ''); }); return $this; } - public function money(string | Closure | null $currency = null, int $divideBy = 0): static + public function money(string | Closure | null $currency = null, int $divideBy = 0, string | Closure | null $locale = null): static { - $this->formatStateUsing(static function ($state, Summarizer $summarizer) use ($currency, $divideBy) { - $isArrayState = is_array($state); - - $state = array_map(function ($state) use ($currency, $divideBy, $summarizer) { - if (blank($state)) { - return null; - } - - $currency = $summarizer->evaluate($currency) ?? Table::$defaultCurrency; - - return format_money($state, $currency, $divideBy); - }, Arr::wrap($state)); - - if (! $isArrayState) { - return Arr::first($state); + $this->formatStateUsing(static function ($state, Summarizer $summarizer) use ($currency, $divideBy, $locale): ?string { + if (blank($state)) { + return null; } - return $state; + if (! is_numeric($state)) { + return $state; + } + + $currency = $summarizer->evaluate($currency) ?? Table::$defaultCurrency; + + if ($divideBy) { + $state /= $divideBy; + } + + return Number::currency($state, $currency, $summarizer->evaluate($locale)); }); return $this; } - public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null $decimalSeparator = '.', string | Closure | null $thousandsSeparator = ','): static + public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null | ArgumentValue $decimalSeparator = ArgumentValue::Default, string | Closure | null | ArgumentValue $thousandsSeparator = ArgumentValue::Default, int | Closure | null $maxDecimalPlaces = null, string | Closure | null $locale = null): static { - $this->formatStateUsing(static function ($state, Summarizer $summarizer) use ($decimalPlaces, $decimalSeparator, $thousandsSeparator) { - $isArrayState = is_array($state); + $this->isNumeric = true; - $state = array_map(function ($state) use ($decimalPlaces, $decimalSeparator, $summarizer, $thousandsSeparator) { - if (blank($state)) { - return null; - } + $this->formatStateUsing(static function ($state, Summarizer $summarizer) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { + if (blank($state)) { + return null; + } - if (! is_numeric($state)) { - return $state; - } + if (! is_numeric($state)) { + return $state; + } - if ($decimalPlaces === null) { - return format_number($state); - } + $decimalSeparator = $summarizer->evaluate($decimalSeparator); + $thousandsSeparator = $summarizer->evaluate($thousandsSeparator); + if ( + ($decimalSeparator !== ArgumentValue::Default) || + ($thousandsSeparator !== ArgumentValue::Default) + ) { return number_format( $state, $summarizer->evaluate($decimalPlaces), - $summarizer->evaluate($decimalSeparator), - $summarizer->evaluate($thousandsSeparator), + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, ); - }, Arr::wrap($state)); - - if (! $isArrayState) { - return Arr::first($state); } - return $state; + return Number::format($state, $decimalPlaces, $maxDecimalPlaces, locale: $summarizer->evaluate($locale)); }); return $this; diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php index 987d718045..3fc09255fa 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php @@ -7,6 +7,7 @@ use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Number; use function Filament\Support\format_number; class EqualsOperator extends Operator @@ -35,7 +36,7 @@ class EqualsOperator extends Operator 'filament-tables::filters/query-builder.operators.number.equals.summary.direct', [ 'attribute' => $this->getAttributeLabel(), - 'number' => format_number($this->getSettings()['number']), + 'number' => Number::format($this->getSettings()['number']), ], ); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php index 46804cb691..7bfc5c8123 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php @@ -7,6 +7,7 @@ use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Number; use function Filament\Support\format_number; class IsMaxOperator extends Operator @@ -35,7 +36,7 @@ class IsMaxOperator extends Operator 'filament-tables::filters/query-builder.operators.number.is_max.summary.direct', [ 'attribute' => $this->getAttributeLabel(), - 'number' => format_number($this->getSettings()['number']), + 'number' => Number::format($this->getSettings()['number']), ], ); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php index ed3a1584da..6fdbfd8b1d 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php @@ -7,6 +7,7 @@ use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Number; use function Filament\Support\format_number; class IsMinOperator extends Operator @@ -35,7 +36,7 @@ class IsMinOperator extends Operator 'filament-tables::filters/query-builder.operators.number.is_min.summary.direct', [ 'attribute' => $this->getAttributeLabel(), - 'number' => format_number($this->getSettings()['number']), + 'number' => Number::format($this->getSettings()['number']), ], ); } From e5e04c021a8523e39094c38ad33b980bce841551 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Fri, 23 Feb 2024 12:58:50 +0000 Subject: [PATCH 2/3] cs --- packages/actions/src/Concerns/CanExportRecords.php | 2 -- packages/actions/src/Concerns/CanImportRecords.php | 2 -- .../infolists/src/Components/Concerns/CanFormatState.php | 7 ++----- packages/support/src/helpers.php | 1 - packages/tables/src/Columns/Concerns/CanFormatState.php | 6 +----- .../src/Columns/Summarizers/Concerns/CanFormatState.php | 7 +------ .../NumberConstraint/Operators/EqualsOperator.php | 2 -- .../NumberConstraint/Operators/IsMaxOperator.php | 2 -- .../NumberConstraint/Operators/IsMinOperator.php | 2 -- 9 files changed, 4 insertions(+), 27 deletions(-) diff --git a/packages/actions/src/Concerns/CanExportRecords.php b/packages/actions/src/Concerns/CanExportRecords.php index 376220b185..ea56877d1e 100644 --- a/packages/actions/src/Concerns/CanExportRecords.php +++ b/packages/actions/src/Concerns/CanExportRecords.php @@ -29,8 +29,6 @@ use Illuminate\Support\Number; use Illuminate\Support\Str; use Livewire\Component; -use function Filament\Support\format_number; - trait CanExportRecords { /** diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index bd045fe9ae..0897000f71 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -35,8 +35,6 @@ use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; use SplTempFileObject; use Symfony\Component\HttpFoundation\StreamedResponse; -use function Filament\Support\format_number; - trait CanImportRecords { /** diff --git a/packages/infolists/src/Components/Concerns/CanFormatState.php b/packages/infolists/src/Components/Concerns/CanFormatState.php index 8f9ed0a9e3..b639778c0d 100644 --- a/packages/infolists/src/Components/Concerns/CanFormatState.php +++ b/packages/infolists/src/Components/Concerns/CanFormatState.php @@ -13,9 +13,6 @@ use Illuminate\Support\Carbon; use Illuminate\Support\Number; use Illuminate\Support\Str; -use function Filament\Support\format_money; -use function Filament\Support\format_number; - trait CanFormatState { protected ?Closure $formatStateUsing = null; @@ -131,7 +128,7 @@ trait CanFormatState { $this->isNumeric = true; - $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { + $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $maxDecimalPlaces, $thousandsSeparator): ?string { if (blank($state)) { return null; } @@ -150,7 +147,7 @@ trait CanFormatState return number_format( $state, $component->evaluate($decimalPlaces), - $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, ); } diff --git a/packages/support/src/helpers.php b/packages/support/src/helpers.php index 67f90d4f49..01c64c6ae5 100644 --- a/packages/support/src/helpers.php +++ b/packages/support/src/helpers.php @@ -12,7 +12,6 @@ use Illuminate\Support\Number; use Illuminate\Support\Str; use Illuminate\Translation\MessageSelector; use Illuminate\View\ComponentAttributeBag; -use NumberFormatter; if (! function_exists('Filament\Support\format_money')) { /** diff --git a/packages/tables/src/Columns/Concerns/CanFormatState.php b/packages/tables/src/Columns/Concerns/CanFormatState.php index e8505baadc..5a76d5bb15 100644 --- a/packages/tables/src/Columns/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Concerns/CanFormatState.php @@ -3,7 +3,6 @@ namespace Filament\Tables\Columns\Concerns; use Closure; -use Filament\Infolists\Components\TextEntry; use Filament\Support\Contracts\HasLabel as LabelInterface; use Filament\Support\Enums\ArgumentValue; use Filament\Tables\Columns\TextColumn; @@ -13,9 +12,6 @@ use Illuminate\Support\Carbon; use Illuminate\Support\Number; use Illuminate\Support\Str; -use function Filament\Support\format_money; -use function Filament\Support\format_number; - trait CanFormatState { protected ?Closure $formatStateUsing = null; @@ -150,7 +146,7 @@ trait CanFormatState return number_format( $state, $column->evaluate($decimalPlaces), - $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, ); } diff --git a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php index 0abb7d79f4..50522e9eb0 100644 --- a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php @@ -3,17 +3,12 @@ namespace Filament\Tables\Columns\Summarizers\Concerns; use Closure; -use Filament\Infolists\Components\TextEntry; use Filament\Support\Enums\ArgumentValue; use Filament\Tables\Columns\Summarizers\Summarizer; use Filament\Tables\Table; -use Illuminate\Support\Arr; use Illuminate\Support\Number; use Illuminate\Support\Str; -use function Filament\Support\format_money; -use function Filament\Support\format_number; - trait CanFormatState { protected ?Closure $formatStateUsing = null; @@ -86,7 +81,7 @@ trait CanFormatState return number_format( $state, $summarizer->evaluate($decimalPlaces), - $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, + $decimalSeparator === ArgumentValue::Default ? '.' : $decimalSeparator, $thousandsSeparator === ArgumentValue::Default ? ',' : $thousandsSeparator, ); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php index 3fc09255fa..471f823caa 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/EqualsOperator.php @@ -6,9 +6,7 @@ use Filament\Forms\Components\Component; use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; - use Illuminate\Support\Number; -use function Filament\Support\format_number; class EqualsOperator extends Operator { diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php index 7bfc5c8123..cf8c4ad494 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMaxOperator.php @@ -6,9 +6,7 @@ use Filament\Forms\Components\Component; use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; - use Illuminate\Support\Number; -use function Filament\Support\format_number; class IsMaxOperator extends Operator { diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php index 6fdbfd8b1d..dffb0cca75 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/NumberConstraint/Operators/IsMinOperator.php @@ -6,9 +6,7 @@ use Filament\Forms\Components\Component; use Filament\Forms\Components\TextInput; use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\Operator; use Illuminate\Database\Eloquent\Builder; - use Illuminate\Support\Number; -use function Filament\Support\format_number; class IsMinOperator extends Operator { From 9c83b6945163529e5dfcc980d7f21e97e085942c Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Fri, 23 Feb 2024 13:02:21 +0000 Subject: [PATCH 3/3] fix --- packages/infolists/src/Components/Concerns/CanFormatState.php | 4 ++-- .../src/Columns/Summarizers/Concerns/CanFormatState.php | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/infolists/src/Components/Concerns/CanFormatState.php b/packages/infolists/src/Components/Concerns/CanFormatState.php index b639778c0d..8bee46d012 100644 --- a/packages/infolists/src/Components/Concerns/CanFormatState.php +++ b/packages/infolists/src/Components/Concerns/CanFormatState.php @@ -128,7 +128,7 @@ trait CanFormatState { $this->isNumeric = true; - $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $maxDecimalPlaces, $thousandsSeparator): ?string { + $this->formatStateUsing(static function (TextEntry $component, $state) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { if (blank($state)) { return null; } @@ -152,7 +152,7 @@ trait CanFormatState ); } - return Number::format($state, $decimalPlaces, $maxDecimalPlaces, locale: $component->evaluate($loale)); + return Number::format($state, $decimalPlaces, $maxDecimalPlaces, $component->evaluate($locale)); }); return $this; diff --git a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php index 50522e9eb0..91934e7bb7 100644 --- a/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Summarizers/Concerns/CanFormatState.php @@ -60,8 +60,6 @@ trait CanFormatState public function numeric(int | Closure | null $decimalPlaces = null, string | Closure | null | ArgumentValue $decimalSeparator = ArgumentValue::Default, string | Closure | null | ArgumentValue $thousandsSeparator = ArgumentValue::Default, int | Closure | null $maxDecimalPlaces = null, string | Closure | null $locale = null): static { - $this->isNumeric = true; - $this->formatStateUsing(static function ($state, Summarizer $summarizer) use ($decimalPlaces, $decimalSeparator, $locale, $maxDecimalPlaces, $thousandsSeparator): ?string { if (blank($state)) { return null;