© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
FilamentF
Filament•4mo ago
Trauma Zombie

Reactive inputs?

Hi guys,
is it possible in my example make
material_price
material_price
reactive and calculate its value when
material_cost
material_cost
or
material_margin
material_margin
changed? Right now I have afterStateUpdated method on these two inputs, but I have places where many more inputs affect just one.

MoneyInput::make('material_cost')
    ->label('Cost')
    ->required()
    ->lazy()
    ->afterStateUpdated(function (?float $state, Get $get, Set $set): void {
        $margin = (float) ($get('material_margin') ?? 0);

        if (! is_numeric($state)) {
            $set('material_price', null);

            return;
        }

        $price = $state + ($state * ($margin / 100));
        $set('material_price', round($price, 2));
    }),

TextInput::make('material_margin')
    ->label('Margin')
    ->suffix('%')
    ->default(50)
    ->required()
    ->numeric()
    ->step(0.1)
    ->minValue(0)
    ->lazy()
    ->afterStateUpdated(function (?float $state, Get $get, Set $set): void {
        $cost = (float) ($get('material_cost') ?? 0);

        $price = $cost + ($cost * ($state / 100));
        $set('material_price', round($price, 2));
    }),

MoneyInput::make('material_price')
    ->label('Price')
    ->required(),
MoneyInput::make('material_cost')
    ->label('Cost')
    ->required()
    ->lazy()
    ->afterStateUpdated(function (?float $state, Get $get, Set $set): void {
        $margin = (float) ($get('material_margin') ?? 0);

        if (! is_numeric($state)) {
            $set('material_price', null);

            return;
        }

        $price = $state + ($state * ($margin / 100));
        $set('material_price', round($price, 2));
    }),

TextInput::make('material_margin')
    ->label('Margin')
    ->suffix('%')
    ->default(50)
    ->required()
    ->numeric()
    ->step(0.1)
    ->minValue(0)
    ->lazy()
    ->afterStateUpdated(function (?float $state, Get $get, Set $set): void {
        $cost = (float) ($get('material_cost') ?? 0);

        $price = $cost + ($cost * ($state / 100));
        $set('material_price', round($price, 2));
    }),

MoneyInput::make('material_price')
    ->label('Price')
    ->required(),
Filament banner
FilamentJoin
A powerful open source UI framework for Laravel • Build and ship admin panels & apps fast with Livewire
20,307Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

Reactive Fields
FilamentFFilament / ❓┊help
15mo ago
accessSelectedRecords reactive ?
FilamentFFilament / ❓┊help
2y ago
Reactive validation
FilamentFFilament / ❓┊help
3y ago
Reactive Filters
FilamentFFilament / ❓┊help
3y ago