Campos requeridos condicionalmente según contexto en Filament

Uno de los casos con los que más nos encontramos en Calima con Filament es la gestión de usuarios. Normalmente queremos que, al crear un usuario, su contraseña sea obligatoria. Sin embargo, una vez creado, para editarlo no necesita rellenarla desde el panel.

Contraseña obligatoria al crear un usuario
Contraseña opcional al editar un usuario ya existente

Para hacer esto en Filament, podemos especificar un contexto en el cual el campo es requerido o no:

<?php

namespace App\Filament\Resources;

use App\Models\User;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Illuminate\Support\Facades\Hash;

class UserResource extends Resource
{
    protected static ?string $model = User::class;

    protected static ?string $navigationIcon = 'heroicon-o-user';

    public static function form(Form $form): Form
    {
        return $form
            ->schema([
	            // ...
                Forms\Components\TextInput::make('password')
                    ->required(fn (string $context) => $context === 'create')
                    ->dehydrateStateUsing(fn ($state) => Hash::make($state))
                    ->dehydrated(fn ($state) => filled($state))
                    ->password(),
                // ...
            ]);
    }
    
    // ...
}