From 212e7c2d9d49656a9babda756499e6e94343d5ce Mon Sep 17 00:00:00 2001
From: Sergei Maertens <sergei@maykinmedia.nl>
Date: Fri, 22 Nov 2024 12:55:32 +0100
Subject: [PATCH] :art: [#4693] Remove support for sync onChangeCheck functions

This was a leftover in case window.confirm is/was used - this has all
been replaced with the custom confirmation hook and modal which must
always be async.

Discussed via Slack.
---
 .../forms/objects_api/ObjectTypeSelect.js     | 22 +++----------
 .../forms/objects_api/ObjectsAPIGroup.js      | 32 +++++--------------
 src/openforms/js/utils/functions.js           |  5 ---
 3 files changed, 13 insertions(+), 46 deletions(-)
 delete mode 100644 src/openforms/js/utils/functions.js

diff --git a/src/openforms/js/components/admin/forms/objects_api/ObjectTypeSelect.js b/src/openforms/js/components/admin/forms/objects_api/ObjectTypeSelect.js
index 54218d165f..157b3ba7d2 100644
--- a/src/openforms/js/components/admin/forms/objects_api/ObjectTypeSelect.js
+++ b/src/openforms/js/components/admin/forms/objects_api/ObjectTypeSelect.js
@@ -8,7 +8,6 @@ import Field from 'components/admin/forms/Field';
 import FormRow from 'components/admin/forms/FormRow';
 import ReactSelect from 'components/admin/forms/ReactSelect';
 import {get} from 'utils/fetch';
-import {isAsync} from 'utils/functions';
 
 import {useSynchronizeSelect} from './hooks';
 
@@ -67,20 +66,6 @@ const ObjectTypeSelect = ({
     setFieldValue(versionFieldName, undefined); // clears the value
   }, [loading, value]);
 
-  let handleOnChange;
-  if (isAsync(onChangeCheck)) {
-    // onChange handler should be async for the new confirmation modal
-    handleOnChange = async selectedOption => {
-      const okToProceed = onChangeCheck === undefined || (await onChangeCheck());
-      if (okToProceed) setValue(selectedOption.value);
-    };
-  } else {
-    handleOnChange = selectedOption => {
-      const okToProceed = onChangeCheck === undefined || onChangeCheck();
-      if (okToProceed) setValue(selectedOption.value);
-    };
-  }
-
   return (
     <FormRow>
       <Field name={name} required label={label} helpText={helpText} noManageChildProps>
@@ -90,7 +75,10 @@ const ObjectTypeSelect = ({
           isLoading={loading}
           isDisabled={!objectsApiGroup}
           required
-          onChange={handleOnChange}
+          onChange={async selectedOption => {
+            const okToProceed = onChangeCheck === undefined || (await onChangeCheck());
+            if (okToProceed) setValue(selectedOption.value);
+          }}
         />
       </Field>
     </FormRow>
@@ -104,7 +92,7 @@ ObjectTypeSelect.propTypes = {
   name: PropTypes.string,
   /**
    * Optional callback to confirm the change. Return `true` to continue with the change,
-   * return `false` to abort it.
+   * return `false` to abort it. The callback function must be async.
    */
   onChangeCheck: PropTypes.func,
   /**
diff --git a/src/openforms/js/components/admin/forms/objects_api/ObjectsAPIGroup.js b/src/openforms/js/components/admin/forms/objects_api/ObjectsAPIGroup.js
index 6377e2c309..ca00a8be71 100644
--- a/src/openforms/js/components/admin/forms/objects_api/ObjectsAPIGroup.js
+++ b/src/openforms/js/components/admin/forms/objects_api/ObjectsAPIGroup.js
@@ -6,7 +6,6 @@ import {useUpdateEffect} from 'react-use';
 import Field from 'components/admin/forms/Field';
 import FormRow from 'components/admin/forms/FormRow';
 import ReactSelect from 'components/admin/forms/ReactSelect';
-import {isAsync} from 'utils/functions';
 
 const ObjectsAPIGroup = ({
   apiGroupChoices,
@@ -36,28 +35,6 @@ const ObjectsAPIGroup = ({
     value: option.value === null ? '' : option.value,
   }));
 
-  let handleOnChange;
-  if (isAsync(onChangeCheck)) {
-    // onChange handler should be async for the new confirmation modal
-    handleOnChange = async selectedOption => {
-      const okToProceed = onChangeCheck === undefined || (await onChangeCheck());
-      if (okToProceed) {
-        // normalize empty string back to null
-        const newValue = selectedOption ? selectedOption.value : null;
-        setValue(newValue);
-      }
-    };
-  } else {
-    handleOnChange = selectedOption => {
-      const okToProceed = onChangeCheck === undefined || onChangeCheck();
-      if (okToProceed) {
-        // normalize empty string back to null
-        const newValue = selectedOption ? selectedOption.value : null;
-        setValue(newValue);
-      }
-    };
-  }
-
   return (
     <FormRow>
       <Field
@@ -82,7 +59,14 @@ const ObjectsAPIGroup = ({
           options={normalizedOptions}
           value={normalizedOptions.find(option => option.value === normalizedValue)}
           required={required}
-          onChange={handleOnChange}
+          onChange={async selectedOption => {
+            const okToProceed = onChangeCheck === undefined || (await onChangeCheck());
+            if (okToProceed) {
+              // normalize empty string back to null
+              const newValue = selectedOption ? selectedOption.value : null;
+              setValue(newValue);
+            }
+          }}
           isClearable={isClearable}
         />
       </Field>
diff --git a/src/openforms/js/utils/functions.js b/src/openforms/js/utils/functions.js
deleted file mode 100644
index e39ba26846..0000000000
--- a/src/openforms/js/utils/functions.js
+++ /dev/null
@@ -1,5 +0,0 @@
-function isAsync(fn) {
-  return fn && fn.constructor.name === 'AsyncFunction';
-}
-
-export {isAsync};