Verified Commit ac64dce7 authored by Théodore Biadala's avatar Théodore Biadala
Browse files

Issue #2866383 by sunlix, SAVEL, Nitin shrivastava, narendra.rajwar27, luizps,...

Issue #2866383 by sunlix, SAVEL, Nitin shrivastava, narendra.rajwar27, luizps, DieterHolvoet, Nikhil_110, Oscaner, rp7, Abhisheksingh27, smustgrave, dww: Readonly doesn't work on #States
parent cbd9cc88
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -690,6 +690,16 @@
    }
  });

  $document.on('state:readonly', (e) => {
    if (e.trigger) {
      $(e.target)
        .closest('.js-form-item, .js-form-submit, .js-form-wrapper')
        .toggleClass('form-readonly', e.value)
        .find('input, textarea')
        .prop('readonly', e.value);
    }
  });

  $document.on('state:required', (e) => {
    if (e.trigger) {
      if (e.value) {
+18 −0
Original line number Diff line number Diff line
@@ -131,6 +131,24 @@ public function buildForm(array $form, FormStateInterface $form_state) {
        ],
      ],
    ];
    $form['textfield_readonly_when_checkbox_trigger_checked'] = [
      '#type' => 'textfield',
      '#title' => 'Textfield readonly when checkbox trigger checked',
      '#states' => [
        'readonly' => [
          ':input[name="checkbox_trigger"]' => ['checked' => TRUE],
        ],
      ],
    ];
    $form['textarea_readonly_when_checkbox_trigger_checked'] = [
      '#type' => 'textarea',
      '#title' => 'Textarea readonly when checkbox trigger checked',
      '#states' => [
        'readonly' => [
          ':input[name="checkbox_trigger"]' => ['checked' => TRUE],
        ],
      ],
    ];
    $form['details_expanded_when_checkbox_trigger_checked'] = [
      '#type' => 'details',
      '#title' => 'Details expanded when checkbox trigger checked',
+10 −0
Original line number Diff line number Diff line
@@ -85,6 +85,10 @@ protected function doCheckboxTriggerTests() {
    $this->assertNotEmpty($textfield_invisible_element);
    $textfield_required_element = $page->findField('textfield_required_when_checkbox_trigger_checked');
    $this->assertNotEmpty($textfield_required_element);
    $textfield_readonly_element = $page->findField('textfield_readonly_when_checkbox_trigger_checked');
    $this->assertNotEmpty($textfield_readonly_element);
    $textarea_readonly_element = $page->findField('textarea_readonly_when_checkbox_trigger_checked');
    $this->assertNotEmpty($textarea_readonly_element);
    $details = $this->assertSession()->elementExists('css', '#edit-details-expanded-when-checkbox-trigger-checked');
    $textfield_in_details = $details->findField('textfield_in_details');
    $this->assertNotEmpty($textfield_in_details);
@@ -151,6 +155,8 @@ protected function doCheckboxTriggerTests() {
    $this->assertFalse($details->hasAttribute('open'));
    $this->assertFalse($textfield_in_details->isVisible());
    $this->assertFalse($textfield_required_element->hasAttribute('required'));
    $this->assertFalse($textfield_readonly_element->hasAttribute('readonly'));
    $this->assertFalse($textarea_readonly_element->hasAttribute('readonly'));
    $this->assertFalse($checkbox_checked_element->isChecked());
    $this->assertTrue($checkbox_unchecked_element->isChecked());
    $this->assertFalse($checkbox_visible_element->isVisible());
@@ -180,6 +186,8 @@ protected function doCheckboxTriggerTests() {
    // Verify triggered state.
    $this->assertFalse($textfield_invisible_element->isVisible());
    $this->assertEquals('required', $textfield_required_element->getAttribute('required'));
    $this->assertTrue($textfield_readonly_element->hasAttribute('readonly'));
    $this->assertTrue($textarea_readonly_element->hasAttribute('readonly'));
    $this->assertTrue($details->hasAttribute('open'));
    $this->assertTrue($textfield_in_details->isVisible());
    $this->assertTrue($checkbox_checked_element->isChecked());
@@ -219,6 +227,8 @@ protected function doCheckboxTriggerTests() {
    $this->assertFalse($details->hasAttribute('open'));
    $this->assertFalse($textfield_in_details->isVisible());
    $this->assertFalse($textfield_required_element->hasAttribute('required'));
    $this->assertFalse($textfield_readonly_element->hasAttribute('readonly'));
    $this->assertFalse($textarea_readonly_element->hasAttribute('readonly'));
    $this->assertFalse($checkbox_checked_element->isChecked());
    $this->assertTrue($checkbox_unchecked_element->isChecked());
    $this->assertFalse($checkbox_visible_element->isVisible());