@bigbinary/neeto-molecules 5.1.18 → 5.1.20
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/EmailForm.js +2 -0
- package/dist/EmailForm.js.map +1 -1
- package/dist/EmailPreview.js +1 -20
- package/dist/EmailPreview.js.map +1 -1
- package/dist/GoogleFontPicker.js +1 -449
- package/dist/GoogleFontPicker.js.map +1 -1
- package/dist/IconPicker.js +6 -914
- package/dist/IconPicker.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/SendToFields.js +3 -1943
- package/dist/SendToFields.js.map +1 -1
- package/dist/ShareViaEmail.js +2 -0
- package/dist/ShareViaEmail.js.map +1 -1
- package/dist/avatar-placeholder-DEjUhVlU.js +23 -0
- package/dist/avatar-placeholder-DEjUhVlU.js.map +1 -0
- package/dist/chevron-up-B2_LTx_h.js +15 -0
- package/dist/chevron-up-B2_LTx_h.js.map +1 -0
- package/dist/cjs/EmailForm.js +2 -0
- package/dist/cjs/EmailForm.js.map +1 -1
- package/dist/cjs/EmailPreview.js +2 -39
- package/dist/cjs/EmailPreview.js.map +1 -1
- package/dist/cjs/GoogleFontPicker.js +9 -457
- package/dist/cjs/GoogleFontPicker.js.map +1 -1
- package/dist/cjs/IconPicker.js +6 -914
- package/dist/cjs/IconPicker.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/SendToFields.js +4 -1944
- package/dist/cjs/SendToFields.js.map +1 -1
- package/dist/cjs/ShareViaEmail.js +2 -0
- package/dist/cjs/ShareViaEmail.js.map +1 -1
- package/dist/cjs/avatar-placeholder-CSJpe1V0.js +44 -0
- package/dist/cjs/avatar-placeholder-CSJpe1V0.js.map +1 -0
- 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/download-B53zeKGa.js +21 -0
- package/dist/cjs/download-B53zeKGa.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/index.es-Bcx0v5Pd.js +454 -0
- package/dist/cjs/index.es-Bcx0v5Pd.js.map +1 -0
- package/dist/cjs/index.esm-Bb1Vtlp2.js +919 -0
- package/dist/cjs/index.esm-Bb1Vtlp2.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/papaparse-B5u_uWB3.js +1948 -0
- package/dist/cjs/papaparse-B5u_uWB3.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/upload-C5ZnN-d5.js +21 -0
- package/dist/cjs/upload-C5ZnN-d5.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/CalendarView.js +1 -0
- package/dist/cjs/v2/CalendarView.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/DeleteArchiveModal.js +91 -0
- package/dist/cjs/v2/DeleteArchiveModal.js.map +1 -0
- package/dist/cjs/v2/DownloadMobileAppCallout.js +43 -0
- package/dist/cjs/v2/DownloadMobileAppCallout.js.map +1 -0
- package/dist/cjs/v2/EmailForm.js +622 -0
- package/dist/cjs/v2/EmailForm.js.map +1 -0
- package/dist/cjs/v2/EmailPreview.js +138 -0
- package/dist/cjs/v2/EmailPreview.js.map +1 -0
- package/dist/cjs/v2/EmojiReactions.js +82 -0
- package/dist/cjs/v2/EmojiReactions.js.map +1 -0
- package/dist/cjs/v2/FileUpload.js +5 -19
- package/dist/cjs/v2/FileUpload.js.map +1 -1
- package/dist/cjs/v2/FinderModal.js +3 -13
- 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/GoogleFontPicker.js +130 -0
- package/dist/cjs/v2/GoogleFontPicker.js.map +1 -0
- package/dist/cjs/v2/IconPicker.js +274 -0
- package/dist/cjs/v2/IconPicker.js.map +1 -0
- 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/SendToFields.js +313 -0
- package/dist/cjs/v2/SendToFields.js.map +1 -0
- package/dist/cjs/v2/SessionEnvironment.js +479 -0
- package/dist/cjs/v2/SessionEnvironment.js.map +1 -0
- package/dist/cjs/v2/SubHeader.js +4 -18
- package/dist/cjs/v2/SubHeader.js.map +1 -1
- package/dist/copy-DhbOoOav.js +18 -0
- package/dist/copy-DhbOoOav.js.map +1 -0
- package/dist/download-CZ7Q6k7-.js +19 -0
- package/dist/download-CZ7Q6k7-.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/index.es-BQ-dr8y1.js +451 -0
- package/dist/index.es-BQ-dr8y1.js.map +1 -0
- package/dist/index.esm-DLni3-hz.js +917 -0
- package/dist/index.esm-DLni3-hz.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/papaparse-p7fkGgWo.js +1946 -0
- package/dist/papaparse-p7fkGgWo.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/upload-BNvlRoRJ.js +19 -0
- package/dist/upload-BNvlRoRJ.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/CalendarView.js +1 -0
- package/dist/v2/CalendarView.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/DeleteArchiveModal.js +89 -0
- package/dist/v2/DeleteArchiveModal.js.map +1 -0
- package/dist/v2/DownloadMobileAppCallout.js +41 -0
- package/dist/v2/DownloadMobileAppCallout.js.map +1 -0
- package/dist/v2/EmailForm.js +596 -0
- package/dist/v2/EmailForm.js.map +1 -0
- package/dist/v2/EmailPreview.js +136 -0
- package/dist/v2/EmailPreview.js.map +1 -0
- package/dist/v2/EmojiReactions.js +80 -0
- package/dist/v2/EmojiReactions.js.map +1 -0
- package/dist/v2/FileUpload.js +4 -18
- package/dist/v2/FileUpload.js.map +1 -1
- package/dist/v2/FinderModal.js +2 -12
- 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/GoogleFontPicker.js +128 -0
- package/dist/v2/GoogleFontPicker.js.map +1 -0
- package/dist/v2/IconPicker.js +272 -0
- package/dist/v2/IconPicker.js.map +1 -0
- 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/SendToFields.js +311 -0
- package/dist/v2/SendToFields.js.map +1 -0
- package/dist/v2/SessionEnvironment.js +477 -0
- package/dist/v2/SessionEnvironment.js.map +1 -0
- package/dist/v2/SubHeader.js +3 -17
- package/dist/v2/SubHeader.js.map +1 -1
- package/package.json +5 -5
- package/types/v2/DeleteArchiveModal.d.ts +16 -0
- package/types/v2/DownloadMobileAppCallout.d.ts +7 -0
- package/types/v2/EmailForm.d.ts +88 -0
- package/types/v2/EmailFormProvider.d.ts +29 -0
- package/types/v2/EmailPreview.d.ts +16 -0
- package/types/v2/EmojiReactions.d.ts +22 -0
- package/types/v2/GoogleFontPicker.d.ts +19 -0
- package/types/v2/IconPicker.d.ts +11 -0
- 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/SendToFields.d.ts +25 -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":";;;;;;;;;;;;;;;;;AAMA,IAAMA,QAAQ,GAAG,SAAXA,QAAQA,CAAAC,IAAA,EAKR;AAAA,EAAA,IAJJC,cAAc,GAAAD,IAAA,CAAdC,cAAc;IAAAC,iBAAA,GAAAF,IAAA,CACdG,YAAY;AAAZA,IAAAA,YAAY,GAAAD,iBAAA,KAAA,MAAA,GAAGE,IAAI,GAAAF,iBAAA;IAAAG,mBAAA,GAAAL,IAAA,CACnBM,cAAc;AAAdA,IAAAA,cAAc,GAAAD,mBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,mBAAA;IAAAE,iBAAA,GAAAP,IAAA,CACtBQ,YAAY;AAAZA,IAAAA,YAAY,GAAAD,iBAAA,KAAA,MAAA,GAAGH,IAAI,GAAAG,iBAAA;AAEnB,EAAA,IAAAE,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AAET,EAAA,IAAIC,QAAQ,CAACX,cAAc,CAAC,EAAE;AAC5B,IAAA,oBAAOY,GAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,OAAO,EAAE,SAATA,OAAOA,CAAEC,CAAC,EAAA;AAAA,QAAA,OAAIA,CAAC,CAACC,eAAe,EAAE;MAAA,CAAC;AAAAC,MAAAA,QAAA,EAAEhB;AAAc,KAAM,CAAC;AACvE,EAAA;AAEA,EAAA,IAAMiB,YAAY,GAAGN,QAAQ,CAACT,YAAY,CAAC;AAE3C,EAAA,IAAI,CAACe,YAAY,IAAIZ,cAAc,EAAE;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;AAEA,EAAA,oBACEO,GAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,OAAO,EAAE,SAATA,OAAOA,CAAEC,CAAC,EAAA;AAAA,MAAA,OAAIA,CAAC,CAACC,eAAe,EAAE;IAAA,CAAC;IAAAC,QAAA,eACrCJ,GAAA,CAACM,YAAY,EAAA;AACXC,MAAAA,SAAS,EAAE,CACT;AACEC,QAAAA,SAAS,EAAEH,YAAY;AACvBJ,QAAAA,OAAO,EAAEX,YAAY;AACrBmB,QAAAA,KAAK,EAAEX,CAAC,CAAC,uCAAuC,CAAC;AACjDY,QAAAA,GAAG,EAAE;AACP,OAAC,EACD;QACEF,SAAS,EAAE,CAACf,cAAc;AAC1BQ,QAAAA,OAAO,EAAEN,YAAY;AACrBc,QAAAA,KAAK,EAAEX,CAAC,CAAC,2CAA2C,CAAC;AACrDY,QAAAA,GAAG,EAAE;OACN;KAEJ;AAAC,GACC,CAAC;AAEV,CAAC;;;;ACxCD,IAAMC,MAAM,GAAG,SAATA,MAAMA,CAAAxB,IAAA,EAAsB;AAAA,EAAA,IAAhByB,SAAS,GAAAzB,IAAA,CAATyB,SAAS;AACzB,EAAA,IAAAhB,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAMe,QAAQ,GAAGD,SAAS,GACtB;AACEE,IAAAA,IAAI,EAAEC,aAAa;AACnBN,IAAAA,KAAK,EAAEX,CAAC,CAAC,6CAA6C,CAAC;AACvDkB,IAAAA,OAAO,EAAE;AACX,GAAC,GACD;AACEF,IAAAA,IAAI,EAAEG,KAAK;AACXR,IAAAA,KAAK,EAAEX,CAAC,CAAC,+CAA+C,CAAC;AACzDkB,IAAAA,OAAO,EAAE;GACV;EAEL,oBACEhB,GAAA,CAACkB,KAAK,EAAAC,eAAA,CAAAA,eAAA,KACAN,QAAQ,CAAA,EAAA,EAAA,EAAA;AACZ,IAAA,aAAA,EAAY,oBAAoB;AAChCO,IAAAA,YAAY,EAAC;AAAO,GAAA,CACrB,CAAC;AAEN,CAAC;;;;;ACfD,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAAlC,IAAA,EAwBf;AAAA,EAAA,IAvBEmC,IAAI,GAAAnC,IAAA,CAAV2B,IAAI;IAAAS,aAAA,GAAApC,IAAA,CACJqC,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,aAAA;IAAAE,UAAA,GAAAtC,IAAA,CACbsB,KAAK;AAALA,IAAAA,KAAK,GAAAgB,UAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,UAAA;IAAAC,gBAAA,GAAAvC,IAAA,CACVwC,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,gBAAA;IAAAE,cAAA,GAAAzC,IAAA,CAChB0C,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,cAAA;IAAAE,cAAA,GAAA3C,IAAA,CACd4C,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAA,MAAA,GAAGvC,IAAI,GAAAuC,cAAA;IAAApC,iBAAA,GAAAP,IAAA,CAChBQ,YAAY;AAAZA,IAAAA,YAAY,GAAAD,iBAAA,KAAA,MAAA,GAAGH,IAAI,GAAAG,iBAAA;IAAAsC,aAAA,GAAA7C,IAAA,CACnB8C,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAA,MAAA,GAAGE,SAAS,GAAAF,aAAA;IAAAG,cAAA,GAAAhD,IAAA,CACpBiD,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,cAAA;IAAAE,gBAAA,GAAAlD,IAAA,CACjBmD,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,gBAAA;IAAAE,aAAA,GAAApD,IAAA,CACnBqD,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,aAAA;IAAAE,cAAA,GAAAtD,IAAA,CAChByB,SAAS;AAATA,IAAAA,SAAS,GAAA6B,cAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,cAAA;IAAAC,aAAA,GAAAvD,IAAA,CACjBwD,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,aAAA;IAAAE,WAAA,GAAAzD,IAAA,CAChB0D,MAAM;AAANA,IAAAA,MAAM,GAAAD,WAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,WAAA;IAAApD,mBAAA,GAAAL,IAAA,CACdM,cAAc;AAAdA,IAAAA,cAAc,GAAAD,mBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,mBAAA;IAAAsD,YAAA,GAAA3D,IAAA,CACtBc,OAAO;AAAE8C,IAAAA,WAAW,GAAAD,YAAA,KAAA,MAAA,GAAGZ,SAAS,GAAAY,YAAA;IAAAE,iBAAA,GAAA7D,IAAA,CAChC8D,YAAY;AAAZA,IAAAA,YAAY,GAAAD,iBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,iBAAA;IAAAE,mBAAA,GAAA/D,IAAA,CACjBC,cAAc;AAAdA,IAAAA,cAAc,GAAA8D,mBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,mBAAA;IAAAC,eAAA,GAAAhE,IAAA,CACrBiE,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,eAAA;IAAAE,gBAAA,GAAAlE,IAAA,CACfmE,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,gBAAA;IAAAE,eAAA,GAAApE,IAAA,CAChBqE,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,eAAA;IACfnD,QAAQ,GAAAjB,IAAA,CAARiB,QAAQ;AACLqD,IAAAA,UAAU,GAAAC,wBAAA,CAAAvE,IAAA,EAAAwE,SAAA,CAAA;AAEb,EAAA,IAAA/D,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAI+C,MAAM,EAAE,OAAO,IAAI;AAEvB,EAAA,IAAMe,eAAe,GAAGtB,WAAW,IAAIvC,QAAQ,CAACgD,WAAW,CAAC;EAE5D,IAAMc,SAAS,GAAGD,eAAe,GAAG;AAAE3D,IAAAA,OAAO,EAAE8C;GAAa,GAAG,EAAE;AAEjE,EAAA,oBACE/C,GAAA,CAAC8D,OAAO,EAAA3C,aAAA,CAAAA,aAAA,CAAA;IACNwB,QAAQ,EAAE,CAACA,QAAS;AACpBoB,IAAAA,QAAQ,EAAC,KAAK;AACdC,IAAAA,OAAO,EACLrB,QAAQ,IACR7C,CAAC,CAAC,gEAAgE;AACnE,GAAA,EACGmD,YAAY,CAAA,EAAA,EAAA,EAAA;AAAA7C,IAAAA,QAAA,eAEhB6D,IAAA,CAAA,KAAA,EAAA9C,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAA;AACE,MAAA,aAAA,EAAa+C,SAAS,CAACd,UAAU,CAAC,GAAGA,UAAU,GAAG,kBAAmB;AACrEvB,MAAAA,SAAS,EAAEsC,UAAU,CACnB,6IAA6I,EAC7I;AACE,QAAA,8CAA8C,EAAExB,QAAQ;AACxD,QAAA,gBAAgB,EAAEiB;AACpB,OAAC,EACD/B,SACF;KAAE,EACEgC,SAAS,GACTJ,UAAU,CAAA,EAAA,EAAA,EAAA;AAAArD,MAAAA,QAAA,gBAEd6D,IAAA,CAAA,KAAA,EAAA;AACEpC,QAAAA,SAAS,EAAC,gCAAgC;AAC1C,QAAA,aAAA,EAAY,kBAAkB;AAAAzB,QAAAA,QAAA,gBAE9B6D,IAAA,CAAA,KAAA,EAAA;AAAKpC,UAAAA,SAAS,EAAC,mCAAmC;AAAAzB,UAAAA,QAAA,gBAChDJ,GAAA,CAAA,KAAA,EAAA;AAAK6B,YAAAA,SAAS,EAAC,wBAAwB;AAAAzB,YAAAA,QAAA,EACpCkB,IAAI,iBAAItB,GAAA,CAACsB,IAAI,EAAA;AAAC8C,cAAAA,IAAI,EAAE;aAAK;WACvB,CAAC,eACNH,IAAA,CAAA,KAAA,EAAA;AAAKpC,YAAAA,SAAS,EAAC,SAAS;YAAAzB,QAAA,EAAA,cACtBJ,GAAA,CAACqE,UAAU,EAAA;AACTxC,cAAAA,SAAS,EAAC,MAAM;AAChB,cAAA,aAAA,EAAY,wBAAwB;AACpCb,cAAAA,OAAO,EAAC,IAAI;AACZsD,cAAAA,MAAM,EAAC,UAAU;AAAAlE,cAAAA,QAAA,EAEhBK;AAAK,aACI,CAAC,eACbT,GAAA,CAACqE,UAAU,EAAA;AACTxC,cAAAA,SAAS,EAAC,aAAa;AACvB,cAAA,aAAA,EAAA,EAAA,CAAA0C,MAAA,CAAgBC,cAAc,CAAC/D,KAAK,CAAC,EAAA,0BAAA,CAA2B;AAChEO,cAAAA,OAAO,EAAC,OAAO;AAAAZ,cAAAA,QAAA,EAEduB;aACS,CAAC,EACZvB,QAAQ;AAAA,WACN,CAAC;AAAA,SACH,CAAC,EACLqE,UAAU,CAACjD,QAAQ,CAAC,iBACnBxB,GAAA,CAAA,KAAA,EAAA;AAAK6B,UAAAA,SAAS,EAAC,0BAA0B;UAAAzB,QAAA,EACtCoB,QAAQ,CAACkD,GAAG,CAAC,UAACpD,IAAI,EAAEqD,KAAK,EAAA;YAAA,oBACxB3E,GAAA,CAACsB,IAAI,EAAA;AAACO,cAAAA,SAAS,EAAC,uBAAuB;AAAauC,cAAAA,IAAI,EAAE;AAAG,aAAA,EAAhBO,KAAkB,CAAC;UAAA,CACjE;AAAC,SACC,CACN;OACE,CAAC,eACN3E,GAAA,CAAA,KAAA,EAAA;AAAK6B,QAAAA,SAAS,EAAC,yCAAyC;QAAAzB,QAAA,EACrDgC,SAAS,gBACRpC,GAAA,CAAA,KAAA,EAAA;AAAK6B,UAAAA,SAAS,EAAC,sCAAsC;AAAAzB,UAAAA,QAAA,eACnDJ,GAAA,CAAC4E,OAAO,EAAA,EAAE;SACP,CAAC,gBAENX,IAAA,CAAA,KAAA,EAAA;AAAKpC,UAAAA,SAAS,EAAC,uCAAuC;AAAAzB,UAAAA,QAAA,EAAA,CACnDkC,WAAW,iBAAItC,GAAA,CAACW,MAAM,EAAA;AAAOC,YAAAA,SAAS,EAATA;AAAS,WAAK,CAAC,EAC5C4B,QAAQ,iBACPxC,GAAA,CAAC6E,MAAM,EAAA;AACLhD,YAAAA,SAAS,EAAC,cAAc;AACxB,YAAA,aAAA,EAAY,gBAAgB;YAC5Bc,QAAQ,EAAEA,QAAQ,IAAIP,SAAU;AAChC0C,YAAAA,IAAI,EAAEtB,UAAW;AACjB/C,YAAAA,KAAK,EAAEX,CAAC,CAAC,yCAAyC,CAAE;AACpDiF,YAAAA,EAAE,EAAEzB,WAAY;AAChBtC,YAAAA,OAAO,EAAC,MAAM;AACdf,YAAAA,OAAO,EAAE8B;WACV,CACF,EACA,CAACO,WAAW,IAAI,CAACE,QAAQ,iBACxBxC,GAAA,CAAC6E,MAAM,EAAA;AACL,YAAA,aAAA,EAAY,gBAAgB;YAC5BlC,QAAQ,EAAEA,QAAQ,IAAIP,SAAU;AAChC0C,YAAAA,IAAI,EAAEtB,UAAW;AACjB/C,YAAAA,KAAK,EAAEX,CAAC,CAAC,wCAAwC,CAAE;AACnDiF,YAAAA,EAAE,EAAEzB,WAAY;AAChBtC,YAAAA,OAAO,EAAC,MAAM;AACdf,YAAAA,OAAO,EAAE8B;WACV,CACF,EACA,CAACO,WAAW,IAAIE,QAAQ,kBACvBxC,GAAA,CAACd,QAAQ,EAAA;AACDE,YAAAA,cAAc,EAAdA,cAAc;AAAEK,YAAAA,cAAc,EAAdA,cAAc;AAAEE,YAAAA,YAAY,EAAZA,YAAY;AAClDL,YAAAA,YAAY,EAAE2C;AAAS,WACxB,CACF;SACE;AACN,OACE,CAAC;KAAA,CACH;AAAC,GAAA,CACC,CAAC;AAEd;;;;"}
|
|
@@ -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":"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"}
|