| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | <?php
namespace App\Filament\Forms\Components;
use App\Enums\Accounting\AdjustmentComputation;
use App\Enums\Accounting\DocumentType;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Get;
class DocumentTotals extends Grid
{
    protected string $view = 'filament.forms.components.document-totals';
    protected DocumentType $documentType = DocumentType::Invoice;
    protected function setUp(): void
    {
        parent::setUp();
        $this->schema([
            Select::make('discount_computation')
                ->label('Discount computation')
                ->hiddenLabel()
                ->options(AdjustmentComputation::class)
                ->default(AdjustmentComputation::Percentage)
                ->selectablePlaceholder(false)
                ->live(),
            TextInput::make('discount_rate')
                ->label('Discount rate')
                ->hiddenLabel()
                ->live()
                ->extraInputAttributes(['class' => 'text-right'])
                ->rate(
                    computation: static fn (Get $get) => $get('discount_computation'),
                    currency: static fn (Get $get) => $get('currency_code'),
                ),
        ]);
    }
    public function type(DocumentType | string $type): static
    {
        if (is_string($type)) {
            $type = DocumentType::from($type);
        }
        $this->documentType = $type;
        return $this;
    }
    public function getType(): DocumentType
    {
        return $this->documentType;
    }
}
 |