From 6eb5106153773cf26ecbeb7115ef42e6fb801ca9 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Fri, 24 Feb 2023 10:03:45 +0100 Subject: [PATCH] new: [ui:formInfo] Rafactored formInfo and added support of field description Can be done by using the `tooltip` key on the field configuration --- src/View/Helper/FormFieldMassageHelper.php | 9 +++ .../genericElements/Form/Fields/uuidField.php | 76 +++++++++---------- .../genericElements/Form/fieldScaffold.php | 7 +- .../element/genericElements/Form/formInfo.php | 53 ++++++++----- .../genericElements/Form/genericForm.php | 2 +- 5 files changed, 86 insertions(+), 61 deletions(-) diff --git a/src/View/Helper/FormFieldMassageHelper.php b/src/View/Helper/FormFieldMassageHelper.php index 183a9ed..b0db4ab 100644 --- a/src/View/Helper/FormFieldMassageHelper.php +++ b/src/View/Helper/FormFieldMassageHelper.php @@ -8,6 +8,15 @@ class FormFieldMassageHelper extends Helper { public function prepareFormElement(\Cake\View\Helper\FormHelper $form, array $controlParams, array $fieldData): string { + if ($fieldData['tooltip']) { + $form->setTemplates([ + 'label' => '{{text}}{{tooltip}}', + ]); + $controlParams['templateVars'] = array_merge( + $controlParams['templateVars'] ?? [], + ['tooltip' => $fieldData['tooltip'], ] + ); + } if (!empty($fieldData['stateDependence'])) { $controlParams['data-dependence-source'] = h($fieldData['stateDependence']['source']); $controlParams['data-dependence-option'] = h($fieldData['stateDependence']['option']); diff --git a/templates/element/genericElements/Form/Fields/uuidField.php b/templates/element/genericElements/Form/Fields/uuidField.php index b065e08..b63e551 100644 --- a/templates/element/genericElements/Form/Fields/uuidField.php +++ b/templates/element/genericElements/Form/Fields/uuidField.php @@ -1,43 +1,43 @@ Form->setTemplates([ - 'inputContainer' => '{{content}}', - 'inputContainerError' => '{{content}}', - 'formGroup' => '{{input}}', - ]); - $label = $fieldData['label']; - $formElement = $this->FormFieldMassage->prepareFormElement($this->Form, $params, $fieldData); - $temp = sprintf( - '
-
%s
-
-
- %s%s -
-
-
', - h($label), - $formElement, - sprintf( - '%s', - $random, - __('Generate') - ) - ); - echo $temp; +$random = Cake\Utility\Security::randomString(8); +$params['div'] = false; + +$genUUIDButton = $this->Bootstrap->button([ + 'id' => "uuid-gen-{$random}", + 'variant' => 'secondary', + 'text' => __('Generate'), +]); + +$this->Form->setTemplates([ + 'input' => sprintf('
%s{{genUUIDButton}}
', $this->Form->getTemplates('input')), +]); +$params['templateVars'] = [ + 'genUUIDButton' => $genUUIDButton, +]; + +$formElement = $this->FormFieldMassage->prepareFormElement($this->Form, $params, $fieldData); +echo $formElement; ?> + \ No newline at end of file diff --git a/templates/element/genericElements/Form/fieldScaffold.php b/templates/element/genericElements/Form/fieldScaffold.php index 18e6000..f95bdde 100644 --- a/templates/element/genericElements/Form/fieldScaffold.php +++ b/templates/element/genericElements/Form/fieldScaffold.php @@ -11,11 +11,12 @@ $fieldData['label'] = \Cake\Utility\Inflector::humanize($fieldData['field']); } } - if (!empty($fieldDesc[$fieldData['field']])) { - $fieldData['label'] .= $this->element( + $fieldDescription = $fieldData['tooltip'] ?? ($fieldDesc[$fieldData['field']] ?? false); + if (!empty($fieldDescription)) { + $fieldData['tooltip'] = $this->element( 'genericElements/Form/formInfo', array( 'field' => $fieldData, - 'fieldDesc' => $fieldDesc[$fieldData['field']], + 'fieldDesc' => $fieldDescription, 'modelForForm' => $modelForForm ) ); diff --git a/templates/element/genericElements/Form/formInfo.php b/templates/element/genericElements/Form/formInfo.php index 89dd0b7..d569142 100644 --- a/templates/element/genericElements/Form/formInfo.php +++ b/templates/element/genericElements/Form/formInfo.php @@ -1,4 +1,5 @@ $fieldDesc); $default = 'info'; @@ -16,32 +17,46 @@ $default = 'info'; } } - echo sprintf( - '', - h($field['field']) - ); + $popoverID = sprintf("%sInfoPopover%s", h($field['field']), $seed); + echo $this->Bootstrap->icon('info-circle', [ + 'id' => $popoverID, + 'class' => ['ms-1'], + 'attrs' => [ + 'data-bs-toggle' => 'popover', + 'data-bs-trigger' => 'hover', + ] + ]); ?> diff --git a/templates/element/genericElements/Form/genericForm.php b/templates/element/genericElements/Form/genericForm.php index 7dafa18..5a91e78 100644 --- a/templates/element/genericElements/Form/genericForm.php +++ b/templates/element/genericElements/Form/genericForm.php @@ -19,7 +19,7 @@ $entity = isset($entity) ? $entity : null; $fieldsString = ''; $simpleFieldWhitelist = [ - 'default', 'type', 'placeholder', 'label', 'empty', 'rows', 'div', 'required', 'templates', 'options', 'value', 'checked' + 'default', 'type', 'placeholder', 'label', 'empty', 'rows', 'div', 'required', 'templates', 'options', 'value', 'checked', ]; if (empty($data['url'])) { $data['url'] = ["controller" => $this->request->getParam('controller'), "action" => $this->request->getParam('url')];