Select.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\Core\UI\Widget\Forms\AjaxFields;
  3. use ModulesGarden\ProxmoxAddon\Core\UI\Interfaces\AjaxElementInterface;
  4. use ModulesGarden\ProxmoxAddon\Core\UI\ResponseTemplates;
  5. /**
  6. * Select field controler
  7. *
  8. * @author Sławomir Miśkowicz <slawomir@modulesgarden.com>
  9. */
  10. class Select extends \ModulesGarden\ProxmoxAddon\Core\UI\Widget\Forms\Fields\Select implements AjaxElementInterface
  11. {
  12. use \ModulesGarden\ProxmoxAddon\Core\UI\Traits\HideByDefaultIfNoData;
  13. protected $id = 'ajaxSelect';
  14. protected $name = 'ajaxSelect';
  15. protected $vueComponent = true;
  16. protected $defaultVueComponentName = 'mg-ajax-select';
  17. /**
  18. * a list of fields id's, fi those fields are changed the select will reload its content
  19. * @var type array
  20. */
  21. protected $reloadOnChangeFields = [];
  22. /**
  23. * do not overwrite this function
  24. * @return type \ModulesGarden\ProxmoxAddon\Core\UI\ResponseTemplates\RawDataJsonResponse
  25. */
  26. public function returnAjaxData()
  27. {
  28. $this->prepareAjaxData();
  29. $returnData = [
  30. 'options' => $this->getAvailableValues(),
  31. 'selected' => $this->getValue()
  32. ];
  33. return (new ResponseTemplates\RawDataJsonResponse($returnData))->setCallBackFunction($this->callBackFunction);
  34. }
  35. /**
  36. * overwrite this function, use setSelectedValue && setAvailableValues functions
  37. */
  38. public function prepareAjaxData()
  39. {
  40. $this->setAvailableValues([
  41. ['key' => '1', 'value' => 'value1'],
  42. ['key' => '2', 'value' => 'value2']
  43. ]);
  44. // '2' for single, ['1', '2'] for multiple
  45. $this->setSelectedValue('2');
  46. }
  47. public function initContent()
  48. {
  49. }
  50. public function addReloadOnChangeField($fieldId = null)
  51. {
  52. if (is_string($fieldId) && $fieldId !== '')
  53. {
  54. $this->reloadOnChangeFields[] = $fieldId;
  55. }
  56. return $this;
  57. }
  58. public function getReloadOnChangeFields()
  59. {
  60. return $this->reloadOnChangeFields;
  61. }
  62. public function wrappReloadIdsToString()
  63. {
  64. $str = '';
  65. foreach ($this->reloadOnChangeFields as $key => $value)
  66. {
  67. $str .= (string) $key . " : '" . $value . "'" . ($key === end(array_keys($this->reloadOnChangeFields)) ? ' ' : ', ');
  68. }
  69. return $str;
  70. }
  71. }