Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

CreateCurrencySelect.php 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Filament\Forms\Components;
  3. use App\Actions\OptionAction\CreateCurrency;
  4. use App\Utilities\Currency\CurrencyAccessor;
  5. use App\Utilities\Currency\CurrencyConverter;
  6. use Filament\Forms\Components\Actions\Action;
  7. use Filament\Forms\Components\Select;
  8. use Filament\Forms\Components\TextInput;
  9. use Filament\Forms\Set;
  10. use Filament\Support\Enums\MaxWidth;
  11. use Illuminate\Support\Facades\DB;
  12. class CreateCurrencySelect extends Select
  13. {
  14. protected function setUp(): void
  15. {
  16. parent::setUp();
  17. $this->localizeLabel('Currency')
  18. ->default(CurrencyAccessor::getDefaultCurrency())
  19. ->preload()
  20. ->searchable()
  21. ->live()
  22. ->required()
  23. ->createOptionForm($this->createCurrencyForm())
  24. ->createOptionAction(fn (Action $action) => $this->createCurrencyAction($action));
  25. }
  26. protected function createCurrencyForm(): array
  27. {
  28. return [
  29. Select::make('code')
  30. ->localizeLabel()
  31. ->searchable()
  32. ->options(CurrencyAccessor::getAvailableCurrencies())
  33. ->live()
  34. ->afterStateUpdated(static function (Set $set, $state) {
  35. CurrencyConverter::handleCurrencyChange($set, $state);
  36. })
  37. ->required(),
  38. TextInput::make('name')
  39. ->localizeLabel()
  40. ->maxLength(100)
  41. ->required(),
  42. TextInput::make('rate')
  43. ->localizeLabel()
  44. ->numeric()
  45. ->required(),
  46. ];
  47. }
  48. protected function createCurrencyAction(Action $action): Action
  49. {
  50. return $action
  51. ->label('Add Currency')
  52. ->slideOver()
  53. ->modalWidth(MaxWidth::Medium)
  54. ->action(static function (array $data) {
  55. return DB::transaction(static function () use ($data) {
  56. $code = $data['code'];
  57. $name = $data['name'];
  58. $rate = $data['rate'];
  59. return CreateCurrency::create($code, $name, $rate);
  60. });
  61. });
  62. }
  63. }