@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.
- package/dist/FinderModal.js +56 -9
- package/dist/FinderModal.js.map +1 -1
- package/dist/IpRestriction.js +2 -3175
- package/dist/IpRestriction.js.map +1 -1
- package/dist/MadeWith.js +3 -74
- package/dist/MadeWith.js.map +1 -1
- package/dist/NeetoWidget.js +3 -1958
- package/dist/NeetoWidget.js.map +1 -1
- package/dist/Onboarding.js +3 -400
- package/dist/Onboarding.js.map +1 -1
- package/dist/chevron-up-B2_LTx_h.js +15 -0
- package/dist/chevron-up-B2_LTx_h.js.map +1 -0
- package/dist/cjs/FinderModal.js +54 -7
- package/dist/cjs/FinderModal.js.map +1 -1
- package/dist/cjs/IpRestriction.js +21 -3194
- package/dist/cjs/IpRestriction.js.map +1 -1
- package/dist/cjs/MadeWith.js +17 -88
- package/dist/cjs/MadeWith.js.map +1 -1
- package/dist/cjs/NeetoWidget.js +4 -1959
- package/dist/cjs/NeetoWidget.js.map +1 -1
- package/dist/cjs/Onboarding.js +3 -400
- package/dist/cjs/Onboarding.js.map +1 -1
- package/dist/cjs/chevron-up-CpzhFWzM.js +17 -0
- package/dist/cjs/chevron-up-CpzhFWzM.js.map +1 -0
- package/dist/cjs/copy-CerjTcLL.js +20 -0
- package/dist/cjs/copy-CerjTcLL.js.map +1 -0
- package/dist/cjs/globe-DawgK2Dx.js +21 -0
- package/dist/cjs/globe-DawgK2Dx.js.map +1 -0
- package/dist/cjs/index-ARGXqXxG.js +78 -0
- package/dist/cjs/index-ARGXqXxG.js.map +1 -0
- package/dist/cjs/index-BeqE2JWC.js +3180 -0
- package/dist/cjs/index-BeqE2JWC.js.map +1 -0
- package/dist/cjs/panel-left-close-CLoRPBWH.js +21 -0
- package/dist/cjs/panel-left-close-CLoRPBWH.js.map +1 -0
- package/dist/cjs/phone-number-Bza7WGZm.js +315 -0
- package/dist/cjs/phone-number-Bza7WGZm.js.map +1 -0
- package/dist/cjs/prism-tomorrow-BMFuJ5o1.js +1963 -0
- package/dist/cjs/prism-tomorrow-BMFuJ5o1.js.map +1 -0
- package/dist/cjs/react-confetti-DdGoyZ0y.js +405 -0
- package/dist/cjs/react-confetti-DdGoyZ0y.js.map +1 -0
- package/dist/cjs/smartphone-ChvEvl-o.js +36 -0
- package/dist/cjs/smartphone-ChvEvl-o.js.map +1 -0
- package/dist/cjs/trash-2-CotPjU5n.js +23 -0
- package/dist/cjs/trash-2-CotPjU5n.js.map +1 -0
- package/dist/cjs/triangle-alert-De-qkUXK.js +27 -0
- package/dist/cjs/triangle-alert-De-qkUXK.js.map +1 -0
- package/dist/cjs/v2/AuditLogs.js +4 -18
- package/dist/cjs/v2/AuditLogs.js.map +1 -1
- package/dist/cjs/v2/Builder.js +4 -18
- package/dist/cjs/v2/Builder.js.map +1 -1
- package/dist/cjs/v2/Codeblock.js +1 -0
- package/dist/cjs/v2/Codeblock.js.map +1 -1
- package/dist/cjs/v2/CopyToClipboardButton.js +3 -16
- package/dist/cjs/v2/CopyToClipboardButton.js.map +1 -1
- package/dist/cjs/v2/FinderModal.js +48 -14
- package/dist/cjs/v2/FinderModal.js.map +1 -1
- package/dist/cjs/v2/FloatingActionMenu.js +1 -0
- package/dist/cjs/v2/FloatingActionMenu.js.map +1 -1
- package/dist/cjs/v2/Insights.js +344 -0
- package/dist/cjs/v2/Insights.js.map +1 -0
- package/dist/cjs/v2/IntegrationCard.js +222 -0
- package/dist/cjs/v2/IntegrationCard.js.map +1 -0
- package/dist/cjs/v2/IpRestriction.js +525 -0
- package/dist/cjs/v2/IpRestriction.js.map +1 -0
- package/dist/cjs/v2/MadeWith.js +73 -0
- package/dist/cjs/v2/MadeWith.js.map +1 -0
- package/dist/cjs/v2/Metadata.js +215 -0
- package/dist/cjs/v2/Metadata.js.map +1 -0
- package/dist/cjs/v2/NavigationHeader.js +1 -0
- package/dist/cjs/v2/NavigationHeader.js.map +1 -1
- package/dist/cjs/v2/NeetoWidget.js +855 -0
- package/dist/cjs/v2/NeetoWidget.js.map +1 -0
- package/dist/cjs/v2/Onboarding.js +323 -0
- package/dist/cjs/v2/Onboarding.js.map +1 -0
- package/dist/cjs/v2/OptionFields.js +1291 -0
- package/dist/cjs/v2/OptionFields.js.map +1 -0
- package/dist/cjs/v2/PhoneNumber.js +20 -307
- package/dist/cjs/v2/PhoneNumber.js.map +1 -1
- package/dist/cjs/v2/ProductEmbed.js +1870 -0
- package/dist/cjs/v2/ProductEmbed.js.map +1 -0
- package/dist/cjs/v2/PublishBlock.js +6 -22
- package/dist/cjs/v2/PublishBlock.js.map +1 -1
- package/dist/cjs/v2/PublishYourItem.js +60 -0
- package/dist/cjs/v2/PublishYourItem.js.map +1 -0
- package/dist/cjs/v2/ResponsiveDevicePicker.js +88 -0
- package/dist/cjs/v2/ResponsiveDevicePicker.js.map +1 -0
- package/dist/cjs/v2/SessionEnvironment.js +479 -0
- package/dist/cjs/v2/SessionEnvironment.js.map +1 -0
- package/dist/copy-DhbOoOav.js +18 -0
- package/dist/copy-DhbOoOav.js.map +1 -0
- package/dist/globe-rBiI1CjO.js +19 -0
- package/dist/globe-rBiI1CjO.js.map +1 -0
- package/dist/index-0jnA7dx6.js +3178 -0
- package/dist/index-0jnA7dx6.js.map +1 -0
- package/dist/index-DF5MKxql.js +76 -0
- package/dist/index-DF5MKxql.js.map +1 -0
- package/dist/panel-left-close-37jik3GB.js +19 -0
- package/dist/panel-left-close-37jik3GB.js.map +1 -0
- package/dist/phone-number-CGZtDB_n.js +291 -0
- package/dist/phone-number-CGZtDB_n.js.map +1 -0
- package/dist/prism-tomorrow-ZUb2Ikm9.js +1961 -0
- package/dist/prism-tomorrow-ZUb2Ikm9.js.map +1 -0
- package/dist/react-confetti-BnGq_LBE.js +403 -0
- package/dist/react-confetti-BnGq_LBE.js.map +1 -0
- package/dist/smartphone-B-jv1y8j.js +33 -0
- package/dist/smartphone-B-jv1y8j.js.map +1 -0
- package/dist/trash-2-N0F6K63L.js +21 -0
- package/dist/trash-2-N0F6K63L.js.map +1 -0
- package/dist/triangle-alert-Pkh6pc42.js +25 -0
- package/dist/triangle-alert-Pkh6pc42.js.map +1 -0
- package/dist/v2/AuditLogs.js +3 -17
- package/dist/v2/AuditLogs.js.map +1 -1
- package/dist/v2/Builder.js +3 -17
- package/dist/v2/Builder.js.map +1 -1
- package/dist/v2/Codeblock.js +1 -0
- package/dist/v2/Codeblock.js.map +1 -1
- package/dist/v2/CopyToClipboardButton.js +2 -15
- package/dist/v2/CopyToClipboardButton.js.map +1 -1
- package/dist/v2/FinderModal.js +49 -15
- package/dist/v2/FinderModal.js.map +1 -1
- package/dist/v2/FloatingActionMenu.js +1 -0
- package/dist/v2/FloatingActionMenu.js.map +1 -1
- package/dist/v2/Insights.js +342 -0
- package/dist/v2/Insights.js.map +1 -0
- package/dist/v2/IntegrationCard.js +220 -0
- package/dist/v2/IntegrationCard.js.map +1 -0
- package/dist/v2/IpRestriction.js +504 -0
- package/dist/v2/IpRestriction.js.map +1 -0
- package/dist/v2/MadeWith.js +52 -0
- package/dist/v2/MadeWith.js.map +1 -0
- package/dist/v2/Metadata.js +213 -0
- package/dist/v2/Metadata.js.map +1 -0
- package/dist/v2/NavigationHeader.js +1 -0
- package/dist/v2/NavigationHeader.js.map +1 -1
- package/dist/v2/NeetoWidget.js +834 -0
- package/dist/v2/NeetoWidget.js.map +1 -0
- package/dist/v2/Onboarding.js +321 -0
- package/dist/v2/Onboarding.js.map +1 -0
- package/dist/v2/OptionFields.js +1289 -0
- package/dist/v2/OptionFields.js.map +1 -0
- package/dist/v2/PhoneNumber.js +20 -287
- package/dist/v2/PhoneNumber.js.map +1 -1
- package/dist/v2/ProductEmbed.js +1868 -0
- package/dist/v2/ProductEmbed.js.map +1 -0
- package/dist/v2/PublishBlock.js +5 -21
- package/dist/v2/PublishBlock.js.map +1 -1
- package/dist/v2/PublishYourItem.js +58 -0
- package/dist/v2/PublishYourItem.js.map +1 -0
- package/dist/v2/ResponsiveDevicePicker.js +86 -0
- package/dist/v2/ResponsiveDevicePicker.js.map +1 -0
- package/dist/v2/SessionEnvironment.js +477 -0
- package/dist/v2/SessionEnvironment.js.map +1 -0
- package/package.json +3 -3
- package/types/v2/Insights.d.ts +69 -0
- package/types/v2/IntegrationCard.d.ts +30 -0
- package/types/v2/IpRestriction.d.ts +5 -0
- package/types/v2/MadeWith.d.ts +8 -0
- package/types/v2/Metadata.d.ts +26 -0
- package/types/v2/MobilePreviewHeader.d.ts +8 -0
- package/types/v2/NeetoWidget.d.ts +19 -0
- package/types/v2/Onboarding.d.ts +22 -0
- package/types/v2/OptionFields.d.ts +55 -0
- package/types/v2/ProductEmbed.d.ts +90 -0
- package/types/v2/PublishYourItem.d.ts +8 -0
- package/types/v2/ResponsiveDevicePicker.d.ts +11 -0
- 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,504 @@
|
|
|
1
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
+
import { createElement, memo, useState } from 'react';
|
|
3
|
+
import { Button, Typography, Spinner, Callout, Alert } from '@bigbinary/neeto-atoms';
|
|
4
|
+
import { Input, Select, Form, BlockNavigation, Switch, Button as Button$1 } from '@bigbinary/neeto-atoms/formik';
|
|
5
|
+
import classnames from 'classnames';
|
|
6
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
7
|
+
import { FieldArray } from 'formik';
|
|
8
|
+
import { withT } from '@bigbinary/neeto-commons-frontend/v2/react-utils';
|
|
9
|
+
import { t } from 'i18next';
|
|
10
|
+
import * as yup from 'yup';
|
|
11
|
+
import { s as src } from '../index-0jnA7dx6.js';
|
|
12
|
+
import { isNil, isNotNil } from 'ramda';
|
|
13
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
14
|
+
import { T as Trash2 } from '../trash-2-N0F6K63L.js';
|
|
15
|
+
import { P as Plus } from '../plus-clM1IC_E.js';
|
|
16
|
+
import { useQuery } from '@tanstack/react-query';
|
|
17
|
+
import axios from 'axios';
|
|
18
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
19
|
+
import useMutationWithInvalidation from '@bigbinary/neeto-commons-frontend/v2/react-utils/useMutationWithInvalidation';
|
|
20
|
+
import CardLayout from './CardLayout.js';
|
|
21
|
+
import '../_commonjsHelpers-BFTU3MAI.js';
|
|
22
|
+
import '../createLucideIcon-mNMhCCpf.js';
|
|
23
|
+
import '@bigbinary/neeto-cist';
|
|
24
|
+
|
|
25
|
+
var isValidIPv4String = function isValidIPv4String(ip) {
|
|
26
|
+
return isNotNil(ip) && src.Validator.isValidIPv4String(ip)[0];
|
|
27
|
+
};
|
|
28
|
+
var isValidIPv6String = function isValidIPv6String(ip) {
|
|
29
|
+
return isNotNil(ip) && src.Validator.isValidIPv6String(ip)[0];
|
|
30
|
+
};
|
|
31
|
+
var isValidIpString = function isValidIpString(ip) {
|
|
32
|
+
return isValidIPv4String(ip) || isValidIPv6String(ip);
|
|
33
|
+
};
|
|
34
|
+
var areIpAddressesInSameFormat = function areIpAddressesInSameFormat(ipStart, ipEnd) {
|
|
35
|
+
return isValidIPv4String(ipStart) && isValidIPv4String(ipEnd) || isValidIPv6String(ipStart) && isValidIPv6String(ipEnd);
|
|
36
|
+
};
|
|
37
|
+
var isValidIPv4Range = function isValidIPv4Range(ipStart, ipEnd) {
|
|
38
|
+
var ipStartAddr = src.IPv4.fromDecimalDottedString(ipStart);
|
|
39
|
+
var ipEndAddr = src.IPv4.fromDecimalDottedString(ipEnd);
|
|
40
|
+
return ipStartAddr.isLessThanOrEquals(ipEndAddr);
|
|
41
|
+
};
|
|
42
|
+
var isValidIPv6Range = function isValidIPv6Range(ipStart, ipEnd) {
|
|
43
|
+
var ipStartAddr = src.IPv6.fromString(ipStart);
|
|
44
|
+
var ipEndAddr = src.IPv6.fromString(ipEnd);
|
|
45
|
+
return ipStartAddr.isLessThanOrEquals(ipEndAddr);
|
|
46
|
+
};
|
|
47
|
+
var isValidIPRange = function isValidIPRange(ipStart, ipEnd) {
|
|
48
|
+
if (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) {
|
|
49
|
+
return isValidIPv4Range(ipStart, ipEnd);
|
|
50
|
+
}
|
|
51
|
+
if (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd)) {
|
|
52
|
+
return isValidIPv6Range(ipStart, ipEnd);
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
};
|
|
56
|
+
yup.addMethod(yup.string, "validIp", function (errorMessage) {
|
|
57
|
+
return this.test("valid-ip", errorMessage, function (value) {
|
|
58
|
+
if (isNil(value)) {
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
var isValidIp = isValidIpString(value);
|
|
62
|
+
return isValidIp || this.createError({
|
|
63
|
+
path: this.path,
|
|
64
|
+
message: errorMessage
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
var getIpRestrictionValidationSchema = function getIpRestrictionValidationSchema() {
|
|
69
|
+
return yup.object().shape({
|
|
70
|
+
ipStart: yup.string().validIp(t("neetoMolecules.ipRestriction.validations.invalidIp")).required(t("neetoMolecules.ipRestriction.validations.ipStartRequired")),
|
|
71
|
+
ipEnd: yup.string().validIp(t("neetoMolecules.ipRestriction.validations.invalidIp")).when("ipStart", function (ipStart, schema) {
|
|
72
|
+
return schema.test({
|
|
73
|
+
test: function test(ipEnd) {
|
|
74
|
+
return areIpAddressesInSameFormat(ipStart, ipEnd);
|
|
75
|
+
},
|
|
76
|
+
message: t("neetoMolecules.ipRestriction.validations.eitherIpv4OrIpv6")
|
|
77
|
+
});
|
|
78
|
+
}).when("ipStart", function (ipStart, schema) {
|
|
79
|
+
return schema.test({
|
|
80
|
+
test: function test(ipEnd) {
|
|
81
|
+
return isValidIPRange(ipStart, ipEnd);
|
|
82
|
+
},
|
|
83
|
+
message: t("neetoMolecules.ipRestriction.validations.ipEndGreaterThanIpStart")
|
|
84
|
+
});
|
|
85
|
+
}).required(t("neetoMolecules.ipRestriction.validations.ipEndRequired")),
|
|
86
|
+
// v2 Select stores the scalar option value (string), not the option object.
|
|
87
|
+
addressType: yup.string().nullable().required(t("neetoMolecules.ipRestriction.validations.addressTypeRequired"))
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
var buildInitialValue = function buildInitialValue(isIpRestrictionEnabled, allowedIpRanges) {
|
|
91
|
+
return {
|
|
92
|
+
ipRestriction: isIpRestrictionEnabled,
|
|
93
|
+
allowedIpRanges: allowedIpRanges
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
var buildIpRestrictionPayload = function buildIpRestrictionPayload(values) {
|
|
97
|
+
return {
|
|
98
|
+
isIpRestrictionEnabled: values.ipRestriction,
|
|
99
|
+
allowedIpRanges: values.allowedIpRanges
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
var IP_RESTRICTIONS_ENGINE_BASE_URL = "/neeto_ip_restrictions/api/v1";
|
|
104
|
+
var QUERY_KEYS = {
|
|
105
|
+
IP_RESTRICTION: "IP_RESTRICTION",
|
|
106
|
+
ALLOWED_IP_RANGES: "ALLOWED_IP_RANGES",
|
|
107
|
+
CURRENT_IP: "CURRENT_IP"
|
|
108
|
+
};
|
|
109
|
+
var ADDRESS_TYPE_SELECT_OPTIONS = [{
|
|
110
|
+
label: t("neetoMolecules.ipRestriction.ipv4"),
|
|
111
|
+
value: "ipv4"
|
|
112
|
+
}, {
|
|
113
|
+
label: t("neetoMolecules.ipRestriction.ipv6"),
|
|
114
|
+
value: "ipv6"
|
|
115
|
+
}];
|
|
116
|
+
({
|
|
117
|
+
addressType: ADDRESS_TYPE_SELECT_OPTIONS[0].value
|
|
118
|
+
});
|
|
119
|
+
var VALIDATION_SCHEMA = yup.object().shape({
|
|
120
|
+
ipRestriction: yup["boolean"](),
|
|
121
|
+
allowedIpRanges: yup.array().of(getIpRestrictionValidationSchema())
|
|
122
|
+
});
|
|
123
|
+
var NEW_ALLOWED_IP_RANGE = {
|
|
124
|
+
ipStart: "",
|
|
125
|
+
ipEnd: "",
|
|
126
|
+
addressType: null,
|
|
127
|
+
createdAt: new Date().toISOString()
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
var AllowedIpRange = withT(function (_ref) {
|
|
131
|
+
var t = _ref.t,
|
|
132
|
+
index = _ref.index,
|
|
133
|
+
arrayHelpers = _ref.arrayHelpers;
|
|
134
|
+
return /*#__PURE__*/jsxs("div", {
|
|
135
|
+
className: "flex items-start gap-3",
|
|
136
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
137
|
+
className: "grid flex-grow grid-cols-1 gap-3 md:grid-cols-3",
|
|
138
|
+
children: [/*#__PURE__*/jsx(Input, {
|
|
139
|
+
className: "text-start",
|
|
140
|
+
"data-testid": "ip-start-text-field",
|
|
141
|
+
label: t("neetoMolecules.ipRestriction.ipStart"),
|
|
142
|
+
labelProps: {
|
|
143
|
+
className: "md:hidden"
|
|
144
|
+
},
|
|
145
|
+
name: "allowedIpRanges.".concat(index, ".ipStart"),
|
|
146
|
+
placeholder: t("neetoMolecules.ipRestriction.ipStart")
|
|
147
|
+
}), /*#__PURE__*/jsx(Input, {
|
|
148
|
+
className: "text-start",
|
|
149
|
+
"data-testid": "ip-end-text-field",
|
|
150
|
+
label: t("neetoMolecules.ipRestriction.ipEnd"),
|
|
151
|
+
labelProps: {
|
|
152
|
+
className: "md:hidden"
|
|
153
|
+
},
|
|
154
|
+
name: "allowedIpRanges.".concat(index, ".ipEnd"),
|
|
155
|
+
placeholder: t("neetoMolecules.ipRestriction.ipEnd")
|
|
156
|
+
}), /*#__PURE__*/jsx(Select, {
|
|
157
|
+
className: "text-start",
|
|
158
|
+
"data-testid": "address-type-select-field",
|
|
159
|
+
label: t("neetoMolecules.ipRestriction.type"),
|
|
160
|
+
labelProps: {
|
|
161
|
+
className: "md:hidden"
|
|
162
|
+
},
|
|
163
|
+
name: "allowedIpRanges.".concat(index, ".addressType"),
|
|
164
|
+
options: ADDRESS_TYPE_SELECT_OPTIONS
|
|
165
|
+
})]
|
|
166
|
+
}), /*#__PURE__*/jsx("div", {
|
|
167
|
+
className: "flex flex-shrink-0 justify-center md:min-w-14",
|
|
168
|
+
children: /*#__PURE__*/jsx(Button, {
|
|
169
|
+
className: "mt-5 md:mt-0",
|
|
170
|
+
"data-testid": "allowed-ip-range-delete-button",
|
|
171
|
+
icon: Trash2,
|
|
172
|
+
size: "icon",
|
|
173
|
+
variant: "ghost",
|
|
174
|
+
tooltipProps: {
|
|
175
|
+
content: t("neetoMolecules.common.actions.discard"),
|
|
176
|
+
position: "top"
|
|
177
|
+
},
|
|
178
|
+
onClick: function onClick() {
|
|
179
|
+
return arrayHelpers.remove(index);
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
})]
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
var AllowedIpRanges = withT(function (_ref) {
|
|
187
|
+
var t = _ref.t;
|
|
188
|
+
return /*#__PURE__*/jsxs("div", {
|
|
189
|
+
className: "flex flex-col gap-y-5",
|
|
190
|
+
"data-testid": "allowed-ip-range-container",
|
|
191
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
192
|
+
"data-testid": "allowed-ip-range-heading",
|
|
193
|
+
variant: "h4",
|
|
194
|
+
children: t("neetoMolecules.ipRestriction.allowedIpRangeTitle")
|
|
195
|
+
}), /*#__PURE__*/jsxs("div", {
|
|
196
|
+
className: "flex flex-col gap-y-3",
|
|
197
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
198
|
+
className: "hidden gap-3 md:flex",
|
|
199
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
200
|
+
className: "grid flex-grow grid-cols-3 gap-3",
|
|
201
|
+
children: [/*#__PURE__*/jsxs(Typography, {
|
|
202
|
+
className: "text-muted-foreground uppercase",
|
|
203
|
+
variant: "h6",
|
|
204
|
+
children: [t("neetoMolecules.ipRestriction.ipStart"), "*"]
|
|
205
|
+
}), /*#__PURE__*/jsxs(Typography, {
|
|
206
|
+
className: "text-muted-foreground uppercase",
|
|
207
|
+
variant: "h6",
|
|
208
|
+
children: [t("neetoMolecules.ipRestriction.ipEnd"), "*"]
|
|
209
|
+
}), /*#__PURE__*/jsxs(Typography, {
|
|
210
|
+
className: "text-muted-foreground uppercase",
|
|
211
|
+
variant: "h6",
|
|
212
|
+
children: [t("neetoMolecules.ipRestriction.type"), "*"]
|
|
213
|
+
})]
|
|
214
|
+
}), /*#__PURE__*/jsx("div", {
|
|
215
|
+
className: "min-w-14 flex-shrink-0",
|
|
216
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
217
|
+
className: "text-muted-foreground text-center uppercase",
|
|
218
|
+
variant: "h6",
|
|
219
|
+
children: t("neetoMolecules.ipRestriction.actions")
|
|
220
|
+
})
|
|
221
|
+
})]
|
|
222
|
+
}), /*#__PURE__*/jsx("div", {
|
|
223
|
+
className: "flex w-full flex-col gap-y-6 md:gap-y-4",
|
|
224
|
+
children: /*#__PURE__*/jsx(FieldArray, {
|
|
225
|
+
name: "allowedIpRanges",
|
|
226
|
+
children: function children(arrayHelpers) {
|
|
227
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
228
|
+
children: [arrayHelpers.form.values.allowedIpRanges.map(function (allowedIpRange, index) {
|
|
229
|
+
return /*#__PURE__*/jsx("div", {
|
|
230
|
+
className: "border-border w-full border-b pb-6 last:border-none last:pb-0 md:border-none md:pb-0",
|
|
231
|
+
children: /*#__PURE__*/createElement(AllowedIpRange, {
|
|
232
|
+
allowedIpRange: allowedIpRange,
|
|
233
|
+
arrayHelpers: arrayHelpers,
|
|
234
|
+
index: index,
|
|
235
|
+
key: allowedIpRange.createdAt
|
|
236
|
+
})
|
|
237
|
+
}, index);
|
|
238
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
239
|
+
className: "md:mt-2",
|
|
240
|
+
"data-testid": "add-allowed-ip-range-button",
|
|
241
|
+
icon: Plus,
|
|
242
|
+
iconPosition: "left",
|
|
243
|
+
label: t("neetoMolecules.ipRestriction.addNew"),
|
|
244
|
+
variant: "link",
|
|
245
|
+
onClick: function onClick() {
|
|
246
|
+
return arrayHelpers.push(NEW_ALLOWED_IP_RANGE);
|
|
247
|
+
}
|
|
248
|
+
})]
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
})
|
|
252
|
+
})]
|
|
253
|
+
})]
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
var AllowedIpRanges$1 = /*#__PURE__*/memo(AllowedIpRanges);
|
|
257
|
+
|
|
258
|
+
var show$1 = function show(params) {
|
|
259
|
+
return axios.get("".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/current_ip"), {
|
|
260
|
+
params: params
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
var currentIpApi = {
|
|
264
|
+
show: show$1
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
var CURRENT_IP = QUERY_KEYS.CURRENT_IP;
|
|
268
|
+
var useShowCurrentIp = function useShowCurrentIp() {
|
|
269
|
+
return useQuery({
|
|
270
|
+
queryKey: [CURRENT_IP],
|
|
271
|
+
queryFn: function queryFn() {
|
|
272
|
+
return currentIpApi.show();
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
var CurrentIp = function CurrentIp() {
|
|
278
|
+
var _useShowCurrentIp = useShowCurrentIp(),
|
|
279
|
+
data = _useShowCurrentIp.data,
|
|
280
|
+
isLoading = _useShowCurrentIp.isLoading;
|
|
281
|
+
return /*#__PURE__*/jsx("div", {
|
|
282
|
+
className: "flex flex-wrap items-baseline gap-1",
|
|
283
|
+
"data-testid": "current-ip-container",
|
|
284
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
285
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
286
|
+
i18nKey: "neetoMolecules.ipRestriction.currentIpMessage",
|
|
287
|
+
values: {
|
|
288
|
+
ip: isLoading ? "..." : data.ip
|
|
289
|
+
}
|
|
290
|
+
})
|
|
291
|
+
})
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
var CurrentIp$1 = /*#__PURE__*/memo(CurrentIp);
|
|
295
|
+
|
|
296
|
+
var allowedIpRangesUrl = "".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/allowed_ips");
|
|
297
|
+
var fetch = function fetch() {
|
|
298
|
+
return axios.get(allowedIpRangesUrl);
|
|
299
|
+
};
|
|
300
|
+
var create = function create(payload) {
|
|
301
|
+
return axios.post(allowedIpRangesUrl, {
|
|
302
|
+
allowedIpRange: payload
|
|
303
|
+
});
|
|
304
|
+
};
|
|
305
|
+
var destroy = function destroy(id) {
|
|
306
|
+
return axios["delete"]("".concat(allowedIpRangesUrl, "/").concat(id));
|
|
307
|
+
};
|
|
308
|
+
var update$1 = function update(_ref) {
|
|
309
|
+
var id = _ref.id,
|
|
310
|
+
payload = _ref.payload;
|
|
311
|
+
return axios.patch("".concat(allowedIpRangesUrl, "/").concat(id), {
|
|
312
|
+
allowedIpRange: payload
|
|
313
|
+
});
|
|
314
|
+
};
|
|
315
|
+
var allowedIpRangesApi = {
|
|
316
|
+
fetch: fetch,
|
|
317
|
+
create: create,
|
|
318
|
+
destroy: destroy,
|
|
319
|
+
update: update$1
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
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; }
|
|
323
|
+
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; }
|
|
324
|
+
var ALLOWED_IP_RANGES$1 = QUERY_KEYS.ALLOWED_IP_RANGES;
|
|
325
|
+
var useFetchAllowedIpRanges = function useFetchAllowedIpRanges(options) {
|
|
326
|
+
return useQuery(_objectSpread({
|
|
327
|
+
queryKey: [ALLOWED_IP_RANGES$1],
|
|
328
|
+
queryFn: function queryFn() {
|
|
329
|
+
return allowedIpRangesApi.fetch();
|
|
330
|
+
}
|
|
331
|
+
}, options));
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
var ipRestrictionUrl = "".concat(IP_RESTRICTIONS_ENGINE_BASE_URL, "/ip_restriction");
|
|
335
|
+
var update = function update(params) {
|
|
336
|
+
return axios.patch(ipRestrictionUrl, {
|
|
337
|
+
ipRestriction: params
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
var show = function show() {
|
|
341
|
+
return axios.get(ipRestrictionUrl);
|
|
342
|
+
};
|
|
343
|
+
var ipRestrictionApi = {
|
|
344
|
+
update: update,
|
|
345
|
+
show: show
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
var IP_RESTRICTION = QUERY_KEYS.IP_RESTRICTION,
|
|
349
|
+
ALLOWED_IP_RANGES = QUERY_KEYS.ALLOWED_IP_RANGES;
|
|
350
|
+
var useShowIpRestriction = function useShowIpRestriction() {
|
|
351
|
+
return useQuery({
|
|
352
|
+
queryKey: [IP_RESTRICTION],
|
|
353
|
+
queryFn: function queryFn() {
|
|
354
|
+
return ipRestrictionApi.show();
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
};
|
|
358
|
+
var useUpdateIpRestriction = function useUpdateIpRestriction() {
|
|
359
|
+
return useMutationWithInvalidation(ipRestrictionApi.update, {
|
|
360
|
+
keysToInvalidate: [[IP_RESTRICTION], [ALLOWED_IP_RANGES]]
|
|
361
|
+
});
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
var IpRestriction = function IpRestriction() {
|
|
365
|
+
var _useTranslation = useTranslation(),
|
|
366
|
+
t = _useTranslation.t;
|
|
367
|
+
var _useState = useState(false),
|
|
368
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
369
|
+
isAlertOpen = _useState2[0],
|
|
370
|
+
setIsAlertOpen = _useState2[1];
|
|
371
|
+
var _useShowIpRestriction = useShowIpRestriction(),
|
|
372
|
+
_useShowIpRestriction2 = _useShowIpRestriction.data,
|
|
373
|
+
_useShowIpRestriction3 = _useShowIpRestriction2 === void 0 ? {} : _useShowIpRestriction2,
|
|
374
|
+
isIpRestrictionEnabled = _useShowIpRestriction3.isIpRestrictionEnabled,
|
|
375
|
+
isFetchingIpRestriction = _useShowIpRestriction.isLoading;
|
|
376
|
+
var _useFetchAllowedIpRan = useFetchAllowedIpRanges({
|
|
377
|
+
enabled: isIpRestrictionEnabled
|
|
378
|
+
}),
|
|
379
|
+
allowedIpRanges = _useFetchAllowedIpRan.data,
|
|
380
|
+
isFetchingAllowedIpRanges = _useFetchAllowedIpRan.isLoading,
|
|
381
|
+
isRefetching = _useFetchAllowedIpRan.isRefetching;
|
|
382
|
+
var _useUpdateIpRestricti = useUpdateIpRestriction(),
|
|
383
|
+
updateIpRestriction = _useUpdateIpRestricti.mutate,
|
|
384
|
+
isUpdating = _useUpdateIpRestricti.isPending;
|
|
385
|
+
if (isFetchingIpRestriction || isFetchingAllowedIpRanges || isRefetching) {
|
|
386
|
+
return /*#__PURE__*/jsx("div", {
|
|
387
|
+
className: "flex h-full w-full items-center justify-center",
|
|
388
|
+
children: /*#__PURE__*/jsx(Spinner, {})
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
var handleSubmit = function handleSubmit(values, formikBag) {
|
|
392
|
+
if (values.ipRestriction) setIsAlertOpen(true);else handleUpdateIpRestriction(values, formikBag);
|
|
393
|
+
};
|
|
394
|
+
var handleCloseAlert = function handleCloseAlert(setSubmitting) {
|
|
395
|
+
setIsAlertOpen(false);
|
|
396
|
+
setSubmitting(false);
|
|
397
|
+
};
|
|
398
|
+
var handleUpdateIpRestriction = function handleUpdateIpRestriction(values, _ref) {
|
|
399
|
+
var setSubmitting = _ref.setSubmitting,
|
|
400
|
+
resetForm = _ref.resetForm;
|
|
401
|
+
updateIpRestriction(buildIpRestrictionPayload(values), {
|
|
402
|
+
onSuccess: function onSuccess() {
|
|
403
|
+
setIsAlertOpen(false);
|
|
404
|
+
setSubmitting(false);
|
|
405
|
+
resetForm({
|
|
406
|
+
values: values
|
|
407
|
+
});
|
|
408
|
+
},
|
|
409
|
+
onError: function onError() {
|
|
410
|
+
setIsAlertOpen(false);
|
|
411
|
+
setSubmitting(false);
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
};
|
|
415
|
+
return /*#__PURE__*/jsx(Form, {
|
|
416
|
+
className: "w-full",
|
|
417
|
+
formikProps: {
|
|
418
|
+
initialValues: buildInitialValue(isIpRestrictionEnabled, allowedIpRanges),
|
|
419
|
+
validationSchema: VALIDATION_SCHEMA,
|
|
420
|
+
validateOnBlur: true,
|
|
421
|
+
enableReinitialize: true,
|
|
422
|
+
onSubmit: handleSubmit
|
|
423
|
+
},
|
|
424
|
+
children: function children(_ref2) {
|
|
425
|
+
var values = _ref2.values,
|
|
426
|
+
dirty = _ref2.dirty,
|
|
427
|
+
resetForm = _ref2.resetForm,
|
|
428
|
+
setSubmitting = _ref2.setSubmitting;
|
|
429
|
+
return /*#__PURE__*/jsxs(CardLayout, {
|
|
430
|
+
actionBlock: /*#__PURE__*/jsxs("div", {
|
|
431
|
+
className: "flex flex-wrap items-center gap-2",
|
|
432
|
+
children: [/*#__PURE__*/jsx(Button$1, {
|
|
433
|
+
"data-testid": "ip-restriction-save-changes",
|
|
434
|
+
loading: isUpdating,
|
|
435
|
+
children: t("neetoMolecules.common.actions.saveChanges")
|
|
436
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
437
|
+
"data-testid": "ip-restriction-reset-btn",
|
|
438
|
+
disabled: !dirty,
|
|
439
|
+
label: t("neetoMolecules.common.actions.reset"),
|
|
440
|
+
type: "reset",
|
|
441
|
+
variant: "secondary",
|
|
442
|
+
onClick: resetForm
|
|
443
|
+
}), dirty && /*#__PURE__*/jsx(Typography, {
|
|
444
|
+
className: "text-destructive",
|
|
445
|
+
variant: "body2",
|
|
446
|
+
children: t("neetoMolecules.ipRestriction.validations.unsavedChanges")
|
|
447
|
+
})]
|
|
448
|
+
}),
|
|
449
|
+
children: [/*#__PURE__*/jsx(BlockNavigation, {}), /*#__PURE__*/jsxs("div", {
|
|
450
|
+
className: classnames("flex flex-col gap-y-2", {
|
|
451
|
+
"pb-6": values.ipRestriction
|
|
452
|
+
}),
|
|
453
|
+
children: [/*#__PURE__*/jsx(Switch, {
|
|
454
|
+
className: "flex-grow-0",
|
|
455
|
+
"data-testid": "enable-ip-restriction-switch",
|
|
456
|
+
disabled: isFetchingIpRestriction || isUpdating,
|
|
457
|
+
id: "ipRestriction",
|
|
458
|
+
label: t("neetoMolecules.ipRestriction.switchLabel"),
|
|
459
|
+
name: "ipRestriction",
|
|
460
|
+
labelProps: {
|
|
461
|
+
className: "text-[1.75rem] font-semibold leading-tight"
|
|
462
|
+
}
|
|
463
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
464
|
+
"data-testid": "ip-restriction-description",
|
|
465
|
+
variant: "body2",
|
|
466
|
+
children: t("neetoMolecules.ipRestriction.description")
|
|
467
|
+
})]
|
|
468
|
+
}), values.ipRestriction && /*#__PURE__*/jsxs("div", {
|
|
469
|
+
className: "border-border flex w-full flex-col gap-y-6 border-t pt-6",
|
|
470
|
+
children: [/*#__PURE__*/jsx(CurrentIp$1, {}), /*#__PURE__*/jsx(AllowedIpRanges$1, {}), /*#__PURE__*/jsx(Callout, {
|
|
471
|
+
variant: "warning",
|
|
472
|
+
children: /*#__PURE__*/jsx("div", {
|
|
473
|
+
className: "py-1 whitespace-pre-wrap",
|
|
474
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
475
|
+
i18nKey: "neetoMolecules.ipRestriction.warningMessage"
|
|
476
|
+
})
|
|
477
|
+
})
|
|
478
|
+
})]
|
|
479
|
+
}), /*#__PURE__*/jsx(Alert, {
|
|
480
|
+
isOpen: isAlertOpen,
|
|
481
|
+
isSubmitting: isUpdating,
|
|
482
|
+
title: t("neetoMolecules.ipRestriction.enableAlert.title"),
|
|
483
|
+
message: /*#__PURE__*/jsx(Trans, {
|
|
484
|
+
i18nKey: "neetoMolecules.ipRestriction.enableAlert.message"
|
|
485
|
+
}),
|
|
486
|
+
submitButtonLabel: t("neetoMolecules.ipRestriction.enableAlert.submitButtonLabel"),
|
|
487
|
+
onClose: function onClose() {
|
|
488
|
+
return handleCloseAlert(setSubmitting);
|
|
489
|
+
},
|
|
490
|
+
onSubmit: function onSubmit() {
|
|
491
|
+
return handleUpdateIpRestriction(values, {
|
|
492
|
+
setSubmitting: setSubmitting,
|
|
493
|
+
resetForm: resetForm
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
})]
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
});
|
|
500
|
+
};
|
|
501
|
+
var index = /*#__PURE__*/memo(IpRestriction);
|
|
502
|
+
|
|
503
|
+
export { index as default };
|
|
504
|
+
//# sourceMappingURL=IpRestriction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IpRestriction.js","sources":["../../src/v2/components/IpRestriction/utils.js","../../src/v2/components/IpRestriction/constants.js","../../src/v2/components/IpRestriction/AllowedIpRanges/AllowedIpRange.jsx","../../src/v2/components/IpRestriction/AllowedIpRanges/index.jsx","../../src/v2/components/IpRestriction/apis/current_ip.js","../../src/v2/components/IpRestriction/hooks/reactQuery/useCurrentIp.js","../../src/v2/components/IpRestriction/CurrentIp.jsx","../../src/v2/components/IpRestriction/apis/allowed_ip_ranges.js","../../src/v2/components/IpRestriction/hooks/reactQuery/useAllowedIpRanges.js","../../src/v2/components/IpRestriction/apis/ip_restriction.js","../../src/v2/components/IpRestriction/hooks/reactQuery/useIpRestrictions.js","../../src/v2/components/IpRestriction/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { IPv4, IPv6, Validator } from \"ip-num\";\nimport { isNil, isNotNil } from \"ramda\";\nimport * as yup from \"yup\";\n\nconst isValidIPv4String = ip =>\n isNotNil(ip) && Validator.isValidIPv4String(ip)[0];\n\nconst isValidIPv6String = ip =>\n isNotNil(ip) && Validator.isValidIPv6String(ip)[0];\n\nconst isValidIpString = ip => isValidIPv4String(ip) || isValidIPv6String(ip);\n\nconst areIpAddressesInSameFormat = (ipStart, ipEnd) =>\n (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) ||\n (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd));\n\nconst isValidIPv4Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv4.fromDecimalDottedString(ipStart);\n const ipEndAddr = IPv4.fromDecimalDottedString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPv6Range = (ipStart, ipEnd) => {\n const ipStartAddr = IPv6.fromString(ipStart);\n const ipEndAddr = IPv6.fromString(ipEnd);\n\n return ipStartAddr.isLessThanOrEquals(ipEndAddr);\n};\n\nconst isValidIPRange = (ipStart, ipEnd) => {\n if (isValidIPv4String(ipStart) && isValidIPv4String(ipEnd)) {\n return isValidIPv4Range(ipStart, ipEnd);\n }\n\n if (isValidIPv6String(ipStart) && isValidIPv6String(ipEnd)) {\n return isValidIPv6Range(ipStart, ipEnd);\n }\n\n return false;\n};\n\nyup.addMethod(yup.string, \"validIp\", function (errorMessage) {\n return this.test(\"valid-ip\", errorMessage, function (value) {\n if (isNil(value)) {\n return this;\n }\n\n const isValidIp = isValidIpString(value);\n\n return (\n isValidIp || this.createError({ path: this.path, message: errorMessage })\n );\n });\n});\n\nexport const getIpRestrictionValidationSchema = () =>\n yup.object().shape({\n ipStart: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .required(t(\"neetoMolecules.ipRestriction.validations.ipStartRequired\")),\n ipEnd: yup\n .string()\n .validIp(t(\"neetoMolecules.ipRestriction.validations.invalidIp\"))\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => areIpAddressesInSameFormat(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.eitherIpv4OrIpv6\"\n ),\n })\n )\n .when(\"ipStart\", (ipStart, schema) =>\n schema.test({\n test: ipEnd => isValidIPRange(ipStart, ipEnd),\n message: t(\n \"neetoMolecules.ipRestriction.validations.ipEndGreaterThanIpStart\"\n ),\n })\n )\n .required(t(\"neetoMolecules.ipRestriction.validations.ipEndRequired\")),\n // v2 Select stores the scalar option value (string), not the option object.\n addressType: yup\n .string()\n .nullable()\n .required(\n t(\"neetoMolecules.ipRestriction.validations.addressTypeRequired\")\n ),\n });\n\nexport const buildInitialValue = (isIpRestrictionEnabled, allowedIpRanges) => ({\n ipRestriction: isIpRestrictionEnabled,\n allowedIpRanges,\n});\n\nexport const buildIpRestrictionPayload = values => ({\n isIpRestrictionEnabled: values.ipRestriction,\n allowedIpRanges: values.allowedIpRanges,\n});\n","import { t } from \"i18next\";\nimport * as yup from \"yup\";\n\nimport { getIpRestrictionValidationSchema } from \"./utils\";\n\nexport const IP_RESTRICTIONS_ENGINE_BASE_URL = \"/neeto_ip_restrictions/api/v1\";\n\nexport const QUERY_KEYS = {\n IP_RESTRICTION: \"IP_RESTRICTION\",\n ALLOWED_IP_RANGES: \"ALLOWED_IP_RANGES\",\n CURRENT_IP: \"CURRENT_IP\",\n};\n\nexport const TRUNCATE_LENGTH = 18;\n\nexport const ADDRESS_TYPE_SELECT_OPTIONS = [\n { label: t(\"neetoMolecules.ipRestriction.ipv4\"), value: \"ipv4\" },\n { label: t(\"neetoMolecules.ipRestriction.ipv6\"), value: \"ipv6\" },\n];\n\nexport const INITIAL_VALUES = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: ADDRESS_TYPE_SELECT_OPTIONS[0].value,\n};\n\nexport const VALIDATION_SCHEMA = yup.object().shape({\n ipRestriction: yup.boolean(),\n allowedIpRanges: yup.array().of(getIpRestrictionValidationSchema()),\n});\n\nexport const NEW_ALLOWED_IP_RANGE = {\n ipStart: \"\",\n ipEnd: \"\",\n addressType: null,\n createdAt: new Date().toISOString(),\n};\n","import { Button } from \"@bigbinary/neeto-atoms\";\nimport { Input, Select } from \"@bigbinary/neeto-atoms/formik\";\nimport { Trash2 } from \"lucide-react\";\nimport { withT } from \"neetocommons/v2/react-utils\";\n\nimport { ADDRESS_TYPE_SELECT_OPTIONS } from \"../constants\";\n\nconst AllowedIpRange = withT(({ t, index, arrayHelpers }) => (\n <div className=\"flex items-start gap-3\">\n <div className=\"grid flex-grow grid-cols-1 gap-3 md:grid-cols-3\">\n <Input\n className=\"text-start\"\n data-testid=\"ip-start-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipStart\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipStart`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipStart\")}\n />\n <Input\n className=\"text-start\"\n data-testid=\"ip-end-text-field\"\n label={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.ipEnd`}\n placeholder={t(\"neetoMolecules.ipRestriction.ipEnd\")}\n />\n <Select\n className=\"text-start\"\n data-testid=\"address-type-select-field\"\n label={t(\"neetoMolecules.ipRestriction.type\")}\n labelProps={{ className: \"md:hidden\" }}\n name={`allowedIpRanges.${index}.addressType`}\n options={ADDRESS_TYPE_SELECT_OPTIONS}\n />\n </div>\n <div className=\"flex flex-shrink-0 justify-center md:min-w-14\">\n <Button\n className=\"mt-5 md:mt-0\"\n data-testid=\"allowed-ip-range-delete-button\"\n icon={Trash2}\n size=\"icon\"\n variant=\"ghost\"\n tooltipProps={{\n content: t(\"neetoMolecules.common.actions.discard\"),\n position: \"top\",\n }}\n onClick={() => arrayHelpers.remove(index)}\n />\n </div>\n </div>\n));\n\nexport default AllowedIpRange;\n","import { memo } from \"react\";\n\nimport { Button, Typography } from \"@bigbinary/neeto-atoms\";\nimport { FieldArray } from \"formik\";\nimport { Plus } from \"lucide-react\";\nimport { withT } from \"neetocommons/v2/react-utils\";\n\nimport AllowedIpRange from \"./AllowedIpRange\";\n\nimport { NEW_ALLOWED_IP_RANGE } from \"../constants\";\n\nconst AllowedIpRanges = withT(({ t }) => (\n <div\n className=\"flex flex-col gap-y-5\"\n data-testid=\"allowed-ip-range-container\"\n >\n <Typography data-testid=\"allowed-ip-range-heading\" variant=\"h4\">\n {t(\"neetoMolecules.ipRestriction.allowedIpRangeTitle\")}\n </Typography>\n <div className=\"flex flex-col gap-y-3\">\n <div className=\"hidden gap-3 md:flex\">\n <div className=\"grid flex-grow grid-cols-3 gap-3\">\n <Typography className=\"text-muted-foreground uppercase\" variant=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipStart\")}*\n </Typography>\n <Typography className=\"text-muted-foreground uppercase\" variant=\"h6\">\n {t(\"neetoMolecules.ipRestriction.ipEnd\")}*\n </Typography>\n <Typography className=\"text-muted-foreground uppercase\" variant=\"h6\">\n {t(\"neetoMolecules.ipRestriction.type\")}*\n </Typography>\n </div>\n <div className=\"min-w-14 flex-shrink-0\">\n <Typography\n className=\"text-muted-foreground text-center uppercase\"\n variant=\"h6\"\n >\n {t(\"neetoMolecules.ipRestriction.actions\")}\n </Typography>\n </div>\n </div>\n <div className=\"flex w-full flex-col gap-y-6 md:gap-y-4\">\n <FieldArray name=\"allowedIpRanges\">\n {arrayHelpers => (\n <>\n {arrayHelpers.form.values.allowedIpRanges.map(\n (allowedIpRange, index) => (\n <div\n className=\"border-border w-full border-b pb-6 last:border-none last:pb-0 md:border-none md:pb-0\"\n key={index}\n >\n <AllowedIpRange\n {...{ allowedIpRange, arrayHelpers, index }}\n key={allowedIpRange.createdAt}\n />\n </div>\n )\n )}\n <Button\n className=\"md:mt-2\"\n data-testid=\"add-allowed-ip-range-button\"\n icon={Plus}\n iconPosition=\"left\"\n label={t(\"neetoMolecules.ipRestriction.addNew\")}\n variant=\"link\"\n onClick={() => arrayHelpers.push(NEW_ALLOWED_IP_RANGE)}\n />\n </>\n )}\n </FieldArray>\n </div>\n </div>\n </div>\n));\n\nexport default memo(AllowedIpRanges);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst show = params =>\n axios.get(`${IP_RESTRICTIONS_ENGINE_BASE_URL}/current_ip`, { params });\n\nconst currentIpApi = { show };\n\nexport default currentIpApi;\n","import { useQuery } from \"@tanstack/react-query\";\n\nimport currentIpApi from \"../../apis/current_ip\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { CURRENT_IP } = QUERY_KEYS;\n\nconst useShowCurrentIp = () =>\n useQuery({\n queryKey: [CURRENT_IP],\n queryFn: () => currentIpApi.show(),\n });\n\nexport { useShowCurrentIp };\n","import { memo } from \"react\";\n\nimport { Typography } from \"@bigbinary/neeto-atoms\";\nimport { Trans } from \"react-i18next\";\n\nimport { useShowCurrentIp } from \"./hooks/reactQuery/useCurrentIp\";\n\nconst CurrentIp = () => {\n const { data, isLoading } = useShowCurrentIp();\n\n return (\n <div\n className=\"flex flex-wrap items-baseline gap-1\"\n data-testid=\"current-ip-container\"\n >\n <Typography>\n <Trans\n i18nKey=\"neetoMolecules.ipRestriction.currentIpMessage\"\n values={{ ip: isLoading ? \"...\" : data.ip }}\n />\n </Typography>\n </div>\n );\n};\n\nexport default memo(CurrentIp);\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst allowedIpRangesUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/allowed_ips`;\n\nconst fetch = () => axios.get(allowedIpRangesUrl);\n\nconst create = payload =>\n axios.post(allowedIpRangesUrl, { allowedIpRange: payload });\n\nconst destroy = id => axios.delete(`${allowedIpRangesUrl}/${id}`);\n\nconst update = ({ id, payload }) =>\n axios.patch(`${allowedIpRangesUrl}/${id}`, {\n allowedIpRange: payload,\n });\n\nconst allowedIpRangesApi = { fetch, create, destroy, update };\n\nexport default allowedIpRangesApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/v2/react-utils/useMutationWithInvalidation\";\n\nimport allowedIpRangesApi from \"../../apis/allowed_ip_ranges\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useFetchAllowedIpRanges = options =>\n useQuery({\n queryKey: [ALLOWED_IP_RANGES],\n queryFn: () => allowedIpRangesApi.fetch(),\n ...options,\n });\n\nconst useCreateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.create, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useDestroyAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.destroy, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nconst useUpdateAllowedIpRanges = () =>\n useMutationWithInvalidation(allowedIpRangesApi.update, {\n keysToInvalidate: [[ALLOWED_IP_RANGES]],\n });\n\nexport {\n useFetchAllowedIpRanges,\n useCreateAllowedIpRanges,\n useDestroyAllowedIpRanges,\n useUpdateAllowedIpRanges,\n};\n","import axios from \"axios\";\n\nimport { IP_RESTRICTIONS_ENGINE_BASE_URL } from \"../constants\";\n\nconst ipRestrictionUrl = `${IP_RESTRICTIONS_ENGINE_BASE_URL}/ip_restriction`;\n\nconst update = params =>\n axios.patch(ipRestrictionUrl, { ipRestriction: params });\n\nconst show = () => axios.get(ipRestrictionUrl);\n\nconst ipRestrictionApi = { update, show };\n\nexport default ipRestrictionApi;\n","import { useQuery } from \"@tanstack/react-query\";\nimport useMutationWithInvalidation from \"neetocommons/v2/react-utils/useMutationWithInvalidation\";\n\nimport ipRestrictionApi from \"../../apis/ip_restriction\";\nimport { QUERY_KEYS } from \"../../constants\";\n\nconst { IP_RESTRICTION, ALLOWED_IP_RANGES } = QUERY_KEYS;\n\nconst useShowIpRestriction = () =>\n useQuery({\n queryKey: [IP_RESTRICTION],\n queryFn: () => ipRestrictionApi.show(),\n });\n\nconst useUpdateIpRestriction = () =>\n useMutationWithInvalidation(ipRestrictionApi.update, {\n keysToInvalidate: [[IP_RESTRICTION], [ALLOWED_IP_RANGES]],\n });\n\nexport { useShowIpRestriction, useUpdateIpRestriction };\n","import { memo, useState } from \"react\";\n\nimport {\n Alert,\n Button,\n Callout,\n Spinner,\n Typography,\n} from \"@bigbinary/neeto-atoms\";\nimport {\n Form as NeetoUIForm,\n Switch,\n Button as FormikButton,\n BlockNavigation,\n} from \"@bigbinary/neeto-atoms/formik\";\nimport classnames from \"classnames\";\nimport { Trans, useTranslation } from \"react-i18next\";\n\nimport AllowedIpRanges from \"./AllowedIpRanges\";\nimport { VALIDATION_SCHEMA } from \"./constants\";\nimport CurrentIp from \"./CurrentIp\";\nimport { useFetchAllowedIpRanges } from \"./hooks/reactQuery/useAllowedIpRanges\";\nimport {\n useShowIpRestriction,\n useUpdateIpRestriction,\n} from \"./hooks/reactQuery/useIpRestrictions\";\nimport { buildInitialValue, buildIpRestrictionPayload } from \"./utils\";\n\nimport CardLayout from \"../CardLayout\";\n\nconst IpRestriction = () => {\n const { t } = useTranslation();\n const [isAlertOpen, setIsAlertOpen] = useState(false);\n\n const {\n data: { isIpRestrictionEnabled } = {},\n isLoading: isFetchingIpRestriction,\n } = useShowIpRestriction();\n\n const {\n data: allowedIpRanges,\n isLoading: isFetchingAllowedIpRanges,\n isRefetching,\n } = useFetchAllowedIpRanges({ enabled: isIpRestrictionEnabled });\n\n const { mutate: updateIpRestriction, isPending: isUpdating } =\n useUpdateIpRestriction();\n\n if (isFetchingIpRestriction || isFetchingAllowedIpRanges || isRefetching) {\n return (\n <div className=\"flex h-full w-full items-center justify-center\">\n <Spinner />\n </div>\n );\n }\n\n const handleSubmit = (values, formikBag) => {\n if (values.ipRestriction) setIsAlertOpen(true);\n else handleUpdateIpRestriction(values, formikBag);\n };\n\n const handleCloseAlert = setSubmitting => {\n setIsAlertOpen(false);\n setSubmitting(false);\n };\n\n const handleUpdateIpRestriction = (values, { setSubmitting, resetForm }) => {\n updateIpRestriction(buildIpRestrictionPayload(values), {\n onSuccess: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n resetForm({ values });\n },\n onError: () => {\n setIsAlertOpen(false);\n setSubmitting(false);\n },\n });\n };\n\n return (\n <NeetoUIForm\n className=\"w-full\"\n formikProps={{\n initialValues: buildInitialValue(\n isIpRestrictionEnabled,\n allowedIpRanges\n ),\n validationSchema: VALIDATION_SCHEMA,\n validateOnBlur: true,\n enableReinitialize: true,\n onSubmit: handleSubmit,\n }}\n >\n {({ values, dirty, resetForm, setSubmitting }) => (\n <CardLayout\n actionBlock={\n <div className=\"flex flex-wrap items-center gap-2\">\n <FormikButton\n data-testid=\"ip-restriction-save-changes\"\n loading={isUpdating}\n >\n {t(\"neetoMolecules.common.actions.saveChanges\")}\n </FormikButton>\n <Button\n data-testid=\"ip-restriction-reset-btn\"\n disabled={!dirty}\n label={t(\"neetoMolecules.common.actions.reset\")}\n type=\"reset\"\n variant=\"secondary\"\n onClick={resetForm}\n />\n {dirty && (\n <Typography className=\"text-destructive\" variant=\"body2\">\n {t(\"neetoMolecules.ipRestriction.validations.unsavedChanges\")}\n </Typography>\n )}\n </div>\n }\n >\n <BlockNavigation />\n <div\n className={classnames(\"flex flex-col gap-y-2\", {\n \"pb-6\": values.ipRestriction,\n })}\n >\n <Switch\n className=\"flex-grow-0\"\n data-testid=\"enable-ip-restriction-switch\"\n disabled={isFetchingIpRestriction || isUpdating}\n id=\"ipRestriction\"\n label={t(\"neetoMolecules.ipRestriction.switchLabel\")}\n name=\"ipRestriction\"\n labelProps={{\n className: \"text-[1.75rem] font-semibold leading-tight\",\n }}\n />\n <Typography\n data-testid=\"ip-restriction-description\"\n variant=\"body2\"\n >\n {t(\"neetoMolecules.ipRestriction.description\")}\n </Typography>\n </div>\n {values.ipRestriction && (\n <div className=\"border-border flex w-full flex-col gap-y-6 border-t pt-6\">\n <CurrentIp />\n <AllowedIpRanges />\n <Callout variant=\"warning\">\n <div className=\"py-1 whitespace-pre-wrap\">\n <Trans i18nKey=\"neetoMolecules.ipRestriction.warningMessage\" />\n </div>\n </Callout>\n </div>\n )}\n <Alert\n isOpen={isAlertOpen}\n isSubmitting={isUpdating}\n title={t(\"neetoMolecules.ipRestriction.enableAlert.title\")}\n message={\n <Trans i18nKey=\"neetoMolecules.ipRestriction.enableAlert.message\" />\n }\n submitButtonLabel={t(\n \"neetoMolecules.ipRestriction.enableAlert.submitButtonLabel\"\n )}\n onClose={() => handleCloseAlert(setSubmitting)}\n onSubmit={() =>\n handleUpdateIpRestriction(values, { setSubmitting, resetForm })\n }\n />\n </CardLayout>\n )}\n </NeetoUIForm>\n );\n};\n\nexport default memo(IpRestriction);\n"],"names":["isValidIPv4String","ip","isNotNil","Validator","isValidIPv6String","isValidIpString","areIpAddressesInSameFormat","ipStart","ipEnd","isValidIPv4Range","ipStartAddr","IPv4","fromDecimalDottedString","ipEndAddr","isLessThanOrEquals","isValidIPv6Range","IPv6","fromString","isValidIPRange","yup","addMethod","string","errorMessage","test","value","isNil","isValidIp","createError","path","message","getIpRestrictionValidationSchema","object","shape","validIp","t","required","when","schema","addressType","nullable","buildInitialValue","isIpRestrictionEnabled","allowedIpRanges","ipRestriction","buildIpRestrictionPayload","values","IP_RESTRICTIONS_ENGINE_BASE_URL","QUERY_KEYS","IP_RESTRICTION","ALLOWED_IP_RANGES","CURRENT_IP","ADDRESS_TYPE_SELECT_OPTIONS","label","VALIDATION_SCHEMA","array","of","NEW_ALLOWED_IP_RANGE","createdAt","Date","toISOString","AllowedIpRange","withT","_ref","index","arrayHelpers","_jsxs","className","children","_jsx","Input","labelProps","name","concat","placeholder","Select","options","Button","icon","Trash2","size","variant","tooltipProps","content","position","onClick","remove","AllowedIpRanges","Typography","FieldArray","_Fragment","form","map","allowedIpRange","_createElement","key","Plus","iconPosition","push","memo","show","params","axios","get","currentIpApi","useShowCurrentIp","useQuery","queryKey","queryFn","CurrentIp","_useShowCurrentIp","data","isLoading","Trans","i18nKey","allowedIpRangesUrl","fetch","create","payload","post","destroy","id","update","patch","allowedIpRangesApi","useFetchAllowedIpRanges","_objectSpread","ipRestrictionUrl","ipRestrictionApi","useShowIpRestriction","useUpdateIpRestriction","useMutationWithInvalidation","keysToInvalidate","IpRestriction","_useTranslation","useTranslation","_useState","useState","_useState2","_slicedToArray","isAlertOpen","setIsAlertOpen","_useShowIpRestriction","_useShowIpRestriction2","_useShowIpRestriction3","isFetchingIpRestriction","_useFetchAllowedIpRan","enabled","isFetchingAllowedIpRanges","isRefetching","_useUpdateIpRestricti","updateIpRestriction","mutate","isUpdating","isPending","Spinner","handleSubmit","formikBag","handleUpdateIpRestriction","handleCloseAlert","setSubmitting","resetForm","onSuccess","onError","NeetoUIForm","formikProps","initialValues","validationSchema","validateOnBlur","enableReinitialize","onSubmit","_ref2","dirty","CardLayout","actionBlock","FormikButton","loading","disabled","type","BlockNavigation","classnames","Switch","Callout","Alert","isOpen","isSubmitting","title","submitButtonLabel","onClose"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAGC,EAAE,EAAA;AAAA,EAAA,OAC1BC,QAAQ,CAACD,EAAE,CAAC,IAAIE,aAAS,CAACH,iBAAiB,CAACC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,CAAA;AAEpD,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAGH,EAAE,EAAA;AAAA,EAAA,OAC1BC,QAAQ,CAACD,EAAE,CAAC,IAAIE,aAAS,CAACC,iBAAiB,CAACH,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,CAAA;AAEpD,IAAMI,eAAe,GAAG,SAAlBA,eAAeA,CAAGJ,EAAE,EAAA;EAAA,OAAID,iBAAiB,CAACC,EAAE,CAAC,IAAIG,iBAAiB,CAACH,EAAE,CAAC;AAAA,CAAA;AAE5E,IAAMK,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAAIC,OAAO,EAAEC,KAAK,EAAA;AAAA,EAAA,OAC/CR,iBAAiB,CAACO,OAAO,CAAC,IAAIP,iBAAiB,CAACQ,KAAK,CAAC,IACtDJ,iBAAiB,CAACG,OAAO,CAAC,IAAIH,iBAAiB,CAACI,KAAK,CAAE;AAAA,CAAA;AAE1D,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIF,OAAO,EAAEC,KAAK,EAAK;AAC3C,EAAA,IAAME,WAAW,GAAGC,QAAI,CAACC,uBAAuB,CAACL,OAAO,CAAC;AACzD,EAAA,IAAMM,SAAS,GAAGF,QAAI,CAACC,uBAAuB,CAACJ,KAAK,CAAC;AAErD,EAAA,OAAOE,WAAW,CAACI,kBAAkB,CAACD,SAAS,CAAC;AAClD,CAAC;AAED,IAAME,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIR,OAAO,EAAEC,KAAK,EAAK;AAC3C,EAAA,IAAME,WAAW,GAAGM,QAAI,CAACC,UAAU,CAACV,OAAO,CAAC;AAC5C,EAAA,IAAMM,SAAS,GAAGG,QAAI,CAACC,UAAU,CAACT,KAAK,CAAC;AAExC,EAAA,OAAOE,WAAW,CAACI,kBAAkB,CAACD,SAAS,CAAC;AAClD,CAAC;AAED,IAAMK,cAAc,GAAG,SAAjBA,cAAcA,CAAIX,OAAO,EAAEC,KAAK,EAAK;EACzC,IAAIR,iBAAiB,CAACO,OAAO,CAAC,IAAIP,iBAAiB,CAACQ,KAAK,CAAC,EAAE;AAC1D,IAAA,OAAOC,gBAAgB,CAACF,OAAO,EAAEC,KAAK,CAAC;AACzC,EAAA;EAEA,IAAIJ,iBAAiB,CAACG,OAAO,CAAC,IAAIH,iBAAiB,CAACI,KAAK,CAAC,EAAE;AAC1D,IAAA,OAAOO,gBAAgB,CAACR,OAAO,EAAEC,KAAK,CAAC;AACzC,EAAA;AAEA,EAAA,OAAO,KAAK;AACd,CAAC;AAEDW,GAAG,CAACC,SAAS,CAACD,GAAG,CAACE,MAAM,EAAE,SAAS,EAAE,UAAUC,YAAY,EAAE;EAC3D,OAAO,IAAI,CAACC,IAAI,CAAC,UAAU,EAAED,YAAY,EAAE,UAAUE,KAAK,EAAE;AAC1D,IAAA,IAAIC,KAAK,CAACD,KAAK,CAAC,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,IAAME,SAAS,GAAGrB,eAAe,CAACmB,KAAK,CAAC;AAExC,IAAA,OACEE,SAAS,IAAI,IAAI,CAACC,WAAW,CAAC;MAAEC,IAAI,EAAE,IAAI,CAACA,IAAI;AAAEC,MAAAA,OAAO,EAAEP;AAAa,KAAC,CAAC;AAE7E,EAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEK,IAAMQ,gCAAgC,GAAG,SAAnCA,gCAAgCA,GAAA;AAAA,EAAA,OAC3CX,GAAG,CAACY,MAAM,EAAE,CAACC,KAAK,CAAC;IACjBzB,OAAO,EAAEY,GAAG,CACTE,MAAM,EAAE,CACRY,OAAO,CAACC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAChEC,QAAQ,CAACD,CAAC,CAAC,0DAA0D,CAAC,CAAC;IAC1E1B,KAAK,EAAEW,GAAG,CACPE,MAAM,EAAE,CACRY,OAAO,CAACC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAChEE,IAAI,CAAC,SAAS,EAAE,UAAC7B,OAAO,EAAE8B,MAAM,EAAA;MAAA,OAC/BA,MAAM,CAACd,IAAI,CAAC;AACVA,QAAAA,IAAI,EAAE,SAANA,IAAIA,CAAEf,KAAK,EAAA;AAAA,UAAA,OAAIF,0BAA0B,CAACC,OAAO,EAAEC,KAAK,CAAC;AAAA,QAAA,CAAA;QACzDqB,OAAO,EAAEK,CAAC,CACR,2DACF;AACF,OAAC,CAAC;IAAA,CACJ,CAAC,CACAE,IAAI,CAAC,SAAS,EAAE,UAAC7B,OAAO,EAAE8B,MAAM,EAAA;MAAA,OAC/BA,MAAM,CAACd,IAAI,CAAC;AACVA,QAAAA,IAAI,EAAE,SAANA,IAAIA,CAAEf,KAAK,EAAA;AAAA,UAAA,OAAIU,cAAc,CAACX,OAAO,EAAEC,KAAK,CAAC;AAAA,QAAA,CAAA;QAC7CqB,OAAO,EAAEK,CAAC,CACR,kEACF;AACF,OAAC,CAAC;IAAA,CACJ,CAAC,CACAC,QAAQ,CAACD,CAAC,CAAC,wDAAwD,CAAC,CAAC;AACxE;AACAI,IAAAA,WAAW,EAAEnB,GAAG,CACbE,MAAM,EAAE,CACRkB,QAAQ,EAAE,CACVJ,QAAQ,CACPD,CAAC,CAAC,8DAA8D,CAClE;AACJ,GAAC,CAAC;AAAA,CAAA;AAEG,IAAMM,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,sBAAsB,EAAEC,eAAe,EAAA;EAAA,OAAM;AAC7EC,IAAAA,aAAa,EAAEF,sBAAsB;AACrCC,IAAAA,eAAe,EAAfA;GACD;AAAA,CAAC;AAEK,IAAME,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAGC,MAAM,EAAA;EAAA,OAAK;IAClDJ,sBAAsB,EAAEI,MAAM,CAACF,aAAa;IAC5CD,eAAe,EAAEG,MAAM,CAACH;GACzB;AAAA,CAAC;;AC/FK,IAAMI,+BAA+B,GAAG,+BAA+B;AAEvE,IAAMC,UAAU,GAAG;AACxBC,EAAAA,cAAc,EAAE,gBAAgB;AAChCC,EAAAA,iBAAiB,EAAE,mBAAmB;AACtCC,EAAAA,UAAU,EAAE;AACd,CAAC;AAIM,IAAMC,2BAA2B,GAAG,CACzC;AAAEC,EAAAA,KAAK,EAAElB,CAAC,CAAC,mCAAmC,CAAC;AAAEV,EAAAA,KAAK,EAAE;AAAO,CAAC,EAChE;AAAE4B,EAAAA,KAAK,EAAElB,CAAC,CAAC,mCAAmC,CAAC;AAAEV,EAAAA,KAAK,EAAE;AAAO,CAAC,CACjE;CAE6B;AAC5BjB,EAEA+B,WAAW,EAAEa,2BAA2B,CAAC,CAAC,CAAC,CAAC3B;AAC9C;AAEO,IAAM6B,iBAAiB,GAAGlC,GAAG,CAACY,MAAM,EAAE,CAACC,KAAK,CAAC;AAClDW,EAAAA,aAAa,EAAExB,GAAG,CAAA,SAAA,CAAQ,EAAE;EAC5BuB,eAAe,EAAEvB,GAAG,CAACmC,KAAK,EAAE,CAACC,EAAE,CAACzB,gCAAgC,EAAE;AACpE,CAAC,CAAC;AAEK,IAAM0B,oBAAoB,GAAG;AAClCjD,EAAAA,OAAO,EAAE,EAAE;AACXC,EAAAA,KAAK,EAAE,EAAE;AACT8B,EAAAA,WAAW,EAAE,IAAI;AACjBmB,EAAAA,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW;AACnC,CAAC;;AC7BD,IAAMC,cAAc,GAAGC,KAAK,CAAC,UAAAC,IAAA,EAAA;AAAA,EAAA,IAAG5B,CAAC,GAAA4B,IAAA,CAAD5B,CAAC;IAAE6B,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,YAAY,GAAAF,IAAA,CAAZE,YAAY;AAAA,EAAA,oBACpDC,IAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wBAAwB;AAAAC,IAAAA,QAAA,gBACrCF,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,iDAAiD;MAAAC,QAAA,EAAA,cAC9DC,GAAA,CAACC,KAAK,EAAA;AACJH,QAAAA,SAAS,EAAC,YAAY;AACtB,QAAA,aAAA,EAAY,qBAAqB;AACjCd,QAAAA,KAAK,EAAElB,CAAC,CAAC,sCAAsC,CAAE;AACjDoC,QAAAA,UAAU,EAAE;AAAEJ,UAAAA,SAAS,EAAE;SAAc;AACvCK,QAAAA,IAAI,EAAA,kBAAA,CAAAC,MAAA,CAAqBT,KAAK,EAAA,UAAA,CAAW;QACzCU,WAAW,EAAEvC,CAAC,CAAC,sCAAsC;AAAE,OACxD,CAAC,eACFkC,GAAA,CAACC,KAAK,EAAA;AACJH,QAAAA,SAAS,EAAC,YAAY;AACtB,QAAA,aAAA,EAAY,mBAAmB;AAC/Bd,QAAAA,KAAK,EAAElB,CAAC,CAAC,oCAAoC,CAAE;AAC/CoC,QAAAA,UAAU,EAAE;AAAEJ,UAAAA,SAAS,EAAE;SAAc;AACvCK,QAAAA,IAAI,EAAA,kBAAA,CAAAC,MAAA,CAAqBT,KAAK,EAAA,QAAA,CAAS;QACvCU,WAAW,EAAEvC,CAAC,CAAC,oCAAoC;AAAE,OACtD,CAAC,eACFkC,GAAA,CAACM,MAAM,EAAA;AACLR,QAAAA,SAAS,EAAC,YAAY;AACtB,QAAA,aAAA,EAAY,2BAA2B;AACvCd,QAAAA,KAAK,EAAElB,CAAC,CAAC,mCAAmC,CAAE;AAC9CoC,QAAAA,UAAU,EAAE;AAAEJ,UAAAA,SAAS,EAAE;SAAc;AACvCK,QAAAA,IAAI,EAAA,kBAAA,CAAAC,MAAA,CAAqBT,KAAK,EAAA,cAAA,CAAe;AAC7CY,QAAAA,OAAO,EAAExB;AAA4B,OACtC,CAAC;KACC,CAAC,eACNiB,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,+CAA+C;MAAAC,QAAA,eAC5DC,GAAA,CAACQ,MAAM,EAAA;AACLV,QAAAA,SAAS,EAAC,cAAc;AACxB,QAAA,aAAA,EAAY,gCAAgC;AAC5CW,QAAAA,IAAI,EAAEC,MAAO;AACbC,QAAAA,IAAI,EAAC,MAAM;AACXC,QAAAA,OAAO,EAAC,OAAO;AACfC,QAAAA,YAAY,EAAE;AACZC,UAAAA,OAAO,EAAEhD,CAAC,CAAC,uCAAuC,CAAC;AACnDiD,UAAAA,QAAQ,EAAE;SACV;QACFC,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,UAAA,OAAQpB,YAAY,CAACqB,MAAM,CAACtB,KAAK,CAAC;AAAA,QAAA;OAC1C;AAAC,KACC,CAAC;AAAA,GACH,CAAC;AAAA,CACP,CAAC;;ACvCF,IAAMuB,eAAe,GAAGzB,KAAK,CAAC,UAAAC,IAAA,EAAA;AAAA,EAAA,IAAG5B,CAAC,GAAA4B,IAAA,CAAD5B,CAAC;AAAA,EAAA,oBAChC+B,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,uBAAuB;AACjC,IAAA,aAAA,EAAY,4BAA4B;IAAAC,QAAA,EAAA,cAExCC,GAAA,CAACmB,UAAU,EAAA;AAAC,MAAA,aAAA,EAAY,0BAA0B;AAACP,MAAAA,OAAO,EAAC,IAAI;MAAAb,QAAA,EAC5DjC,CAAC,CAAC,kDAAkD;KAC3C,CAAC,eACb+B,IAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,uBAAuB;AAAAC,MAAAA,QAAA,gBACpCF,IAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,sBAAsB;AAAAC,QAAAA,QAAA,gBACnCF,IAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,kCAAkC;UAAAC,QAAA,EAAA,cAC/CF,IAAA,CAACsB,UAAU,EAAA;AAACrB,YAAAA,SAAS,EAAC,iCAAiC;AAACc,YAAAA,OAAO,EAAC,IAAI;AAAAb,YAAAA,QAAA,GACjEjC,CAAC,CAAC,sCAAsC,CAAC,EAAC,GAC7C;AAAA,WAAY,CAAC,eACb+B,IAAA,CAACsB,UAAU,EAAA;AAACrB,YAAAA,SAAS,EAAC,iCAAiC;AAACc,YAAAA,OAAO,EAAC,IAAI;AAAAb,YAAAA,QAAA,GACjEjC,CAAC,CAAC,oCAAoC,CAAC,EAAC,GAC3C;AAAA,WAAY,CAAC,eACb+B,IAAA,CAACsB,UAAU,EAAA;AAACrB,YAAAA,SAAS,EAAC,iCAAiC;AAACc,YAAAA,OAAO,EAAC,IAAI;AAAAb,YAAAA,QAAA,GACjEjC,CAAC,CAAC,mCAAmC,CAAC,EAAC,GAC1C;AAAA,WAAY,CAAC;SACV,CAAC,eACNkC,GAAA,CAAA,KAAA,EAAA;AAAKF,UAAAA,SAAS,EAAC,wBAAwB;UAAAC,QAAA,eACrCC,GAAA,CAACmB,UAAU,EAAA;AACTrB,YAAAA,SAAS,EAAC,6CAA6C;AACvDc,YAAAA,OAAO,EAAC,IAAI;YAAAb,QAAA,EAEXjC,CAAC,CAAC,sCAAsC;WAC/B;AAAC,SACV,CAAC;OACH,CAAC,eACNkC,GAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,SAAS,EAAC,yCAAyC;QAAAC,QAAA,eACtDC,GAAA,CAACoB,UAAU,EAAA;AAACjB,UAAAA,IAAI,EAAC,iBAAiB;UAAAJ,QAAA,EAC/B,SAAAA,QAAAA,CAAAH,YAAY,EAAA;YAAA,oBACXC,IAAA,CAAAwB,QAAA,EAAA;AAAAtB,cAAAA,QAAA,EAAA,CACGH,YAAY,CAAC0B,IAAI,CAAC7C,MAAM,CAACH,eAAe,CAACiD,GAAG,CAC3C,UAACC,cAAc,EAAE7B,KAAK,EAAA;AAAA,gBAAA,oBACpBK,GAAA,CAAA,KAAA,EAAA;AACEF,kBAAAA,SAAS,EAAC,sFAAsF;kBAAAC,QAAA,eAGhG0B,aAAA,CAACjC,cAAc,EAAA;AACPgC,oBAAAA,cAAc,EAAdA,cAAc;AAAE5B,oBAAAA,YAAY,EAAZA,YAAY;AAAED,oBAAAA,KAAK,EAALA,KAAK;oBACzC+B,GAAG,EAAEF,cAAc,CAACnC;mBACrB;AAAC,iBAAA,EALGM,KAMF,CAAC;AAAA,cAAA,CAEV,CAAC,eACDK,GAAA,CAACQ,MAAM,EAAA;AACLV,gBAAAA,SAAS,EAAC,SAAS;AACnB,gBAAA,aAAA,EAAY,6BAA6B;AACzCW,gBAAAA,IAAI,EAAEkB,IAAK;AACXC,gBAAAA,YAAY,EAAC,MAAM;AACnB5C,gBAAAA,KAAK,EAAElB,CAAC,CAAC,qCAAqC,CAAE;AAChD8C,gBAAAA,OAAO,EAAC,MAAM;gBACdI,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,kBAAA,OAAQpB,YAAY,CAACiC,IAAI,CAACzC,oBAAoB,CAAC;AAAA,gBAAA;AAAC,eACxD,CAAC;AAAA,aACF,CAAC;AAAA,UAAA;SAEK;AAAC,OACV,CAAC;AAAA,KACH,CAAC;AAAA,GACH,CAAC;AAAA,CACP,CAAC;AAEF,wBAAA,aAAe0C,IAAI,CAACZ,eAAe,CAAC;;ACvEpC,IAAMa,MAAI,GAAG,SAAPA,IAAIA,CAAGC,MAAM,EAAA;AAAA,EAAA,OACjBC,KAAK,CAACC,GAAG,IAAA9B,MAAA,CAAI1B,+BAA+B,EAAA,aAAA,CAAA,EAAe;AAAEsD,IAAAA,MAAM,EAANA;AAAO,GAAC,CAAC;AAAA,CAAA;AAExE,IAAMG,YAAY,GAAG;AAAEJ,EAAAA,IAAI,EAAJA;AAAK,CAAC;;ACF7B,IAAQjD,UAAU,GAAKH,UAAU,CAAzBG,UAAU;AAElB,IAAMsD,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAAA;AAAA,EAAA,OACpBC,QAAQ,CAAC;IACPC,QAAQ,EAAE,CAACxD,UAAU,CAAC;IACtByD,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,MAAA,OAAQJ,YAAY,CAACJ,IAAI,EAAE;AAAA,IAAA;AACpC,GAAC,CAAC;AAAA,CAAA;;ACJJ,IAAMS,SAAS,GAAG,SAAZA,SAASA,GAAS;AACtB,EAAA,IAAAC,iBAAA,GAA4BL,gBAAgB,EAAE;IAAtCM,IAAI,GAAAD,iBAAA,CAAJC,IAAI;IAAEC,SAAS,GAAAF,iBAAA,CAATE,SAAS;AAEvB,EAAA,oBACE3C,GAAA,CAAA,KAAA,EAAA;AACEF,IAAAA,SAAS,EAAC,qCAAqC;AAC/C,IAAA,aAAA,EAAY,sBAAsB;IAAAC,QAAA,eAElCC,GAAA,CAACmB,UAAU,EAAA;MAAApB,QAAA,eACTC,GAAA,CAAC4C,KAAK,EAAA;AACJC,QAAAA,OAAO,EAAC,+CAA+C;AACvDpE,QAAAA,MAAM,EAAE;AAAE5C,UAAAA,EAAE,EAAE8G,SAAS,GAAG,KAAK,GAAGD,IAAI,CAAC7G;AAAG;OAC3C;KACS;AAAC,GACV,CAAC;AAEV,CAAC;AAED,kBAAA,aAAeiG,IAAI,CAACU,SAAS,CAAC;;ACrB9B,IAAMM,kBAAkB,GAAA,EAAA,CAAA1C,MAAA,CAAM1B,+BAA+B,EAAA,cAAA,CAAc;AAE3E,IAAMqE,KAAK,GAAG,SAARA,KAAKA,GAAA;AAAA,EAAA,OAASd,KAAK,CAACC,GAAG,CAACY,kBAAkB,CAAC;AAAA,CAAA;AAEjD,IAAME,MAAM,GAAG,SAATA,MAAMA,CAAGC,OAAO,EAAA;AAAA,EAAA,OACpBhB,KAAK,CAACiB,IAAI,CAACJ,kBAAkB,EAAE;AAAEtB,IAAAA,cAAc,EAAEyB;AAAQ,GAAC,CAAC;AAAA,CAAA;AAE7D,IAAME,OAAO,GAAG,SAAVA,OAAOA,CAAGC,EAAE,EAAA;EAAA,OAAInB,KAAK,CAAA,QAAA,CAAO,CAAA,EAAA,CAAA7B,MAAA,CAAI0C,kBAAkB,EAAA,GAAA,CAAA,CAAA1C,MAAA,CAAIgD,EAAE,CAAE,CAAC;AAAA,CAAA;AAEjE,IAAMC,QAAM,GAAG,SAATA,MAAMA,CAAA3D,IAAA,EAAA;AAAA,EAAA,IAAM0D,EAAE,GAAA1D,IAAA,CAAF0D,EAAE;IAAEH,OAAO,GAAAvD,IAAA,CAAPuD,OAAO;EAAA,OAC3BhB,KAAK,CAACqB,KAAK,CAAA,EAAA,CAAAlD,MAAA,CAAI0C,kBAAkB,EAAA,GAAA,CAAA,CAAA1C,MAAA,CAAIgD,EAAE,CAAA,EAAI;AACzC5B,IAAAA,cAAc,EAAEyB;AAClB,GAAC,CAAC;AAAA,CAAA;AAEJ,IAAMM,kBAAkB,GAAG;AAAER,EAAAA,KAAK,EAALA,KAAK;AAAEC,EAAAA,MAAM,EAANA,MAAM;AAAEG,EAAAA,OAAO,EAAPA,OAAO;AAAEE,EAAAA,MAAM,EAANA;AAAO,CAAC;;;;ACZ7D,IAAQxE,mBAAiB,GAAKF,UAAU,CAAhCE,iBAAiB;AAEzB,IAAM2E,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAGjD,OAAO,EAAA;EAAA,OACrC8B,QAAQ,CAAAoB,aAAA,CAAA;IACNnB,QAAQ,EAAE,CAACzD,mBAAiB,CAAC;IAC7B0D,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,MAAA,OAAQgB,kBAAkB,CAACR,KAAK,EAAE;AAAA,IAAA;GAAA,EACtCxC,OAAO,CACX,CAAC;AAAA,CAAA;;ACTJ,IAAMmD,gBAAgB,GAAA,EAAA,CAAAtD,MAAA,CAAM1B,+BAA+B,EAAA,iBAAA,CAAiB;AAE5E,IAAM2E,MAAM,GAAG,SAATA,MAAMA,CAAGrB,MAAM,EAAA;AAAA,EAAA,OACnBC,KAAK,CAACqB,KAAK,CAACI,gBAAgB,EAAE;AAAEnF,IAAAA,aAAa,EAAEyD;AAAO,GAAC,CAAC;AAAA,CAAA;AAE1D,IAAMD,IAAI,GAAG,SAAPA,IAAIA,GAAA;AAAA,EAAA,OAASE,KAAK,CAACC,GAAG,CAACwB,gBAAgB,CAAC;AAAA,CAAA;AAE9C,IAAMC,gBAAgB,GAAG;AAAEN,EAAAA,MAAM,EAANA,MAAM;AAAEtB,EAAAA,IAAI,EAAJA;AAAK,CAAC;;ACLzC,IAAQnD,cAAc,GAAwBD,UAAU,CAAhDC,cAAc;EAAEC,iBAAiB,GAAKF,UAAU,CAAhCE,iBAAiB;AAEzC,IAAM+E,oBAAoB,GAAG,SAAvBA,oBAAoBA,GAAA;AAAA,EAAA,OACxBvB,QAAQ,CAAC;IACPC,QAAQ,EAAE,CAAC1D,cAAc,CAAC;IAC1B2D,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,MAAA,OAAQoB,gBAAgB,CAAC5B,IAAI,EAAE;AAAA,IAAA;AACxC,GAAC,CAAC;AAAA,CAAA;AAEJ,IAAM8B,sBAAsB,GAAG,SAAzBA,sBAAsBA,GAAA;AAAA,EAAA,OAC1BC,2BAA2B,CAACH,gBAAgB,CAACN,MAAM,EAAE;IACnDU,gBAAgB,EAAE,CAAC,CAACnF,cAAc,CAAC,EAAE,CAACC,iBAAiB,CAAC;AAC1D,GAAC,CAAC;AAAA,CAAA;;ACaJ,IAAMmF,aAAa,GAAG,SAAhBA,aAAaA,GAAS;AAC1B,EAAA,IAAAC,eAAA,GAAcC,cAAc,EAAE;IAAtBpG,CAAC,GAAAmG,eAAA,CAADnG,CAAC;AACT,EAAA,IAAAqG,SAAA,GAAsCC,QAAQ,CAAC,KAAK,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA9CI,IAAAA,WAAW,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,cAAc,GAAAH,UAAA,CAAA,CAAA,CAAA;AAElC,EAAA,IAAAI,qBAAA,GAGIb,oBAAoB,EAAE;IAAAc,sBAAA,GAAAD,qBAAA,CAFxB/B,IAAI;AAAAiC,IAAAA,sBAAA,GAAAD,sBAAA,KAAA,MAAA,GAA+B,EAAE,GAAAA,sBAAA;IAA7BrG,sBAAsB,GAAAsG,sBAAA,CAAtBtG,sBAAsB;IACnBuG,uBAAuB,GAAAH,qBAAA,CAAlC9B,SAAS;EAGX,IAAAkC,qBAAA,GAIIrB,uBAAuB,CAAC;AAAEsB,MAAAA,OAAO,EAAEzG;AAAuB,KAAC,CAAC;IAHxDC,eAAe,GAAAuG,qBAAA,CAArBnC,IAAI;IACOqC,yBAAyB,GAAAF,qBAAA,CAApClC,SAAS;IACTqC,YAAY,GAAAH,qBAAA,CAAZG,YAAY;AAGd,EAAA,IAAAC,qBAAA,GACEpB,sBAAsB,EAAE;IADVqB,mBAAmB,GAAAD,qBAAA,CAA3BE,MAAM;IAAkCC,UAAU,GAAAH,qBAAA,CAArBI,SAAS;AAG9C,EAAA,IAAIT,uBAAuB,IAAIG,yBAAyB,IAAIC,YAAY,EAAE;AACxE,IAAA,oBACEhF,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,gDAAgD;AAAAC,MAAAA,QAAA,eAC7DC,GAAA,CAACsF,OAAO,EAAA,EAAE;AAAC,KACR,CAAC;AAEV,EAAA;EAEA,IAAMC,YAAY,GAAG,SAAfA,YAAYA,CAAI9G,MAAM,EAAE+G,SAAS,EAAK;AAC1C,IAAA,IAAI/G,MAAM,CAACF,aAAa,EAAEiG,cAAc,CAAC,IAAI,CAAC,CAAC,KAC1CiB,yBAAyB,CAAChH,MAAM,EAAE+G,SAAS,CAAC;EACnD,CAAC;AAED,EAAA,IAAME,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGC,aAAa,EAAI;IACxCnB,cAAc,CAAC,KAAK,CAAC;IACrBmB,aAAa,CAAC,KAAK,CAAC;EACtB,CAAC;EAED,IAAMF,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAIhH,MAAM,EAAAiB,IAAA,EAAmC;AAAA,IAAA,IAA/BiG,aAAa,GAAAjG,IAAA,CAAbiG,aAAa;MAAEC,SAAS,GAAAlG,IAAA,CAATkG,SAAS;AACnEV,IAAAA,mBAAmB,CAAC1G,yBAAyB,CAACC,MAAM,CAAC,EAAE;AACrDoH,MAAAA,SAAS,EAAE,SAAXA,SAASA,GAAQ;QACfrB,cAAc,CAAC,KAAK,CAAC;QACrBmB,aAAa,CAAC,KAAK,CAAC;AACpBC,QAAAA,SAAS,CAAC;AAAEnH,UAAAA,MAAM,EAANA;AAAO,SAAC,CAAC;MACvB,CAAC;AACDqH,MAAAA,OAAO,EAAE,SAATA,OAAOA,GAAQ;QACbtB,cAAc,CAAC,KAAK,CAAC;QACrBmB,aAAa,CAAC,KAAK,CAAC;AACtB,MAAA;AACF,KAAC,CAAC;EACJ,CAAC;EAED,oBACE3F,GAAA,CAAC+F,IAAW,EAAA;AACVjG,IAAAA,SAAS,EAAC,QAAQ;AAClBkG,IAAAA,WAAW,EAAE;AACXC,MAAAA,aAAa,EAAE7H,iBAAiB,CAC9BC,sBAAsB,EACtBC,eACF,CAAC;AACD4H,MAAAA,gBAAgB,EAAEjH,iBAAiB;AACnCkH,MAAAA,cAAc,EAAE,IAAI;AACpBC,MAAAA,kBAAkB,EAAE,IAAI;AACxBC,MAAAA,QAAQ,EAAEd;KACV;IAAAxF,QAAA,EAED,SAAAA,QAAAA,CAAAuG,KAAA,EAAA;AAAA,MAAA,IAAG7H,MAAM,GAAA6H,KAAA,CAAN7H,MAAM;QAAE8H,KAAK,GAAAD,KAAA,CAALC,KAAK;QAAEX,SAAS,GAAAU,KAAA,CAATV,SAAS;QAAED,aAAa,GAAAW,KAAA,CAAbX,aAAa;MAAA,oBACzC9F,IAAA,CAAC2G,UAAU,EAAA;AACTC,QAAAA,WAAW,eACT5G,IAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,mCAAmC;UAAAC,QAAA,EAAA,cAChDC,GAAA,CAAC0G,QAAY,EAAA;AACX,YAAA,aAAA,EAAY,6BAA6B;AACzCC,YAAAA,OAAO,EAAEvB,UAAW;YAAArF,QAAA,EAEnBjC,CAAC,CAAC,2CAA2C;AAAC,WACnC,CAAC,eACfkC,GAAA,CAACQ,MAAM,EAAA;AACL,YAAA,aAAA,EAAY,0BAA0B;YACtCoG,QAAQ,EAAE,CAACL,KAAM;AACjBvH,YAAAA,KAAK,EAAElB,CAAC,CAAC,qCAAqC,CAAE;AAChD+I,YAAAA,IAAI,EAAC,OAAO;AACZjG,YAAAA,OAAO,EAAC,WAAW;AACnBI,YAAAA,OAAO,EAAE4E;AAAU,WACpB,CAAC,EACDW,KAAK,iBACJvG,GAAA,CAACmB,UAAU,EAAA;AAACrB,YAAAA,SAAS,EAAC,kBAAkB;AAACc,YAAAA,OAAO,EAAC,OAAO;YAAAb,QAAA,EACrDjC,CAAC,CAAC,yDAAyD;AAAC,WACnD,CACb;AAAA,SACE,CACN;AAAAiC,QAAAA,QAAA,gBAEDC,GAAA,CAAC8G,eAAe,EAAA,EAAE,CAAC,eACnBjH,IAAA,CAAA,KAAA,EAAA;AACEC,UAAAA,SAAS,EAAEiH,UAAU,CAAC,uBAAuB,EAAE;YAC7C,MAAM,EAAEtI,MAAM,CAACF;AACjB,WAAC,CAAE;UAAAwB,QAAA,EAAA,cAEHC,GAAA,CAACgH,MAAM,EAAA;AACLlH,YAAAA,SAAS,EAAC,aAAa;AACvB,YAAA,aAAA,EAAY,8BAA8B;YAC1C8G,QAAQ,EAAEhC,uBAAuB,IAAIQ,UAAW;AAChDhC,YAAAA,EAAE,EAAC,eAAe;AAClBpE,YAAAA,KAAK,EAAElB,CAAC,CAAC,0CAA0C,CAAE;AACrDqC,YAAAA,IAAI,EAAC,eAAe;AACpBD,YAAAA,UAAU,EAAE;AACVJ,cAAAA,SAAS,EAAE;AACb;AAAE,WACH,CAAC,eACFE,GAAA,CAACmB,UAAU,EAAA;AACT,YAAA,aAAA,EAAY,4BAA4B;AACxCP,YAAAA,OAAO,EAAC,OAAO;YAAAb,QAAA,EAEdjC,CAAC,CAAC,0CAA0C;AAAC,WACpC,CAAC;AAAA,SACV,CAAC,EACLW,MAAM,CAACF,aAAa,iBACnBsB,IAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,0DAA0D;AAAAC,UAAAA,QAAA,EAAA,cACvEC,GAAA,CAACwC,WAAS,IAAE,CAAC,eACbxC,GAAA,CAACkB,iBAAe,EAAA,EAAE,CAAC,eACnBlB,GAAA,CAACiH,OAAO,EAAA;AAACrG,YAAAA,OAAO,EAAC,SAAS;AAAAb,YAAAA,QAAA,eACxBC,GAAA,CAAA,KAAA,EAAA;AAAKF,cAAAA,SAAS,EAAC,0BAA0B;cAAAC,QAAA,eACvCC,GAAA,CAAC4C,KAAK,EAAA;AAACC,gBAAAA,OAAO,EAAC;eAA+C;aAC3D;AAAC,WACC,CAAC;AAAA,SACP,CACN,eACD7C,GAAA,CAACkH,KAAK,EAAA;AACJC,UAAAA,MAAM,EAAE5C,WAAY;AACpB6C,UAAAA,YAAY,EAAEhC,UAAW;AACzBiC,UAAAA,KAAK,EAAEvJ,CAAC,CAAC,gDAAgD,CAAE;UAC3DL,OAAO,eACLuC,GAAA,CAAC4C,KAAK,EAAA;AAACC,YAAAA,OAAO,EAAC;AAAkD,WAAE,CACpE;AACDyE,UAAAA,iBAAiB,EAAExJ,CAAC,CAClB,4DACF,CAAE;UACFyJ,OAAO,EAAE,SAATA,OAAOA,GAAA;YAAA,OAAQ7B,gBAAgB,CAACC,aAAa,CAAC;UAAA,CAAC;UAC/CU,QAAQ,EAAE,SAAVA,QAAQA,GAAA;YAAA,OACNZ,yBAAyB,CAAChH,MAAM,EAAE;AAAEkH,cAAAA,aAAa,EAAbA,aAAa;AAAEC,cAAAA,SAAS,EAATA;AAAU,aAAC,CAAC;AAAA,UAAA;AAChE,SACF,CAAC;AAAA,OACQ,CAAC;AAAA,IAAA;AACd,GACU,CAAC;AAElB,CAAC;AAED,YAAA,aAAe9D,IAAI,CAACkC,aAAa,CAAC;;;;"}
|