diff --git a/app/src/View/Helper/FieldHelper.php b/app/src/View/Helper/FieldHelper.php index 797a01430..4aa4c9a06 100644 --- a/app/src/View/Helper/FieldHelper.php +++ b/app/src/View/Helper/FieldHelper.php @@ -141,7 +141,26 @@ public function control(string $fieldName, components: { CmDateTimePicker } - }).mount("#' . $pickerId . '-container"); + }); + + // Add custom global directives available to all child components. + // "clickout" allows us to pass a function to a click outside behavior which + // is registered and destroyed as the component is mounted and unmounted. + app.directive("clickout", { + mounted(el, binding, vnode) { + el.clickOutEvent = function(event) { + if (!(el === event.target || el.contains(event.target))) { + binding.value(event, el); + } + }; + document.body.addEventListener("click", el.clickOutEvent); + }, + unmounted(el) { + document.body.removeEventListener("click", el.clickOutEvent); + } + }); + + app.mount("#' . $pickerId . '-container");