From 887b75d5d9dd3aa2ced8c4fc5d48e139a8a57b9e Mon Sep 17 00:00:00 2001 From: Antonio De Marco <antonio@nuvole.org> Date: Wed, 30 Aug 2017 10:18:25 +0200 Subject: [PATCH] #118: Add basic variant form. --- .../templates/button/button.ui_patterns.yml | 4 ++++ src/Definition/PatternDefinition.php | 11 +++++++++++ src/Form/PatternDisplayFormTrait.php | 15 +++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/modules/ui_patterns_test/templates/button/button.ui_patterns.yml b/modules/ui_patterns_test/templates/button/button.ui_patterns.yml index bfcaad116..a3ffdeded 100644 --- a/modules/ui_patterns_test/templates/button/button.ui_patterns.yml +++ b/modules/ui_patterns_test/templates/button/button.ui_patterns.yml @@ -1,6 +1,10 @@ button: label: Button description: A simple button. + variants: + default: Default + primary: Primary + error: Error fields: title: type: text diff --git a/src/Definition/PatternDefinition.php b/src/Definition/PatternDefinition.php index 1c5acd6ef..287164325 100644 --- a/src/Definition/PatternDefinition.php +++ b/src/Definition/PatternDefinition.php @@ -64,6 +64,7 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin $this->id = $this->definition['id']; $this->setFields($this->definition['fields']); + $this->setVariants($this->definition['variants']); $this->setThemeHook(self::PATTERN_PREFIX . $this->id()); if (!empty($definition['theme hook'])) { @@ -225,6 +226,16 @@ class PatternDefinition extends PluginDefinition implements DerivablePluginDefin return $this; } + /** + * Check whereas pattern has variants. + * + * @return bool + * Whereas pattern has variants. + */ + public function hasVariants() { + return !empty($this->definition['variants']); + } + /** * Getter. * diff --git a/src/Form/PatternDisplayFormTrait.php b/src/Form/PatternDisplayFormTrait.php index ce39eb8bd..d43377488 100644 --- a/src/Form/PatternDisplayFormTrait.php +++ b/src/Form/PatternDisplayFormTrait.php @@ -40,9 +40,24 @@ trait PatternDisplayFormTrait { '#attributes' => ['id' => 'patterns-select'], ]; + /** @var \Drupal\ui_patterns\Definition\PatternDefinition $definition */ foreach ($this->patternsManager->getDefinitions() as $pattern_id => $definition) { + if ($definition->hasVariants()) { + $form['pattern_variants'] = [ + '#type' => 'select', + '#title' => $this->t('Variants'), + '#options' => $definition->getVariantsAsOptions(), + '#weight' => 0, + '#states' => [ + 'visible' => [ + 'select[id="patterns-select"]' => ['value' => $pattern_id], + ], + ], + ]; + } $form['pattern_mapping'][$pattern_id] = [ '#type' => 'container', + '#weight' => 1, '#states' => [ 'visible' => [ 'select[id="patterns-select"]' => ['value' => $pattern_id], -- GitLab