From 124bb876adf14d0ef3d925a53e17767da2b10031 Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Wed, 31 Jan 2024 14:19:56 +0100 Subject: [PATCH 1/7] If the model contains errors, configure the 'show_editor' option in the JSON editor to 'always' in order to exhibit inline errors upon initialization. --- src/views/crud/widget/_form.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/crud/widget/_form.php b/src/views/crud/widget/_form.php index b37da04..537ae3d 100644 --- a/src/views/crud/widget/_form.php +++ b/src/views/crud/widget/_form.php @@ -127,6 +127,7 @@ 'keep_oneof_values' => false, 'expand_height' => true, 'ajax' => !empty(\Yii::$app->controller->module->allowAjaxInSchema) ? true : false, + 'show_errors' => $model->hasErrors() ? 'always' : 'interaction' ], ]); ?> From 366d19da3a4298aca2e07841ff2195a76c5ff8cd Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Thu, 1 Feb 2024 14:22:29 +0100 Subject: [PATCH 2/7] Same applies to widget-translation --- src/views/crud/widget-translation/_form.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/views/crud/widget-translation/_form.php b/src/views/crud/widget-translation/_form.php index 750e8c5..84455a1 100644 --- a/src/views/crud/widget-translation/_form.php +++ b/src/views/crud/widget-translation/_form.php @@ -96,9 +96,14 @@ 'schema' => $schema, 'clientOptions' => [ 'theme' => 'bootstrap3', + 'iconlib' => 'fontawesome4', 'disable_collapse' => true, - 'disable_properties' => true, - 'keep_oneof_values' => false + 'disable_properties' => false, + "no_additional_properties" => false, + 'keep_oneof_values' => false, + 'expand_height' => true, + 'ajax' => !empty(\Yii::$app->controller->module->allowAjaxInSchema) ? true : false, + 'show_errors' => $model->hasErrors() ? 'always' : 'interaction' ], ]); ?> From 76682078fa726a40289e9acd59ee16eb03d2b732 Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Thu, 29 Feb 2024 15:59:33 +0100 Subject: [PATCH 3/7] Added ClientSideJsonValidator. This validator will be use when 'enableClientValidation' => true. It' s job is to collect and display inline validation errors within the json-editor form. It also remove the added ".has-error" classes that Yii-2 adds everywhere in the json-editor indiscriminately. --- src/validators/ClientSideJsonValidator.php | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/validators/ClientSideJsonValidator.php diff --git a/src/validators/ClientSideJsonValidator.php b/src/validators/ClientSideJsonValidator.php new file mode 100644 index 0000000..67ee121 --- /dev/null +++ b/src/validators/ClientSideJsonValidator.php @@ -0,0 +1,53 @@ + { + mutations.forEach(() => { + if (targetNode.classList.contains('has-error')) { + targetNode.classList.remove('has-error') + observer.disconnect() + } + }) + }) + + observer.observe(targetNode, { attributes: true, attributeFilter: ['class'] }) + JS; + } +} \ No newline at end of file From 2654767d9c17a7b11c0b4409d0452bf4632663de Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Thu, 29 Feb 2024 16:00:12 +0100 Subject: [PATCH 4/7] Added ClientSideJsonValidator rule for WidgetContent and WidgetContentTranslation --- src/models/crud/WidgetContent.php | 7 +++++++ src/models/crud/WidgetContentTranslation.php | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/models/crud/WidgetContent.php b/src/models/crud/WidgetContent.php index 56ab2ca..d30e9f5 100644 --- a/src/models/crud/WidgetContent.php +++ b/src/models/crud/WidgetContent.php @@ -3,6 +3,7 @@ namespace hrzg\widget\models\crud; use hrzg\widget\models\crud\base\Widget as BaseWidget; +use hrzg\widget\validators\ClientSideJsonValidator; use hrzg\widget\widgets\Cell; use JsonSchema\Validator; use yii\behaviors\TimestampBehavior; @@ -182,6 +183,12 @@ public function rules() 'operator' => '>', 'type' => 'datetime' ]; + + $rules[] = [ + 'default_properties_json', + ClientSideJsonValidator::class + ]; + // add json schema validation if enabled in module if (!empty(\Yii::$app->controller->module->validateContentSchema)) { $rules['validate_properties_json'] = [ diff --git a/src/models/crud/WidgetContentTranslation.php b/src/models/crud/WidgetContentTranslation.php index baf9479..0f7a43e 100644 --- a/src/models/crud/WidgetContentTranslation.php +++ b/src/models/crud/WidgetContentTranslation.php @@ -11,6 +11,7 @@ use hrzg\widget\models\crud\base\Widget; use hrzg\widget\models\crud\base\WidgetTranslation; +use hrzg\widget\validators\ClientSideJsonValidator; use JsonSchema\Validator; use yii\caching\TagDependency; use yii\helpers\Json; @@ -30,6 +31,12 @@ class WidgetContentTranslation extends WidgetTranslation public function rules() { $rules = parent::rules(); + + $rules[] = [ + 'default_properties_json', + ClientSideJsonValidator::class + ]; + // add json schema validation if enabled in module if (!empty(\Yii::$app->controller->module->validateContentSchema)) { $rules['validate_properties_json'] = [ From b8b069579d58f693d04494281ff1aea3e567eb4f Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Thu, 29 Feb 2024 16:01:09 +0100 Subject: [PATCH 5/7] Configured template option for json-editor based fields to reduce redundant error messages --- src/views/crud/widget-translation/_form.php | 4 +++- src/views/crud/widget/_form.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/views/crud/widget-translation/_form.php b/src/views/crud/widget-translation/_form.php index 84455a1..ed3994c 100644 --- a/src/views/crud/widget-translation/_form.php +++ b/src/views/crud/widget-translation/_form.php @@ -90,7 +90,9 @@ errorSummary($model) ?> 'pjax-widget-form']) ?> - field($model, 'default_properties_json')->label(false) + field($model, 'default_properties_json', [ + 'template' => '{input}' + ])->label(false) ->widget(\dmstr\jsoneditor\JsonEditorWidget::class, [ 'id' => 'editor', 'schema' => $schema, diff --git a/src/views/crud/widget/_form.php b/src/views/crud/widget/_form.php index 537ae3d..db0abb4 100644 --- a/src/views/crud/widget/_form.php +++ b/src/views/crud/widget/_form.php @@ -114,7 +114,9 @@ 'pjax-widget-form']) ?> - field($model, 'default_properties_json')->label(false) + field($model, 'default_properties_json', [ + 'template' => '{input}' + ])->label(false) ->widget(\dmstr\jsoneditor\JsonEditorWidget::className(), [ 'id' => 'editor', 'schema' => $schema, From 7f33fbfdbac452947d6764275a032c6f23298b79 Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Thu, 29 Feb 2024 16:02:36 +0100 Subject: [PATCH 6/7] Enabled client validation for widget and widget translation --- src/views/crud/widget-translation/update.php | 2 +- src/views/crud/widget/create.php | 2 +- src/views/crud/widget/update.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/crud/widget-translation/update.php b/src/views/crud/widget-translation/update.php index bb754f6..1dca037 100644 --- a/src/views/crud/widget-translation/update.php +++ b/src/views/crud/widget-translation/update.php @@ -55,7 +55,7 @@ [ 'id' => 'widget-update', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [ diff --git a/src/views/crud/widget/create.php b/src/views/crud/widget/create.php index 550c81e..9bcc65f 100644 --- a/src/views/crud/widget/create.php +++ b/src/views/crud/widget/create.php @@ -39,7 +39,7 @@ [ 'id' => 'widget-create', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [ diff --git a/src/views/crud/widget/update.php b/src/views/crud/widget/update.php index 4e0b5f8..e2cc26c 100644 --- a/src/views/crud/widget/update.php +++ b/src/views/crud/widget/update.php @@ -60,7 +60,7 @@ [ 'id' => 'widget-update', 'layout' => 'default', - 'enableClientValidation' => false, + 'enableClientValidation' => true, 'errorSummaryCssClass' => 'error-summary alert alert-error', 'fieldConfig' => [ 'horizontalCssClasses' => [ From e3c41e9f7cc6ff4fe1be003d8f97084461050efd Mon Sep 17 00:00:00 2001 From: German Bisurgi Date: Mon, 4 Mar 2024 16:00:23 +0100 Subject: [PATCH 7/7] Added extra check --- src/validators/ClientSideJsonValidator.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/validators/ClientSideJsonValidator.php b/src/validators/ClientSideJsonValidator.php index 67ee121..ba15407 100644 --- a/src/validators/ClientSideJsonValidator.php +++ b/src/validators/ClientSideJsonValidator.php @@ -15,6 +15,11 @@ public function clientValidateAttribute($model, $attribute, $view) { return <<