From 7a277b4b9c9089c72e3780f53bf933de5b40a54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20K=C3=BCndig?= Date: Mon, 3 Dec 2018 17:08:00 +0100 Subject: [PATCH] Added support for `dependsOn` with relationships (#3539) Credit to @tobias-kuendig. Added $.oc.relationBehavior.changed function. To keep track of changes made using the relation controller this new "changed" function is called every time a record is created, added, removed or deleted. The function triggers the change.oc.formwidget event on the form field that belongs to this relation controller so other form fields are notified about the changes. --- .../relationcontroller/assets/js/october.relation.js | 9 +++++++++ .../relationcontroller/partials/_button_delete.htm | 2 ++ .../relationcontroller/partials/_button_remove.htm | 2 ++ .../relationcontroller/partials/_button_unlink.htm | 1 + .../relationcontroller/partials/_manage_form.htm | 6 +++++- .../relationcontroller/partials/_manage_list.htm | 1 + 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js b/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js index 5ab7e07ee..80bf1bea4 100644 --- a/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js +++ b/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js @@ -59,6 +59,15 @@ }) } + /* + * This function is called every time a record is created, added, removed + * or deleted using the relation widget. It triggers the change.oc.formwidget + * event to notify other elements on the page about the changed form state. + */ + this.changed = function(relationId, event) { + $('[data-field-name="' + relationId + '"]').trigger('change.oc.formwidget', {event: event}); + } + /* * This function transfers the supplied variables as hidden form inputs, * to any popup that is spawned within the supplied container. The spawned diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_delete.htm b/modules/backend/behaviors/relationcontroller/partials/_button_delete.htm index fc7420b7c..5e1e76268 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_delete.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_delete.htm @@ -3,6 +3,7 @@ class="btn btn-sm btn-secondary oc-icon-trash-o" data-request="onRelationButtonDelete" data-request-confirm="" + data-request-success="$.oc.relationBehavior.changed('vars['relationField']) ?>', 'deleted')" data-stripe-load-indicator> @@ -15,6 +16,7 @@ disabled="disabled" data-request="onRelationButtonDelete" data-request-confirm="" + data-request-success="$.oc.relationBehavior.changed('vars['relationField']) ?>', 'deleted')" data-trigger-action="enable" data-trigger="#relationGetId('view') ?> .control-list input[type=checkbox]" data-trigger-condition="checked" diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_remove.htm b/modules/backend/behaviors/relationcontroller/partials/_button_remove.htm index 4c1e37771..b4f647641 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_remove.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_remove.htm @@ -2,6 +2,7 @@ @@ -13,6 +14,7 @@ })" disabled="disabled" data-request="onRelationButtonRemove" + data-request-success="$.oc.relationBehavior.changed('vars['relationField']) ?>', 'removed')" data-trigger-action="enable" data-trigger="#relationGetId('view') ?> .control-list input[type=checkbox]" data-trigger-condition="checked" diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_unlink.htm b/modules/backend/behaviors/relationcontroller/partials/_button_unlink.htm index ca81b0f71..cfbec72fb 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_unlink.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_unlink.htm @@ -2,6 +2,7 @@ href="javascript:;" class="btn btn-sm btn-secondary oc-icon-unlink" data-request="onRelationButtonUnlink" + data-request-success="$.oc.relationBehavior.changed('vars['relationField']) ?>', 'removed')" data-request-confirm="" data-stripe-load-indicator> diff --git a/modules/backend/behaviors/relationcontroller/partials/_manage_form.htm b/modules/backend/behaviors/relationcontroller/partials/_manage_form.htm index da2e6959a..7ad9806c8 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_manage_form.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_manage_form.htm @@ -47,7 +47,11 @@ - true, 'sessionKey' => $newSessionKey]) ?> + true, + 'data-request-success' => "$.oc.relationBehavior.changed('" . e($this->vars['relationField']) . "', 'created')", + 'sessionKey' => $newSessionKey + ]) ?> diff --git a/modules/backend/behaviors/relationcontroller/partials/_manage_list.htm b/modules/backend/behaviors/relationcontroller/partials/_manage_list.htm index 865c82dee..49e71ddbb 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_manage_list.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_manage_list.htm @@ -21,6 +21,7 @@ class="btn btn-primary" data-request="onRelationManageAdd" data-dismiss="popup" + data-request-success="$.oc.relationBehavior.changed('vars['relationField']) ?>', 'added')" data-stripe-load-indicator>