@bigbinary/neeto-molecules 5.1.19 → 5.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/FinderModal.js +56 -9
  2. package/dist/FinderModal.js.map +1 -1
  3. package/dist/IpRestriction.js +2 -3175
  4. package/dist/IpRestriction.js.map +1 -1
  5. package/dist/MadeWith.js +3 -74
  6. package/dist/MadeWith.js.map +1 -1
  7. package/dist/NeetoWidget.js +3 -1958
  8. package/dist/NeetoWidget.js.map +1 -1
  9. package/dist/Onboarding.js +3 -400
  10. package/dist/Onboarding.js.map +1 -1
  11. package/dist/chevron-up-B2_LTx_h.js +15 -0
  12. package/dist/chevron-up-B2_LTx_h.js.map +1 -0
  13. package/dist/cjs/FinderModal.js +54 -7
  14. package/dist/cjs/FinderModal.js.map +1 -1
  15. package/dist/cjs/IpRestriction.js +21 -3194
  16. package/dist/cjs/IpRestriction.js.map +1 -1
  17. package/dist/cjs/MadeWith.js +17 -88
  18. package/dist/cjs/MadeWith.js.map +1 -1
  19. package/dist/cjs/NeetoWidget.js +4 -1959
  20. package/dist/cjs/NeetoWidget.js.map +1 -1
  21. package/dist/cjs/Onboarding.js +3 -400
  22. package/dist/cjs/Onboarding.js.map +1 -1
  23. package/dist/cjs/chevron-up-CpzhFWzM.js +17 -0
  24. package/dist/cjs/chevron-up-CpzhFWzM.js.map +1 -0
  25. package/dist/cjs/copy-CerjTcLL.js +20 -0
  26. package/dist/cjs/copy-CerjTcLL.js.map +1 -0
  27. package/dist/cjs/globe-DawgK2Dx.js +21 -0
  28. package/dist/cjs/globe-DawgK2Dx.js.map +1 -0
  29. package/dist/cjs/index-ARGXqXxG.js +78 -0
  30. package/dist/cjs/index-ARGXqXxG.js.map +1 -0
  31. package/dist/cjs/index-BeqE2JWC.js +3180 -0
  32. package/dist/cjs/index-BeqE2JWC.js.map +1 -0
  33. package/dist/cjs/panel-left-close-CLoRPBWH.js +21 -0
  34. package/dist/cjs/panel-left-close-CLoRPBWH.js.map +1 -0
  35. package/dist/cjs/phone-number-Bza7WGZm.js +315 -0
  36. package/dist/cjs/phone-number-Bza7WGZm.js.map +1 -0
  37. package/dist/cjs/prism-tomorrow-BMFuJ5o1.js +1963 -0
  38. package/dist/cjs/prism-tomorrow-BMFuJ5o1.js.map +1 -0
  39. package/dist/cjs/react-confetti-DdGoyZ0y.js +405 -0
  40. package/dist/cjs/react-confetti-DdGoyZ0y.js.map +1 -0
  41. package/dist/cjs/smartphone-ChvEvl-o.js +36 -0
  42. package/dist/cjs/smartphone-ChvEvl-o.js.map +1 -0
  43. package/dist/cjs/trash-2-CotPjU5n.js +23 -0
  44. package/dist/cjs/trash-2-CotPjU5n.js.map +1 -0
  45. package/dist/cjs/triangle-alert-De-qkUXK.js +27 -0
  46. package/dist/cjs/triangle-alert-De-qkUXK.js.map +1 -0
  47. package/dist/cjs/v2/AuditLogs.js +4 -18
  48. package/dist/cjs/v2/AuditLogs.js.map +1 -1
  49. package/dist/cjs/v2/Builder.js +4 -18
  50. package/dist/cjs/v2/Builder.js.map +1 -1
  51. package/dist/cjs/v2/Codeblock.js +1 -0
  52. package/dist/cjs/v2/Codeblock.js.map +1 -1
  53. package/dist/cjs/v2/CopyToClipboardButton.js +3 -16
  54. package/dist/cjs/v2/CopyToClipboardButton.js.map +1 -1
  55. package/dist/cjs/v2/FinderModal.js +48 -14
  56. package/dist/cjs/v2/FinderModal.js.map +1 -1
  57. package/dist/cjs/v2/FloatingActionMenu.js +1 -0
  58. package/dist/cjs/v2/FloatingActionMenu.js.map +1 -1
  59. package/dist/cjs/v2/Insights.js +344 -0
  60. package/dist/cjs/v2/Insights.js.map +1 -0
  61. package/dist/cjs/v2/IntegrationCard.js +222 -0
  62. package/dist/cjs/v2/IntegrationCard.js.map +1 -0
  63. package/dist/cjs/v2/IpRestriction.js +525 -0
  64. package/dist/cjs/v2/IpRestriction.js.map +1 -0
  65. package/dist/cjs/v2/MadeWith.js +73 -0
  66. package/dist/cjs/v2/MadeWith.js.map +1 -0
  67. package/dist/cjs/v2/Metadata.js +215 -0
  68. package/dist/cjs/v2/Metadata.js.map +1 -0
  69. package/dist/cjs/v2/NavigationHeader.js +1 -0
  70. package/dist/cjs/v2/NavigationHeader.js.map +1 -1
  71. package/dist/cjs/v2/NeetoWidget.js +855 -0
  72. package/dist/cjs/v2/NeetoWidget.js.map +1 -0
  73. package/dist/cjs/v2/Onboarding.js +323 -0
  74. package/dist/cjs/v2/Onboarding.js.map +1 -0
  75. package/dist/cjs/v2/OptionFields.js +1291 -0
  76. package/dist/cjs/v2/OptionFields.js.map +1 -0
  77. package/dist/cjs/v2/PhoneNumber.js +20 -307
  78. package/dist/cjs/v2/PhoneNumber.js.map +1 -1
  79. package/dist/cjs/v2/ProductEmbed.js +1870 -0
  80. package/dist/cjs/v2/ProductEmbed.js.map +1 -0
  81. package/dist/cjs/v2/PublishBlock.js +6 -22
  82. package/dist/cjs/v2/PublishBlock.js.map +1 -1
  83. package/dist/cjs/v2/PublishYourItem.js +60 -0
  84. package/dist/cjs/v2/PublishYourItem.js.map +1 -0
  85. package/dist/cjs/v2/ResponsiveDevicePicker.js +88 -0
  86. package/dist/cjs/v2/ResponsiveDevicePicker.js.map +1 -0
  87. package/dist/cjs/v2/SessionEnvironment.js +479 -0
  88. package/dist/cjs/v2/SessionEnvironment.js.map +1 -0
  89. package/dist/copy-DhbOoOav.js +18 -0
  90. package/dist/copy-DhbOoOav.js.map +1 -0
  91. package/dist/globe-rBiI1CjO.js +19 -0
  92. package/dist/globe-rBiI1CjO.js.map +1 -0
  93. package/dist/index-0jnA7dx6.js +3178 -0
  94. package/dist/index-0jnA7dx6.js.map +1 -0
  95. package/dist/index-DF5MKxql.js +76 -0
  96. package/dist/index-DF5MKxql.js.map +1 -0
  97. package/dist/panel-left-close-37jik3GB.js +19 -0
  98. package/dist/panel-left-close-37jik3GB.js.map +1 -0
  99. package/dist/phone-number-CGZtDB_n.js +291 -0
  100. package/dist/phone-number-CGZtDB_n.js.map +1 -0
  101. package/dist/prism-tomorrow-ZUb2Ikm9.js +1961 -0
  102. package/dist/prism-tomorrow-ZUb2Ikm9.js.map +1 -0
  103. package/dist/react-confetti-BnGq_LBE.js +403 -0
  104. package/dist/react-confetti-BnGq_LBE.js.map +1 -0
  105. package/dist/smartphone-B-jv1y8j.js +33 -0
  106. package/dist/smartphone-B-jv1y8j.js.map +1 -0
  107. package/dist/trash-2-N0F6K63L.js +21 -0
  108. package/dist/trash-2-N0F6K63L.js.map +1 -0
  109. package/dist/triangle-alert-Pkh6pc42.js +25 -0
  110. package/dist/triangle-alert-Pkh6pc42.js.map +1 -0
  111. package/dist/v2/AuditLogs.js +3 -17
  112. package/dist/v2/AuditLogs.js.map +1 -1
  113. package/dist/v2/Builder.js +3 -17
  114. package/dist/v2/Builder.js.map +1 -1
  115. package/dist/v2/Codeblock.js +1 -0
  116. package/dist/v2/Codeblock.js.map +1 -1
  117. package/dist/v2/CopyToClipboardButton.js +2 -15
  118. package/dist/v2/CopyToClipboardButton.js.map +1 -1
  119. package/dist/v2/FinderModal.js +49 -15
  120. package/dist/v2/FinderModal.js.map +1 -1
  121. package/dist/v2/FloatingActionMenu.js +1 -0
  122. package/dist/v2/FloatingActionMenu.js.map +1 -1
  123. package/dist/v2/Insights.js +342 -0
  124. package/dist/v2/Insights.js.map +1 -0
  125. package/dist/v2/IntegrationCard.js +220 -0
  126. package/dist/v2/IntegrationCard.js.map +1 -0
  127. package/dist/v2/IpRestriction.js +504 -0
  128. package/dist/v2/IpRestriction.js.map +1 -0
  129. package/dist/v2/MadeWith.js +52 -0
  130. package/dist/v2/MadeWith.js.map +1 -0
  131. package/dist/v2/Metadata.js +213 -0
  132. package/dist/v2/Metadata.js.map +1 -0
  133. package/dist/v2/NavigationHeader.js +1 -0
  134. package/dist/v2/NavigationHeader.js.map +1 -1
  135. package/dist/v2/NeetoWidget.js +834 -0
  136. package/dist/v2/NeetoWidget.js.map +1 -0
  137. package/dist/v2/Onboarding.js +321 -0
  138. package/dist/v2/Onboarding.js.map +1 -0
  139. package/dist/v2/OptionFields.js +1289 -0
  140. package/dist/v2/OptionFields.js.map +1 -0
  141. package/dist/v2/PhoneNumber.js +20 -287
  142. package/dist/v2/PhoneNumber.js.map +1 -1
  143. package/dist/v2/ProductEmbed.js +1868 -0
  144. package/dist/v2/ProductEmbed.js.map +1 -0
  145. package/dist/v2/PublishBlock.js +5 -21
  146. package/dist/v2/PublishBlock.js.map +1 -1
  147. package/dist/v2/PublishYourItem.js +58 -0
  148. package/dist/v2/PublishYourItem.js.map +1 -0
  149. package/dist/v2/ResponsiveDevicePicker.js +86 -0
  150. package/dist/v2/ResponsiveDevicePicker.js.map +1 -0
  151. package/dist/v2/SessionEnvironment.js +477 -0
  152. package/dist/v2/SessionEnvironment.js.map +1 -0
  153. package/package.json +3 -3
  154. package/types/v2/Insights.d.ts +69 -0
  155. package/types/v2/IntegrationCard.d.ts +30 -0
  156. package/types/v2/IpRestriction.d.ts +5 -0
  157. package/types/v2/MadeWith.d.ts +8 -0
  158. package/types/v2/Metadata.d.ts +26 -0
  159. package/types/v2/MobilePreviewHeader.d.ts +8 -0
  160. package/types/v2/NeetoWidget.d.ts +19 -0
  161. package/types/v2/Onboarding.d.ts +22 -0
  162. package/types/v2/OptionFields.d.ts +55 -0
  163. package/types/v2/ProductEmbed.d.ts +90 -0
  164. package/types/v2/PublishYourItem.d.ts +8 -0
  165. package/types/v2/ResponsiveDevicePicker.d.ts +11 -0
  166. package/types/v2/SessionEnvironment.d.ts +34 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationCard.js","sources":["../../../src/v2/components/IntegrationCard/Dropdown.jsx","../../../src/v2/components/IntegrationCard/Status.jsx","../../../src/v2/components/IntegrationCard/index.jsx"],"sourcesContent":["import { noop } from \"neetocist\";\nimport { isNotNil } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport MoreDropdown from \"../MoreDropdown\";\n\nconst Dropdown = ({\n customDropdown,\n handleManage = noop,\n hideDisconnect = false,\n onDisconnect = noop,\n}) => {\n const { t } = useTranslation();\n\n if (isNotNil(customDropdown)) {\n return <div onClick={e => e.stopPropagation()}>{customDropdown}</div>;\n }\n\n const isManageable = isNotNil(handleManage);\n\n if (!isManageable && hideDisconnect) {\n return null;\n }\n\n return (\n <div onClick={e => e.stopPropagation()}>\n <MoreDropdown\n menuItems={[\n {\n isVisible: isManageable,\n onClick: handleManage,\n label: t(\"neetoMolecules.integrationCard.manage\"),\n key: \"integration-card-manage-integration\",\n },\n {\n isVisible: !hideDisconnect,\n onClick: onDisconnect,\n label: t(\"neetoMolecules.integrationCard.disconnect\"),\n key: \"integration-card-manage-disconnection\",\n },\n ]}\n />\n </div>\n );\n};\n\nexport default Dropdown;\n","import { Badge } from \"@bigbinary/neeto-atoms\";\nimport { Check, TriangleAlert } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Status = ({ isExpired }) => {\n const { t } = useTranslation();\n\n const tagProps = isExpired\n ? {\n icon: TriangleAlert,\n label: t(\"neetoMolecules.integrationCard.tags.expired\"),\n variant: \"amber\",\n }\n : {\n icon: Check,\n label: t(\"neetoMolecules.integrationCard.tags.connected\"),\n variant: \"green\",\n };\n\n return (\n <Badge\n {...tagProps}\n data-testid=\"integration-status\"\n iconPosition=\"right\"\n />\n );\n};\n\nexport default Status;\n","import { Button, Spinner, Tooltip, Typography } from \"@bigbinary/neeto-atoms\";\nimport classnames from \"classnames\";\nimport { isNotEmpty, isPresent, noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isNotNil } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport Dropdown from \"./Dropdown\";\nimport Status from \"./Status\";\n\nconst IntegrationCard = ({\n icon: Icon,\n subIcons = [],\n label = \"\",\n description = \"\",\n className = \"\",\n onConnect = noop,\n onDisconnect = noop,\n onManage = undefined,\n isLoading = false,\n isConnected = false,\n isFailed = false,\n isExpired = false,\n disabled = false,\n hidden = false,\n hideDisconnect = false,\n onClick: onCardClick = undefined,\n tooltipProps = {},\n customDropdown = null,\n dataTestid = \"\",\n connectPath = \"\",\n connectUrl = \"\",\n children,\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n if (hidden) return null;\n\n const isCardClickable = isConnected && isNotNil(onCardClick);\n\n const cardProps = isCardClickable ? { onClick: onCardClick } : {};\n\n return (\n <Tooltip\n disabled={!disabled}\n position=\"top\"\n content={\n disabled &&\n t(\"neetoMolecules.integrationCard.tooltip.integrationNotAvailable\")\n }\n {...tooltipProps}\n >\n <div\n data-testid={isPresent(dataTestid) ? dataTestid : \"integration-card\"}\n className={classnames(\n \"border-border hover:border-ring focus:border-ring flex flex-col rounded-lg border p-6 no-underline shadow-xs transition-colors outline-none\",\n {\n \"hover:bg-muted cursor-not-allowed opacity-50\": disabled,\n \"cursor-pointer\": isCardClickable,\n },\n className\n )}\n {...cardProps}\n {...otherProps}\n >\n <div\n className=\"flex flex-grow justify-between\"\n data-testid=\"integration-tabs\"\n >\n <div className=\"flex min-w-0 flex-col justify-end\">\n <div className=\"relative mb-4 flex h-8\">\n {Icon && <Icon size={32} />}\n </div>\n <div className=\"my-auto\">\n <Typography\n className=\"mb-2\"\n data-testid=\"integration-card-label\"\n variant=\"h4\"\n weight=\"semibold\"\n >\n {label}\n </Typography>\n <Typography\n className=\"break-words\"\n data-testid={`${joinHyphenCase(label)}-integration-description`}\n variant=\"body2\"\n >\n {description}\n </Typography>\n {children}\n </div>\n </div>\n {isNotEmpty(subIcons) && (\n <div className=\"flex h-24 flex-col gap-2\">\n {subIcons.map((Icon, index) => (\n <Icon className=\"text-muted-foreground\" key={index} size={24} />\n ))}\n </div>\n )}\n </div>\n <div className=\"border-border mt-4 w-full border-t pt-2\">\n {isLoading ? (\n <div className=\"mt-3 flex items-center justify-start\">\n <Spinner />\n </div>\n ) : (\n <div className=\"flex h-8 items-center justify-between\">\n {isConnected && <Status {...{ isExpired }} />}\n {isFailed && (\n <Button\n className=\"text-warning\"\n data-testid=\"connect-button\"\n disabled={disabled || isLoading}\n href={connectUrl}\n label={t(\"neetoMolecules.integrationCard.tryAgain\")}\n to={connectPath}\n variant=\"link\"\n onClick={onConnect}\n />\n )}\n {!isConnected && !isFailed && (\n <Button\n data-testid=\"connect-button\"\n disabled={disabled || isLoading}\n href={connectUrl}\n label={t(\"neetoMolecules.integrationCard.connect\")}\n to={connectPath}\n variant=\"link\"\n onClick={onConnect}\n />\n )}\n {(isConnected || isFailed) && (\n <Dropdown\n {...{ customDropdown, hideDisconnect, onDisconnect }}\n handleManage={onManage}\n />\n )}\n </div>\n )}\n </div>\n </div>\n </Tooltip>\n );\n};\n\nIntegrationCard.propTypes = {\n /**\n * The icon component to be displayed on the card.\n */\n icon: PropTypes.elementType,\n /**\n * Array of sub-icons to be displayed on the card.\n */\n subIcons: PropTypes.arrayOf(PropTypes.elementType),\n /**\n * The label to be displayed on the card.\n */\n label: PropTypes.string,\n /**\n * The description of the card.\n */\n description: PropTypes.string,\n /**\n * Additional class names for styling the card.\n */\n className: PropTypes.string,\n /**\n * Handler function called when the integration is connected.\n */\n onConnect: PropTypes.func,\n /**\n * Handler function called when the manage dropdown is clicked.\n */\n onManage: PropTypes.func,\n /**\n * Handler function called when clicked on integration card.\n */\n onClick: PropTypes.func,\n /**\n * Handler function called when the disconnect dropdown is clicked.\n */\n onDisconnect: PropTypes.func,\n /**\n * Flag indicating if the integration is currently loading.\n */\n isLoading: PropTypes.bool,\n /**\n * Flag indicating if the integration is connected.\n */\n isConnected: PropTypes.bool,\n /**\n * Flag indicating if the integration has failed.\n */\n isFailed: PropTypes.bool,\n /**\n * Flag indicating if the integration has expired.\n */\n isExpired: PropTypes.bool,\n /**\n * Flag indicating if the integration is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Flag indicating if the card should be hidden.\n */\n hidden: PropTypes.bool,\n /**\n * Flag indicating if the disconnect button should be hidden.\n */\n hideDisconnect: PropTypes.bool,\n /**\n * Additional props for customizing the tooltip wrapper.\n */\n tooltipProps: PropTypes.object,\n /**\n * Custom dropdown component to be rendered.\n */\n customDropdown: PropTypes.element,\n /**\n * Additional children elements to be rendered within the card.\n */\n children: PropTypes.node,\n /**\n * Internal path to the integration connection page.\n */\n connectPath: PropTypes.string,\n /**\n * External path to the integration connection page.\n */\n connectUrl: PropTypes.string,\n};\n\nexport default IntegrationCard;\n"],"names":["Dropdown","_ref","customDropdown","_ref$handleManage","handleManage","noop","_ref$hideDisconnect","hideDisconnect","_ref$onDisconnect","onDisconnect","_useTranslation","useTranslation","t","isNotNil","_jsx","onClick","e","stopPropagation","children","isManageable","MoreDropdown","menuItems","isVisible","label","key","Status","isExpired","tagProps","icon","TriangleAlert","variant","Check","Badge","_objectSpread","iconPosition","IntegrationCard","Icon","_ref$subIcons","subIcons","_ref$label","_ref$description","description","_ref$className","className","_ref$onConnect","onConnect","_ref$onManage","onManage","undefined","_ref$isLoading","isLoading","_ref$isConnected","isConnected","_ref$isFailed","isFailed","_ref$isExpired","_ref$disabled","disabled","_ref$hidden","hidden","_ref$onClick","onCardClick","_ref$tooltipProps","tooltipProps","_ref$customDropdown","_ref$dataTestid","dataTestid","_ref$connectPath","connectPath","_ref$connectUrl","connectUrl","otherProps","_objectWithoutProperties","_excluded","isCardClickable","cardProps","Tooltip","position","content","_jsxs","isPresent","classnames","size","Typography","weight","concat","joinHyphenCase","isNotEmpty","map","index","Spinner","Button","href","to"],"mappings":"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"}
