Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

CreateCurrencySelect.php 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. $this->relationship('currency', 'name');
  26. $this->createOptionUsing(static function (array $data) {
  27. return DB::transaction(static function () use ($data) {
  28. $currency = CreateCurrency::create(
  29. $data['code'],
  30. $data['name'],
  31. $data['rate']
  32. );
  33. return $currency->code;
  34. });
  35. });
  36. }
  37. protected function createCurrencyForm(): array
  38. {
  39. return [
  40. Select::make('code')
  41. ->localizeLabel()
  42. ->searchable()
  43. ->options(CurrencyAccessor::getAvailableCurrencies())
  44. ->live()
  45. ->afterStateUpdated(static function (Set $set, $state) {
  46. CurrencyConverter::handleCurrencyChange($set, $state);
  47. })
  48. ->required(),
  49. TextInput::make('name')
  50. ->localizeLabel()
  51. ->maxLength(100)
  52. ->required(),
  53. TextInput::make('rate')
  54. ->localizeLabel()
  55. ->numeric()
  56. ->required(),
  57. ];
  58. }
  59. protected function createCurrencyAction(Action $action): Action
  60. {
  61. return $action
  62. ->label('Add Currency')
  63. ->slideOver()
  64. ->modalWidth(MaxWidth::Medium);
  65. }
  66. }