diff --git a/src/Field/BasicField.php b/src/Field/BasicField.php index 7158b73b39a615dd7fec72c6a45cb584aaaf2cca..54ef3cc1622524a8645ccd1f5ad49bbe467a552b 100644 --- a/src/Field/BasicField.php +++ b/src/Field/BasicField.php @@ -3,6 +3,7 @@ namespace WPDesk\Forms\Field; use WPDesk\Forms\Field; +use WPDesk\Forms\Form\FormWithFields; use WPDesk\Forms\Sanitizer\NoSanitize; use WPDesk\Forms\Serializer; use WPDesk\Forms\Serializer\NoSerialize; @@ -25,6 +26,7 @@ abstract class BasicField implements Field { public function __construct() { $this->meta['class'] = []; + $this->meta['priority'] = 10; } public function get_label() { @@ -299,12 +301,16 @@ abstract class BasicField implements Field { return $this; } - /** @return int */ - public function get_priority() { - return $this->meta['priority'] ?? 10; + public function get_priority(): int { + return $this->meta['priority']; } - public function set_priority( int $priority ) { + /** + * Fields are sorted by lowest priority value first, when getting FormWithFields + * + * @see FormWithFields::get_fields() + */ + public function set_priority( int $priority ): self { $this->meta['priority'] = $priority; return $this; diff --git a/tests/integration/Form/FormWithFieldsTest.php b/tests/integration/Form/FormWithFieldsTest.php index 9d8c2b2c267aa207a1659abe2374d87cd9e9db5c..165592dbc5b08efa1fad4a69dec9bae17cc3d5a8 100644 --- a/tests/integration/Form/FormWithFieldsTest.php +++ b/tests/integration/Form/FormWithFieldsTest.php @@ -21,10 +21,13 @@ class FormWithFieldsTest extends TestCase { $this->form->add_fields( [ ( new InputTextField() ) - ->set_label('third'), + ->set_label('fourth'), ( new SelectField() ) ->set_label('second') ->set_priority(5), + ( new SelectField() ) + ->set_label('third') + ->set_priority(7), ( new InputNumberField() ) ->set_label('first') ->set_priority(1) @@ -38,8 +41,11 @@ class FormWithFieldsTest extends TestCase { ( new SelectField() ) ->set_label('second') ->set_priority(5), - ( new InputTextField() ) + ( new SelectField() ) ->set_label('third') + ->set_priority(7), + ( new InputTextField() ) + ->set_label('fourth') ]; self::assertEquals($expected, $this->form->get_fields());