Wizard validation from Filament v3 to v4: required() fields validated parent has ->visible(false)

After upgrading from Filament v3.3 to v4.2, our tests are now failing because required() fields inside a Wizard step are being validated even when their parent container is hidden with ->visible(false).
Code Example

  // Step 2 of Wizard 
  private function oneField(): Fieldset
  {
      return Fieldset::make()
          ->schema([
              Repeater::make('oneField')
                  ->schema([
                      Tabs::make('tabs')
                          ->tabs([
                              Tab::make('tab1')->schema([
                                  RichEditor::make('tab_1')
                                      ->required(),  // ⚠️ This is validated even when hidden!
                              ]),
                              Tab::make('tab2')->schema([
                                  RichEditor::make('tab_2')
                                      ->required(),  // ⚠️ This is validated even when hidden!
                              ]),
                          ])
                  ])
          ])
          ->visible(fn (Get $get) => (int) $get('testing_value') === 1);
  }

  $formData = [
      'name_fr' => 'Test',
      'name_en' => 'Test',
      'testing_value' => 0,
  ];

  Livewire::actingAs($user)
      ->test(WizardForm::class)
      ->fillForm($formData)
      ->call('submit')
      ->assertHasNoErrors();

  // :x: Error: Component has errors: "data.tab_1", "data.tab_2"


  • Filament v3: When a parent container had ->visible(false), child required() fields were not validated
  • Filament v4: required() fields are still validated even when parent container is hiddenIs this a documented breaking change in Filament v4, or is this a bug?In v3, tests passed without providing data for hidden fields. In v4, we're getting validation errors on fields that aren't even visible tousers.Has anyone else encountered this? What's the recommended approach for conditional required fields in Wizard forms with v4?
Was this page helpful?