diff --git a/package-lock.json b/package-lock.json index 2ffcc5d4..c97b5c0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -916,9 +916,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz", - "integrity": "sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", @@ -3621,13 +3621,13 @@ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/sourcemap-codec": { @@ -4261,34 +4261,34 @@ } }, "@sentry-internal/feedback": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.106.1.tgz", - "integrity": "sha512-udYR7rQnnQJ0q4PP3R7lTFx7cUz3SB4ghm8T/fJzdItrk+Puv6y8VqI19SFfDgvwgStInEzE5yys6SUQcXLBtA==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.106.0.tgz", + "integrity": "sha512-Uz6pv3SN8XORTMme5xPxP/kuho7CAA6E/pMlpMjsojjBbnwLIICu10JaEZNsF/AtEya1RcNVTyPCrtF1F3sBYA==", "requires": { - "@sentry/core": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry/core": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry-internal/replay-canvas": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.106.1.tgz", - "integrity": "sha512-r+nhLrQuTQih93gZ08F6MLdmaoBy/bQFcVt/2ZVqe1SkDY+MxRlXxq8ydo3FfgEjMRHdody3yT1dj6E174h23w==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.106.0.tgz", + "integrity": "sha512-59qmT6XqbwpQuK1nVmv+XFxgd80gpYNH3aqgF5BEKux23kRB02/ARR5MwYyIHgVO0JhwdGIuiTfiLVNDu+nwTQ==", "requires": { - "@sentry/core": "7.106.1", - "@sentry/replay": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry/core": "7.106.0", + "@sentry/replay": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry-internal/tracing": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.106.1.tgz", - "integrity": "sha512-Ui9zSmW88jTdmNnNBLYYpNoAi31esX5/auysC3v7+SpwxIsC3AGLFvXs4EPziyz8d0F62Ji0fNQZ96ui4fO6BQ==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.106.0.tgz", + "integrity": "sha512-O8Es6Sa/tP80nfl+8soNfWzeRNFcT484SvjLR8BS3pHM9KDAlwNXyoQhFr2BKNYL1irbq6UF6eku4xCnUKVmqA==", "requires": { - "@sentry/core": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry/core": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry/babel-plugin-component-annotate": { @@ -4297,17 +4297,17 @@ "integrity": "sha512-h0ONVTe8j3Ma2g5SMsl9ynmLZdCf+CupLF7PQ7n06K0L8dDtrHqo8yjsWaZSJf4InGrJ9HC4MaOSItbFjiTFLw==" }, "@sentry/browser": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.106.1.tgz", - "integrity": "sha512-+Yp7OUx78ZwFFYfIvOKZGjMPW7Ds3zZSO8dsMxvDRzkA9NyyAmYMZ/dNTcsGb+PssgkCasF2XA07f6WgkNW92A==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.106.0.tgz", + "integrity": "sha512-OrHdw44giTtMa1DmlIUMBN4ypj1xTES9DLjq16ufK+bLqW3rWzwCuTy0sb9ZmSxc7fL2pdBlsL+sECiS+U2TEw==", "requires": { - "@sentry-internal/feedback": "7.106.1", - "@sentry-internal/replay-canvas": "7.106.1", - "@sentry-internal/tracing": "7.106.1", - "@sentry/core": "7.106.1", - "@sentry/replay": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry-internal/feedback": "7.106.0", + "@sentry-internal/replay-canvas": "7.106.0", + "@sentry-internal/tracing": "7.106.0", + "@sentry/core": "7.106.0", + "@sentry/replay": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry/bundler-plugin-core": { @@ -4387,48 +4387,48 @@ "optional": true }, "@sentry/core": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.106.1.tgz", - "integrity": "sha512-cwCd66wkbutXCI8j14JLkyod9RHtqSNfzGpx/ieBE+N786jX+Yj1DiaZJ6ZYjKQpnToipFnacEakCd9Vc9oePA==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.106.0.tgz", + "integrity": "sha512-Dc13XtnyFaXup2E4vCbzuG0QKAVjrJBk4qfGwvSJaTuopEaEWBs2MpK6hRzFhsz9S3T0La7c1F/62NptvTUWsQ==", "requires": { - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry/react": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.106.1.tgz", - "integrity": "sha512-XcvjXGist0vLapzxZxdbPSdLC4drhGOETtlA/kO+KrIKqlqRKuYw+kieU+YeyF9A/L8uSVvbj9rpjl5WVUTdIw==", - "requires": { - "@sentry/browser": "7.106.1", - "@sentry/core": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.106.0.tgz", + "integrity": "sha512-5KMfvkBYqK990o8Ju9vsRRRR0F8TnPpZynC9YqsJYpCViKjIt8W/ysDLrU1Dj5XZyeVElZjdRlXB0aQYrwEUWg==", + "requires": { + "@sentry/browser": "7.106.0", + "@sentry/core": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0", "hoist-non-react-statics": "^3.3.2" } }, "@sentry/replay": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.106.1.tgz", - "integrity": "sha512-UnuY6bj7v7CVv3T1sbLHjLutSG4hzcQQj6CjEB2NUpM+QAIguFrwAcYG4U42iNg4Qeg5q4kHi1rPpdpvh6unSA==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.106.0.tgz", + "integrity": "sha512-buaAOvOI+3pFm+76vwtxSxciBATHyR78aDjStghJZcIpFDNF31K8ZV0uP9+EUPbXHohtkTwZ86cn/P9cyY6NgA==", "requires": { - "@sentry-internal/tracing": "7.106.1", - "@sentry/core": "7.106.1", - "@sentry/types": "7.106.1", - "@sentry/utils": "7.106.1" + "@sentry-internal/tracing": "7.106.0", + "@sentry/core": "7.106.0", + "@sentry/types": "7.106.0", + "@sentry/utils": "7.106.0" } }, "@sentry/types": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.106.1.tgz", - "integrity": "sha512-g3OcyAHGugBwkQP4fZYCCZqF2ng9K7yQc9FVngKq/y7PwHm84epXdYYGDGgfQOIC1d5/GMaPxmzI5IIrZexzkg==" + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.106.0.tgz", + "integrity": "sha512-oKTkDaL6P9xJC5/zHLRemHTWboUqRYjkJNaZCN63j4kJqGy56wee4vDtDese/NWWn4U4C1QV1h+Mifm2HmDcQg==" }, "@sentry/utils": { - "version": "7.106.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.106.1.tgz", - "integrity": "sha512-NIeuvB9MeDwrObbi6W5xRrNTcQj8klVvwWWYQB0zotY/LDjyl+c+cZzUshFOxBTp9ljVnYzWqZ7J8x/i4baj7w==", + "version": "7.106.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.106.0.tgz", + "integrity": "sha512-bVsePsXLpFu/1sH4rpJrPcnVxW2fXXfGfGxKs6Bm+dkOMbuVTlk/KAzIbdjCDIpVlrMDJmMNEv5xgTFjgWDkjw==", "requires": { - "@sentry/types": "7.106.1" + "@sentry/types": "7.106.0" } }, "@sentry/webpack-plugin": { @@ -6665,13 +6665,13 @@ "dev": true }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz", - "integrity": "sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", "dev": true, "requires": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.0", + "@babel/helper-define-polyfill-provider": "^0.5.0", "semver": "^6.3.1" } }, @@ -6683,21 +6683,6 @@ "requires": { "@babel/helper-define-polyfill-provider": "^0.5.0", "core-js-compat": "^3.34.0" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - } } }, "babel-plugin-polyfill-regenerator": { @@ -6707,21 +6692,6 @@ "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - } } }, "babel-plugin-transform-react-remove-prop-types": { @@ -6867,6 +6837,16 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -7160,9 +7140,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001597", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", - "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==" + "version": "1.0.30001596", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", + "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==" }, "cardinal": { "version": "2.1.1", @@ -8193,9 +8173,9 @@ "dev": true }, "cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.1.tgz", + "integrity": "sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A==", "dev": true }, "cssesc": { @@ -8881,9 +8861,9 @@ } }, "electron-to-chromium": { - "version": "1.4.701", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", - "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==" + "version": "1.4.698", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.698.tgz", + "integrity": "sha512-f9iZD1t3CLy1AS6vzM5EKGa6p9pRcOeEFXRFbaG2Ta+Oe7MkfRQ3fsvPYidzHe1h4i0JvIvpcY55C+B6BZNGtQ==" }, "emittery": { "version": "0.8.1", @@ -8919,9 +8899,9 @@ } }, "enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -10125,6 +10105,13 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -11031,9 +11018,9 @@ } }, "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, "requires": { "function-bind": "^1.1.2" @@ -11886,9 +11873,9 @@ "dev": true }, "is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, "is-module": { @@ -11998,9 +11985,9 @@ "dev": true }, "is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, "is-shared-array-buffer": { @@ -12073,9 +12060,9 @@ "dev": true }, "is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, "is-weakref": { @@ -12088,13 +12075,13 @@ } }, "is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" } }, "is-windows": { @@ -15018,6 +15005,13 @@ "thenify-all": "^1.0.0" } }, + "nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -19979,13 +19973,13 @@ } }, "safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -20360,17 +20354,17 @@ "dev": true }, "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dev": true, "requires": { - "define-data-property": "^1.1.4", + "define-data-property": "^1.1.2", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "has-property-descriptors": "^1.0.1" } }, "set-function-name": { @@ -22591,7 +22585,11 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, - "optional": true + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } }, "glob": { "version": "7.2.3", @@ -23220,15 +23218,15 @@ } }, "which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" } }, "which-module": { @@ -23238,16 +23236,16 @@ "dev": true }, "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" + "has-tostringtag": "^1.0.1" } }, "wildcard": { diff --git a/src/App.res b/src/App.res index 998045ae..4dbab81a 100644 --- a/src/App.res +++ b/src/App.res @@ -31,7 +31,7 @@ let make = () => { let sessionId = CardUtils.getQueryParamsDictforKey(url.search, "sessionId") let publishableKey = CardUtils.getQueryParamsDictforKey(url.search, "publishableKey") let endpoint = - CardUtils.getQueryParamsDictforKey(url.search, "endpoint")->Js.Global.decodeURIComponent + CardUtils.getQueryParamsDictforKey(url.search, "endpoint")->decodeURIComponent } | "achBankTransfer" diff --git a/src/BrowserSpec.res b/src/BrowserSpec.res index 455f1167..b17556e4 100644 --- a/src/BrowserSpec.res +++ b/src/BrowserSpec.res @@ -13,8 +13,8 @@ type screen = {colorDepth: int, height: int, width: int} let checkIsSafari = () => { let userAgentString = navigator.userAgent - let chromeAgent = userAgentString->Js.String2.indexOf("Chrome") > -1 - let safariAgent = userAgentString->Js.String2.indexOf("Safari") > -1 + let chromeAgent = userAgentString->String.indexOf("Chrome") > -1 + let safariAgent = userAgentString->String.indexOf("Safari") > -1 chromeAgent && safariAgent ? false : safariAgent ? true : false } @@ -23,20 +23,20 @@ let broswerInfo = () => [ ( "browser_info", [ - ("user_agent", navigator.userAgent->Js.Json.string), + ("user_agent", navigator.userAgent->JSON.Encode.string), ( "accept_header", - "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8"->Js.Json.string, + "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8"->JSON.Encode.string, ), - ("language", navigator.language->Js.Json.string), - ("color_depth", screen.colorDepth->Belt.Int.toFloat->Js.Json.number), - ("screen_height", screen.height->Belt.Int.toFloat->Js.Json.number), - ("screen_width", screen.width->Belt.Int.toFloat->Js.Json.number), - ("time_zone", date.getTimezoneOffset(.)->Js.Json.number), - ("java_enabled", true->Js.Json.boolean), - ("java_script_enabled", true->Js.Json.boolean), + ("language", navigator.language->JSON.Encode.string), + ("color_depth", screen.colorDepth->Belt.Int.toFloat->JSON.Encode.float), + ("screen_height", screen.height->Belt.Int.toFloat->JSON.Encode.float), + ("screen_width", screen.width->Belt.Int.toFloat->JSON.Encode.float), + ("time_zone", date.getTimezoneOffset(.)->JSON.Encode.float), + ("java_enabled", true->JSON.Encode.bool), + ("java_script_enabled", true->JSON.Encode.bool), ] - ->Js.Dict.fromArray - ->Js.Json.object_, + ->Dict.fromArray + ->JSON.Encode.object, ), ] diff --git a/src/CardPattern.res b/src/CardPattern.res index cecf56f7..08c3cb63 100644 --- a/src/CardPattern.res +++ b/src/CardPattern.res @@ -1,6 +1,6 @@ type patterns = { issuer: string, - pattern: Js.Re.t, + pattern: Re.t, cvcLength: array, length: array, maxCVCLenth: int, diff --git a/src/CardTheme.res b/src/CardTheme.res index 846c22f0..00525165 100644 --- a/src/CardTheme.res +++ b/src/CardTheme.res @@ -48,7 +48,7 @@ let defaultAppearance = { variables: DefaultTheme.default, componentType: "payment", labels: Above, - rules: Js.Dict.empty()->Js.Json.object_, + rules: Dict.make()->JSON.Encode.object, } let defaultFonts = { cssSrc: "", @@ -76,9 +76,9 @@ let getLocaleObject = string => { string } LocaleString.localeStrings - ->Js.Array2.filter(item => item.locale == val) - ->Belt.Array.get(0) - ->Belt.Option.getWithDefault(LocaleString.defaultLocale) + ->Array.filter(item => item.locale == val) + ->Array.get(0) + ->Option.getOr(LocaleString.defaultLocale) } let defaultRecoilConfig: recoilConfig = { config: defaultConfig, @@ -89,9 +89,9 @@ let defaultRecoilConfig: recoilConfig = { let getVariables = (str, dict, default, logger) => { dict - ->Js.Dict.get(str) - ->Belt.Option.flatMap(Js.Json.decodeObject) - ->Belt.Option.map(json => { + ->Dict.get(str) + ->Option.flatMap(JSON.Decode.object) + ->Option.map(json => { let validKeys = [ "fontFamily", "fontSizeBase", @@ -287,20 +287,20 @@ let getVariables = (str, dict, default, logger) => { ), } }) - ->Belt.Option.getWithDefault(default) + ->Option.getOr(default) } let getAppearance = ( str, dict, default: OrcaPaymentPage.CardThemeType.themeClass, - defaultRules: OrcaPaymentPage.CardThemeType.themeClass => Js.Json.t, + defaultRules: OrcaPaymentPage.CardThemeType.themeClass => JSON.t, logger, ) => { dict - ->Js.Dict.get(str) - ->Belt.Option.flatMap(Js.Json.decodeObject) - ->Belt.Option.map(json => { + ->Dict.get(str) + ->Option.flatMap(JSON.Decode.object) + ->Option.map(json => { unknownKeysWarning(["theme", "variables", "rules", "labels"], json, "appearance", ~logger) let rulesJson = defaultRules(getVariables("variables", json, default, logger)) @@ -321,15 +321,15 @@ let getAppearance = ( }, } }) - ->Belt.Option.getWithDefault(defaultAppearance) + ->Option.getOr(defaultAppearance) } let getFonts = (str, dict, logger) => { dict - ->Js.Dict.get(str) - ->Belt.Option.flatMap(Js.Json.decodeArray) - ->Belt.Option.getWithDefault([]) - ->Belt.Array.keepMap(Js.Json.decodeObject) - ->Js.Array2.map(json => { + ->Dict.get(str) + ->Option.flatMap(JSON.Decode.array) + ->Option.getOr([]) + ->Belt.Array.keepMap(JSON.Decode.object) + ->Array.map(json => { unknownKeysWarning(["cssSrc", "family", "src", "weight"], json, "fonts", ~logger) { cssSrc: getWarningString(json, "cssSrc", "", ~logger), @@ -342,7 +342,7 @@ let getFonts = (str, dict, logger) => { let itemToObjMapper = ( dict, default: OrcaPaymentPage.CardThemeType.themeClass, - defaultRules: OrcaPaymentPage.CardThemeType.themeClass => Js.Json.t, + defaultRules: OrcaPaymentPage.CardThemeType.themeClass => JSON.t, logger, ) => { unknownKeysWarning( diff --git a/src/CardUtils.res b/src/CardUtils.res index 4419c4cc..509d307c 100644 --- a/src/CardUtils.res +++ b/src/CardUtils.res @@ -20,7 +20,7 @@ type cardProps = ( string, JsxEvent.Form.t => unit, JsxEvent.Focus.t => unit, - React.ref>, + React.ref>, React.element, string, (string => string) => unit, @@ -33,7 +33,7 @@ type expiryProps = ( string, JsxEvent.Form.t => unit, JsxEvent.Focus.t => unit, - React.ref>, + React.ref>, ReactEvent.Keyboard.t => unit, string, (string => string) => unit, @@ -46,7 +46,7 @@ type cvcProps = ( (string => string) => unit, JsxEvent.Form.t => unit, JsxEvent.Focus.t => unit, - React.ref>, + React.ref>, ReactEvent.Keyboard.t => unit, string, (string => string) => unit, @@ -57,7 +57,7 @@ type zipProps = ( string, ReactEvent.Form.t => unit, ReactEvent.Focus.t => unit, - React.ref>, + React.ref>, ReactEvent.Keyboard.t => unit, bool, ) @@ -70,26 +70,26 @@ type options = {timeZone: string} type dateTimeFormat = {resolvedOptions: (. unit) => options} @val @scope("Intl") external dateTimeFormat: (. unit) => dateTimeFormat = "DateTimeFormat" -let toInt = val => val->Belt.Int.fromString->Belt.Option.getWithDefault(0) +let toInt = val => val->Belt.Int.fromString->Option.getOr(0) let toString = val => val->Belt.Int.toString let getQueryParamsDictforKey = (searchParams, keyName) => { - let dict = Js.Dict.empty() + let dict = Dict.make() searchParams - ->Js.String2.split("&") - ->Js.Array2.forEach(paramStr => { - let keyValArr = Js.String2.split(paramStr, "=") - let key = keyValArr->Belt.Array.get(0)->Belt.Option.getWithDefault("") - let value = if keyValArr->Js.Array2.length > 0 { - keyValArr->Belt.Array.get(1)->Belt.Option.getWithDefault("") + ->String.split("&") + ->Array.forEach(paramStr => { + let keyValArr = String.split(paramStr, "=") + let key = keyValArr->Array.get(0)->Option.getOr("") + let value = if keyValArr->Array.length > 0 { + keyValArr->Array.get(1)->Option.getOr("") } else { "" } - Js.Dict.set(dict, key, value) + Dict.set(dict, key, value) }) - dict->Js.Dict.get(keyName)->Belt.Option.getWithDefault("") + dict->Dict.get(keyName)->Option.getOr("") } let cardType = val => { switch val { @@ -113,23 +113,23 @@ let cardType = val => { let getobjFromCardPattern = cardBrand => { let patternsDict = CardPattern.cardPatterns patternsDict - ->Js.Array2.filter(item => { + ->Array.filter(item => { cardBrand === item.issuer }) - ->Belt.Array.get(0) - ->Belt.Option.getWithDefault(CardPattern.defaultCardPattern) + ->Array.get(0) + ->Option.getOr(CardPattern.defaultCardPattern) } let clearSpaces = value => { - value->Js.String2.replaceByRe(%re("/\D+/g"), "") + value->String.replaceRegExp(%re("/\D+/g"), "") } -let slice = (val, from: int, to_: int) => { - val->Js.String2.slice(~from, ~to_) +let slice = (val, start: int, end: int) => { + val->String.slice(~start, ~end) } let getStrFromIndex = (arr: array, index) => { - arr->Belt.Array.get(index)->Belt.Option.getWithDefault("") + arr->Array.get(index)->Option.getOr("") } let formatCVCNumber = (val, cardType) => { @@ -139,14 +139,14 @@ let formatCVCNumber = (val, cardType) => { } let getCurrentMonthAndYear = (dateTimeIsoString: string) => { - let tempTimeDateString = dateTimeIsoString->Js.String2.replace("Z", "") - let tempTimeDate = tempTimeDateString->Js.String2.split("T") + let tempTimeDateString = dateTimeIsoString->String.replace("Z", "") + let tempTimeDate = tempTimeDateString->String.split("T") let date = tempTimeDate[0]->Option.getOr("") - let dateComponents = date->Js.String2.split("-") + let dateComponents = date->String.split("-") - let currentMonth = dateComponents->Belt.Array.get(1)->Belt.Option.getWithDefault("") - let currentYear = dateComponents->Belt.Array.get(0)->Belt.Option.getWithDefault("") + let currentMonth = dateComponents->Array.get(1)->Option.getOr("") + let currentYear = dateComponents->Array.get(0)->Option.getOr("") (currentMonth->toInt, currentYear->toInt) } @@ -173,48 +173,48 @@ let formatCardNumber = (val, cardType) => { )} ${clearValue->slice(12, 19)}` } - formatedCard->Js.String2.trim + formatedCard->String.trim } let splitExpiryDates = val => { - let split = val->Js.String2.split("/") - let value = split->Js.Array2.map(item => item->Js.String2.trim) - let month = value->Belt.Array.get(0)->Belt.Option.getWithDefault("") - let year = value->Belt.Array.get(1)->Belt.Option.getWithDefault("") + let split = val->String.split("/") + let value = split->Array.map(item => item->String.trim) + let month = value->Array.get(0)->Option.getOr("") + let year = value->Array.get(1)->Option.getOr("") (month, year) } let getExpiryDates = val => { - let date = Js.Date.make()->Js.Date.toISOString + let date = Date.make()->Date.toISOString let (month, year) = splitExpiryDates(val) let (_, currentYear) = getCurrentMonthAndYear(date) - let prefix = currentYear->Belt.Int.toString->Js.String2.slice(~from=0, ~to_=2) + let prefix = currentYear->Belt.Int.toString->String.slice(~start=0, ~end=2) (month, `${prefix}${year}`) } let formatExpiryToTwoDigit = expiry => { - if expiry->Js.String2.length == 2 { + if expiry->String.length == 2 { expiry } else { - expiry->Js.String2.slice(~from=2, ~to_=4) + expiry->String.slice(~start=2, ~end=4) } } let isExipryComplete = val => { let (month, year) = splitExpiryDates(val) - month->Js.String2.length == 2 && year->Js.String2.length == 2 + month->String.length == 2 && year->String.length == 2 } let formatCardExpiryNumber = val => { let clearValue = val->clearSpaces let expiryVal = clearValue->toInt - let formatted = if expiryVal >= 2 && expiryVal <= 9 && clearValue->Js.String2.length == 1 { + let formatted = if expiryVal >= 2 && expiryVal <= 9 && clearValue->String.length == 1 { `0${clearValue} / ` - } else if clearValue->Js.String2.length == 2 && expiryVal > 12 { - let val = clearValue->Js.String2.split("") + } else if clearValue->String.length == 2 && expiryVal > 12 { + let val = clearValue->String.split("") `0${val->getStrFromIndex(0)} / ${val->getStrFromIndex(1)}` } else { clearValue } - if clearValue->Js.String2.length >= 3 { + if clearValue->String.length >= 3 { `${formatted->slice(0, 2)} / ${formatted->slice(2, 4)}` } else { formatted @@ -223,7 +223,7 @@ let formatCardExpiryNumber = val => { let getCardBrand = cardNumber => { try { - let card = cardNumber->Js.String2.replaceByRe(%re("/[^\d]/g"), "") + let card = cardNumber->String.replaceRegExp(%re("/[^\d]/g"), "") let rupayRanges = [ (508227, 508227), (508500, 508999), @@ -247,17 +247,17 @@ let getCardBrand = cardNumber => { let doesFallInRange = (cardRanges, isin) => { let intIsin = isin - ->Js.String2.replaceByRe(%re("/[^\d]/g"), "") - ->Js.String2.substring(~from=0, ~to_=6) + ->String.replaceRegExp(%re("/[^\d]/g"), "") + ->String.substring(~start=0, ~end=6) ->Belt.Int.fromString - ->Belt.Option.getWithDefault(0) + ->Option.getOr(0) - let range = cardRanges->Js.Array2.map(cardRange => { + let range = cardRanges->Array.map(cardRange => { let (min, max) = cardRange intIsin >= min && intIsin <= max }) - range->Js.Array2.includes(true) + range->Array.includes(true) } let patternsDict = CardPattern.cardPatterns if doesFallInRange(rupayRanges, card) { @@ -266,16 +266,16 @@ let getCardBrand = cardNumber => { "Mastercard" } else { patternsDict - ->Js.Array2.map(item => { - if Js.String2.match_(card, item.pattern)->Belt.Option.isSome { + ->Array.map(item => { + if String.match(card, item.pattern)->Option.isSome { item.issuer } else { "" } }) - ->Js.Array2.filter(item => item !== "") - ->Belt.Array.get(0) - ->Belt.Option.getWithDefault("") + ->Array.filter(item => item !== "") + ->Array.get(0) + ->Option.getOr("") } } catch { | _error => "" @@ -285,20 +285,20 @@ let getCardBrand = cardNumber => { let calculateLuhn = value => { let card = value->clearSpaces - let splitArr = card->Js.String2.split("")->Js.Array2.reverseInPlace - let unCheckArr = splitArr->Js.Array2.filteri((_, i) => { + let splitArr = card->String.split("")->Array.toReversed + let unCheckArr = splitArr->Array.filterWithIndex((_, i) => { mod(i, 2) == 0 }) let checkArr = splitArr - ->Js.Array2.filteri((_, i) => { + ->Array.filterWithIndex((_, i) => { mod(i + 1, 2) == 0 }) - ->Js.Array2.map(item => { + ->Array.map(item => { let val = item->toInt let double = val * 2 let str = double->Belt.Int.toString - let arr = str->Js.String2.split("") + let arr = str->String.split("") switch (arr[0], arr[1]) { | (Some(first), Some(second)) if double > 9 => @@ -307,8 +307,8 @@ let calculateLuhn = value => { } }) - let sumofCheckArr = Belt.Array.reduce(checkArr, 0, (acc, val) => acc + val->toInt) - let sumofUnCheckedArr = Belt.Array.reduce(unCheckArr, 0, (acc, val) => acc + val->toInt) + let sumofCheckArr = Array.reduce(checkArr, 0, (acc, val) => acc + val->toInt) + let sumofUnCheckedArr = Array.reduce(unCheckArr, 0, (acc, val) => acc + val->toInt) let totalSum = sumofCheckArr + sumofUnCheckedArr mod(totalSum, 10) == 0 } @@ -343,7 +343,7 @@ let getCardBrandIcon = (cardType, paymentType) => { } let getExpiryValidity = cardExpiry => { - let date = Js.Date.make()->Js.Date.toISOString + let date = Date.make()->Date.toISOString let (month, year) = getExpiryDates(cardExpiry) let (currentMonth, currentYear) = getCurrentMonthAndYear(date) let valid = if currentYear == year->toInt && month->toInt >= currentMonth && month->toInt <= 12 { @@ -358,14 +358,14 @@ let getExpiryValidity = cardExpiry => { valid } let isExipryValid = val => { - val->Js.String2.length > 0 && getExpiryValidity(val) && isExipryComplete(val) + val->String.length > 0 && getExpiryValidity(val) && isExipryComplete(val) } let cardNumberInRange = val => { let clearValue = val->clearSpaces let obj = getobjFromCardPattern(val->getCardBrand) - let cardLengthInRange = obj.length->Js.Array2.map(item => { - clearValue->Js.String2.length == item + let cardLengthInRange = obj.length->Array.map(item => { + clearValue->String.length == item }) cardLengthInRange } @@ -375,7 +375,7 @@ let max = (a, b) => { let getMaxLength = val => { let obj = getobjFromCardPattern(val->getCardBrand) - let maxValue = Js.Array.reduce(max, 0, obj.length) + let maxValue = obj.length->Array.reduce(0, max) if maxValue <= 12 { maxValue + 2 } else if maxValue <= 16 { @@ -390,15 +390,15 @@ let getMaxLength = val => { let cvcNumberInRange = (val, cardBrand) => { let clearValue = val->clearSpaces let obj = getobjFromCardPattern(cardBrand) - let cvcLengthInRange = obj.cvcLength->Js.Array2.map(item => { - clearValue->Js.String2.length == item + let cvcLengthInRange = obj.cvcLength->Array.map(item => { + clearValue->String.length == item }) cvcLengthInRange } let genreateFontsLink = (fonts: array) => { - if fonts->Js.Array2.length > 0 { + if fonts->Array.length > 0 { fonts - ->Js.Array2.map(item => + ->Array.map(item => if item.cssSrc != "" { let link = document["createElement"](. "link") link["href"] = item.cssSrc @@ -425,24 +425,24 @@ let genreateFontsLink = (fonts: array) => { } let maxCardLength = cardBrand => { let obj = getobjFromCardPattern(cardBrand) - Belt.Array.reduce(obj.length, 0, (acc, val) => acc > val ? acc : val) + Array.reduce(obj.length, 0, (acc, val) => acc > val ? acc : val) } let cardValid = (cardNumber, cardBrand) => { - let clearValueLength = cardNumber->clearSpaces->Js.String2.length + let clearValueLength = cardNumber->clearSpaces->String.length (clearValueLength == maxCardLength(cardBrand) || (cardBrand === "Visa" && clearValueLength == 16)) && calculateLuhn(cardNumber) } -let blurRef = (ref: React.ref>) => { - ref.current->Js.Nullable.toOption->Belt.Option.forEach(input => input->blur)->ignore +let blurRef = (ref: React.ref>) => { + ref.current->Nullable.toOption->Option.forEach(input => input->blur)->ignore } let handleInputFocus = ( - ~currentRef: React.ref>, - ~destinationRef: React.ref>, + ~currentRef: React.ref>, + ~destinationRef: React.ref>, ) => { - let optionalRef = destinationRef.current->Js.Nullable.toOption + let optionalRef = destinationRef.current->Nullable.toOption switch optionalRef { - | Some(_) => optionalRef->Belt.Option.forEach(input => input->focus)->ignore + | Some(_) => optionalRef->Option.forEach(input => input->focus)->ignore | None => blurRef(currentRef) } } @@ -452,7 +452,7 @@ let getCardElementValue = (iframeId, key) => { switch (Window.parent->Window.frames)["0"] ->Window.document ->Window.getElementById(key) - ->Js.Nullable.toOption { + ->Nullable.toOption { | Some(dom) => dom->Window.value | None => "" } @@ -463,7 +463,7 @@ let getCardElementValue = (iframeId, key) => { switch (Window.parent->Window.frames)["1"] ->Window.document ->Window.getElementById(key) - ->Js.Nullable.toOption { + ->Nullable.toOption { | Some(dom) => dom->Window.value | None => "" } @@ -475,7 +475,7 @@ let getCardElementValue = (iframeId, key) => { switch (Window.parent->Window.frames)["2"] ->Window.document ->Window.getElementById(key) - ->Js.Nullable.toOption { + ->Nullable.toOption { | Some(dom) => dom->Window.value | None => "" } @@ -486,11 +486,10 @@ let getCardElementValue = (iframeId, key) => { } let checkCardCVC = (cvcNumber, cardBrand) => { - cvcNumber->Js.String2.length > 0 && - cvcNumberInRange(cvcNumber, cardBrand)->Js.Array2.includes(true) + cvcNumber->String.length > 0 && cvcNumberInRange(cvcNumber, cardBrand)->Array.includes(true) } let checkCardExpiry = expiry => { - expiry->Js.String2.length > 0 && getExpiryValidity(expiry) + expiry->String.length > 0 && getExpiryValidity(expiry) } let getBoolOptionVal = boolOptionVal => { @@ -513,17 +512,17 @@ let pincodeVisibility = cardNumber => { let brand = getCardBrand(cardNumber) let brandPattern = CardPattern.cardPatterns - ->Js.Array2.filter(obj => obj.issuer == brand) - ->Belt.Array.get(0) - ->Belt.Option.getWithDefault(CardPattern.defaultCardPattern) + ->Array.filter(obj => obj.issuer == brand) + ->Array.get(0) + ->Option.getOr(CardPattern.defaultCardPattern) brandPattern.pincodeRequired } let swapCardOption = (cardOpts: array, dropOpts: array, selectedOption: string) => { - let popEle = Js.Array2.pop(cardOpts) - dropOpts->Js.Array2.push(popEle->Belt.Option.getWithDefault(""))->ignore - cardOpts->Js.Array2.push(selectedOption)->ignore - let temp: array = dropOpts->Js.Array2.filter(item => item != selectedOption) + let popEle = Array.pop(cardOpts) + dropOpts->Array.push(popEle->Option.getOr(""))->ignore + cardOpts->Array.push(selectedOption)->ignore + let temp: array = dropOpts->Array.filter(item => item != selectedOption) (cardOpts, temp) } @@ -532,10 +531,10 @@ let setCardValid = (cardnumber, setIsCardValid) => { if cardValid(cardnumber, cardBrand) { setIsCardValid(_ => Some(true)) } else if ( - !cardValid(cardnumber, cardBrand) && cardnumber->Js.String2.length == maxCardLength(cardBrand) + !cardValid(cardnumber, cardBrand) && cardnumber->String.length == maxCardLength(cardBrand) ) { setIsCardValid(_ => Some(false)) - } else if !(cardnumber->Js.String2.length == maxCardLength(cardBrand)) { + } else if !(cardnumber->String.length == maxCardLength(cardBrand)) { setIsCardValid(_ => None) } } @@ -561,10 +560,10 @@ let getLayoutClass = layout => { } let getAllBanknames = obj => { - obj->Js.Array2.reduce((acc, item) => { - item->Js.Array2.map(val => acc->Js.Array2.push(val))->ignore + obj->Array.reduce([], (acc, item) => { + item->Array.map(val => acc->Array.push(val))->ignore acc - }, []) + }) } let clientTimeZone = dateTimeFormat(.).resolvedOptions(.).timeZone @@ -586,7 +585,7 @@ let getCardDetailsFromCardProps = cardProps => { "", _ => (), _ => (), - React.useRef(Js.Nullable.null), + React.useRef(Nullable.null), <> , "", _ => (), @@ -606,7 +605,7 @@ let getExpiryDetailsFromExpiryProps = expiryProps => { "", _ => (), _ => (), - React.useRef(Js.Nullable.null), + React.useRef(Nullable.null), _ => (), "", _ => (), @@ -626,7 +625,7 @@ let getCvcDetailsFromCvcProps = cvcProps => { _ => (), _ => (), _ => (), - React.useRef(Js.Nullable.null), + React.useRef(Nullable.null), _ => (), "", _ => (), @@ -654,7 +653,7 @@ let setRightIconForCvc = (~cardEmpty, ~cardInvalid, ~color, ~cardComplete) => { let useCardDetails = (~cvcNumber, ~isCvcValidValue, ~isCVCValid) => { React.useMemo3(() => { - let isCardDetailsEmpty = Js.String2.length(cvcNumber) == 0 + let isCardDetailsEmpty = String.length(cvcNumber) == 0 let isCardDetailsValid = isCvcValidValue == "valid" let isCardDetailsInvalid = isCvcValidValue == "invalid" (isCardDetailsEmpty, isCardDetailsValid, isCardDetailsInvalid) diff --git a/src/Components/AccordionContainer.res b/src/Components/AccordionContainer.res index f8132fb9..bec97f57 100644 --- a/src/Components/AccordionContainer.res +++ b/src/Components/AccordionContainer.res @@ -10,8 +10,8 @@ module Loader = { open PaymentElementShimmer switch list { | SemiLoaded => - Belt.Array.make(cardShimmerCount - 1, "") - ->Js.Array2.mapi((_, i) => { + Array.make(~length=cardShimmerCount - 1, "") + ->Array.mapWithIndex((_, i) => { let borderStyle = layoutClass.spacedAccordionItems ? themeObj.borderRadius : i == cardShimmerCount - 2 @@ -70,11 +70,11 @@ let make = (~paymentOptions: array, ~checkoutEle: React.element) => { let cardOptionDetails = paymentOptions ->PaymentMethodsRecord.getPaymentDetails - ->Js.Array2.slice(~start=0, ~end_=layoutClass.maxAccordionItems) + ->Array.slice(~start=0, ~end=layoutClass.maxAccordionItems) let dropDownOptionsDetails = paymentOptions ->PaymentMethodsRecord.getPaymentDetails - ->Js.Array2.sliceFrom(layoutClass.maxAccordionItems) + ->Array.sliceToEnd(~start=layoutClass.maxAccordionItems) let getBorderRadiusStyleForCardOptionDetails = index => { if ( @@ -82,20 +82,18 @@ let make = (~paymentOptions: array, ~checkoutEle: React.element) => { !layoutClass.spacedAccordionItems && index == 0 && list == SemiLoaded && - cardOptionDetails->Js.Array2.length == 1 + cardOptionDetails->Array.length == 1 ) { `${themeObj.borderRadius} ${themeObj.borderRadius} 0px 0px` } else if ( !showMore && !layoutClass.spacedAccordionItems && index == 0 && - cardOptionDetails->Js.Array2.length == 1 + cardOptionDetails->Array.length == 1 ) { themeObj.borderRadius } else if ( - !showMore && - !layoutClass.spacedAccordionItems && - index == cardOptionDetails->Js.Array2.length - 1 + !showMore && !layoutClass.spacedAccordionItems && index == cardOptionDetails->Array.length - 1 ) { `0px 0px ${themeObj.borderRadius} ${themeObj.borderRadius}` } else if !layoutClass.spacedAccordionItems && index == 0 { @@ -108,7 +106,7 @@ let make = (~paymentOptions: array, ~checkoutEle: React.element) => { } let getBorderRadiusStyleForDropDownOptionDetails = index => { - if !layoutClass.spacedAccordionItems && index == dropDownOptionsDetails->Js.Array2.length - 1 { + if !layoutClass.spacedAccordionItems && index == dropDownOptionsDetails->Array.length - 1 { `0px 0px ${themeObj.borderRadius} ${themeObj.borderRadius}` } else if layoutClass.spacedAccordionItems { themeObj.borderRadius @@ -131,7 +129,7 @@ let make = (~paymentOptions: array, ~checkoutEle: React.element) => { (), )}> {cardOptionDetails - ->Js.Array2.mapi((payOption, i) => { + ->Array.mapWithIndex((payOption, i) => { let isActive = payOption.paymentMethodName == selectedOption let borderRadiusStyle = getBorderRadiusStyleForCardOptionDetails(i) , ~checkoutEle: React.element) => { checkoutEle borderRadiusStyle={borderRadiusStyle} borderBottom={(!showMore && - i == cardOptionDetails->Js.Array2.length - 1 && + i == cardOptionDetails->Array.length - 1 && !layoutClass.spacedAccordionItems) || layoutClass.spacedAccordionItems} /> }) @@ -149,7 +147,7 @@ let make = (~paymentOptions: array, ~checkoutEle: React.element) => { {dropDownOptionsDetails - ->Js.Array2.mapi((payOption, i) => { + ->Array.mapWithIndex((payOption, i) => { let isActive = payOption.paymentMethodName == selectedOption let borderRadiusStyle = getBorderRadiusStyleForDropDownOptionDetails(i) , ~checkoutEle: React.element) => { isActive checkoutEle borderRadiusStyle={borderRadiusStyle} - borderBottom={(i == dropDownOptionsDetails->Js.Array2.length - 1 && + borderBottom={(i == dropDownOptionsDetails->Array.length - 1 && !layoutClass.spacedAccordionItems) || layoutClass.spacedAccordionItems} /> }) ->React.array} - Js.Array2.length > 0}> + Array.length > 0}> diff --git a/src/Components/AddBankAccount.res b/src/Components/AddBankAccount.res index e7dbb146..beff3304 100644 --- a/src/Components/AddBankAccount.res +++ b/src/Components/AddBankAccount.res @@ -30,16 +30,16 @@ module ToolTip = { @react.component let make = (~modalData, ~setModalData) => { - let isDataAvailable = modalData->Belt.Option.isSome + let isDataAvailable = modalData->Option.isSome let {themeObj, localeString} = Recoil.useRecoilValueFromAtom(configAtom) let {iframeId} = Recoil.useRecoilValueFromAtom(keys) let (openToolTip, setOpenToolTip) = React.useState(_ => false) - let toolTipRef = React.useRef(Js.Nullable.null) + let toolTipRef = React.useRef(Nullable.null) let openModal = () => { handlePostMessage([ - ("fullscreen", true->Js.Json.boolean), - ("iframeId", iframeId->Js.Json.string), + ("fullscreen", true->JSON.Encode.bool), + ("iframeId", iframeId->JSON.Encode.string), ]) }
{ | Some(data: ACHTypes.data) => let last4digts = data.iban !== "" - ? data.iban->CardUtils.clearSpaces->Js.String2.sliceToEnd(~from=-4) - : data.accountNumber->Js.String2.sliceToEnd(~from=-4) + ? data.iban->CardUtils.clearSpaces->String.sliceToEnd(~start=-4) + : data.accountNumber->String.sliceToEnd(~start=-4)
-
+
+ +
{React.string(`Bank **** ${last4digts}`)}
{
- | None => <> + | None => + <>
-
+
+ +
{React.string(localeString.addBankAccount)}
-
+
+ +
}} diff --git a/src/Components/AddressPaymentInput.res b/src/Components/AddressPaymentInput.res index 2c6fee40..8e26851c 100644 --- a/src/Components/AddressPaymentInput.res +++ b/src/Components/AddressPaymentInput.res @@ -4,10 +4,10 @@ open Utils type addressType = Line1 | Line2 | City | Postal | State | Country -type dataModule = {states: Js.Json.t} +type dataModule = {states: JSON.t} @val -external importStates: string => Js.Promise.t = "import" +external importStates: string => Promise.t = "import" let getShowType = str => { switch str { @@ -54,10 +54,10 @@ let make = (~paymentType, ~className="") => { ) let (state, setState) = Recoil.useLoggedRecoilState(userAddressState, "state", loggerState) - let line1Ref = React.useRef(Js.Nullable.null) - let line2Ref = React.useRef(Js.Nullable.null) - let cityRef = React.useRef(Js.Nullable.null) - let postalRef = React.useRef(Js.Nullable.null) + let line1Ref = React.useRef(Nullable.null) + let line2Ref = React.useRef(Nullable.null) + let cityRef = React.useRef(Nullable.null) + let postalRef = React.useRef(Nullable.null) let (postalCodes, setPostalCodes) = React.useState(_ => [PostalCodeType.defaultPostalCode]) let (stateJson, setStatesJson) = React.useState(_ => None) @@ -72,14 +72,14 @@ let make = (~paymentType, ~className="") => { ) => unit, regex, ) => { - if Js.Re.test_(regex->Js.Re.fromString, postal.value) && postal.value !== "" && regex !== "" { + if RegExp.test(regex->RegExp.fromString, postal.value) && postal.value !== "" && regex !== "" { setPostal(.prev => { ...prev, isValid: Some(true), errorString: "", }) } else if ( - regex !== "" && !Js.Re.test_(regex->Js.Re.fromString, postal.value) && postal.value !== "" + regex !== "" && !RegExp.test(regex->RegExp.fromString, postal.value) && postal.value !== "" ) { setPostal(.prev => { ...prev, @@ -130,20 +130,20 @@ let make = (~paymentType, ~className="") => { value: val, errorString: "", }) - if regex !== "" && Js.Re.test_(regex->Js.Re.fromString, val) { + if regex !== "" && RegExp.test(regex->RegExp.fromString, val) { CardUtils.blurRef(postalRef) } } let onPostalBlur = ev => { let val = ReactEvent.Focus.target(ev)["value"] - if regex !== "" && Js.Re.test_(regex->Js.Re.fromString, val) && val !== "" { + if regex !== "" && RegExp.test(regex->RegExp.fromString, val) && val !== "" { setPostalCode(.prev => { ...prev, isValid: Some(true), errorString: "", }) - } else if regex !== "" && !Js.Re.test_(regex->Js.Re.fromString, val) && val !== "" { + } else if regex !== "" && !RegExp.test(regex->RegExp.fromString, val) && val !== "" { setPostalCode(.prev => { ...prev, isValid: Some(false), @@ -167,7 +167,7 @@ let make = (~paymentType, ~className="") => { }, [country.value]) let submitCallback = React.useCallback6((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->Utils.getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit { if line1.value == "" { diff --git a/src/Components/BillingNamePaymentInput.res b/src/Components/BillingNamePaymentInput.res index 39b2a213..4fa3b7bb 100644 --- a/src/Components/BillingNamePaymentInput.res +++ b/src/Components/BillingNamePaymentInput.res @@ -35,10 +35,10 @@ let make = (~paymentType, ~customFieldName=None, ~requiredFields as optionalRequ | Some(val) => (val, val) | None => (localeString.billingNamePlaceholder, localeString.billingNameLabel) } - let nameRef = React.useRef(Js.Nullable.null) + let nameRef = React.useRef(Nullable.null) let submitCallback = React.useCallback1((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit { if billingName.value == "" { diff --git a/src/Components/BlikCodePaymentInput.res b/src/Components/BlikCodePaymentInput.res index 8ec3eda0..70f6c34a 100644 --- a/src/Components/BlikCodePaymentInput.res +++ b/src/Components/BlikCodePaymentInput.res @@ -6,15 +6,15 @@ let make = () => { let loggerState = Recoil.useRecoilValueFromAtom(loggerAtom) let (blikCode, setblikCode) = Recoil.useLoggedRecoilState(userBlikCode, "blikCode", loggerState) - let blikCodeRef = React.useRef(Js.Nullable.null) + let blikCodeRef = React.useRef(Nullable.null) let formatBSB = bsb => { - let formatted = bsb->Js.String2.replaceByRe(%re("/\D+/g"), "") + let formatted = bsb->String.replaceRegExp(%re("/\D+/g"), "") let firstPart = formatted->CardUtils.slice(0, 3) let secondPart = formatted->CardUtils.slice(3, 6) - if formatted->Js.String2.length <= 3 { + if formatted->String.length <= 3 { firstPart - } else if formatted->Js.String2.length > 3 && formatted->Js.String2.length <= 6 { + } else if formatted->String.length > 3 && formatted->String.length <= 6 { `${firstPart}-${secondPart}` } else { formatted @@ -41,7 +41,7 @@ let make = () => { }, [blikCode.isValid]) let submitCallback = React.useCallback1((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->Utils.getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit { if blikCode.value == "" { diff --git a/src/Components/DropdownField.res b/src/Components/DropdownField.res index 6b860689..39ebd53a 100644 --- a/src/Components/DropdownField.res +++ b/src/Components/DropdownField.res @@ -11,7 +11,7 @@ let make = ( ) => { let {themeObj, localeString, config} = Recoil.useRecoilValueFromAtom(configAtom) let {readOnly} = Recoil.useRecoilValueFromAtom(optionAtom) - let dropdownRef = React.useRef(Js.Nullable.null) + let dropdownRef = React.useRef(Nullable.null) let (inputFocused, setInputFocused) = React.useState(_ => false) let {parentURL} = Recoil.useRecoilValueFromAtom(keys) @@ -30,12 +30,12 @@ let make = ( }, [themeObj]) React.useEffect0(() => { if value === "" { - setValue(_ => options->Belt.Array.get(0)->Belt.Option.getWithDefault("")) + setValue(_ => options->Array.get(0)->Option.getOr("")) } None }) - let focusClass = if inputFocused || value->Js.String2.length > 0 { + let focusClass = if inputFocused || value->String.length > 0 { `mb-7 pb-1 pt-2 ${themeObj.fontSizeXs} transition-all ease-in duration-75` } else { "transition-all ease-in duration-75" @@ -44,9 +44,9 @@ let make = ( let floatinglabelClass = inputFocused ? "Label--floating" : "Label--resting" let cursorClass = !disabled ? "cursor-pointer" : "cursor-not-allowed" - Js.Array2.length > 0}> + Array.length > 0}>
- Js.String2.length > 0 && appearance.labels == Above}> + String.length > 0 && appearance.labels == Above}>
{options - ->Js.Array2.mapi((item: string, i) => { - + ->Array.mapWithIndex((item: string, i) => { + }) ->React.array} @@ -86,10 +86,10 @@ let make = ( className={`Label ${floatinglabelClass} absolute bottom-0 ml-3 ${focusClass}`} style={ReactDOMStyle.make( ~marginBottom={ - inputFocused || value->Js.String2.length > 0 ? "" : themeObj.spacingUnit + inputFocused || value->String.length > 0 ? "" : themeObj.spacingUnit }, ~fontSize={ - inputFocused || value->Js.String2.length > 0 ? themeObj.fontSizeXs : "" + inputFocused || value->String.length > 0 ? themeObj.fontSizeXs : "" }, ~opacity="0.6", (), diff --git a/src/Components/DynamicFields.res b/src/Components/DynamicFields.res index 9f88559b..e11ab662 100644 --- a/src/Components/DynamicFields.res +++ b/src/Components/DynamicFields.res @@ -14,7 +14,7 @@ let make = ( ~isBancontact=false, ) => { React.useEffect1(() => { - setRequiredFieldsBody(_ => Js.Dict.empty()) + setRequiredFieldsBody(_ => Dict.make()) None }, [paymentMethodType]) @@ -31,7 +31,7 @@ let make = ( if paymentMethod === "card" { paymentMethodTypes.required_fields } else if ( - PaymentMethodsRecord.dynamicFieldsEnabledPaymentMethods->Js.Array2.includes(paymentMethodType) + PaymentMethodsRecord.dynamicFieldsEnabledPaymentMethods->Array.includes(paymentMethodType) ) { paymentMethodTypes.required_fields } else { @@ -78,10 +78,10 @@ let make = ( ) let (postalCodes, setPostalCodes) = React.useState(_ => [PostalCodeType.defaultPostalCode]) let (currency, setCurrency) = Recoil.useLoggedRecoilState(userCurrency, "currency", logger) - let line1Ref = React.useRef(Js.Nullable.null) - let line2Ref = React.useRef(Js.Nullable.null) - let cityRef = React.useRef(Js.Nullable.null) - let postalRef = React.useRef(Js.Nullable.null) + let line1Ref = React.useRef(Nullable.null) + let line2Ref = React.useRef(Nullable.null) + let cityRef = React.useRef(Nullable.null) + let postalRef = React.useRef(Nullable.null) let (selectedBank, setSelectedBank) = Recoil.useRecoilState(userBank) let (country, setCountry) = Recoil.useRecoilState(userCountry) @@ -150,7 +150,7 @@ let make = ( ) React.useEffect0(() => { - let bank = bankNames->Belt.Array.get(0)->Belt.Option.getWithDefault("") + let bank = bankNames->Array.get(0)->Option.getOr("") setSelectedBank(_ => bank) None }) @@ -245,11 +245,11 @@ let make = ( let getCustomFieldName = (item: PaymentMethodsRecord.paymentMethodsFields) => { if ( requiredFields - ->Js.Array2.filter(requiredFieldType => + ->Array.filter(requiredFieldType => requiredFieldType.field_type === item && requiredFieldType.display_name === "card_holder_name" ) - ->Belt.Array.length > 0 + ->Array.length > 0 ) { Some(localeString.cardHolderName) } else { @@ -258,31 +258,29 @@ let make = ( } let dynamicFieldsToRenderOutsideBilling = React.useMemo1(() => { - fieldsArr->Js.Array2.filter(DynamicFieldsUtils.isFieldTypeToRenderOutsideBilling) + fieldsArr->Array.filter(DynamicFieldsUtils.isFieldTypeToRenderOutsideBilling) }, [fieldsArr]) let dynamicFieldsToRenderInsideBilling = React.useMemo1(() => { - fieldsArr->Js.Array2.filter(field => - !(field->DynamicFieldsUtils.isFieldTypeToRenderOutsideBilling) - ) + fieldsArr->Array.filter(field => !(field->DynamicFieldsUtils.isFieldTypeToRenderOutsideBilling)) }, [fieldsArr]) - let isInfoElementPresent = dynamicFieldsToRenderInsideBilling->Js.Array2.includes(InfoElement) + let isInfoElementPresent = dynamicFieldsToRenderInsideBilling->Array.includes(InfoElement) let isOnlyInfoElementPresent = - dynamicFieldsToRenderInsideBilling->Js.Array2.length === 1 && isInfoElementPresent + dynamicFieldsToRenderInsideBilling->Array.length === 1 && isInfoElementPresent let isRenderDynamicFieldsInsideBilling = - dynamicFieldsToRenderInsideBilling->Js.Array2.length > 0 && - (dynamicFieldsToRenderInsideBilling->Js.Array2.length > 1 || !isOnlyInfoElementPresent) + dynamicFieldsToRenderInsideBilling->Array.length > 0 && + (dynamicFieldsToRenderInsideBilling->Array.length > 1 || !isOnlyInfoElementPresent) { - fieldsArr->Js.Array2.length > 0 + fieldsArr->Array.length > 0 ? <> {dynamicFieldsToRenderOutsideBilling - ->Js.Array2.mapi((item, index) => { + ->Array.mapWithIndex((item, index) => {
Js.Int.toString}`} + key={`outside-billing-${index->Int.toString}`} className="flex flex-col w-full place-content-between" style={ReactDOMStyle.make( ~marginTop=index !== 0 || paymentMethod === "card" @@ -438,9 +436,9 @@ let make = ( {React.string(localeString.billingDetailsText)}
{dynamicFieldsToRenderInsideBilling - ->Js.Array2.mapi((item, index) => { + ->Array.mapWithIndex((item, index) => {
Js.Int.toString}`} + key={`inside-billing-${index->Int.toString}`} className="flex flex-col w-full place-content-between"> {switch item { | BillingName => @@ -661,7 +659,7 @@ let make = ( | InfoElement => <> - {if fieldsArr->Js.Array2.length > 1 { + {if fieldsArr->Array.length > 1 { bottomElement } else { @@ -686,7 +684,7 @@ let make = ( {<> - {if fieldsArr->Js.Array2.length > 1 { + {if fieldsArr->Array.length > 1 { bottomElement } else { diff --git a/src/Components/EmailPaymentInput.res b/src/Components/EmailPaymentInput.res index 3fdc6b0e..d1eb31c5 100644 --- a/src/Components/EmailPaymentInput.res +++ b/src/Components/EmailPaymentInput.res @@ -11,16 +11,14 @@ let make = (~paymentType) => { let showDetails = getShowDetails(~billingDetails=fields.billingDetails, ~logger=loggerState) - let emailRef = React.useRef(Js.Nullable.null) + let emailRef = React.useRef(Nullable.null) let changeEmail = ev => { let val: string = ReactEvent.Form.target(ev)["value"] setEmail(.prev => { value: val, isValid: val->Utils.isEmailValid, - errorString: val->Utils.isEmailValid->Belt.Option.getWithDefault(false) - ? "" - : prev.errorString, + errorString: val->Utils.isEmailValid->Option.getOr(false) ? "" : prev.errorString, }) } let onBlur = ev => { @@ -43,7 +41,7 @@ let make = (~paymentType) => { }, [email.isValid]) let submitCallback = React.useCallback1((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->Utils.getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit { if email.value == "" { diff --git a/src/Components/FullNamePaymentInput.res b/src/Components/FullNamePaymentInput.res index 6c661b11..661ffcaa 100644 --- a/src/Components/FullNamePaymentInput.res +++ b/src/Components/FullNamePaymentInput.res @@ -33,10 +33,10 @@ let make = (~paymentType, ~customFieldName=None, ~optionalRequiredFields=None) = | Some(val) => (val, val) | None => (localeString.fullNamePlaceholder, localeString.fullNameLabel) } - let nameRef = React.useRef(Js.Nullable.null) + let nameRef = React.useRef(Nullable.null) let submitCallback = React.useCallback1((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit { if fullName.value == "" { diff --git a/src/Components/FullScreenDivDriver.res b/src/Components/FullScreenDivDriver.res index 50e070fc..57e8c8f2 100644 --- a/src/Components/FullScreenDivDriver.res +++ b/src/Components/FullScreenDivDriver.res @@ -1,7 +1,7 @@ @react.component let make = () => { React.useEffect0(() => { - Utils.handlePostMessage([("driverMounted", true->Js.Json.boolean)]) + Utils.handlePostMessage([("driverMounted", true->JSON.Encode.bool)]) None })
diff --git a/src/Components/FullScreenPortal.res b/src/Components/FullScreenPortal.res index 18a4ca15..d9e0c68e 100644 --- a/src/Components/FullScreenPortal.res +++ b/src/Components/FullScreenPortal.res @@ -4,20 +4,20 @@ external getElementById: string => Dom.element = "getElementById" @react.component let make = (~children) => { - let (fullScreenIframeNode, setFullScreenIframeNode) = React.useState(() => Js.Nullable.null) + let (fullScreenIframeNode, setFullScreenIframeNode) = React.useState(() => Nullable.null) React.useEffect(() => { let handle = (ev: Window.event) => { try { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let dict = json->getDictFromJson - if dict->Js.Dict.get("fullScreenIframeMounted")->Belt.Option.isSome { + if dict->Dict.get("fullScreenIframeMounted")->Option.isSome { if dict->getBool("fullScreenIframeMounted", false) { setFullScreenIframeNode(_ => switch Window.windowParent->Window.fullscreen { | Some(doc) => doc->Window.document->Window.getElementById("fullscreen") - | None => Js.Nullable.null + | None => Nullable.null } ) } @@ -30,7 +30,7 @@ let make = (~children) => { Some(() => {Window.removeEventListener("message", handle)}) }) - switch fullScreenIframeNode->Js.Nullable.toOption { + switch fullScreenIframeNode->Nullable.toOption { | Some(domNode) => ReactDOM.createPortal(children, domNode) | None => React.null } diff --git a/src/Components/Input.res b/src/Components/Input.res index bdcaac4a..90a4f0f3 100644 --- a/src/Components/Input.res +++ b/src/Components/Input.res @@ -60,7 +60,7 @@ let make = (
- Js.String2.length > 0}> + String.length > 0}>
{React.string(fieldName)}
@@ -89,7 +89,7 @@ let make = (
{switch errorString { | Some(val) => - Js.String2.length > 0}> + String.length > 0}>
{React.string(val)} diff --git a/src/Components/InputField.res b/src/Components/InputField.res index 578e004b..74d977ee 100644 --- a/src/Components/InputField.res +++ b/src/Components/InputField.res @@ -53,9 +53,9 @@ let make = ( } } let handleFocus = _ => { - if value->Js.String2.length == 0 { + if value->String.length == 0 { setClass("input-empty") - } else if value->Js.String2.length > 0 { + } else if value->String.length > 0 { setValidClasses() } setFocus(true) @@ -64,9 +64,9 @@ let make = ( } let handleBlur = ev => { - if value->Js.String2.length == 0 { + if value->String.length == 0 { setClass("input-base") - } else if value->Js.String2.length > 0 { + } else if value->String.length > 0 { setValidClasses() } setFocus(false) @@ -74,7 +74,7 @@ let make = ( Utils.handleOnBlurPostMessage(~targetOrigin=parentURL, ()) } React.useEffect2(() => { - if value->Js.String2.length > 0 { + if value->String.length > 0 { setValidClasses() } None @@ -90,7 +90,7 @@ let make = ( let (cardEmpty, cardComplete, cardInvalid, cardFocused) = React.useMemo5(() => { let isCardDetailsEmpty = - Js.String2.length(value) == 0 + String.length(value) == 0 ? `${options.classes.base} ${options.classes.empty} ` : options.classes.base @@ -103,18 +103,18 @@ let make = ( (isCardDetailsEmpty, isCardDetailsValid, isCardDetailsInvalid, isCardDetailsFocused) }, (isValid, setIsValid, value, onChange, onBlur)) - let concatString = Js.Array.joinWith("", [cardEmpty, cardComplete, cardInvalid, cardFocused]) + let concatString = Array.joinWith([cardEmpty, cardComplete, cardInvalid, cardFocused], "") React.useEffect5(() => { Utils.handlePostMessage([ - ("id", iframeId->Js.Json.string), - ("concatedString", concatString->Js.Json.string), + ("id", iframeId->JSON.Encode.string), + ("concatedString", concatString->JSON.Encode.string), ]) None }, (isValid, setIsValid, value, onChange, onBlur))
- Js.String2.length > 0}> + String.length > 0}>
{React.string(fieldName)}
@@ -143,7 +143,7 @@ let make = (
{switch errorString { | Some(val) => - Js.String2.length > 0}> + String.length > 0}>
{React.string(val)}
| None => React.null diff --git a/src/Components/Loader.res b/src/Components/Loader.res index 4a4edca4..bfb92093 100644 --- a/src/Components/Loader.res +++ b/src/Components/Loader.res @@ -5,7 +5,7 @@ let make = (~showText=true) => {
{arr - ->Js.Array2.mapi((item, i) => { + ->Array.mapWithIndex((item, i) => { { setOpenModal(_ => false) - Js.Global.setTimeout(() => { - Utils.handlePostMessage([("fullscreen", false->Js.Json.boolean)]) + setTimeout(() => { + Utils.handlePostMessage([("fullscreen", false->JSON.Encode.bool)]) }, 450)->ignore } @@ -18,12 +18,12 @@ let make = ( let {themeObj} = Recoil.useRecoilValueFromAtom(RecoilAtoms.configAtom) let closeModal = () => { setOpenModal(_ => false) - Js.Global.setTimeout(() => { + setTimeout(() => { switch closeCallback { | Some(fn) => fn() | None => () } - Utils.handlePostMessage([("fullscreen", false->Js.Json.boolean)]) + Utils.handlePostMessage([("fullscreen", false->JSON.Encode.bool)]) }, 450)->ignore } diff --git a/src/Components/PaymentDropDownField.res b/src/Components/PaymentDropDownField.res index 29b7feac..ab561d4d 100644 --- a/src/Components/PaymentDropDownField.res +++ b/src/Components/PaymentDropDownField.res @@ -13,12 +13,12 @@ let make = ( let {config} = Recoil.useRecoilValueFromAtom(configAtom) let {themeObj, localeString} = Recoil.useRecoilValueFromAtom(configAtom) let {readOnly} = Recoil.useRecoilValueFromAtom(optionAtom) - let dropdownRef = React.useRef(Js.Nullable.null) + let dropdownRef = React.useRef(Nullable.null) let (inputFocused, setInputFocused) = React.useState(_ => false) let {parentURL} = Recoil.useRecoilValueFromAtom(keys) let getClassName = initialLabel => { - if value.value->Js.String2.length == 0 { + if value.value->String.length == 0 { `${initialLabel}--empty` } else { switch value.isValid { @@ -28,11 +28,11 @@ let make = ( } } React.useEffect1(() => { - let initialValue = options->Belt.Array.get(0)->Belt.Option.getWithDefault("") + let initialValue = options->Array.get(0)->Option.getOr("") if ( value.value === "" || value.value === initialValue || - options->Js.Array2.includes(value.value)->not + options->Array.includes(value.value)->not ) { setValue(.prev => { ...prev, @@ -41,7 +41,7 @@ let make = ( }) } None - }, [options->Belt.Array.get(0)->Belt.Option.getWithDefault("")]) + }, [options->Array.get(0)->Option.getOr("")]) let handleFocus = _ => { setInputFocused(_ => true) // setValue(.prev => { @@ -51,7 +51,7 @@ let make = ( // }) Utils.handleOnFocusPostMessage(~targetOrigin=parentURL, ()) } - let focusClass = if inputFocused || value.value->Js.String2.length > 0 { + let focusClass = if inputFocused || value.value->String.length > 0 { `mb-7 pb-1 pt-2 ${themeObj.fontSizeXs} transition-all ease-in duration-75` } else { "transition-all ease-in duration-75" @@ -74,9 +74,9 @@ let make = ( themeObj.colorBackground }, [themeObj]) let cursorClass = !disabled ? "cursor-pointer" : "cursor-not-allowed" - Js.Array2.length > 0}> + Array.length > 0}>
- Js.String2.length > 0 && config.appearance.labels == Above}> + String.length > 0 && config.appearance.labels == Above}>
{options - ->Js.Array2.mapi((item: string, i) => { - + ->Array.mapWithIndex((item: string, i) => { + }) ->React.array} @@ -116,10 +116,10 @@ let make = ( className={`Label ${floatinglabelClass} ${labelClass} absolute bottom-0 ml-3 ${focusClass}`} style={ReactDOMStyle.make( ~marginBottom={ - inputFocused || value.value->Js.String2.length > 0 ? "" : themeObj.spacingUnit + inputFocused || value.value->String.length > 0 ? "" : themeObj.spacingUnit }, ~fontSize={ - inputFocused || value.value->Js.String2.length > 0 ? themeObj.fontSizeXs : "" + inputFocused || value.value->String.length > 0 ? themeObj.fontSizeXs : "" }, ~opacity="0.6", (), @@ -139,7 +139,7 @@ let make = ( )}>
- Js.String2.length > 0}> + String.length > 0}>
Js.String2.length > 0 { + let focusClass = if inputFocused || value.value->String.length > 0 { `mb-7 pb-1 pt-2 ${themeObj.fontSizeXs} transition-all ease-in duration-75` } else { "transition-all ease-in duration-75" } let floatinglabelClass = inputFocused ? "Label--floating" : "Label--resting" let getClassName = initialLabel => { - if value.value->Js.String2.length == 0 { + if value.value->String.length == 0 { `${initialLabel}--empty` } else { switch value.isValid { @@ -77,7 +77,7 @@ let make = ( let inputClass = getClassName("Input")
- Js.String2.length > 0 && config.appearance.labels == Above}> + String.length > 0 && config.appearance.labels == Above}>
Js.String2.length > 0 ? "" : themeObj.spacingUnit + inputFocused || value.value->String.length > 0 ? "" : themeObj.spacingUnit }, ~fontSize={ - inputFocused || value.value->Js.String2.length > 0 ? themeObj.fontSizeXs : "" + inputFocused || value.value->String.length > 0 ? themeObj.fontSizeXs : "" }, ~opacity="0.6", (), @@ -134,7 +134,7 @@ let make = (
{rightIcon}
- Js.String2.length > 0}> + String.length > 0}>
Js.String2.length > 0 { + let focusClass = if inputFocused || value->String.length > 0 { `mb-7 pb-1 pt-2 ${themeObj.fontSizeXs} transition-all ease-in duration-75` } else { "transition-all ease-in duration-75" } let floatinglabelClass = inputFocused ? "Label--floating" : "Label--resting" let getClassName = initialLabel => { - if value->Js.String2.length == 0 { + if value->String.length == 0 { `${initialLabel}--empty` } else { switch isValid { @@ -76,7 +76,7 @@ let make = ( let inputClass = getClassName("Input")
- Js.String2.length > 0 && appearance.labels == Above}> + String.length > 0 && appearance.labels == Above}>
Js.String2.length > 0 ? "" : themeObj.spacingUnit + inputFocused || value->String.length > 0 ? "" : themeObj.spacingUnit }, - ~fontSize={inputFocused || value->Js.String2.length > 0 ? themeObj.fontSizeXs : ""}, + ~fontSize={inputFocused || value->String.length > 0 ? themeObj.fontSizeXs : ""}, ~opacity="0.6", (), )}> @@ -132,7 +132,7 @@ let make = (
{switch errorString { | Some(val) => - Js.String2.length > 0}> + String.length > 0}>
{ let formatBSB = bsb => { let formatted = bsb - let secondPart = formatted->Js.String2.sliceToEnd(~from=4)->Js.String2.trim + let secondPart = formatted->String.sliceToEnd(~start=4)->String.trim - if formatted->Js.String2.length <= 4 { + if formatted->String.length <= 4 { "+351 " - } else if formatted->Js.String2.length > 4 { + } else if formatted->String.length > 4 { `+351 ${secondPart}` } else { formatted @@ -24,15 +24,14 @@ let make = () => { } let changePhone = ev => { - let val: string = - ReactEvent.Form.target(ev)["value"]->Js.String2.replaceByRe(%re("/\+D+/g"), "") + let val: string = ReactEvent.Form.target(ev)["value"]->String.replaceRegExp(%re("/\+D+/g"), "") setPhone(.prev => { ...prev, value: val->formatBSB, }) } - let phoneRef = React.useRef(Js.Nullable.null) + let phoneRef = React.useRef(Nullable.null) { let (_, setPortalNodes) = Recoil.useRecoilState(RecoilAtoms.portalNodes) - let setDiv = React.useCallback2((elem: Js.Nullable.t) => { - setPortalNodes(.prevDict => { - let clonedDict = - prevDict - ->Js.Dict.entries - ->Js.Array2.filter(entry => { - let (key, _val) = entry - key !== name - }) - ->Js.Dict.fromArray + let setDiv = React.useCallback2((elem: Nullable.t) => { + setPortalNodes(. + prevDict => { + let clonedDict = + prevDict + ->Dict.toArray + ->Array.filter( + entry => { + let (key, _val) = entry + key !== name + }, + ) + ->Dict.fromArray - switch elem->Js.Nullable.toOption { - | Some(elem) => Js.Dict.set(clonedDict, name, elem) - | None => () - } + switch elem->Nullable.toOption { + | Some(elem) => Dict.set(clonedDict, name, elem) + | None => () + } - clonedDict - }) + clonedDict + }, + ) }, (setPortalNodes, name))
diff --git a/src/Components/SavedCardItem.res b/src/Components/SavedCardItem.res index 59f9a243..eb5b237b 100644 --- a/src/Components/SavedCardItem.res +++ b/src/Components/SavedCardItem.res @@ -26,7 +26,7 @@ let make = ( cvcError, _, ) = cvcProps - let cvcRef = React.useRef(Js.Nullable.null) + let cvcRef = React.useRef(Nullable.null) let pickerItemClass = isActive ? "PickerItem--selected" : "" let focusCVC = () => { @@ -36,9 +36,9 @@ let make = ( | None => "" } ) - let optionalRef = cvcRef.current->Js.Nullable.toOption + let optionalRef = cvcRef.current->Nullable.toOption switch optionalRef { - | Some(_) => optionalRef->Belt.Option.forEach(input => input->CardUtils.focus)->ignore + | Some(_) => optionalRef->Option.forEach(input => input->CardUtils.focus)->ignore | None => () } } diff --git a/src/Components/SavedMethods.res b/src/Components/SavedMethods.res index b0920097..f3fb3590 100644 --- a/src/Components/SavedMethods.res +++ b/src/Components/SavedMethods.res @@ -13,14 +13,14 @@ let make = ( let {themeObj, localeString} = Recoil.useRecoilValueFromAtom(RecoilAtoms.configAtom) let (showFields, setShowFields) = Recoil.useRecoilState(RecoilAtoms.showCardFieldsAtom) let areRequiredFieldsValid = Recoil.useRecoilValueFromAtom(RecoilAtoms.areRequiredFieldsValid) - let (requiredFieldsBody, setRequiredFieldsBody) = React.useState(_ => Js.Dict.empty()) + let (requiredFieldsBody, setRequiredFieldsBody) = React.useState(_ => Dict.make()) let setUserError = message => { postFailedSubmitResponse(~errortype="validation_error", ~message) } let loggerState = Recoil.useRecoilValueFromAtom(RecoilAtoms.loggerAtom) let intent = PaymentHelpers.usePaymentIntent(Some(loggerState), Card) let (token, _) = paymentToken - let savedCardlength = savedMethods->Js.Array2.length + let savedCardlength = savedMethods->Array.length let getWalletBrandIcon = (obj: PaymentType.customerMethods) => { switch obj.paymentMethodType { @@ -33,7 +33,7 @@ let make = ( let bottomElement = { savedMethods - ->Js.Array2.mapi((obj, i) => { + ->Array.mapWithIndex((obj, i) => { let brandIcon = switch obj.paymentMethod { | "wallet" => getWalletBrandIcon(obj) | _ => @@ -72,16 +72,16 @@ let make = ( let empty = cvcNumber == "" let submitCallback = React.useCallback4((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->getDictFromJson->ConfirmType.itemToObjMapper let (token, customerId) = paymentToken let customerMethod = savedMethods - ->Js.Array2.filter(savedMethod => { + ->Array.filter(savedMethod => { savedMethod.paymentToken === token }) - ->Belt.Array.get(0) - ->Belt.Option.getWithDefault(PaymentType.defaultCustomerMethods) + ->Array.get(0) + ->Option.getOr(PaymentType.defaultCustomerMethods) let isCardPaymentMethod = customerMethod.paymentMethod === "card" let isCardPaymentMethodValid = !customerMethod.requiresCvv || (complete && !empty) @@ -96,8 +96,8 @@ let make = ( | _ => { let paymentMethodType = switch customerMethod.paymentMethodType { | Some("") - | None => Js.Json.null - | Some(paymentMethodType) => paymentMethodType->Js.Json.string + | None => JSON.Encode.null + | Some(paymentMethodType) => paymentMethodType->JSON.Encode.string } PaymentBody.savedPaymentMethodBody( ~paymentToken=token, @@ -112,8 +112,8 @@ let make = ( if areRequiredFieldsValid && (!isCardPaymentMethod || isCardPaymentMethodValid) { intent( ~bodyArr=savedPaymentMethodBody - ->Js.Dict.fromArray - ->Js.Json.object_ + ->Dict.fromArray + ->JSON.Encode.object ->OrcaUtils.flattenObject(true) ->OrcaUtils.mergeTwoFlattenedJsonDicts(requiredFieldsBody) ->OrcaUtils.getArrayOfTupleFromDict, @@ -126,7 +126,7 @@ let make = ( setCvcError(_ => localeString.cvcNumberEmptyText) setUserError(localeString.enterFieldsText) } - if !(isCVCValid->Belt.Option.getWithDefault(false)) { + if !(isCVCValid->Option.getOr(false)) { setUserError(localeString.enterValidDetailsText) } if !areRequiredFieldsValid { diff --git a/src/Components/Surcharge.res b/src/Components/Surcharge.res index 99c3af66..9e5e5789 100644 --- a/src/Components/Surcharge.res +++ b/src/Components/Surcharge.res @@ -14,7 +14,7 @@ let make = ( ~paymentMethodType=paymentMethod, ~paymentMethodName=paymentMethodType, ), - )->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodType) + )->Option.getOr(PaymentMethodsRecord.defaultPaymentMethodType) } let paymentMethodTypes = paymentMethodType->getPaymentMethodTypes diff --git a/src/Components/SurchargeUtils.res b/src/Components/SurchargeUtils.res index 912aefe8..44a3a033 100644 --- a/src/Components/SurchargeUtils.res +++ b/src/Components/SurchargeUtils.res @@ -19,7 +19,7 @@ let useSurchargeDetailsForOneClickWallets = (~list) => { ) React.useMemo2(() => { - oneClickWallets->Js.Array2.reduce((acc, wallet) => { + oneClickWallets->Array.reduce([], (acc, wallet) => { let isWalletBtnRendered = switch wallet.paymentMethodType { | "apple_pay" => areOneClickWalletsRendered.isApplePay | "paypal" => areOneClickWalletsRendered.isPaypal @@ -32,10 +32,10 @@ let useSurchargeDetailsForOneClickWallets = (~list) => { ~list, ~paymentMethod="wallet", ~paymentMethodType=wallet.paymentMethodType, - )->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodType) + )->Option.getOr(PaymentMethodsRecord.defaultPaymentMethodType) switch paymentMethodType.surcharge_details { | Some(surchargDetails) => - acc->Js.Array2.concat([ + acc->Array.concat([ { name: wallet.displayName, surchargeDetails: surchargDetails, @@ -46,7 +46,7 @@ let useSurchargeDetailsForOneClickWallets = (~list) => { } else { acc } - }, []) + }) }, (areOneClickWalletsRendered, list)) } @@ -58,7 +58,7 @@ let useMessageGetter = () => { ~paymentMethod, ~list: PaymentMethodsRecord.list, ) => { - let surchargeValue = surchargeDetails.displayTotalSurchargeAmount->Js.Float.toString + let surchargeValue = surchargeDetails.displayTotalSurchargeAmount->Float.toString let localeStrForSurcharge = if paymentMethod === "card" { localeString.surchargeMsgAmountForCard(list.currency, surchargeValue) @@ -78,9 +78,9 @@ let useOneClickWalletsMessageGetter = (~list) => { let oneClickWalletsArr = useSurchargeDetailsForOneClickWallets(~list) let getOneClickWalletsMessage = () => { - if oneClickWalletsArr->Js.Array2.length !== 0 { - let msg = oneClickWalletsArr->Js.Array2.reducei((acc, wallet, index) => { - let amount = wallet.surchargeDetails.displayTotalSurchargeAmount->Js.Float.toString + if oneClickWalletsArr->Array.length !== 0 { + let msg = oneClickWalletsArr->Array.reduceWithIndex(React.null, (acc, wallet, index) => { + let amount = wallet.surchargeDetails.displayTotalSurchargeAmount->Float.toString let myMsg = <> {React.string(`${list.currency} ${amount}`)} @@ -103,7 +103,7 @@ let useOneClickWalletsMessageGetter = (~list) => { {acc} {msgToConcat} - }, React.null) + }) let finalElement = <> {React.string(`${localeString.surchargeMsgAmountForOneClickWallets}:${Utils.nbsp}`)} diff --git a/src/Hooks/CommonHooks.res b/src/Hooks/CommonHooks.res index 228df4b5..99dc8156 100644 --- a/src/Hooks/CommonHooks.res +++ b/src/Hooks/CommonHooks.res @@ -15,7 +15,7 @@ type keys = { parentURL: string, sdkHandleOneClickConfirmPayment: bool, } -@val @scope("document") external querySelector: string => Js.Nullable.t = "querySelector" +@val @scope("document") external querySelector: string => Nullable.t = "querySelector" type event = {\"type": string} @val @scope("document") external createElement: string => element = "createElement" @@ -28,7 +28,7 @@ external addEventListener: (element, string, event => unit) => unit = "addEventL @send external removeEventListener: (element, string, event => unit) => unit = "removeEventListener" -external dictToObj: Js.Dict.t<'a> => {..} = "%identity" +external dictToObj: Dict.t<'a> => {..} = "%identity" let useScript = (src: string) => { let (status, setStatus) = React.useState(_ => src != "" ? "loading" : "idle") @@ -37,7 +37,7 @@ let useScript = (src: string) => { setStatus(_ => "idle") } let script = querySelector(`script[src="${src}"]`) - switch script->Js.Nullable.toOption { + switch script->Nullable.toOption { | Some(dom) => setStatus(_ => dom.getAttribute(. "data-status")) None @@ -66,8 +66,8 @@ let useScript = (src: string) => { let updateKeys = (dict, keyPair, setKeys) => { let (key, value) = keyPair - let valueStr = value->Js.Json.decodeString->Belt.Option.getWithDefault("") - let valueBool = default => value->Js.Json.decodeBoolean->Belt.Option.getWithDefault(default) + let valueStr = value->JSON.Decode.string->Option.getOr("") + let valueBool = default => value->JSON.Decode.bool->Option.getOr(default) if dict->Utils.getDictIsSome(key) { switch key { | "iframeId" => diff --git a/src/Hooks/OutsideClick.res b/src/Hooks/OutsideClick.res index fe5b59b6..03ccb298 100644 --- a/src/Hooks/OutsideClick.res +++ b/src/Hooks/OutsideClick.res @@ -2,12 +2,12 @@ external ffToDomType: {..} => Dom.node_like<'a> = "%identity" @send external contains: (Dom.element, {..}) => bool = "contains" type ref = - | ArrayOfRef(array>>) - | RefArray(React.ref>>) + | ArrayOfRef(array>>) + | RefArray(React.ref>>) let useOutsideClick = ( ~refs: ref, - ~containerRefs: option>>=?, + ~containerRefs: option>>=?, ~isActive, ~events=["click"], ~callback, @@ -33,28 +33,28 @@ let useOutsideClick = ( let isInsideClick = switch refs { | ArrayOfRef(refs) => - refs->Js.Array2.reduce((acc, ref: React.ref>) => { - let isClickInsideRef = switch ref.current->Js.Nullable.toOption { + refs->Array.reduce(false, (acc, ref: React.ref>) => { + let isClickInsideRef = switch ref.current->Nullable.toOption { | Some(element) => element->contains(targ) | None => false } acc || isClickInsideRef - }, false) + }) | RefArray(refs) => refs.current - ->Js.Array2.slice(~start=0, ~end_=-1) - ->Js.Array2.reduce((acc, ref: Js.Nullable.t) => { - let isClickInsideRef = switch ref->Js.Nullable.toOption { + ->Array.slice(~start=0, ~end=-1) + ->Array.reduce(false, (acc, ref: Nullable.t) => { + let isClickInsideRef = switch ref->Nullable.toOption { | Some(element) => element->contains(targ) | None => false } acc || isClickInsideRef - }, false) + }) } let isClickInsideOfContainer = switch containerRefs { | Some(ref) => - switch ref.current->Js.Nullable.toOption { + switch ref.current->Nullable.toOption { | Some(element) => element->contains(targ) | None => false } @@ -66,7 +66,7 @@ let useOutsideClick = ( } } - Js.Global.setTimeout(() => { + setTimeout(() => { events->Array.forEach( event => { Window.addEventListener(event, handleClick) diff --git a/src/Hooks/PortalState.res b/src/Hooks/PortalState.res index 305f8203..6acd59c0 100644 --- a/src/Hooks/PortalState.res +++ b/src/Hooks/PortalState.res @@ -1 +1 @@ -let defaultDict: Js.Dict.t = Js.Dict.empty() +let defaultDict: Dict.t = Dict.make() diff --git a/src/Icon.res b/src/Icon.res index 430dca04..ccaa7ffa 100644 --- a/src/Icon.res +++ b/src/Icon.res @@ -18,8 +18,8 @@ let make = ( ?onClick style className={`fill-current ${otherClasses}`} - width={string_of_int(width) ++ "px"} - height={string_of_int(size) ++ "px"} + width={Int.toString(width) ++ "px"} + height={Int.toString(size) ++ "px"} transform={shouldMirrorIcon ? "scale(-1,1)" : ""}> diff --git a/src/LoaderController.res b/src/LoaderController.res index 0ca9ac8e..c996d34e 100644 --- a/src/LoaderController.res +++ b/src/LoaderController.res @@ -17,7 +17,7 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { let (divH, setDivH) = React.useState(_ => 0.0) let {showCardFormByDefault, paymentMethodOrder} = optionsPayment - let divRef = React.useRef(Js.Nullable.null) + let divRef = React.useRef(Nullable.null) let {config} = configAtom let {iframeId} = keys @@ -44,7 +44,7 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { (optionsPayment.defaultValues.billingDetails.address.postal_code, setUserAddressPincode), (optionsPayment.defaultValues.billingDetails.address.state, setUserAddressState), (optionsPayment.defaultValues.billingDetails.address.country, setUserAddressCountry), - ]->Js.Array2.forEach(val => { + ]->Array.forEach(val => { let (value, setValue) = val if value != "" { setValue(.prev => { @@ -122,8 +122,8 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { } React.useEffect0(() => { - handlePostMessage([("iframeMounted", true->Js.Json.boolean)]) - handlePostMessage([("applePayMounted", true->Js.Json.boolean)]) + handlePostMessage([("iframeMounted", true->JSON.Encode.bool)]) + handlePostMessage([("applePayMounted", true->JSON.Encode.bool)]) logger.setLogInitiated() let updatedState: PaymentType.loadType = switch paymentlist { | Loading => @@ -138,11 +138,7 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { logger.setLogInfo(~value="SemiLoaded", ~eventName=LOADER_CHANGED, ()) } | LoadError(x) => - logger.setLogError( - ~value="LoadError: " ++ x->Js.Json.stringify, - ~eventName=LOADER_CHANGED, - (), - ) + logger.setLogError(~value="LoadError: " ++ x->JSON.stringify, ~eventName=LOADER_CHANGED, ()) } Window.addEventListener("click", ev => handleOnClickPostMessage(~targetOrigin=keys.parentURL, ev) @@ -158,8 +154,8 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { React.useEffect1(() => { switch paymentlist { | SemiLoaded => () - | Loaded(_val) => handlePostMessage([("ready", true->Js.Json.boolean)]) - | _ => handlePostMessage([("ready", false->Js.Json.boolean)]) + | Loaded(_val) => handlePostMessage([("ready", true->JSON.Encode.bool)]) + | _ => handlePostMessage([("ready", false->JSON.Encode.bool)]) } None }, [paymentlist]) @@ -167,7 +163,7 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { React.useEffect1(() => { CardUtils.genreateFontsLink(config.fonts) let dict = config.appearance.rules->getDictFromJson - if dict->Js.Dict.entries->Js.Array2.length > 0 { + if dict->Dict.toArray->Array.length > 0 { Utils.generateStyleSheet("", dict, "themestyle") } switch paymentMode->CardTheme.getPaymentMode { @@ -180,9 +176,9 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { ("input-empty", options.style.empty->getDictFromJson), ] styleClass - ->Js.Array2.map(item => { + ->Array.map(item => { let (class, dict) = item - if dict->Js.Dict.entries->Js.Array2.length > 0 { + if dict->Dict.toArray->Array.length > 0 { Utils.generateStyleSheet(class, dict, "widgetstyle")->ignore } }) @@ -195,24 +191,21 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { open Promise let handleFun = (ev: Window.event) => { let json = try { - ev.data->Js.Json.parseExn + ev.data->JSON.parseExn } catch { - | _ => Js.Dict.empty()->Js.Json.object_ + | _ => Dict.make()->JSON.Encode.object } try { let dict = json->getDictFromJson if dict->getDictIsSome("paymentElementCreate") { if ( dict - ->Js.Dict.get("paymentElementCreate") - ->Belt.Option.flatMap(Js.Json.decodeBoolean) - ->Belt.Option.getWithDefault(false) + ->Dict.get("paymentElementCreate") + ->Option.flatMap(JSON.Decode.bool) + ->Option.getOr(false) ) { if ( - dict - ->Js.Dict.get("otherElements") - ->Belt.Option.flatMap(Js.Json.decodeBoolean) - ->Belt.Option.getWithDefault(false) + dict->Dict.get("otherElements")->Option.flatMap(JSON.Decode.bool)->Option.getOr(false) ) { updateOptions(dict) } else { @@ -267,11 +260,11 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { logger.setLogInfo(~value=Window.href, ~eventName=APP_RENDERED, ()) [ - ("iframeId", "no-element"->Js.Json.string), - ("publishableKey", ""->Js.Json.string), - ("parentURL", "*"->Js.Json.string), - ("sdkHandleOneClickConfirmPayment", true->Js.Json.boolean), - ]->Js.Array2.forEach(keyPair => { + ("iframeId", "no-element"->JSON.Encode.string), + ("publishableKey", ""->JSON.Encode.string), + ("parentURL", "*"->JSON.Encode.string), + ("sdkHandleOneClickConfirmPayment", true->JSON.Encode.bool), + ]->Array.forEach(keyPair => { dict->CommonHooks.updateKeys(keyPair, setKeys) }) @@ -306,18 +299,18 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { updateOptions(dict) } else if dict->getDictIsSome("ElementsUpdate") { let optionsDict = dict->getDictFromObj("options") - let clientSecret = dict->Js.Dict.get("clientSecret") + let clientSecret = dict->Dict.get("clientSecret") switch clientSecret { | Some(val) => setKeys(.prev => { ...prev, - clientSecret: Some(val->Js.Json.decodeString->Belt.Option.getWithDefault("")), + clientSecret: Some(val->JSON.Decode.string->Option.getOr("")), }) setConfig(.prev => { ...prev, config: { ...prev.config, - clientSecret: val->Js.Json.decodeString->Belt.Option.getWithDefault(""), + clientSecret: val->JSON.Decode.string->Option.getOr(""), }, }) | None => () @@ -342,32 +335,26 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { } if dict->getDictIsSome("isReadyToPay") { setIsGooglePayReady(._ => - dict - ->getJsonObjectFromDict("isReadyToPay") - ->Js.Json.decodeBoolean - ->Belt.Option.getWithDefault(false) + dict->getJsonObjectFromDict("isReadyToPay")->JSON.Decode.bool->Option.getOr(false) ) } if dict->getDictIsSome("paymentMethodList") { let list = dict->getJsonObjectFromDict("paymentMethodList") let updatedState: PaymentType.loadType = - list == Js.Dict.empty()->Js.Json.object_ + list == Dict.make()->JSON.Encode.object ? LoadError(list) - : switch list->Utils.getDictFromJson->Js.Dict.get("error") { + : switch list->Utils.getDictFromJson->Dict.get("error") { | Some(_) => LoadError(list) | None => let isNonEmptyPaymentMethodList = - list - ->Utils.getDictFromJson - ->Utils.getArray("payment_methods") - ->Js.Array2.length > 0 + list->Utils.getDictFromJson->Utils.getArray("payment_methods")->Array.length > 0 isNonEmptyPaymentMethodList ? Loaded(list) : LoadError(list) } switch updatedState { | Loaded(_) => logger.setLogInfo(~value="Loaded", ~eventName=LOADER_CHANGED, ()) | LoadError(x) => logger.setLogError( - ~value="LoadError: " ++ x->Js.Json.stringify, + ~value="LoadError: " ++ x->JSON.stringify, ~eventName=LOADER_CHANGED, (), ) @@ -382,10 +369,10 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { customerPaymentMethods, }) } - if dict->Js.Dict.get("applePayCanMakePayments")->Belt.Option.isSome { + if dict->Dict.get("applePayCanMakePayments")->Option.isSome { setIsApplePayReady(._ => true) } - if dict->Js.Dict.get("applePaySessionObjNotPresent")->Belt.Option.isSome { + if dict->Dict.get("applePaySessionObjNotPresent")->Option.isSome { setIsApplePayReady(.prev => prev && false) } } catch { @@ -397,20 +384,20 @@ let make = (~children, ~paymentMode, ~setIntegrateErrorError, ~logger) => { let observer = ResizeObserver.newResizerObserver(entries => { entries - ->Js.Array2.map(item => { + ->Array.map(item => { setDivH(_ => item.contentRect.height) }) ->ignore }) - switch divRef.current->Js.Nullable.toOption { + switch divRef.current->Nullable.toOption { | Some(r) => observer.observe(. r) | None => () } React.useEffect2(() => { Utils.handlePostMessage([ - ("iframeHeight", (divH +. 1.0)->Js.Json.number), - ("iframeId", iframeId->Js.Json.string), + ("iframeHeight", (divH +. 1.0)->JSON.Encode.float), + ("iframeId", iframeId->JSON.Encode.string), ]) None }, (divH, iframeId)) diff --git a/src/NoTheme.res b/src/NoTheme.res index 674b7003..cc543b9c 100644 --- a/src/NoTheme.res +++ b/src/NoTheme.res @@ -49,7 +49,7 @@ let nakedValues = { buttonTextFontWeight: "500", } -let nakedValuesRules = _ => Js.Dict.empty()->Js.Json.object_ +let nakedValuesRules = _ => Dict.make()->JSON.Encode.object let default = nakedValues let defaultRules = nakedValuesRules diff --git a/src/Payment.res b/src/Payment.res index 230f0fc5..c7f22cc3 100644 --- a/src/Payment.res +++ b/src/Payment.res @@ -35,10 +35,10 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let intent = PaymentHelpers.usePaymentIntent(Some(logger), Card) - let cardRef = React.useRef(Js.Nullable.null) - let expiryRef = React.useRef(Js.Nullable.null) - let cvcRef = React.useRef(Js.Nullable.null) - let zipRef = React.useRef(Js.Nullable.null) + let cardRef = React.useRef(Nullable.null) + let expiryRef = React.useRef(Nullable.null) + let cvcRef = React.useRef(Nullable.null) + let zipRef = React.useRef(Nullable.null) let (isCardValid, setIsCardValid) = React.useState(_ => None) let (isExpiryValid, setIsExpiryValid) = React.useState(_ => None) @@ -66,8 +66,8 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let obj = getobjFromCardPattern(cardBrand) let cvcLength = obj.maxCVCLenth if ( - cvcNumberInRange(cvcNumber, cardBrand)->Js.Array2.includes(true) && - cvcNumber->Js.String2.length == cvcLength + cvcNumberInRange(cvcNumber, cardBrand)->Array.includes(true) && + cvcNumber->String.length == cvcLength ) { blurRef(cvcRef) } @@ -100,9 +100,9 @@ let make = (~paymentMode, ~integrateError, ~logger) => { if cardValid(clearValue, cardBrand) { handleInputFocus(~currentRef=cardRef, ~destinationRef=expiryRef) } - if card->Js.String2.length > 6 && cardNumber->pincodeVisibility { + if card->String.length > 6 && cardNumber->pincodeVisibility { setDisplayPincode(_ => true) - } else if card->Js.String2.length < 8 { + } else if card->String.length < 8 { setDisplayPincode(_ => false) } setCardNumber(_ => card) @@ -124,11 +124,11 @@ let make = (~paymentMode, ~integrateError, ~logger) => { logInputChangeInfo("cardCVC", logger) let cvc = val->formatCVCNumber(cardBrand) setCvcNumber(_ => cvc) - if cvc->Js.String2.length > 0 && cvcNumberInRange(cvc, cardBrand)->Js.Array2.includes(true) { - zipRef.current->Js.Nullable.toOption->Belt.Option.forEach(input => input->focus)->ignore + if cvc->String.length > 0 && cvcNumberInRange(cvc, cardBrand)->Array.includes(true) { + zipRef.current->Nullable.toOption->Option.forEach(input => input->focus)->ignore } - if cvc->Js.String2.length > 0 && cvcNumberInRange(cvc, cardBrand)->Js.Array2.includes(true) { + if cvc->String.length > 0 && cvcNumberInRange(cvc, cardBrand)->Array.includes(true) { setIsCVCValid(_ => Some(true)) } else { setIsCVCValid(_ => None) @@ -139,7 +139,7 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let val = ReactEvent.Form.target(ev)["value"] logInputChangeInfo("zipCode", logger) let regex = postalRegex(postalCodes, ()) - if regex !== "" && Js.Re.test_(regex->Js.Re.fromString, val) { + if regex !== "" && RegExp.test(regex->RegExp.fromString, val) { blurRef(zipRef) } setZipCode(_ => val) @@ -157,9 +157,9 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let handleCardBlur = ev => { let cardNumber = ReactEvent.Focus.target(ev)["value"] - if cardNumberInRange(cardNumber)->Js.Array2.includes(true) && calculateLuhn(cardNumber) { + if cardNumberInRange(cardNumber)->Array.includes(true) && calculateLuhn(cardNumber) { setIsCardValid(_ => Some(true)) - } else if cardNumber->Js.String2.length == 0 { + } else if cardNumber->String.length == 0 { setIsCardValid(_ => None) } else { setIsCardValid(_ => Some(false)) @@ -174,9 +174,9 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let handleExpiryBlur = ev => { let cardExpiry = ReactEvent.Focus.target(ev)["value"] - if cardExpiry->Js.String2.length > 0 && getExpiryValidity(cardExpiry) { + if cardExpiry->String.length > 0 && getExpiryValidity(cardExpiry) { setIsExpiryValid(_ => Some(true)) - } else if cardExpiry->Js.String2.length == 0 { + } else if cardExpiry->String.length == 0 { setIsExpiryValid(_ => None) } else { setIsExpiryValid(_ => Some(false)) @@ -186,11 +186,10 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let handleCVCBlur = ev => { let cvcNumber = ReactEvent.Focus.target(ev)["value"] if ( - cvcNumber->Js.String2.length > 0 && - cvcNumberInRange(cvcNumber, cardBrand)->Js.Array2.includes(true) + cvcNumber->String.length > 0 && cvcNumberInRange(cvcNumber, cardBrand)->Array.includes(true) ) { setIsCVCValid(_ => Some(true)) - } else if cvcNumber->Js.String2.length == 0 { + } else if cvcNumber->String.length == 0 { setIsCVCValid(_ => None) } else { setIsCVCValid(_ => Some(false)) @@ -200,9 +199,9 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let handleZipBlur = ev => { let zipCode = ReactEvent.Focus.target(ev)["value"] let regex = postalRegex(postalCodes, ()) - if Js.Re.test_(regex->Js.Re.fromString, zipCode) || regex == "" { + if RegExp.test(regex->RegExp.fromString, zipCode) || regex == "" { setIsZipValid(_ => Some(true)) - } else if zipCode->Js.String2.length == 0 { + } else if zipCode->String.length == 0 { setIsZipValid(_ => None) } else { setIsZipValid(_ => Some(false)) @@ -224,18 +223,18 @@ let make = (~paymentMode, ~integrateError, ~logger) => { let submitValue = (_ev, confirmParam) => { let validFormat = switch paymentMode->getPaymentMode { | Card => - isCardValid->Belt.Option.getWithDefault(false) && - isExpiryValid->Belt.Option.getWithDefault(false) && - isCVCValid->Belt.Option.getWithDefault(false) + isCardValid->Option.getOr(false) && + isExpiryValid->Option.getOr(false) && + isCVCValid->Option.getOr(false) | CardNumberElement => - isCardValid->Belt.Option.getWithDefault(false) && + isCardValid->Option.getOr(false) && checkCardCVC(getCardElementValue(iframeId, "card-cvc"), cardBrand) && checkCardExpiry(getCardElementValue(iframeId, "card-expiry")) | _ => true } let cardNetwork = { if cardBrand != "" { - [("card_network", cardNumber->CardUtils.getCardBrand->Js.Json.string)] + [("card_network", cardNumber->CardUtils.getCardBrand->JSON.Encode.string)] } else { [] } @@ -299,18 +298,18 @@ let make = (~paymentMode, ~integrateError, ~logger) => { React.useEffect0(() => { let handleFun = (ev: Window.event) => { let json = try { - ev.data->Js.Json.parseExn + ev.data->JSON.parseExn } catch { - | _ => Js.Dict.empty()->Js.Json.object_ + | _ => Dict.make()->JSON.Encode.object } let dict = json->Utils.getDictFromJson - if dict->Js.Dict.get("doBlur")->Belt.Option.isSome { + if dict->Dict.get("doBlur")->Option.isSome { logger.setLogInfo(~value="doBlur Triggered", ~eventName=BLUR, ()) setBlurState(_ => true) - } else if dict->Js.Dict.get("doFocus")->Belt.Option.isSome { + } else if dict->Dict.get("doFocus")->Option.isSome { logger.setLogInfo(~value="doFocus Triggered", ~eventName=FOCUS, ()) - cardRef.current->Js.Nullable.toOption->Belt.Option.forEach(input => input->focus)->ignore - } else if dict->Js.Dict.get("doClearValues")->Belt.Option.isSome { + cardRef.current->Nullable.toOption->Option.forEach(input => input->focus)->ignore + } else if dict->Dict.get("doClearValues")->Option.isSome { logger.setLogInfo(~value="doClearValues Triggered", ~eventName=CLEAR, ()) //clear all values setCardNumber(_ => "") @@ -329,7 +328,7 @@ let make = (~paymentMode, ~integrateError, ~logger) => { React.useEffect6(() => { let handleDoSubmit = (ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let jsonDict = json->Utils.getDictFromJson let confirm = jsonDict->ConfirmType.itemToObjMapper if confirm.doSubmit { diff --git a/src/PaymentElement.res b/src/PaymentElement.res index ec3b4121..c9b13df5 100644 --- a/src/PaymentElement.res +++ b/src/PaymentElement.res @@ -27,7 +27,7 @@ let make = ( let isGooglePayReady = Recoil.useRecoilValueFromAtom(isGooglePayReady) let methodslist = Recoil.useRecoilValueFromAtom(list) let paymentOrder = paymentMethodOrder->Utils.getOptionalArr->Utils.removeDuplicate - let (sessions, setSessions) = React.useState(_ => Js.Dict.empty()->Js.Json.object_) + let (sessions, setSessions) = React.useState(_ => Dict.make()->JSON.Encode.object) let (paymentOptions, setPaymentOptions) = React.useState(_ => []) let (walletOptions, setWalletOptions) = React.useState(_ => []) let {sdkHandleConfirmPayment} = Recoil.useRecoilValueFromAtom(optionAtom) @@ -58,26 +58,25 @@ let make = ( | (_, LoadingSavedCards) => () | (_, LoadedSavedCards(savedPaymentMethods, isGuestCustomer)) => { let defaultPaymentMethod = - savedPaymentMethods->Js.Array2.find(savedCard => savedCard.defaultPaymentMethodSet) + savedPaymentMethods->Array.find(savedCard => savedCard.defaultPaymentMethodSet) - let savedCardsWithoutDefaultPaymentMethod = - savedPaymentMethods->Js.Array2.filter(savedCard => { - !savedCard.defaultPaymentMethodSet - }) + let savedCardsWithoutDefaultPaymentMethod = savedPaymentMethods->Array.filter(savedCard => { + !savedCard.defaultPaymentMethodSet + }) let finalSavedPaymentMethods = switch defaultPaymentMethod { | Some(defaultPaymentMethod) => - [defaultPaymentMethod]->Js.Array2.concat(savedCardsWithoutDefaultPaymentMethod) + [defaultPaymentMethod]->Array.concat(savedCardsWithoutDefaultPaymentMethod) | None => savedCardsWithoutDefaultPaymentMethod } setSavedMethods(_ => finalSavedPaymentMethods) setLoadSavedCards(_ => - finalSavedPaymentMethods->Js.Array2.length == 0 + finalSavedPaymentMethods->Array.length == 0 ? NoResult(isGuestCustomer) : LoadedSavedCards(finalSavedPaymentMethods, isGuestCustomer) ) - setShowFields(.prev => finalSavedPaymentMethods->Js.Array2.length == 0 || prev) + setShowFields(.prev => finalSavedPaymentMethods->Array.length == 0 || prev) } | (_, NoResult(isGuestCustomer)) => { setLoadSavedCards(_ => NoResult(isGuestCustomer)) @@ -90,14 +89,13 @@ let make = ( React.useEffect1(() => { let defaultPaymentMethod = - savedMethods->Js.Array2.find(savedMethod => savedMethod.defaultPaymentMethodSet) + savedMethods->Array.find(savedMethod => savedMethod.defaultPaymentMethodSet) - let isSavedMethodsEmpty = savedMethods->Js.Array2.length === 0 + let isSavedMethodsEmpty = savedMethods->Array.length === 0 let tokenObj = switch (isSavedMethodsEmpty, defaultPaymentMethod) { | (false, Some(defaultPaymentMethod)) => Some(defaultPaymentMethod) - | (false, None) => - Some(savedMethods->Belt.Array.get(0)->Belt.Option.getWithDefault(defaultCustomerMethods)) + | (false, None) => Some(savedMethods->Array.get(0)->Option.getOr(defaultCustomerMethods)) | _ => None } @@ -124,7 +122,7 @@ let make = ( switch methodslist { | Loaded(paymentlist) => let paymentOrder = - paymentOrder->Js.Array2.length > 0 ? paymentOrder : PaymentModeType.defaultOrder + paymentOrder->Array.length > 0 ? paymentOrder : PaymentModeType.defaultOrder let plist = paymentlist->Utils.getDictFromJson->PaymentMethodsRecord.itemToObjMapper let (wallets, otherOptions) = plist->PaymentUtils.paymentListLookupNew( @@ -136,7 +134,7 @@ let make = ( ) ( wallets->Utils.removeDuplicate, - paymentOptions->Js.Array2.concat(otherOptions)->Utils.removeDuplicate, + paymentOptions->Array.concat(otherOptions)->Utils.removeDuplicate, otherOptions, ) | SemiLoaded => @@ -165,7 +163,7 @@ let make = ( setWalletOptions(_ => walletList) setList(_ => plist) showCardFormByDefault - ? if !(actualList->Js.Array2.includes(selectedOption)) && selectedOption !== "" { + ? if !(actualList->Array.includes(selectedOption)) && selectedOption !== "" { ErrorUtils.manageErrorWarning( SDK_CONNECTOR_WARNING, ~dynamicStr="Please enable Card Payment in the dashboard, or 'ShowCard.FormByDefault' to false.", @@ -175,7 +173,7 @@ let make = ( } else if !Utils.checkPriorityList(paymentMethodOrder) { ErrorUtils.manageErrorWarning( SDK_CONNECTOR_WARNING, - ~dynamicStr=`'paymentMethodOrder' is ${Js.Array2.joinWith( + ~dynamicStr=`'paymentMethodOrder' is ${Array.joinWith( paymentMethodOrder->Utils.getOptionalArr, ", ", )} . Please enable Card Payment as 1st priority to show it as default.`, @@ -202,10 +200,10 @@ let make = ( }, [sessionsObj]) React.useEffect2(() => { let cardsCount: int = cardsToRender(cardsContainerWidth) - let cardOpts = Js.Array.slice(~start=0, ~end_=cardsCount, paymentOptions) - let dropOpts = Js.Array.sliceFrom(cardsCount, paymentOptions) - let isCard: bool = cardOpts->Js.Array2.includes(selectedOption) - if !isCard && selectedOption !== "" && paymentOptions->Js.Array2.includes(selectedOption) { + let cardOpts = Array.slice(~start=0, ~end=cardsCount, paymentOptions) + let dropOpts = paymentOptions->Array.sliceToEnd(~start=cardsCount) + let isCard: bool = cardOpts->Array.includes(selectedOption) + if !isCard && selectedOption !== "" && paymentOptions->Array.includes(selectedOption) { let (cardArr, dropdownArr) = CardUtils.swapCardOption(cardOpts, dropOpts, selectedOption) setCardOptions(_ => cardArr) setDropDownOptions(_ => dropdownArr) @@ -219,7 +217,7 @@ let make = ( cardsToRender(cardsContainerWidth) }, [cardsContainerWidth]) let submitCallback = React.useCallback1((ev: Window.event) => { - let json = ev.data->Js.Json.parseExn + let json = ev.data->JSON.parseExn let confirm = json->Utils.getDictFromJson->ConfirmType.itemToObjMapper if confirm.doSubmit && selectedOption == "" { Utils.postFailedSubmitResponse( @@ -240,17 +238,17 @@ let make = ( | LoadError(_) => showCardFormByDefault && Utils.checkPriorityList(paymentMethodOrder) ? "card" : "" | Loaded(_) => - paymentOptions->Js.Array2.includes(selectedOption) && showCardFormByDefault + paymentOptions->Array.includes(selectedOption) && showCardFormByDefault ? selectedOption - : paymentOptions->Belt.Array.get(0)->Belt.Option.getWithDefault("") - | _ => paymentOptions->Belt.Array.get(0)->Belt.Option.getWithDefault("") + : paymentOptions->Array.get(0)->Option.getOr("") + | _ => paymentOptions->Array.get(0)->Option.getOr("") } ) None }, (layoutClass.defaultCollapsed, paymentOptions, methodslist, selectedOption)) React.useEffect1(() => { if layoutClass.\"type" == Tabs { - let isCard: bool = cardOptions->Js.Array2.includes(selectedOption) + let isCard: bool = cardOptions->Array.includes(selectedOption) if !isCard { let (cardArr, dropdownArr) = CardUtils.swapCardOption( cardOptions, @@ -265,14 +263,14 @@ let make = ( loggerState.setLogInfo( ~value="", ~eventName=PAYMENT_METHOD_CHANGED, - ~paymentMethod=selectedOption->Js.String2.toUpperCase, + ~paymentMethod=selectedOption->String.toUpperCase, (), ) } None }, [selectedOption]) let checkRenderOrComp = () => { - walletOptions->Js.Array2.includes("paypal") || isShowOrPayUsing + walletOptions->Array.includes("paypal") || isShowOrPayUsing } let dict = sessions->Utils.getDictFromJson let sessionObj = SessionsType.itemToObjMapper(dict, Others) @@ -415,15 +413,15 @@ let make = ( /> Js.Array2.length > 0 || walletOptions->Js.Array2.length > 0) && + condition={(paymentOptions->Array.length > 0 || walletOptions->Array.length > 0) && showFields}>
Js.Array2.length > 0 && - walletOptions->Js.Array2.length > 0 && + condition={paymentOptions->Array.length > 0 && + walletOptions->Array.length > 0 && checkRenderOrComp()}> @@ -452,8 +450,7 @@ let make = ( {switch methodslist { | LoadError(_) => React.null | _ => - Js.Array2.length == 0 && walletOptions->Js.Array2.length == 0}> + Array.length == 0 && walletOptions->Array.length == 0}> }} diff --git a/src/PaymentElementRenderer.res b/src/PaymentElementRenderer.res index 1fb27f55..df02ca75 100644 --- a/src/PaymentElementRenderer.res +++ b/src/PaymentElementRenderer.res @@ -5,7 +5,7 @@ let make = ( ~cardProps: CardUtils.cardProps, ~expiryProps: CardUtils.expiryProps, ~cvcProps: CardUtils.cvcProps, - ~countryProps: (string, Js.Array2.t), + ~countryProps: (string, array), ) => { let _cardsToRender = width => { (width - 40) / 110 diff --git a/src/PaymentElementRenderer.resi b/src/PaymentElementRenderer.resi index 331e60a6..0b212b40 100644 --- a/src/PaymentElementRenderer.resi +++ b/src/PaymentElementRenderer.resi @@ -4,5 +4,5 @@ let default: ( ~cardProps: CardUtils.cardProps, ~expiryProps: CardUtils.expiryProps, ~cvcProps: CardUtils.cvcProps, - ~countryProps: (string, Js.Array2.t), + ~countryProps: (string, array), ) => React.element diff --git a/src/PaymentElementRendererLazy.res b/src/PaymentElementRendererLazy.res index 673c9aa6..0c679471 100644 --- a/src/PaymentElementRendererLazy.res +++ b/src/PaymentElementRendererLazy.res @@ -5,7 +5,7 @@ type props = { cardProps: CardUtils.cardProps, expiryProps: CardUtils.expiryProps, cvcProps: CardUtils.cvcProps, - countryProps: (string, Js.Array2.t), + countryProps: (string, array), } let make: props => React.element = reactLazy(.() => import_("./PaymentElementRenderer.bs.js")) diff --git a/src/PaymentOptions.res b/src/PaymentOptions.res index 9949c2a4..6f2d7ee0 100644 --- a/src/PaymentOptions.res +++ b/src/PaymentOptions.res @@ -8,8 +8,8 @@ module TabLoader = { open PaymentElementShimmer switch list { | SemiLoaded => - Belt.Array.make(cardShimmerCount - 1, "") - ->Js.Array2.mapi((_, i) => { + Array.make(~length=cardShimmerCount - 1, "") + ->Array.mapWithIndex((_, i) => {
Belt.Int.toString} @@ -51,14 +51,14 @@ let make = ( ) => { let {themeObj, localeString} = Recoil.useRecoilValueFromAtom(configAtom) let {readOnly, customMethodNames} = Recoil.useRecoilValueFromAtom(optionAtom) - let payOptionsRef = React.useRef(Js.Nullable.null) - let selectRef = React.useRef(Js.Nullable.null) + let payOptionsRef = React.useRef(Nullable.null) + let selectRef = React.useRef(Nullable.null) let (winW, winH) = Utils.useWindowSize() let (selectedOption, setSelectedOption) = Recoil.useRecoilState(selectedOptionAtom) let (moreIconIndex, setMoreIconIndex) = React.useState(_ => 0) let (toggleIconElement, setToggleIconElement) = React.useState(_ => false) React.useEffect2(() => { - let width = switch payOptionsRef.current->Js.Nullable.toOption { + let width = switch payOptionsRef.current->Nullable.toOption { | Some(ref) => ref->Window.Element.clientWidth | None => 0 } @@ -78,16 +78,15 @@ let make = ( let dropDownOptionsDetails = dropDownOptions->PaymentMethodsRecord.getPaymentDetails let selectedPaymentOption = PaymentMethodsRecord.paymentMethodsFields - ->Js.Array2.find(item => item.paymentMethodName == selectedOption) - ->Belt.Option.getWithDefault(PaymentMethodsRecord.defaultPaymentMethodFields) + ->Array.find(item => item.paymentMethodName == selectedOption) + ->Option.getOr(PaymentMethodsRecord.defaultPaymentMethodFields) React.useEffect1(() => { - let intervalId = Js.Global.setInterval(() => { - if dropDownOptionsDetails->Belt.Array.length > 1 { - setMoreIconIndex(prev => mod(prev + 1, dropDownOptionsDetails->Belt.Array.length)) - + let intervalId = setInterval(() => { + if dropDownOptionsDetails->Array.length > 1 { + setMoreIconIndex(prev => mod(prev + 1, dropDownOptionsDetails->Array.length)) setToggleIconElement(_ => true) - Js.Global.setTimeout( + setTimeout( () => { setToggleIconElement(_ => false) }, @@ -98,7 +97,7 @@ let make = ( Some( () => { - Js.Global.clearInterval(intervalId) + clearInterval(intervalId) }, ) }, [dropDownOptionsDetails]) @@ -119,16 +118,16 @@ let make = ( (), )}> {cardOptionDetails - ->Js.Array2.mapi((payOption, i) => { + ->Array.mapWithIndex((payOption, i) => { let isActive = payOption.paymentMethodName == selectedOption Belt.Int.toString} paymentOption=payOption isActive /> }) ->React.array} - Js.Array2.length > 0}> + Array.length > 0}>
- {switch dropDownOptionsDetails->Belt.Array.get(moreIconIndex) { + {switch dropDownOptionsDetails->Array.get(moreIconIndex) { | Some(paymentFieldsInfo) => switch paymentFieldsInfo.miniIcon { | Some(ele) => displayIcon(ele) @@ -175,9 +174,9 @@ let make = ( )} {dropDownOptionsDetails - ->Js.Array2.mapi((item, i) => { + ->Array.mapWithIndex((item, i) => {