NonEmptyFormFieldDependency/ValueFormFieldDependency funktioniert nicht gut mit SingleMediaSelectionFormField

  • Affected Version
    WoltLab Suite 5.3
    Affected App
    WoltLab Suite Core

    Hallo,

    Ich würde gern ein Formfeld abhängig von ausgewählten Media anzeigen. NonEmptyFormFieldDependency funktioniert hier nicht besonders gut, da es nur auf einen nicht leeren value überprüft. Bei einem neuen Formular stimmt das zuerst, da der value des hidden Felds nicht gesetzt ist. Sobald man aber Media ausgewählt hat und dann wieder entfernt ist der Wert 0 und die Dependency greift nicht mehr.

    Also auf zu ValueFormFieldDependency und einer etwas umständlichen Konfiguration:

    Code
    SingleSelectionFormField::create('position')
       ->addDependency(ValueFormFieldDependency::create('imageID')
          ->fieldId('imageID')
          ->values(['', 0])
          ->negate())

    Das funktioniert, allerdings verzögert. Nachdem ich Media ausgewählt habe erscheint das Feld erst, nachdem sich eine andere Dependency von einem anderen Feld ändert. Dann werden scheinbar alle Dependencies neu überprüft und das zusätzliche Feld wird angezeigt. (Gleiches gilt auch für die NonEmptyFormFieldDependency in Verbindung mit Media).

    Gibt es hier eine elegantere/richtigere Lösung oder ist das ein Fehler?

  • Wenn das hidden input des Media Feldes geändert wird, muss das change event manuell getriggert werden. Dann bekommt auch der Dependency Manager das mit und es funktioniert.

    Code
    // save selected media in store element
    var storeElement = elById(elData(this._activeButton, 'store'));
    storeElement.value = media.mediaID;
    storeElement.dispatchEvent(new Event('change'));
    Code
    var storeElement = elById(elData(button, 'store'));
    storeElement.value = 0;
    storeElement.dispatchEvent(new Event('change'));

    Für Media Selection wäre es außerdem schön, wenn es eine einfache Dependency geben würde.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!