@@ -0,0 +1,525 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var React = require('react');
5
+ var neetoAtoms = require('@bigbinary/neeto-atoms');
6
+ var formik = require('@bigbinary/neeto-atoms/formik');
7
+ var classnames = require('classnames');
8
+ var reactI18next = require('react-i18next');
9
+ var formik$1 = require('formik');
10
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/v2/react-utils');
11
+ var i18next = require('i18next');
12
+ var yup = require('yup');
13
+ var index$1 = require('../index-BeqE2JWC.js');
14
+ var ramda = require('ramda');
15
+ var jsxRuntime = require('react/jsx-runtime');
16
+ var trash2 = require('../trash-2-CotPjU5n.js');
17
+ var plus = require('../plus-MoDFAiKt.js');
18
+ var reactQuery = require('@tanstack/react-query');
19
+ var axios = require('axios');
20
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
21
+ var useMutationWithInvalidation = require('@bigbinary/neeto-commons-frontend/v2/react-utils/useMutationWithInvalidation');
22
+ var v2_CardLayout = require('./CardLayout.js');
23
+ require('../_commonjsHelpers-BJu3ubxk.js');
24
+ require('../createLucideIcon-DBDhE7kE.js');
25
+ require('@bigbinary/neeto-cist');
26
+
27
+ function _interopNamespaceDefault(e) {
28
+ var n = Object.create(null);
29
+ if (e) {
30
+ Object.keys(e).forEach(function (k) {
31
+ if (k !== 'default') {
32
+ var d = Object.getOwnPropertyDescriptor(e, k);
33
+ Object.defineProperty(n, k, d.get ? d : {
34
+ enumerable: true,
35
+ get: function () { return e[k]; }
36
+ });
37
+ }
38
+ });
39
+ }
40
+ n.default = e;
41
+ return Object.freeze(n);
42
+ }
43
+
44
+ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
45
+
46
+ var isValidIPv4String = function isValidIPv4String(ip) {
47
+ return ramda.isNotNil(ip) && index$1.src.Validator.isValidIPv4String(ip)[0];
48
+ };
49
+ var isValidIPv6String = function isValidIPv6String(ip) {
50
+ return ramda.isNotNil(ip) && index$1.src.Validator.isValidIPv6String(ip)[0];
51
+ };
52
+ var isValidIpString = function isValidIpString(ip) {
53
+ return isValidIPv4String(ip) || isValidIPv6String(ip);
54
+ };
55
+ var areIpAddressesInSameFormat = function areIpAddressesInSameFormat(ipStart, ipEnd) {
56
+ return isValidIPv4String(ipStart) && isValidIPv4String(ipEnd) || isValidIPv6String(ipStart) && isValidIPv6String(ipEnd);
57
+ };
58
+ var isValidIPv4Range = function isValidIPv4Range(ipStart, ipEnd) {
59
+ var ipStartAddr = index$1.src.IPv4.fromDecimalDottedString(ipStart);
60
+ var ipEndAddr = index$1.src.IPv4.fromDecimalDottedString(ipEnd);
61
+ return ipStartAddr.isLessThanOrEquals(ipEndAddr);
62
+ };
63
+ var isValidIPv6Range = function isValidIPv6Range(ipStart, ipEnd) {
64
+ var ipStartAddr = index$1.src.IPv6.fromString(ipStart);
65
+ var ipEndAddr = index$1.src.IPv6.fromString(ipEnd);
66
+ return ipStartAddr.isLessThanOrEquals(ipEndAddr);
67
+ };
68
+ var isValidIPRange = function isValidIPRange(ipStart, ipEnd) {
69
+ if (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) {
70
+ return isValidIPv4Range(ipStart, ipEnd);
71
+ }
72
+ if (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd)) {
73
+ return isValidIPv6Range(ipStart, ipEnd);
74
+ }
75
+ return false;
76
+ };
77
+ yup__namespace.addMethod(yup__namespace.string, "validIp", function (errorMessage) {
78
+ return this.test("valid-ip", errorMessage, function (value) {
79
+ if (ramda.isNil(value)) {
80
+ return this;
81
+ }
82
+ var isValidIp = isValidIpString(value);
83
+ return isValidIp || this.createError({
84
+ path: this.path,
85
+ message: errorMessage
86
+ });
87
+ });
88
+ });
89
+ var getIpRestrictionValidationSchema = function getIpRestrictionValidationSchema() {
90
+ return yup__namespace.object().shape({
91
+ ipStart: yup__namespace.string().validIp(i18next.t("neetoMolecules.ipRestriction.validations.invalidIp")).required(i18next.t("neetoMolecules.ipRestriction.validations.ipStartRequired")),
92
+ ipEnd: yup__namespace.string().validIp(i18next.t("neetoMolecules.ipRestriction.validations.invalidIp")).when("ipStart", function (ipStart, schema) {
93
+ return schema.test({
94
+ test: function test(ipEnd) {
95
+ return areIpAddressesInSameFormat(ipStart, ipEnd);
96
+ },
97
+ message: i18next.t("neetoMolecules.ipRestriction.validations.eitherIpv4OrIpv6")
98
+ });
99
+ }).when("ipStart", function (ipStart, schema) {
100
+ return schema.test({
101
+ test: function test(ipEnd) {
102
+ return isValidIPRange(ipStart, ipEnd);
103
+ },
104
+ message: i18next.t("neetoMolecules.ipRestriction.validations.ipEndGreaterThanIpStart")
105
+ });
106
+ }).required(i18next.t("neetoMolecules.ipRestriction.validations.ipEndRequired")),
107
+ // v2 Select stores the scalar option value (string), not the option object.
108
+ addressType: yup__namespace.string().nullable().required(i18next.t("neetoMolecules.ipRestriction.validations.addressTypeRequired"))
109
+ });
110
+ };
111
+ var buildInitialValue = function buildInitialValue(isIpRestrictionEnabled, allowedIpRanges) {
112
+ return {
113
+ ipRestriction: isIpRestrictionEnabled,
114
+ allowedIpRanges: allowedIpRanges
115
+ };
116
+ };
117
+ var buildIpRestrictionPayload = function buildIpRestrictionPayload(values) {
118
+ return {
119
+ isIpRestrictionEnabled: values.ipRestriction,
120
+ allowedIpRanges: values.allowedIpRanges
121
+ };
122
+ };
123
+
124
+ var IP_RESTRICTIONS_ENGINE_BASE_URL = "/neeto_ip_restrictions/api/v1";
125
+ var QUERY_KEYS = {
126
+ IP_RESTRICTION: "IP_RESTRICTION",
127
+ ALLOWED_IP_RANGES: "ALLOWED_IP_RANGES",
128
+ CURRENT_IP: "CURRENT_IP"
129
+ };
130
+ var ADDRESS_TYPE_SELECT_OPTIONS = [{
131
+ label: i18next.t("neetoMolecules.ipRestriction.ipv4"),
132
+ value: "ipv4"
133
+ }, {
134
+ label: i18next.t("neetoMolecules.ipRestriction.ipv6"),
135
+ value: "ipv6"
136
+ }];
137
+ ({
138
+ addressType: ADDRESS_TYPE_SELECT_OPTIONS[0].value
139
+ });
140
+ var VALIDATION_SCHEMA = yup__namespace.object().shape({
141
+ ipRestriction: yup__namespace["boolean"](),
142
+ allowedIpRanges: yup__namespace.array().of(getIpRestrictionValidationSchema())
143
+ });
144
+ var NEW_ALLOWED_IP_RANGE = {
145
+ ipStart: "",
146
+ ipEnd: "",
147
+ addressType: null,
148
+ createdAt: new Date().toISOString()
149
+ };
150
+
151
+ var AllowedIpRange = reactUtils.withT(function (_ref) {
152
+ var t = _ref.t,
153
+ index = _ref.index,
154
+ arrayHelpers = _ref.arrayHelpers;
155
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
156
+ className: "flex items-start gap-3",
157
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
158
+ className: "grid flex-grow grid-cols-1 gap-3 md:grid-cols-3",
159
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.Input, {
160
+ className: "text-start",
161
+ "data-testid": "ip-start-text-field",
162
+ label: t("neetoMolecules.ipRestriction.ipStart"),
163
+ labelProps: {
164
+ className: "md:hidden"
165
+ },
166
+ name: "allowedIpRanges.".concat(index, ".ipStart"),
167
+ placeholder: t("neetoMolecules.ipRestriction.ipStart")
168
+ }), /*#__PURE__*/jsxRuntime.jsx(formik.Input, {
169
+ className: "text-start",
170
+ "data-testid": "ip-end-text-field",
171
+ label: t("neetoMolecules.ipRestriction.ipEnd"),
172
+ labelProps: {
173
+ className: "md:hidden"
174
+ },
175
+ name: "allowedIpRanges.".concat(index, ".ipEnd"),
176
+ placeholder: t("neetoMolecules.ipRestriction.ipEnd")
177
+ }), /*#__PURE__*/jsxRuntime.jsx(formik.Select, {
178
+ className: "text-start",
179
+ "data-testid": "address-type-select-field",
180
+ label: t("neetoMolecules.ipRestriction.type"),
181
+ labelProps: {
182
+ className: "md:hidden"
183
+ },
184
+ name: "allowedIpRanges.".concat(index, ".addressType"),
185
+ options: ADDRESS_TYPE_SELECT_OPTIONS
186
+ })]
187
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
188
+ className: "flex flex-shrink-0 justify-center md:min-w-14",
189
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
190
+ className: "mt-5 md:mt-0",
191
+ "data-testid": "allowed-ip-range-delete-button",
192
+ icon: trash2.Trash2,
193
+ size: "icon",
194
+ variant: "ghost",
195
+ tooltipProps: {
196
+ content: t("neetoMolecules.common.actions.discard"),
197
+ position: "top"
198
+ },
199
+ onClick: function onClick() {
200
+ return arrayHelpers.remove(index);
201
+ }
202
+ })
203
+ })]
204
+ });
205
+ });
206
+
207
+ var AllowedIpRanges$1 = reactUtils.withT(function (_ref) {
208
+ var t = _ref.t;
209
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
210
+ className: "flex flex-col gap-y-5",
211
+ "data-testid": "allowed-ip-range-container",
212
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
213
+ "data-testid": "allowed-ip-range-heading",
214
+ variant: "h4",
215
+ children: t("neetoMolecules.ipRestriction.allowedIpRangeTitle")
216
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
217
+ className: "flex flex-col gap-y-3",
218
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
219
+ className: "hidden gap-3 md:flex",
220
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
221
+ className: "grid flex-grow grid-cols-3 gap-3",
222
+ children: [/*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Typography, {
223
+ className: "text-muted-foreground uppercase",
224
+ variant: "h6",
225
+ children: [t("neetoMolecules.ipRestriction.ipStart"), "*"]
226
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Typography, {
227
+ className: "text-muted-foreground uppercase",
228
+ variant: "h6",
229
+ children: [t("neetoMolecules.ipRestriction.ipEnd"), "*"]
230
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Typography, {
231
+ className: "text-muted-foreground uppercase",
232
+ variant: "h6",
233
+ children: [t("neetoMolecules.ipRestriction.type"), "*"]
234
+ })]
235
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
236
+ className: "min-w-14 flex-shrink-0",
237
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
238
+ className: "text-muted-foreground text-center uppercase",
239
+ variant: "h6",
240
+ children: t("neetoMolecules.ipRestriction.actions")
241
+ })
242
+ })]
243
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
244
+ className: "flex w-full flex-col gap-y-6 md:gap-y-4",
245
+ children: /*#__PURE__*/jsxRuntime.jsx(formik$1.FieldArray, {
246
+ name: "allowedIpRanges",
247
+ children: function children(arrayHelpers) {
248
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
249
+ children: [arrayHelpers.form.values.allowedIpRanges.map(function (allowedIpRange, index) {
250
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
251
+ className: "border-border w-full border-b pb-6 last:border-none last:pb-0 md:border-none md:pb-0",
252
+ children: /*#__PURE__*/React.createElement(AllowedIpRange, {
253
+ allowedIpRange: allowedIpRange,
254
+ arrayHelpers: arrayHelpers,
255
+ index: index,
256
+ key: allowedIpRange.createdAt
257
+ })
258
+ }, index);
259
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
260
+ className: "md:mt-2",
261
+ "data-testid": "add-allowed-ip-range-button",
262
+ icon: plus.Plus,
263
+ iconPosition: "left",
264
+ label: t("neetoMolecules.ipRestriction.addNew"),
265
+ variant: "link",
266
+ onClick: function onClick() {
267
+ return arrayHelpers.push(NEW_ALLOWED_IP_RANGE);
268
+ }
269
+ })]
270
+ });
271
+ }
272
+ })
273
+ })]
274
+ })]
275
+ });
276
+ });
277
+ var AllowedIpRanges = /*#__PURE__*/React.memo(AllowedIpRanges$1);
278
+
279
+ var show$1 = function show(params) {
280
+ return axios.get("".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/current_ip"), {
281
+ params: params
282
+ });
283
+ };
284
+ var currentIpApi = {
285
+ show: show$1
286
+ };
287
+
288
+ var CURRENT_IP = QUERY_KEYS.CURRENT_IP;
289
+ var useShowCurrentIp = function useShowCurrentIp() {
290
+ return reactQuery.useQuery({
291
+ queryKey: [CURRENT_IP],
292
+ queryFn: function queryFn() {
293
+ return currentIpApi.show();
294
+ }
295
+ });
296
+ };
297
+
298
+ var CurrentIp$1 = function CurrentIp() {
299
+ var _useShowCurrentIp = useShowCurrentIp(),
300
+ data = _useShowCurrentIp.data,
301
+ isLoading = _useShowCurrentIp.isLoading;
302
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
303
+ className: "flex flex-wrap items-baseline gap-1",
304
+ "data-testid": "current-ip-container",
305
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
306
+ children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
307
+ i18nKey: "neetoMolecules.ipRestriction.currentIpMessage",
308
+ values: {
309
+ ip: isLoading ? "..." : data.ip
310
+ }
311
+ })
312
+ })
313
+ });
314
+ };
315
+ var CurrentIp = /*#__PURE__*/React.memo(CurrentIp$1);
316
+
317
+ var allowedIpRangesUrl = "".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/allowed_ips");
318
+ var fetch = function fetch() {
319
+ return axios.get(allowedIpRangesUrl);
320
+ };
321
+ var create = function create(payload) {
322
+ return axios.post(allowedIpRangesUrl, {
323
+ allowedIpRange: payload
324
+ });
325
+ };
326
+ var destroy = function destroy(id) {
327
+ return axios["delete"]("".concat(allowedIpRangesUrl, "/").concat(id));
328
+ };
329
+ var update$1 = function update(_ref) {
330
+ var id = _ref.id,
331
+ payload = _ref.payload;
332
+ return axios.patch("".concat(allowedIpRangesUrl, "/").concat(id), {
333
+ allowedIpRange: payload
334
+ });
335
+ };
336
+ var allowedIpRangesApi = {
337
+ fetch: fetch,
338
+ create: create,
339
+ destroy: destroy,
340
+ update: update$1
341
+ };
342
+
343
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
344
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
345
+ var ALLOWED_IP_RANGES$1 = QUERY_KEYS.ALLOWED_IP_RANGES;
346
+ var useFetchAllowedIpRanges = function useFetchAllowedIpRanges(options) {
347
+ return reactQuery.useQuery(_objectSpread({
348
+ queryKey: [ALLOWED_IP_RANGES$1],
349
+ queryFn: function queryFn() {
350
+ return allowedIpRangesApi.fetch();
351
+ }
352
+ }, options));
353
+ };
354
+
355
+ var ipRestrictionUrl = "".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/ip_restriction");
356
+ var update = function update(params) {
357
+ return axios.patch(ipRestrictionUrl, {
358
+ ipRestriction: params
359
+ });
360
+ };
361
+ var show = function show() {
362
+ return axios.get(ipRestrictionUrl);
363
+ };
364
+ var ipRestrictionApi = {
365
+ update: update,
366
+ show: show
367
+ };
368
+
369
+ var IP_RESTRICTION = QUERY_KEYS.IP_RESTRICTION,
370
+ ALLOWED_IP_RANGES = QUERY_KEYS.ALLOWED_IP_RANGES;
371
+ var useShowIpRestriction = function useShowIpRestriction() {
372
+ return reactQuery.useQuery({
373
+ queryKey: [IP_RESTRICTION],
374
+ queryFn: function queryFn() {
375
+ return ipRestrictionApi.show();
376
+ }
377
+ });
378
+ };
379
+ var useUpdateIpRestriction = function useUpdateIpRestriction() {
380
+ return useMutationWithInvalidation(ipRestrictionApi.update, {
381
+ keysToInvalidate: [[IP_RESTRICTION], [ALLOWED_IP_RANGES]]
382
+ });
383
+ };
384
+
385
+ var IpRestriction = function IpRestriction() {
386
+ var _useTranslation = reactI18next.useTranslation(),
387
+ t = _useTranslation.t;
388
+ var _useState = React.useState(false),
389
+ _useState2 = _slicedToArray(_useState, 2),
390
+ isAlertOpen = _useState2[0],
391
+ setIsAlertOpen = _useState2[1];
392
+ var _useShowIpRestriction = useShowIpRestriction(),
393
+ _useShowIpRestriction2 = _useShowIpRestriction.data,
394
+ _useShowIpRestriction3 = _useShowIpRestriction2 === void 0 ? {} : _useShowIpRestriction2,
395
+ isIpRestrictionEnabled = _useShowIpRestriction3.isIpRestrictionEnabled,
396
+ isFetchingIpRestriction = _useShowIpRestriction.isLoading;
397
+ var _useFetchAllowedIpRan = useFetchAllowedIpRanges({
398
+ enabled: isIpRestrictionEnabled
399
+ }),
400
+ allowedIpRanges = _useFetchAllowedIpRan.data,
401
+ isFetchingAllowedIpRanges = _useFetchAllowedIpRan.isLoading,
402
+ isRefetching = _useFetchAllowedIpRan.isRefetching;
403
+ var _useUpdateIpRestricti = useUpdateIpRestriction(),
404
+ updateIpRestriction = _useUpdateIpRestricti.mutate,
405
+ isUpdating = _useUpdateIpRestricti.isPending;
406
+ if (isFetchingIpRestriction || isFetchingAllowedIpRanges || isRefetching) {
407
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
408
+ className: "flex h-full w-full items-center justify-center",
409
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {})
410
+ });
411
+ }
412
+ var handleSubmit = function handleSubmit(values, formikBag) {
413
+ if (values.ipRestriction) setIsAlertOpen(true);else handleUpdateIpRestriction(values, formikBag);
414
+ };
415
+ var handleCloseAlert = function handleCloseAlert(setSubmitting) {
416
+ setIsAlertOpen(false);
417
+ setSubmitting(false);
418
+ };
419
+ var handleUpdateIpRestriction = function handleUpdateIpRestriction(values, _ref) {
420
+ var setSubmitting = _ref.setSubmitting,
421
+ resetForm = _ref.resetForm;
422
+ updateIpRestriction(buildIpRestrictionPayload(values), {
423
+ onSuccess: function onSuccess() {
424
+ setIsAlertOpen(false);
425
+ setSubmitting(false);
426
+ resetForm({
427
+ values: values
428
+ });
429
+ },
430
+ onError: function onError() {
431
+ setIsAlertOpen(false);
432
+ setSubmitting(false);
433
+ }
434
+ });
435
+ };
436
+ return /*#__PURE__*/jsxRuntime.jsx(formik.Form, {
437
+ className: "w-full",
438
+ formikProps: {
439
+ initialValues: buildInitialValue(isIpRestrictionEnabled, allowedIpRanges),
440
+ validationSchema: VALIDATION_SCHEMA,
441
+ validateOnBlur: true,
442
+ enableReinitialize: true,
443
+ onSubmit: handleSubmit
444
+ },
445
+ children: function children(_ref2) {
446
+ var values = _ref2.values,
447
+ dirty = _ref2.dirty,
448
+ resetForm = _ref2.resetForm,
449
+ setSubmitting = _ref2.setSubmitting;
450
+ return /*#__PURE__*/jsxRuntime.jsxs(v2_CardLayout, {
451
+ actionBlock: /*#__PURE__*/jsxRuntime.jsxs("div", {
452
+ className: "flex flex-wrap items-center gap-2",
453
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.Button, {
454
+ "data-testid": "ip-restriction-save-changes",
455
+ loading: isUpdating,
456
+ children: t("neetoMolecules.common.actions.saveChanges")
457
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
458
+ "data-testid": "ip-restriction-reset-btn",
459
+ disabled: !dirty,
460
+ label: t("neetoMolecules.common.actions.reset"),
461
+ type: "reset",
462
+ variant: "secondary",
463
+ onClick: resetForm
464
+ }), dirty && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
465
+ className: "text-destructive",
466
+ variant: "body2",
467
+ children: t("neetoMolecules.ipRestriction.validations.unsavedChanges")
468
+ })]
469
+ }),
470
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.BlockNavigation, {}), /*#__PURE__*/jsxRuntime.jsxs("div", {
471
+ className: classnames("flex flex-col gap-y-2", {
472
+ "pb-6": values.ipRestriction
473
+ }),
474
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.Switch, {
475
+ className: "flex-grow-0",
476
+ "data-testid": "enable-ip-restriction-switch",
477
+ disabled: isFetchingIpRestriction || isUpdating,
478
+ id: "ipRestriction",
479
+ label: t("neetoMolecules.ipRestriction.switchLabel"),
480
+ name: "ipRestriction",
481
+ labelProps: {
482
+ className: "text-[1.75rem] font-semibold leading-tight"
483
+ }
484
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
485
+ "data-testid": "ip-restriction-description",
486
+ variant: "body2",
487
+ children: t("neetoMolecules.ipRestriction.description")
488
+ })]
489
+ }), values.ipRestriction && /*#__PURE__*/jsxRuntime.jsxs("div", {
490
+ className: "border-border flex w-full flex-col gap-y-6 border-t pt-6",
491
+ children: [/*#__PURE__*/jsxRuntime.jsx(CurrentIp, {}), /*#__PURE__*/jsxRuntime.jsx(AllowedIpRanges, {}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Callout, {
492
+ variant: "warning",
493
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
494
+ className: "py-1 whitespace-pre-wrap",
495
+ children: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
496
+ i18nKey: "neetoMolecules.ipRestriction.warningMessage"
497
+ })
498
+ })
499
+ })]
500
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Alert, {
501
+ isOpen: isAlertOpen,
502
+ isSubmitting: isUpdating,
503
+ title: t("neetoMolecules.ipRestriction.enableAlert.title"),
504
+ message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
505
+ i18nKey: "neetoMolecules.ipRestriction.enableAlert.message"
506
+ }),
507
+ submitButtonLabel: t("neetoMolecules.ipRestriction.enableAlert.submitButtonLabel"),
508
+ onClose: function onClose() {
509
+ return handleCloseAlert(setSubmitting);
510
+ },
511
+ onSubmit: function onSubmit() {
512
+ return handleUpdateIpRestriction(values, {
513
+ setSubmitting: setSubmitting,
514
+ resetForm: resetForm
515
+ });
516
+ }
517
+ })]
518
+ });
519
+ }
520
+ });
521
+ };
522
+ var index = /*#__PURE__*/React.memo(IpRestriction);
523
+
524
+ module.exports = index;
525
+ //# sourceMappingURL=IpRestriction.js.map