-
Mikael Meulle authoredMikael Meulle authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
SourcePluginPropValue.php 2.21 KiB
<?php
declare(strict_types=1);
namespace Drupal\ui_patterns;
/**
* This class covers a specific case of Source plugins.
*
* The key 'value' is used in the plugin settings (Form's settings).
* settings["value"] stores the prop value.
* the default property from the JSON schema can be used.
*/
abstract class SourcePluginPropValue extends SourcePluginBase {
/**
* {@inheritdoc}
*/
public function defaultSettings(): array {
return ["value" => $this->getDefaultFromPropDefinition()];
}
/**
* {@inheritdoc}
*/
public function getSetting(string $key): mixed {
$value = parent::getSetting($key);
if (("value" === $key) && (NULL === $value)) {
return $this->getDefaultFromPropDefinition();
}
return $value;
}
/**
* Return default value from prop definition.
*
* @return mixed
* Default value from prop definition if relevant.
*/
protected function getDefaultFromPropDefinition(): mixed {
if (is_array($this->propDefinition) &&
array_key_exists("default", $this->propDefinition)) {
// Inside the prop definition,
// the default value is in the prop type's format.
return $this->convertPropValueToStoredValue($this->propDefinition["default"]);
}
return NULL;
}
/**
* Convert from prop type' format to stored settings' format.
*
* @param mixed $propValue
* Prop value in the format described in the prop type.
*
* @return mixed
* Value as stored in the settings.
*/
protected function convertPropValueToStoredValue(mixed $propValue): mixed {
return $propValue;
}
/**
* Merges default settings values into $settings.
*/
protected function mergeDefaults() : void {
$defaultSettings = $this->defaultSettings();
// -> we prefer the prop definition default value.
if (array_key_exists("value", $defaultSettings)) {
$defaultValueProp = $this->getDefaultFromPropDefinition();
if (NULL !== $defaultValueProp) {
$defaultSettings["value"] = $defaultValueProp;
}
}
$this->settings += $defaultSettings;
$this->defaultSettingsMerged = TRUE;
}
/**
* {@inheritdoc}
*/
public function getPropValue(): mixed {
return $this->getSetting('value');
}
}