\n ))}\n \n \n \n \n );\n })}\n \n )}\n \n );\n};\n\nexport default PolicyView;\n","// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { IAMPolicy, IAMStatement } from \"./types\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport {\n BackLink,\n Box,\n Button,\n DataTable,\n Grid,\n IAMPoliciesIcon,\n PageLayout,\n ProgressBar,\n RefreshIcon,\n ScreenTitle,\n SectionTitle,\n Tabs,\n TrashIcon,\n} from \"mds\";\nimport { actionsTray } from \"../Common/FormComponents/common/styleLibrary\";\n\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\n\nimport {\n CONSOLE_UI_RESOURCE,\n createPolicyPermissions,\n deletePolicyPermissions,\n getGroupPermissions,\n IAM_PAGES,\n IAM_SCOPES,\n listGroupPermissions,\n listUsersPermissions,\n permissionTooltipHelper,\n viewPolicyPermissions,\n viewUserPermissions,\n} from \"../../../common/SecureComponent/permissions\";\nimport {\n hasPermission,\n SecureComponent,\n} from \"../../../common/SecureComponent\";\n\nimport withSuspense from \"../Common/Components/withSuspense\";\n\nimport PolicyView from \"./PolicyView\";\nimport { decodeURLString, encodeURLString } from \"../../../common/utils\";\nimport {\n setErrorSnackMessage,\n setHelpName,\n setSnackBarMessage,\n} from \"../../../systemSlice\";\nimport { selFeatures } from \"../consoleSlice\";\nimport { useAppDispatch } from \"../../../store\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { Policy } from \"../../../api/consoleApi\";\nimport { api } from \"../../../api\";\nimport HelpMenu from \"../HelpMenu\";\nimport SearchBox from \"../Common/SearchBox\";\n\nconst DeletePolicy = withSuspense(React.lazy(() => import(\"./DeletePolicy\")));\n\nconst PolicyDetails = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const params = useParams();\n\n const features = useSelector(selFeatures);\n\n const [policy, setPolicy] = useState(null);\n const [policyStatements, setPolicyStatements] = useState([]);\n const [userList, setUserList] = useState([]);\n const [groupList, setGroupList] = useState([]);\n const [addLoading, setAddLoading] = useState(false);\n\n const policyName = decodeURLString(params.policyName || \"\");\n\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n const [loadingPolicy, setLoadingPolicy] = useState(true);\n const [filterUsers, setFilterUsers] = useState(\"\");\n const [loadingUsers, setLoadingUsers] = useState(true);\n const [filterGroups, setFilterGroups] = useState(\"\");\n const [loadingGroups, setLoadingGroups] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedTab, setSelectedTab] = useState(\"summary\");\n\n const ldapIsEnabled = (features && features.includes(\"ldap-idp\")) || false;\n\n const displayGroups = hasPermission(\n CONSOLE_UI_RESOURCE,\n listGroupPermissions,\n true,\n );\n\n const viewGroup = hasPermission(\n CONSOLE_UI_RESOURCE,\n getGroupPermissions,\n true,\n );\n\n const displayUsers = hasPermission(\n CONSOLE_UI_RESOURCE,\n listUsersPermissions,\n true,\n );\n\n const viewUser = hasPermission(\n CONSOLE_UI_RESOURCE,\n viewUserPermissions,\n true,\n );\n\n const displayPolicy = hasPermission(\n CONSOLE_UI_RESOURCE,\n viewPolicyPermissions,\n true,\n );\n\n const canDeletePolicy = hasPermission(\n CONSOLE_UI_RESOURCE,\n deletePolicyPermissions,\n true,\n );\n\n const canEditPolicy = hasPermission(\n CONSOLE_UI_RESOURCE,\n createPolicyPermissions,\n true,\n );\n\n const saveRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n if (canEditPolicy) {\n api.policies\n .addPolicy({\n name: policyName,\n policy: policyDefinition,\n })\n .then((_) => {\n setAddLoading(false);\n dispatch(setSnackBarMessage(\"Policy successfully updated\"));\n refreshPolicyDetails();\n })\n .catch((err) => {\n setAddLoading(false);\n dispatch(\n setErrorSnackMessage({\n errorMessage: \"There was an error updating the Policy \",\n detailedError:\n \"There was an error updating the Policy: \" +\n (err.error.detailedMessage || \"\") +\n \". Please check Policy syntax.\",\n }),\n );\n });\n } else {\n setAddLoading(false);\n }\n };\n\n useEffect(() => {\n const loadUsersForPolicy = () => {\n if (loadingUsers) {\n if (displayUsers && !ldapIsEnabled) {\n api.policies\n .listUsersForPolicy(encodeURLString(policyName))\n .then((result) => {\n setUserList(result.data ?? []);\n setLoadingUsers(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoadingUsers(false);\n });\n } else {\n setLoadingUsers(false);\n }\n }\n };\n\n const loadGroupsForPolicy = () => {\n if (loadingGroups) {\n if (displayGroups && !ldapIsEnabled) {\n api.policies\n .listGroupsForPolicy(encodeURLString(policyName))\n .then((result) => {\n setGroupList(result.data ?? []);\n setLoadingGroups(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoadingGroups(false);\n });\n } else {\n setLoadingGroups(false);\n }\n }\n };\n const loadPolicyDetails = () => {\n if (loadingPolicy) {\n if (displayPolicy) {\n api.policy\n .policyInfo(encodeURLString(policyName))\n .then((result) => {\n if (result.data) {\n setPolicy(result.data);\n setPolicyDefinition(\n result\n ? JSON.stringify(JSON.parse(result.data?.policy!), null, 4)\n : \"\",\n );\n const pol: IAMPolicy = JSON.parse(result.data?.policy!);\n setPolicyStatements(pol.Statement);\n }\n setLoadingPolicy(false);\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoadingPolicy(false);\n });\n } else {\n setLoadingPolicy(false);\n }\n }\n };\n\n if (loadingPolicy) {\n loadPolicyDetails();\n loadUsersForPolicy();\n loadGroupsForPolicy();\n }\n }, [\n policyName,\n loadingPolicy,\n loadingUsers,\n loadingGroups,\n setUserList,\n setGroupList,\n setPolicyDefinition,\n setPolicy,\n setLoadingUsers,\n setLoadingGroups,\n displayUsers,\n displayGroups,\n displayPolicy,\n ldapIsEnabled,\n dispatch,\n ]);\n\n const resetForm = () => {\n setPolicyDefinition(\"{}\");\n };\n\n const validSave = policyName.trim() !== \"\";\n\n const deletePolicy = () => {\n setDeleteOpen(true);\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n navigate(IAM_PAGES.POLICIES);\n };\n\n const userViewAction = (user: any) => {\n navigate(`${IAM_PAGES.USERS}/${encodeURLString(user)}`);\n };\n const userTableActions = [\n {\n type: \"view\",\n onClick: userViewAction,\n disableButtonFunction: () => !viewUser,\n },\n ];\n\n const filteredUsers = userList.filter((elementItem) =>\n elementItem.includes(filterUsers),\n );\n\n const groupViewAction = (group: any) => {\n navigate(`${IAM_PAGES.GROUPS}/${encodeURLString(group)}`);\n };\n\n const groupTableActions = [\n {\n type: \"view\",\n onClick: groupViewAction,\n disableButtonFunction: () => !viewGroup,\n },\n ];\n\n const filteredGroups = groupList.filter((elementItem) =>\n elementItem.includes(filterGroups),\n );\n\n const refreshPolicyDetails = () => {\n setLoadingUsers(true);\n setLoadingGroups(true);\n setLoadingPolicy(true);\n };\n\n useEffect(() => {\n dispatch(setHelpName(\"policy_details_summary\"));\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {deleteOpen && (\n \n )}\n \n navigate(IAM_PAGES.POLICIES)}\n />\n \n }\n actions={}\n />\n \n }\n title={policyName}\n subTitle={IAM Policy}\n actions={\n \n \n \n }\n onClick={deletePolicy}\n disabled={!canDeletePolicy}\n />\n \n \n\n \n }\n onClick={() => {\n refreshPolicyDetails();\n }}\n />\n \n \n }\n sx={{ marginBottom: 15 }}\n />\n \n \n \n dispatch(setHelpName(\"policy_details_summary\"))\n }\n >\n \n Policy Summary\n \n \n \n \n \n \n ),\n },\n {\n tabConfig: {\n label: \"Users\",\n disabled: !displayUsers || ldapIsEnabled,\n id: \"users\",\n },\n content: (\n \n \n dispatch(setHelpName(\"policy_details_users\"))\n }\n >\n \n Users\n \n \n {userList.length > 0 && (\n \n {\n setFilterUsers(val);\n }}\n />\n \n )}\n \n \n \n \n ),\n },\n {\n tabConfig: {\n label: \"Groups\",\n disabled: !displayGroups || ldapIsEnabled,\n id: \"groups\",\n },\n content: (\n \n \n dispatch(setHelpName(\"policy_details_groups\"))\n }\n >\n \n Groups\n \n \n {groupList.length > 0 && (\n \n {\n setFilterGroups(val);\n }}\n />\n \n )}\n \n \n \n \n ),\n },\n {\n tabConfig: {\n label: \"Raw Policy\",\n disabled: !displayPolicy,\n id: \"raw-policy\",\n },\n content: (\n \n \n dispatch(setHelpName(\"policy_details_policy\"))\n }\n >\n \n Raw Policy\n \n \n \n \n ),\n },\n ]}\n currentTabOrPath={selectedTab}\n onTabClick={(tab) => setSelectedTab(tab)}\n />\n \n \n \n );\n};\n\nexport default PolicyDetails;\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n"],"names":["_ref","value","_ref$label","label","_ref$tooltip","tooltip","_ref$mode","mode","onChange","_ref$editorHeight","editorHeight","_jsx","CodeEditor","helpTools","Fragment","children","TooltipWrapper","CopyToClipboard","text","Button","type","id","icon","CopyIcon","color","variant","STATUS_COLORS","RED","GREEN","YELLOW","getDriveStatusColor","activeDisks","totalDrives","serverStatusColor","health_status","getNetworkStatusColor","activeNetwork","networkTotal","rowGridStyle","display","gridTemplateColumns","gap","Highlight","_ref$search","search","_ref$children","txtParts","RegExp","concat","arguments","length","undefined","replace","escapeRegExp","parts","String","split","map","part","index","test","_ref2","policyStatements","_useState","useState","_useState2","_slicedToArray","filter","setFilter","_jsxs","Grid","container","item","xs","sx","alignItems","sm","fontWeight","justifyContent","SearchBox","placeholder","maxWidth","borderBottom","borderTop","paddingTop","stmt","i","effect","Effect","isAllow","Box","className","fontSize","padding","marginRight","fill","height","width","EnabledIcon","DisabledIcon","Action","act","actIndex","Resource","res","resIndex","DeletePolicy","withSuspense","React","dispatch","useAppDispatch","navigate","useNavigate","params","useParams","features","useSelector","selFeatures","policy","setPolicy","_useState3","_useState4","setPolicyStatements","_useState5","_useState6","userList","setUserList","_useState7","_useState8","groupList","setGroupList","_useState9","_useState10","addLoading","setAddLoading","policyName","decodeURLString","_useState11","_useState12","policyDefinition","setPolicyDefinition","_useState13","_useState14","loadingPolicy","setLoadingPolicy","_useState15","_useState16","filterUsers","setFilterUsers","_useState17","_useState18","loadingUsers","setLoadingUsers","_useState19","_useState20","filterGroups","setFilterGroups","_useState21","_useState22","loadingGroups","setLoadingGroups","_useState23","_useState24","deleteOpen","setDeleteOpen","_useState25","_useState26","selectedTab","setSelectedTab","ldapIsEnabled","includes","displayGroups","hasPermission","CONSOLE_UI_RESOURCE","listGroupPermissions","viewGroup","getGroupPermissions","displayUsers","listUsersPermissions","viewUser","viewUserPermissions","displayPolicy","viewPolicyPermissions","canDeletePolicy","deletePolicyPermissions","canEditPolicy","createPolicyPermissions","useEffect","api","policyInfo","encodeURLString","then","result","data","_result$data3","_result$data4","JSON","stringify","parse","pol","Statement","catch","err","setErrorSnackMessage","policies","listUsersForPolicy","_result$data","listGroupsForPolicy","_result$data2","validSave","trim","userTableActions","onClick","user","IAM_PAGES","USERS","disableButtonFunction","filteredUsers","elementItem","groupTableActions","group","GROUPS","filteredGroups","refreshPolicyDetails","setHelpName","selectedPolicy","closeDeleteModalAndRefresh","refresh","POLICIES","PageHeaderWrapper","BackLink","actions","HelpMenu","PageLayout","ScreenTitle","IAMPoliciesIcon","title","subTitle","SecureComponent","scopes","IAM_SCOPES","ADMIN_DELETE_POLICY","resource","errorProps","disabled","permissionTooltipHelper","TrashIcon","RefreshIcon","marginBottom","Tabs","options","tabConfig","content","onMouseMove","SectionTitle","separator","withBorders","PolicyView","_objectSpread","actionsTray","val","DataTable","itemActions","columns","elementKey","isLoading","records","entityName","idField","customPaperHeight","noValidate","autoComplete","onSubmit","e","preventDefault","addPolicy","name","_","setSnackBarMessage","errorMessage","detailedError","error","detailedMessage","CodeMirrorWrapper","ADMIN_CREATE_POLICY","ProgressBar","currentTabOrPath","onTabClick","tab","deselectCurrent","require","clipboardToIE11Formatting","module","exports","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","clipboardData","console","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","copyKey","navigator","userAgent","prompt","removeRange","removeAllRanges","removeChild","_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","target","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_defineProperties","props","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","this","self","TypeError","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","Constructor","protoProps","staticProps","_super","_this","instance","_classCallCheck","_len","args","Array","_key","event","_this$props","elem","Children","only","_this$props2","cloneElement","PureComponent","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js b/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js
new file mode 100644
index 0000000000..a62673a9c1
--- /dev/null
+++ b/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js
@@ -0,0 +1,2 @@
+"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1260],{1260:function(t,e,o){o.r(e);var n=o(72791),c=o(57689),a=o(44690),r=o(45248),u=o(87995),s=o(46078),i=o(81207),l=o(7241),f=o(80184);e.default=function(){var t=(0,a.TL)(),e=(0,c.s0)();return(0,n.useEffect)((function(){!function(){var o=function(){(0,r.Ov)(),t((0,u.wr)(!1)),t({type:"socket/OBDisconnect"}),localStorage.setItem("userLoggedIn",""),localStorage.setItem("redirect-path",""),t((0,s.lX)()),e("/login")},n=localStorage.getItem("auth-state");i.Z.invoke("POST","/api/v1/logout",{state:n}).then((function(){o()})).catch((function(t){console.error(t),o()}))}()}),[t,e]),(0,f.jsx)(l.Z,{})}}}]);
+//# sourceMappingURL=1260.1bfa3ef3.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js.map b/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js.map
new file mode 100644
index 0000000000..abf1cb1350
--- /dev/null
+++ b/portal-ui/build/static/js/1260.1bfa3ef3.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/1260.1bfa3ef3.chunk.js","mappings":"yNA2DA,UAjCmB,WACjB,IAAMA,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MA4BjB,OA3BAC,EAAAA,EAAAA,YAAU,YACO,WACb,IAAMC,EAAgB,YACpBC,EAAAA,EAAAA,MACAN,GAASO,EAAAA,EAAAA,KAAW,IAGpBP,EAAS,CAAEQ,KAAM,wBAEjBC,aAAaC,QAAQ,eAAgB,IACrCD,aAAaC,QAAQ,gBAAiB,IACtCV,GAASW,EAAAA,EAAAA,OACTT,EAAS,SACX,EACMU,EAAQH,aAAaI,QAAQ,cACnCC,EAAAA,EACGC,OAAO,OAAO,iBAAmB,CAAEH,MAAAA,IACnCI,MAAK,WACJX,GACF,IACCY,OAAM,SAACC,GACNC,QAAQC,MAAMF,GACdb,GACF,GACJ,CACAgB,EACF,GAAG,CAACrB,EAAUE,KACPoB,EAAAA,EAAAA,KAACC,EAAAA,EAAgB,GAC1B,C","sources":["screens/LogoutPage/LogoutPage.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../store\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport { clearSession } from \"../../common/utils\";\nimport { userLogged } from \"../../systemSlice\";\nimport { resetSession } from \"../Console/consoleSlice\";\nimport api from \"../../common/api\";\nimport LoadingComponent from \"../../common/LoadingComponent\";\n\nconst LogoutPage = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useEffect(() => {\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n dispatch(userLogged(false));\n\n // Disconnect OB Websocket\n dispatch({ type: \"socket/OBDisconnect\" });\n\n localStorage.setItem(\"userLoggedIn\", \"\");\n localStorage.setItem(\"redirect-path\", \"\");\n dispatch(resetSession());\n navigate(`/login`);\n };\n const state = localStorage.getItem(\"auth-state\");\n api\n .invoke(\"POST\", `/api/v1/logout`, { state })\n .then(() => {\n deleteSession();\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n deleteSession();\n });\n };\n logout();\n }, [dispatch, navigate]);\n return ;\n};\n\nexport default LogoutPage;\n"],"names":["dispatch","useAppDispatch","navigate","useNavigate","useEffect","deleteSession","clearSession","userLogged","type","localStorage","setItem","resetSession","state","getItem","api","invoke","then","catch","err","console","error","logout","_jsx","LoadingComponent"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1260.a025e586.chunk.js b/portal-ui/build/static/js/1260.a025e586.chunk.js
deleted file mode 100644
index 7ea351f55b..0000000000
--- a/portal-ui/build/static/js/1260.a025e586.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1260],{1260:function(t,e,o){o.r(e);var n=o(72791),a=o(57689),u=o(81551),c=o(45248),l=o(87995),r=o(46078),i=o(81207),s=o(7241),f=o(80184);e.default=function(){var t=(0,u.TL)(),e=(0,a.s0)();return(0,n.useEffect)((function(){!function(){var o=function(){(0,c.Ov)(),t((0,l.wr)(!1)),localStorage.setItem("userLoggedIn",""),localStorage.setItem("redirect-path",""),t((0,r.lX)()),e("/login")},n=localStorage.getItem("auth-state");i.Z.invoke("POST","/api/v1/logout",{state:n}).then((function(){o()})).catch((function(t){console.log(t),o()}))}()}),[t,e]),(0,f.jsx)(s.Z,{})}}}]);
-//# sourceMappingURL=1260.a025e586.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1260.a025e586.chunk.js.map b/portal-ui/build/static/js/1260.a025e586.chunk.js.map
deleted file mode 100644
index 26cbb82737..0000000000
--- a/portal-ui/build/static/js/1260.a025e586.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/1260.a025e586.chunk.js","mappings":"yNAuDA,UA7BmB,WACjB,IAAMA,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAwBjB,OAvBAC,EAAAA,EAAAA,YAAU,YACO,WACb,IAAMC,EAAgB,YACpBC,EAAAA,EAAAA,MACAN,GAASO,EAAAA,EAAAA,KAAW,IACpBC,aAAaC,QAAQ,eAAgB,IACrCD,aAAaC,QAAQ,gBAAiB,IACtCT,GAASU,EAAAA,EAAAA,OACTR,EAAS,SACX,EACMS,EAAQH,aAAaI,QAAQ,cACnCC,EAAAA,EACGC,OAAO,OAAO,iBAAmB,CAAEH,MAAAA,IACnCI,MAAK,WACJV,GACF,IACCW,OAAM,SAACC,GACNC,QAAQC,IAAIF,GACZZ,GACF,GACJ,CACAe,EACF,GAAG,CAACpB,EAAUE,KACPmB,EAAAA,EAAAA,KAACC,EAAAA,EAAgB,GAC1B,C","sources":["screens/LogoutPage/LogoutPage.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAppDispatch } from \"../../store\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport { clearSession } from \"../../common/utils\";\nimport { userLogged } from \"../../systemSlice\";\nimport { resetSession } from \"../Console/consoleSlice\";\nimport api from \"../../common/api\";\nimport LoadingComponent from \"../../common/LoadingComponent\";\n\nconst LogoutPage = () => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n useEffect(() => {\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n dispatch(userLogged(false));\n localStorage.setItem(\"userLoggedIn\", \"\");\n localStorage.setItem(\"redirect-path\", \"\");\n dispatch(resetSession());\n navigate(`/login`);\n };\n const state = localStorage.getItem(\"auth-state\");\n api\n .invoke(\"POST\", `/api/v1/logout`, { state })\n .then(() => {\n deleteSession();\n })\n .catch((err: ErrorResponseHandler) => {\n console.log(err);\n deleteSession();\n });\n };\n logout();\n }, [dispatch, navigate]);\n return ;\n};\n\nexport default LogoutPage;\n"],"names":["dispatch","useAppDispatch","navigate","useNavigate","useEffect","deleteSession","clearSession","userLogged","localStorage","setItem","resetSession","state","getItem","api","invoke","then","catch","err","console","log","logout","_jsx","LoadingComponent"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1329.79996c21.chunk.js b/portal-ui/build/static/js/1329.df839007.chunk.js
similarity index 95%
rename from portal-ui/build/static/js/1329.79996c21.chunk.js
rename to portal-ui/build/static/js/1329.df839007.chunk.js
index 6ee9d56c8d..353dbfc988 100644
--- a/portal-ui/build/static/js/1329.79996c21.chunk.js
+++ b/portal-ui/build/static/js/1329.df839007.chunk.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1329],{51270:function(e,n,t){var i=t(29439),r=t(72791),o=t(29945),s=t(87995),c=t(81551),a=t(9505),u=t(23508),l=t(80184);n.Z=function(e){var n=e.closeDeleteModalAndRefresh,t=e.deleteOpen,d=e.idp,f=e.idpType,p=(0,c.TL)(),x=(0,a.Z)((function(e){n(!0),p((0,s.cN)(!0===e.restart))}),(function(e){return p((0,s.Ih)(e))})),j=(0,i.Z)(x,2),C=j[0],h=j[1];if(!d)return null;var D="_"===d?"Default":d;return(0,l.jsx)(u.Z,{title:"Delete ".concat(D),confirmText:"Delete",isOpen:t,titleIcon:(0,l.jsx)(o.NvT,{}),isLoading:C,onConfirm:function(){h("DELETE","/api/v1/idp/".concat(f,"/").concat(d))},onClose:function(){return n(!1)},confirmButtonProps:{disabled:C},confirmationContent:(0,l.jsxs)(r.Fragment,{children:["Are you sure you want to delete IDP ",(0,l.jsx)("b",{children:D})," ","configuration? ",(0,l.jsx)("br",{})]})})}},31329:function(e,n,t){t.r(n),t.d(n,{default:function(){return Z}});var i=t(72791),r=t(1413),o=t(74165),s=t(15861),c=t(29439),a=t(29945),u=t(57689),l=t(31776),d=t(82342),f=t(81551),p=t(56087),x=t(38442),j=t(87995),C=t(23814),h=t(27454),D=t(51270),m=t(47974),y=t(99670),b=t(80184),F=function(e){var n=e.idpType,t=(0,f.TL)(),F=(0,u.s0)(),Z=(0,i.useState)(!1),_=(0,c.Z)(Z,2),A=_[0],I=_[1],T=(0,i.useState)(""),g=(0,c.Z)(T,2),N=g[0],v=g[1],E=(0,i.useState)(!1),k=(0,c.Z)(E,2),P=k[0],O=k[1],M=(0,i.useState)([]),w=(0,c.Z)(M,2),U=w[0],G=w[1],K=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]),L=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]),S=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]);(0,i.useEffect)((function(){R()}),[]),(0,i.useEffect)((function(){P&&(S?l.h.idp.listConfigurations(n).then((function(e){O(!1),e.data.results&&G(e.data.results.map((function(e){return e.name="_"===e.name?"Default":e.name,e.enabled=!0===e.enabled?"Enabled":"Disabled",e})))})).catch((function(e){O(!1),t((0,j.Ih)((0,d.g)(e.error)))})):O(!1))}),[P,O,G,t,S,n]);var R=function(){O(!0)},B=function(){var e=(0,s.Z)((0,o.Z)().mark((function e(n){return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:I(!1),n&&R();case 2:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),z=[{type:"view",onClick:function(e){var t="Default"===e.name?"_":e.name;F("/identity/idp/".concat(n,"/configurations/").concat(t))},disableButtonFunction:function(){return!L}},{type:"delete",onClick:function(e){I(!0),v(e="Default"===e?"_":e)},sendOnlyId:!0,disableButtonFunction:function(e){return!K||"Default"===e}}];return(0,i.useEffect)((function(){t((0,j.Sc)("idp_configs"))}),[]),(0,b.jsxs)(i.Fragment,{children:[A&&(0,b.jsx)(D.Z,{deleteOpen:A,idp:N,idpType:n,closeDeleteModalAndRefresh:B}),(0,b.jsx)(m.Z,{label:"".concat(n.toUpperCase()," Configurations"),actions:(0,b.jsx)(y.Z,{})}),(0,b.jsx)(a.Xgh,{children:(0,b.jsxs)(a.rjZ,{container:!0,children:[(0,b.jsxs)(a.rjZ,{item:!0,xs:12,sx:(0,r.Z)((0,r.Z)({},C.OR.actionsTray),{},{justifyContent:"flex-end",gap:8}),children:[(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(h.Z,{tooltip:"Refresh",children:(0,b.jsx)(a.zxk,{id:"refresh-keys",variant:"regular",icon:(0,b.jsx)(a.DuK,{}),onClick:function(){return O(!0)}})})}),(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(h.Z,{tooltip:"Create ".concat(n," configuration"),children:(0,b.jsx)(a.zxk,{id:"create-idp",label:"Create Configuration",variant:"callAction",icon:(0,b.jsx)(a.dtP,{}),onClick:function(){return F("/identity/idp/".concat(n,"/configurations/add-idp"))}})})})]}),(0,b.jsx)(a.rjZ,{item:!0,xs:12,children:(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(a.wQF,{itemActions:z,columns:[{label:"Name",elementKey:"name"},{label:"Type",elementKey:"type"},{label:"Enabled",elementKey:"enabled"}],isLoading:P,records:U,entityName:"Keys",idField:"name"})})})]})})]})},Z=function(){return(0,b.jsx)(F,{idpType:"openid"})}}}]);
-//# sourceMappingURL=1329.79996c21.chunk.js.map
\ No newline at end of file
+"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1329],{51270:function(e,n,t){var i=t(29439),r=t(72791),o=t(29945),s=t(87995),c=t(44690),a=t(9505),u=t(23508),l=t(80184);n.Z=function(e){var n=e.closeDeleteModalAndRefresh,t=e.deleteOpen,d=e.idp,f=e.idpType,p=(0,c.TL)(),x=(0,a.Z)((function(e){n(!0),p((0,s.cN)(!0===e.restart))}),(function(e){return p((0,s.Ih)(e))})),j=(0,i.Z)(x,2),C=j[0],h=j[1];if(!d)return null;var D="_"===d?"Default":d;return(0,l.jsx)(u.Z,{title:"Delete ".concat(D),confirmText:"Delete",isOpen:t,titleIcon:(0,l.jsx)(o.NvT,{}),isLoading:C,onConfirm:function(){h("DELETE","/api/v1/idp/".concat(f,"/").concat(d))},onClose:function(){return n(!1)},confirmButtonProps:{disabled:C},confirmationContent:(0,l.jsxs)(r.Fragment,{children:["Are you sure you want to delete IDP ",(0,l.jsx)("b",{children:D})," ","configuration? ",(0,l.jsx)("br",{})]})})}},31329:function(e,n,t){t.r(n),t.d(n,{default:function(){return Z}});var i=t(72791),r=t(1413),o=t(74165),s=t(15861),c=t(29439),a=t(29945),u=t(57689),l=t(31776),d=t(82342),f=t(44690),p=t(56087),x=t(38442),j=t(87995),C=t(23814),h=t(27454),D=t(51270),m=t(47974),y=t(99670),b=t(80184),F=function(e){var n=e.idpType,t=(0,f.TL)(),F=(0,u.s0)(),Z=(0,i.useState)(!1),_=(0,c.Z)(Z,2),A=_[0],I=_[1],T=(0,i.useState)(""),g=(0,c.Z)(T,2),N=g[0],v=g[1],E=(0,i.useState)(!1),k=(0,c.Z)(E,2),P=k[0],O=k[1],M=(0,i.useState)([]),w=(0,c.Z)(M,2),U=w[0],G=w[1],K=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]),L=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]),S=(0,x.F)(p.C3,[p.Ft.ADMIN_CONFIG_UPDATE]);(0,i.useEffect)((function(){R()}),[]),(0,i.useEffect)((function(){P&&(S?l.h.idp.listConfigurations(n).then((function(e){O(!1),e.data.results&&G(e.data.results.map((function(e){return e.name="_"===e.name?"Default":e.name,e.enabled=!0===e.enabled?"Enabled":"Disabled",e})))})).catch((function(e){O(!1),t((0,j.Ih)((0,d.g)(e.error)))})):O(!1))}),[P,O,G,t,S,n]);var R=function(){O(!0)},B=function(){var e=(0,s.Z)((0,o.Z)().mark((function e(n){return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:I(!1),n&&R();case 2:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),z=[{type:"view",onClick:function(e){var t="Default"===e.name?"_":e.name;F("/identity/idp/".concat(n,"/configurations/").concat(t))},disableButtonFunction:function(){return!L}},{type:"delete",onClick:function(e){I(!0),v(e="Default"===e?"_":e)},sendOnlyId:!0,disableButtonFunction:function(e){return!K||"Default"===e}}];return(0,i.useEffect)((function(){t((0,j.Sc)("idp_configs"))}),[]),(0,b.jsxs)(i.Fragment,{children:[A&&(0,b.jsx)(D.Z,{deleteOpen:A,idp:N,idpType:n,closeDeleteModalAndRefresh:B}),(0,b.jsx)(m.Z,{label:"".concat(n.toUpperCase()," Configurations"),actions:(0,b.jsx)(y.Z,{})}),(0,b.jsx)(a.Xgh,{children:(0,b.jsxs)(a.rjZ,{container:!0,children:[(0,b.jsxs)(a.rjZ,{item:!0,xs:12,sx:(0,r.Z)((0,r.Z)({},C.OR.actionsTray),{},{justifyContent:"flex-end",gap:8}),children:[(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(h.Z,{tooltip:"Refresh",children:(0,b.jsx)(a.zxk,{id:"refresh-keys",variant:"regular",icon:(0,b.jsx)(a.DuK,{}),onClick:function(){return O(!0)}})})}),(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(h.Z,{tooltip:"Create ".concat(n," configuration"),children:(0,b.jsx)(a.zxk,{id:"create-idp",label:"Create Configuration",variant:"callAction",icon:(0,b.jsx)(a.dtP,{}),onClick:function(){return F("/identity/idp/".concat(n,"/configurations/add-idp"))}})})})]}),(0,b.jsx)(a.rjZ,{item:!0,xs:12,children:(0,b.jsx)(x.s,{scopes:[p.Ft.ADMIN_CONFIG_UPDATE],resource:p.C3,errorProps:{disabled:!0},children:(0,b.jsx)(a.wQF,{itemActions:z,columns:[{label:"Name",elementKey:"name"},{label:"Type",elementKey:"type"},{label:"Enabled",elementKey:"enabled"}],isLoading:P,records:U,entityName:"Keys",idField:"name"})})})]})})]})},Z=function(){return(0,b.jsx)(F,{idpType:"openid"})}}}]);
+//# sourceMappingURL=1329.df839007.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1329.79996c21.chunk.js.map b/portal-ui/build/static/js/1329.df839007.chunk.js.map
similarity index 99%
rename from portal-ui/build/static/js/1329.79996c21.chunk.js.map
rename to portal-ui/build/static/js/1329.df839007.chunk.js.map
index f5c5d90a9d..108b5a525f 100644
--- a/portal-ui/build/static/js/1329.79996c21.chunk.js.map
+++ b/portal-ui/build/static/js/1329.df839007.chunk.js.map
@@ -1 +1 @@
-{"version":3,"file":"static/js/1329.79996c21.chunk.js","mappings":"wMAmFA,IAjDoC,SAAHA,GAKS,IAJxCC,EAA0BD,EAA1BC,2BACAC,EAAUF,EAAVE,WACAC,EAAGH,EAAHG,IACAC,EAAOJ,EAAPI,QAEMC,GAAWC,EAAAA,EAAAA,MASjBC,GAAyCC,EAAAA,EAAAA,IARpB,SAACC,GACpBR,GAA2B,GAC3BI,GAASK,EAAAA,EAAAA,KAAsC,IAAhBD,EAAIE,SACrC,IACmB,SAACC,GAAyB,OAC3CP,GAASQ,EAAAA,EAAAA,IAAqBD,GAAM,IAGmCE,GAAAC,EAAAA,EAAAA,GAAAR,EAAA,GAAlES,EAAaF,EAAA,GAAEG,EAAeH,EAAA,GAErC,IAAKX,EACH,OAAO,KAGT,IAIMe,EAAsB,MAARf,EAAc,UAAYA,EAE9C,OACEgB,EAAAA,EAAAA,KAACC,EAAAA,EAAa,CACZC,MAAK,UAAAC,OAAYJ,GACjBK,YAAa,SACbC,OAAQtB,EACRuB,WAAWN,EAAAA,EAAAA,KAACO,EAAAA,IAAiB,IAC7BC,UAAWX,EACXY,UAboB,WACtBX,EAAgB,SAAS,eAADK,OAAiBlB,EAAO,KAAAkB,OAAInB,GACtD,EAYI0B,QAtBY,WAAH,OAAS5B,GAA2B,EAAO,EAuBpD6B,mBAAoB,CAClBC,SAAUf,GAEZgB,qBACEC,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,CAAC,wCAC4BhB,EAAAA,EAAAA,KAAA,KAAAgB,SAAIjB,IAAiB,IAAI,mBAC9CC,EAAAA,EAAAA,KAAA,aAKzB,C,yRCyIA,EAjL0B,SAAHnB,GAA6C,IAAvCI,EAAOJ,EAAPI,QACrBC,GAAWC,EAAAA,EAAAA,MACX8B,GAAWC,EAAAA,EAAAA,MAEjBC,GAAoCC,EAAAA,EAAAA,WAAkB,GAAMC,GAAAzB,EAAAA,EAAAA,GAAAuB,EAAA,GAArDpC,EAAUsC,EAAA,GAAEC,EAAaD,EAAA,GAChCE,GAAsCH,EAAAA,EAAAA,UAAiB,IAAGI,GAAA5B,EAAAA,EAAAA,GAAA2B,EAAA,GAAnDE,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAClCG,GAA8BP,EAAAA,EAAAA,WAAkB,GAAMQ,GAAAhC,EAAAA,EAAAA,GAAA+B,EAAA,GAA/CE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GAC1BG,GAA8BX,EAAAA,EAAAA,UAAgB,IAAGY,GAAApC,EAAAA,EAAAA,GAAAmC,EAAA,GAA1CE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GAEpBG,GAAYC,EAAAA,EAAAA,GAAcC,EAAAA,GAAqB,CACnDC,EAAAA,GAAWC,sBAGPC,GAAUJ,EAAAA,EAAAA,GAAcC,EAAAA,GAAqB,CACjDC,EAAAA,GAAWC,sBAGPE,GAAcL,EAAAA,EAAAA,GAAcC,EAAAA,GAAqB,CACrDC,EAAAA,GAAWC,uBAGbG,EAAAA,EAAAA,YAAU,WACRC,GACF,GAAG,KAEHD,EAAAA,EAAAA,YAAU,WACJb,IACEY,EACFG,EAAAA,EAAI5D,IACD6D,mBAAmB5D,GACnB6D,MAAK,SAACxD,GACLwC,GAAW,GACPxC,EAAIyD,KAAKC,SACXd,EACE5C,EAAIyD,KAAKC,QAAQC,KAAI,SAACC,GAGpB,OAFAA,EAAEC,KAAkB,MAAXD,EAAEC,KAAe,UAAYD,EAAEC,KACxCD,EAAEE,SAAwB,IAAdF,EAAEE,QAAmB,UAAY,WACtCF,CACT,IAGN,IACCG,OAAM,SAAC5D,GACNqC,GAAW,GACX5C,GAASQ,EAAAA,EAAAA,KAAqB4D,EAAAA,EAAAA,GAAe7D,EAAI8D,QACnD,IAEFzB,GAAW,GAGjB,GAAG,CAACD,EAASC,EAAYI,EAAYhD,EAAUuD,EAAaxD,IAE5D,IAAM0D,EAAe,WACnBb,GAAW,EACb,EAaMhD,EAA0B,eAAA0E,GAAAC,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAG,SAAAC,EAAOC,GAAgB,OAAAH,EAAAA,EAAAA,KAAAI,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACxD3C,GAAc,GAEVuC,GACFlB,IACD,wBAAAoB,EAAAG,OAAA,GAAAN,EAAA,KACF,gBAN+BO,GAAA,OAAAX,EAAAY,MAAA,KAAAC,UAAA,KAQ1BC,EAAe,CACnB,CACEC,KAAM,OACNC,QAhBe,SAACxF,GAClB,IAAImE,EAAoB,YAAbnE,EAAImE,KAAqB,IAAMnE,EAAImE,KAC9ClC,EAAS,iBAADd,OAAkBlB,EAAO,oBAAAkB,OAAmBgD,GACtD,EAcIsB,sBAAuB,kBAAOjC,CAAO,GAEvC,CACE+B,KAAM,SACNC,QA3BqB,SAACxF,GACxBsC,GAAc,GAEdI,EADA1C,EAAc,YAARA,EAAoB,IAAMA,EAElC,EAwBI0F,YAAY,EACZD,sBAAuB,SAACzF,GAAW,OAAMmD,GAAqB,YAARnD,CAAiB,IAS3E,OALA0D,EAAAA,EAAAA,YAAU,WACRxD,GAASyF,EAAAA,EAAAA,IAAY,eAEvB,GAAG,KAGD7D,EAAAA,EAAAA,MAACC,EAAAA,SAAQ,CAAAC,SAAA,CACNjC,IACCiB,EAAAA,EAAAA,KAAC4E,EAAAA,EAA2B,CAC1B7F,WAAYA,EACZC,IAAKyC,EACLxC,QAASA,EACTH,2BAA4BA,KAGhCkB,EAAAA,EAAAA,KAAC6E,EAAAA,EAAiB,CAChBC,MAAK,GAAA3E,OAAKlB,EAAQ8F,cAAa,mBAC/BC,SAAShF,EAAAA,EAAAA,KAACiF,EAAAA,EAAQ,OAEpBjF,EAAAA,EAAAA,KAACkF,EAAAA,IAAU,CAAAlE,UACTF,EAAAA,EAAAA,MAACqE,EAAAA,IAAI,CAACC,WAAS,EAAApE,SAAA,EACbF,EAAAA,EAAAA,MAACqE,EAAAA,IAAI,CACHE,MAAI,EACJC,GAAI,GACJC,IAAEC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACGC,EAAAA,GAAYA,aAAW,IAC1BC,eAAgB,WAChBC,IAAK,IACL3E,SAAA,EAEFhB,EAAAA,EAAAA,KAAC4F,EAAAA,EAAe,CACdC,OAAQ,CAACvD,EAAAA,GAAWC,qBACpBuD,SAAUzD,EAAAA,GACV0D,WAAY,CAAEnF,UAAU,GAAOI,UAE/BhB,EAAAA,EAAAA,KAACgG,EAAAA,EAAc,CAACC,QAAS,UAAUjF,UACjChB,EAAAA,EAAAA,KAACkG,EAAAA,IAAM,CACLC,GAAI,eACJC,QAAQ,UACRC,MAAMrG,EAAAA,EAAAA,KAACsG,EAAAA,IAAW,IAClB9B,QAAS,kBAAM1C,GAAW,EAAK,SAIrC9B,EAAAA,EAAAA,KAAC4F,EAAAA,EAAe,CACdC,OAAQ,CAACvD,EAAAA,GAAWC,qBACpBuD,SAAUzD,EAAAA,GACV0D,WAAY,CAAEnF,UAAU,GAAOI,UAE/BhB,EAAAA,EAAAA,KAACgG,EAAAA,EAAc,CAACC,QAAO,UAAA9F,OAAYlB,EAAO,kBAAiB+B,UACzDhB,EAAAA,EAAAA,KAACkG,EAAAA,IAAM,CACLC,GAAI,aACJrB,MAAO,uBACPsB,QAAS,aACTC,MAAMrG,EAAAA,EAAAA,KAACuG,EAAAA,IAAO,IACd/B,QAAS,kBACPvD,EAAS,iBAADd,OAAkBlB,EAAO,2BAA0B,YAMrEe,EAAAA,EAAAA,KAACmF,EAAAA,IAAI,CAACE,MAAI,EAACC,GAAI,GAAGtE,UAChBhB,EAAAA,EAAAA,KAAC4F,EAAAA,EAAe,CACdC,OAAQ,CAACvD,EAAAA,GAAWC,qBACpBuD,SAAUzD,EAAAA,GACV0D,WAAY,CAAEnF,UAAU,GAAOI,UAE/BhB,EAAAA,EAAAA,KAACwG,EAAAA,IAAS,CACRC,YAAanC,EACboC,QAAS,CACP,CAAE5B,MAAO,OAAQ6B,WAAY,QAC7B,CAAE7B,MAAO,OAAQ6B,WAAY,QAC7B,CAAE7B,MAAO,UAAW6B,WAAY,YAElCnG,UAAWqB,EACXI,QAASA,EACT2E,WAAW,OACXC,QAAQ,oBAQxB,ECjMA,EAJgC,WAC9B,OAAO7G,EAAAA,EAAAA,KAAC8G,EAAiB,CAAC7H,QAAS,UACrC,C","sources":["screens/Console/IDP/DeleteIDPConfigurationModal.tsx","screens/Console/IDP/IDPConfigurations.tsx","screens/Console/IDP/IDPOpenIDConfigurations.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeleteIDPConfigurationModalProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n idp: string;\n idpType: string;\n}\n\nconst DeleteIDPConfigurationModal = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n idp,\n idpType,\n}: IDeleteIDPConfigurationModalProps) => {\n const dispatch = useAppDispatch();\n const onDelSuccess = (res: any) => {\n closeDeleteModalAndRefresh(true);\n dispatch(setServerNeedsRestart(res.restart === true));\n };\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n if (!idp) {\n return null;\n }\n\n const onConfirmDelete = () => {\n invokeDeleteApi(\"DELETE\", `/api/v1/idp/${idpType}/${idp}`);\n };\n\n const displayName = idp === \"_\" ? \"Default\" : idp;\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: deleteLoading,\n }}\n confirmationContent={\n \n Are you sure you want to delete IDP {displayName}{\" \"}\n configuration? \n \n }\n />\n );\n};\n\nexport default DeleteIDPConfigurationModal;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { AddIcon, Button, PageLayout, RefreshIcon, Grid, DataTable } from \"mds\";\nimport { useNavigate } from \"react-router-dom\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\nimport { useAppDispatch } from \"../../../store\";\nimport {\n CONSOLE_UI_RESOURCE,\n IAM_SCOPES,\n} from \"../../../common/SecureComponent/permissions\";\nimport {\n hasPermission,\n SecureComponent,\n} from \"../../../common/SecureComponent\";\nimport { setErrorSnackMessage, setHelpName } from \"../../../systemSlice\";\nimport { actionsTray } from \"../Common/FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport DeleteIDPConfigurationModal from \"./DeleteIDPConfigurationModal\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport HelpMenu from \"../HelpMenu\";\n\ntype IDPConfigurationsProps = {\n idpType: string;\n};\n\nconst IDPConfigurations = ({ idpType }: IDPConfigurationsProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedIDP, setSelectedIDP] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [records, setRecords] = useState([]);\n\n const deleteIDP = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n const viewIDP = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n const displayIDPs = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n if (displayIDPs) {\n api.idp\n .listConfigurations(idpType)\n .then((res) => {\n setLoading(false);\n if (res.data.results) {\n setRecords(\n res.data.results.map((r: any) => {\n r.name = r.name === \"_\" ? \"Default\" : r.name;\n r.enabled = r.enabled === true ? \"Enabled\" : \"Disabled\";\n return r;\n }),\n );\n }\n })\n .catch((err) => {\n setLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n } else {\n setLoading(false);\n }\n }\n }, [loading, setLoading, setRecords, dispatch, displayIDPs, idpType]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const confirmDeleteIDP = (idp: string) => {\n setDeleteOpen(true);\n idp = idp === \"Default\" ? \"_\" : idp;\n setSelectedIDP(idp);\n };\n\n const viewAction = (idp: any) => {\n let name = idp.name === \"Default\" ? \"_\" : idp.name;\n navigate(`/identity/idp/${idpType}/configurations/${name}`);\n };\n\n const closeDeleteModalAndRefresh = async (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const tableActions = [\n {\n type: \"view\",\n onClick: viewAction,\n disableButtonFunction: () => !viewIDP,\n },\n {\n type: \"delete\",\n onClick: confirmDeleteIDP,\n sendOnlyId: true,\n disableButtonFunction: (idp: string) => !deleteIDP || idp === \"Default\",\n },\n ];\n\n useEffect(() => {\n dispatch(setHelpName(\"idp_configs\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {deleteOpen && (\n \n )}\n }\n />\n \n \n \n \n \n }\n onClick={() => setLoading(true)}\n />\n \n \n \n \n }\n onClick={() =>\n navigate(`/identity/idp/${idpType}/configurations/add-idp`)\n }\n />\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IDPConfigurations;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport IDPConfigurations from \"./IDPConfigurations\";\n\nconst IDPOpenIDConfigurations = () => {\n return ;\n};\n\nexport default IDPOpenIDConfigurations;\n"],"names":["_ref","closeDeleteModalAndRefresh","deleteOpen","idp","idpType","dispatch","useAppDispatch","_useApi","useApi","res","setServerNeedsRestart","restart","err","setErrorSnackMessage","_useApi2","_slicedToArray","deleteLoading","invokeDeleteApi","displayName","_jsx","ConfirmDialog","title","concat","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","isLoading","onConfirm","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","navigate","useNavigate","_useState","useState","_useState2","setDeleteOpen","_useState3","_useState4","selectedIDP","setSelectedIDP","_useState5","_useState6","loading","setLoading","_useState7","_useState8","records","setRecords","deleteIDP","hasPermission","CONSOLE_UI_RESOURCE","IAM_SCOPES","ADMIN_CONFIG_UPDATE","viewIDP","displayIDPs","useEffect","fetchRecords","api","listConfigurations","then","data","results","map","r","name","enabled","catch","errorToHandler","error","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","refresh","wrap","_context","prev","next","stop","_x","apply","arguments","tableActions","type","onClick","disableButtonFunction","sendOnlyId","setHelpName","DeleteIDPConfigurationModal","PageHeaderWrapper","label","toUpperCase","actions","HelpMenu","PageLayout","Grid","container","item","xs","sx","_objectSpread","actionsTray","justifyContent","gap","SecureComponent","scopes","resource","errorProps","TooltipWrapper","tooltip","Button","id","variant","icon","RefreshIcon","AddIcon","DataTable","itemActions","columns","elementKey","entityName","idField","IDPConfigurations"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"static/js/1329.df839007.chunk.js","mappings":"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","sources":["screens/Console/IDP/DeleteIDPConfigurationModal.tsx","screens/Console/IDP/IDPConfigurations.tsx","screens/Console/IDP/IDPOpenIDConfigurations.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\n\ninterface IDeleteIDPConfigurationModalProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n idp: string;\n idpType: string;\n}\n\nconst DeleteIDPConfigurationModal = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n idp,\n idpType,\n}: IDeleteIDPConfigurationModalProps) => {\n const dispatch = useAppDispatch();\n const onDelSuccess = (res: any) => {\n closeDeleteModalAndRefresh(true);\n dispatch(setServerNeedsRestart(res.restart === true));\n };\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n if (!idp) {\n return null;\n }\n\n const onConfirmDelete = () => {\n invokeDeleteApi(\"DELETE\", `/api/v1/idp/${idpType}/${idp}`);\n };\n\n const displayName = idp === \"_\" ? \"Default\" : idp;\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: deleteLoading,\n }}\n confirmationContent={\n \n Are you sure you want to delete IDP {displayName}{\" \"}\n configuration? \n \n }\n />\n );\n};\n\nexport default DeleteIDPConfigurationModal;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { AddIcon, Button, PageLayout, RefreshIcon, Grid, DataTable } from \"mds\";\nimport { useNavigate } from \"react-router-dom\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\nimport { useAppDispatch } from \"../../../store\";\nimport {\n CONSOLE_UI_RESOURCE,\n IAM_SCOPES,\n} from \"../../../common/SecureComponent/permissions\";\nimport {\n hasPermission,\n SecureComponent,\n} from \"../../../common/SecureComponent\";\nimport { setErrorSnackMessage, setHelpName } from \"../../../systemSlice\";\nimport { actionsTray } from \"../Common/FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport DeleteIDPConfigurationModal from \"./DeleteIDPConfigurationModal\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport HelpMenu from \"../HelpMenu\";\n\ntype IDPConfigurationsProps = {\n idpType: string;\n};\n\nconst IDPConfigurations = ({ idpType }: IDPConfigurationsProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedIDP, setSelectedIDP] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [records, setRecords] = useState([]);\n\n const deleteIDP = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n const viewIDP = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n const displayIDPs = hasPermission(CONSOLE_UI_RESOURCE, [\n IAM_SCOPES.ADMIN_CONFIG_UPDATE,\n ]);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n if (displayIDPs) {\n api.idp\n .listConfigurations(idpType)\n .then((res) => {\n setLoading(false);\n if (res.data.results) {\n setRecords(\n res.data.results.map((r: any) => {\n r.name = r.name === \"_\" ? \"Default\" : r.name;\n r.enabled = r.enabled === true ? \"Enabled\" : \"Disabled\";\n return r;\n }),\n );\n }\n })\n .catch((err) => {\n setLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n } else {\n setLoading(false);\n }\n }\n }, [loading, setLoading, setRecords, dispatch, displayIDPs, idpType]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const confirmDeleteIDP = (idp: string) => {\n setDeleteOpen(true);\n idp = idp === \"Default\" ? \"_\" : idp;\n setSelectedIDP(idp);\n };\n\n const viewAction = (idp: any) => {\n let name = idp.name === \"Default\" ? \"_\" : idp.name;\n navigate(`/identity/idp/${idpType}/configurations/${name}`);\n };\n\n const closeDeleteModalAndRefresh = async (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const tableActions = [\n {\n type: \"view\",\n onClick: viewAction,\n disableButtonFunction: () => !viewIDP,\n },\n {\n type: \"delete\",\n onClick: confirmDeleteIDP,\n sendOnlyId: true,\n disableButtonFunction: (idp: string) => !deleteIDP || idp === \"Default\",\n },\n ];\n\n useEffect(() => {\n dispatch(setHelpName(\"idp_configs\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {deleteOpen && (\n \n )}\n }\n />\n \n \n \n \n \n }\n onClick={() => setLoading(true)}\n />\n \n \n \n \n }\n onClick={() =>\n navigate(`/identity/idp/${idpType}/configurations/add-idp`)\n }\n />\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IDPConfigurations;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport IDPConfigurations from \"./IDPConfigurations\";\n\nconst IDPOpenIDConfigurations = () => {\n return ;\n};\n\nexport default IDPOpenIDConfigurations;\n"],"names":["_ref","closeDeleteModalAndRefresh","deleteOpen","idp","idpType","dispatch","useAppDispatch","_useApi","useApi","res","setServerNeedsRestart","restart","err","setErrorSnackMessage","_useApi2","_slicedToArray","deleteLoading","invokeDeleteApi","displayName","_jsx","ConfirmDialog","title","concat","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","isLoading","onConfirm","onClose","confirmButtonProps","disabled","confirmationContent","_jsxs","Fragment","children","navigate","useNavigate","_useState","useState","_useState2","setDeleteOpen","_useState3","_useState4","selectedIDP","setSelectedIDP","_useState5","_useState6","loading","setLoading","_useState7","_useState8","records","setRecords","deleteIDP","hasPermission","CONSOLE_UI_RESOURCE","IAM_SCOPES","ADMIN_CONFIG_UPDATE","viewIDP","displayIDPs","useEffect","fetchRecords","api","listConfigurations","then","data","results","map","r","name","enabled","catch","errorToHandler","error","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","refresh","wrap","_context","prev","next","stop","_x","apply","arguments","tableActions","type","onClick","disableButtonFunction","sendOnlyId","setHelpName","DeleteIDPConfigurationModal","PageHeaderWrapper","label","toUpperCase","actions","HelpMenu","PageLayout","Grid","container","item","xs","sx","_objectSpread","actionsTray","justifyContent","gap","SecureComponent","scopes","resource","errorProps","TooltipWrapper","tooltip","Button","id","variant","icon","RefreshIcon","AddIcon","DataTable","itemActions","columns","elementKey","entityName","idField","IDPConfigurations"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/134.117c7fbe.chunk.js b/portal-ui/build/static/js/134.117c7fbe.chunk.js
deleted file mode 100644
index f6843b9ce7..0000000000
--- a/portal-ui/build/static/js/134.117c7fbe.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[134],{13901:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"}),"CallToAction");t.Z=u},31292:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"}),"Code");t.Z=u},61809:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M8 19h3v3h2v-3h3l-4-4-4 4zm8-15h-3V1h-2v3H8l4 4 4-4zM4 9v2h16V9H4zm0 3h16v2H4z"}),"Compress");t.Z=u},67055:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.05C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L20 21.49 21.49 20l-4.85-4.86z"}),"FindReplace");t.Z=u},98095:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M19 3H5c-1.1 0-1.99.9-1.99 2L3 19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 11h-4v4h-4v-4H6v-4h4V6h4v4h4v4z"}),"LocalHospital");t.Z=u},36909:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M17 12c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm1.65 7.35L16.5 17.2V14h1v2.79l1.85 1.85-.7.71zM18 3h-3.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H6c-1.1 0-2 .9-2 2v15c0 1.1.9 2 2 2h6.11c-.59-.57-1.07-1.25-1.42-2H6V5h2v3h8V5h2v5.08c.71.1 1.38.31 2 .6V5c0-1.1-.9-2-2-2zm-6 2c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"}),"PendingActions");t.Z=u},87569:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"}),"Public");t.Z=u},21141:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"}),"VpnKey");t.Z=u},45649:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(28610)},31260:function(e,t,n){"use strict";var r=n(78949);t.Z=r.Z},28610:function(e,t,n){"use strict";n.r(t),n.d(t,{capitalize:function(){return o.Z},createChainedFunction:function(){return c.Z},createSvgIcon:function(){return u.Z},debounce:function(){return i.Z},deprecatedPropType:function(){return a},isMuiElement:function(){return l.Z},ownerDocument:function(){return f.Z},ownerWindow:function(){return s.Z},requirePropFactory:function(){return p},setRef:function(){return d},unstable_ClassNameGenerator:function(){return w},unstable_useEnhancedEffect:function(){return y.Z},unstable_useId:function(){return v.Z},unsupportedProp:function(){return b},useControlled:function(){return h.Z},useEventCallback:function(){return m.Z},useForkRef:function(){return g.Z},useIsFocusVisible:function(){return C.Z}});var r=n(55902),o=n(14036),c=n(31260),u=n(76189),i=n(83199);var a=function(e,t){return function(){return null}},l=n(19103),f=n(98301),s=n(17602);n(87462);var p=function(e,t){return function(){return null}},d=n(62971).Z,y=n(40162),v=n(67384);var b=function(e,t,n,r,o){return null},h=n(98278),m=n(89683),g=n(42071),C=n(23031),w={configure:function(e){r.Z.configure(e)}}},19103:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(72791);var o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},78949:function(e,t,n){"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){for(var n=0;n null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import { unstable_requirePropFactory as requirePropFactory } from '@mui/utils';\nexport default requirePropFactory;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","import { unstable_setRef as setRef } from '@mui/utils';\nexport default setRef;","import { unstable_unsupportedProp as unsupportedProp } from '@mui/utils';\nexport default unsupportedProp;","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/ClassNameGenerator';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","import { unstable_isMuiElement as isMuiElement } from '@mui/utils';\nexport default isMuiElement;","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;\n}","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"names":["_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","Object","defineProperty","value","enumerable","get","_utils","createSvgIcon","createChainedFunction","validator","reason","componentNameInError","Component","props","propName","componentName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","element","muiNames","React","indexOf","type","muiName","_len","arguments","length","funcs","Array","_key","reduce","acc","func","_len2","args","_key2","apply","this","deselectCurrent","clipboardToIE11Formatting","module","text","options","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","console","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","_typeof","obj","Symbol","iterator","constructor","prototype","CopyToClipboard","_react","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","_objectSpread","target","i","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_defineProperties","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","self","TypeError","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","Constructor","protoProps","staticProps","_super","_this","instance","_classCallCheck","concat","event","_this$props","children","elem","Children","only","onClick","_this$props2","cloneElement","PureComponent","undefined","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/134.3f6d60a2.chunk.js b/portal-ui/build/static/js/134.3f6d60a2.chunk.js
new file mode 100644
index 0000000000..ca0d29923a
--- /dev/null
+++ b/portal-ui/build/static/js/134.3f6d60a2.chunk.js
@@ -0,0 +1,2 @@
+(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[134],{13901:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"}),"CallToAction");t.Z=u},31292:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"}),"Code");t.Z=u},61809:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M8 19h3v3h2v-3h3l-4-4-4 4zm8-15h-3V1h-2v3H8l4 4 4-4zM4 9v2h16V9H4zm0 3h16v2H4z"}),"Compress");t.Z=u},67055:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.05C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L20 21.49 21.49 20l-4.85-4.86z"}),"FindReplace");t.Z=u},98095:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M19 3H5c-1.1 0-1.99.9-1.99 2L3 19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 11h-4v4h-4v-4H6v-4h4V6h4v4h4v4z"}),"LocalHospital");t.Z=u},36909:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M17 12c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm1.65 7.35L16.5 17.2V14h1v2.79l1.85 1.85-.7.71zM18 3h-3.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H6c-1.1 0-2 .9-2 2v15c0 1.1.9 2 2 2h6.11c-.59-.57-1.07-1.25-1.42-2H6V5h2v3h8V5h2v5.08c.71.1 1.38.31 2 .6V5c0-1.1-.9-2-2-2zm-6 2c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"}),"PendingActions");t.Z=u},87569:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"}),"Public");t.Z=u},21141:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),c=n(80184),u=(0,o.default)((0,c.jsx)("path",{d:"M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"}),"VpnKey");t.Z=u},45649:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.createSvgIcon}});var r=n(28610)},31260:function(e,t,n){"use strict";var r=n(78949);t.Z=r.Z},28610:function(e,t,n){"use strict";n.r(t),n.d(t,{capitalize:function(){return o.Z},createChainedFunction:function(){return c.Z},createSvgIcon:function(){return u.Z},debounce:function(){return i.Z},deprecatedPropType:function(){return a},isMuiElement:function(){return l.Z},ownerDocument:function(){return f.Z},ownerWindow:function(){return s.Z},requirePropFactory:function(){return p},setRef:function(){return d},unstable_ClassNameGenerator:function(){return w},unstable_useEnhancedEffect:function(){return v.Z},unstable_useId:function(){return y.Z},unsupportedProp:function(){return b},useControlled:function(){return h.Z},useEventCallback:function(){return m.Z},useForkRef:function(){return g.Z},useIsFocusVisible:function(){return C.Z}});var r=n(55902),o=n(14036),c=n(31260),u=n(76189),i=n(83199);var a=function(e,t){return function(){return null}},l=n(19103),f=n(98301),s=n(17602);n(87462);var p=function(e,t){return function(){return null}},d=n(62971).Z,v=n(40162),y=n(67384);var b=function(e,t,n,r,o){return null},h=n(98278),m=n(89683),g=n(42071),C=n(23031),w={configure:function(e){r.Z.configure(e)}}},19103:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(72791);var o=function(e,t){var n,o;return r.isValidElement(e)&&-1!==t.indexOf(null!=(n=e.type.muiName)?n:null==(o=e.type)||null==(o=o._payload)||null==(o=o.value)?void 0:o.muiName)}},78949:function(e,t,n){"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){for(var n=0;n null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import { unstable_requirePropFactory as requirePropFactory } from '@mui/utils';\nexport default requirePropFactory;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","import { unstable_setRef as setRef } from '@mui/utils';\nexport default setRef;","import { unstable_unsupportedProp as unsupportedProp } from '@mui/utils';\nexport default unsupportedProp;","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/ClassNameGenerator';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","import { unstable_isMuiElement as isMuiElement } from '@mui/utils';\nexport default isMuiElement;","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _excluded = [\"text\", \"onCopy\", \"options\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n var _super = _createSuper(CopyToClipboard);\n\n function CopyToClipboard() {\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, _excluded);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return /*#__PURE__*/_react[\"default\"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"names":["_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","Object","defineProperty","value","enumerable","get","_utils","createSvgIcon","createChainedFunction","validator","reason","componentNameInError","Component","props","propName","componentName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","element","muiNames","_muiName","_element$type","React","indexOf","type","muiName","_payload","_len","arguments","length","funcs","Array","_key","reduce","acc","func","_len2","args","_key2","apply","this","deselectCurrent","clipboardToIE11Formatting","module","text","options","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","console","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","_typeof","obj","Symbol","iterator","constructor","prototype","CopyToClipboard","_react","_copyToClipboard","_excluded","__esModule","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","_objectSpread","target","i","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_defineProperties","descriptor","configurable","writable","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","self","TypeError","_assertThisInitialized","_possibleConstructorReturn","ReferenceError","getPrototypeOf","_React$PureComponent","subClass","superClass","create","_inherits","Constructor","protoProps","staticProps","_super","_this","instance","_classCallCheck","concat","event","_this$props","children","elem","Children","only","onClick","_this$props2","cloneElement","PureComponent","undefined","rangeCount","active","activeElement","ranges","getRangeAt","tagName","toUpperCase","blur","focus"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1516.8a28f6f6.chunk.js b/portal-ui/build/static/js/1516.75dc9a97.chunk.js
similarity index 99%
rename from portal-ui/build/static/js/1516.8a28f6f6.chunk.js
rename to portal-ui/build/static/js/1516.75dc9a97.chunk.js
index 0585748189..fb2addae9e 100644
--- a/portal-ui/build/static/js/1516.8a28f6f6.chunk.js
+++ b/portal-ui/build/static/js/1516.75dc9a97.chunk.js
@@ -1,2 +1,2 @@
-(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1516],{51516:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return N}});var r=n(29439),i=n(72791),o=n(29945),s=n(78687),a=n(87995),c=n(81551),l=n(74440),u=n(80184),f=function(e){var t=e.email;return(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(l.Z,{email:t}),(0,u.jsx)(o.rjZ,{item:!0,xs:12,sx:{marginTop:25},children:(0,u.jsxs)(o.xuv,{sx:{padding:"20px"},children:["Login to"," ",(0,u.jsx)("a",{href:"https://subnet.min.io",target:"_blank",children:"SUBNET"})," ","to avail support for this MinIO cluster"]})})]})},d=function(){var e="mc admin config set {alias} subnet proxy={proxy}",t=(0,i.useState)(!1),n=(0,r.Z)(t,2),s=n[0],a=n[1];return(0,u.jsx)(i.Fragment,{children:(0,u.jsxs)(o.xuv,{withBorders:!0,sx:{display:"flex",padding:"23px",marginTop:"40px",alignItems:"start",justifyContent:"space-between"},children:[(0,u.jsxs)(o.xuv,{sx:{display:"flex",flexFlow:"column"},children:[(0,u.jsxs)(o.xuv,{sx:{display:"flex","& .min-icon":{height:"22px",width:"22px"}},children:[(0,u.jsx)(o.ewm,{}),(0,u.jsx)("div",{style:{marginLeft:"10px",fontWeight:600},children:"Proxy Configuration"})]}),(0,u.jsxs)(o.xuv,{sx:{marginTop:"10px",marginBottom:"10px",fontSize:"14px"},children:["For airgap/firewalled environments it is possible to"," ",(0,u.jsx)("a",{href:"https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-config.html?ref=con",target:"_blank",children:"configure a proxy"})," ","to connect to SUBNET ."]}),(0,u.jsx)(o.xuv,{children:s&&(0,u.jsx)(o.Wzg,{disabled:!0,id:"subnetProxy",name:"subnetProxy",placeholder:"",onChange:function(){},label:"",value:e,overlayIcon:(0,u.jsx)(o.TIy,{}),overlayAction:function(){return navigator.clipboard.writeText(e)}})})]}),(0,u.jsx)(o.xuv,{sx:{display:"flex"},children:(0,u.jsx)(o.rsf,{value:"enableProxy",id:"enableProxy",name:"enableProxy",checked:s,onChange:function(e){a(e.target.checked)}})})]})})},p=n(74165),x=n(15861),g=n(36825),h=n(81207),m=n(96382),b=n(38442),v=n(56087),y=(0,m.hg)("register/fetchLicenseInfo",function(){var e=(0,x.Z)((0,p.Z)().mark((function e(t,n){var r,i,o,s;return(0,p.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n.getState,i=n.dispatch,o=r(),s=(0,b.F)(v.C3,v.LC[v.gA.LICENSE],!0),!o.register.loadingLicenseInfo){e.next=6;break}return e.abrupt("return");case 6:s?(i((0,g.pI)(!0)),h.Z.invoke("GET","/api/v1/subnet/info").then((function(e){i((0,g.aO)(e)),i((0,g.Dr)(!0)),i((0,g.pI)(!1))})).catch((function(e){e.detailedError.toLowerCase()!=="License is not present".toLowerCase()&&e.detailedError.toLowerCase()!=="license not found".toLowerCase()&&i((0,a.Ih)(e)),i((0,g.Dr)(!1)),i((0,g.pI)(!1))}))):i((0,g.pI)(!1));case 7:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),j=(0,m.hg)("register/callRegister",function(){var e=(0,x.Z)((0,p.Z)().mark((function e(t,n){var r,i;return(0,p.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=n.dispatch,i={token:t.token,account_id:t.account_id},h.Z.invoke("POST","/api/v1/subnet/register",i).then((function(){r((0,g.K4)(!1)),r((0,a.cN)(!0)),r((0,g.jS)()),r(y())})).catch((function(e){r((0,a.Ih)(e)),r((0,g.K4)(!1))}));case 3:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),w=(0,m.hg)("register/subnetLoginWithMFA",function(){var e=(0,x.Z)((0,p.Z)().mark((function e(t,n){var r,i,o,s,c,l,u;return(0,p.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n.getState,n.rejectWithValue,i=n.dispatch,o=r(),s=o.register.subnetEmail,c=o.register.subnetMFAToken,l=o.register.subnetOTP,!o.register.loading){e.next=8;break}return e.abrupt("return");case 8:i((0,g.K4)(!0)),u={username:s,otp:l,mfa_token:c},h.Z.invoke("POST","/api/v1/subnet/login/mfa",u).then((function(e){i((0,g.K4)(!1)),e&&e.access_token&&e.organizations.length>0&&(1===e.organizations.length?i(j({token:e.access_token,account_id:e.organizations[0].accountId.toString()})):(i((0,g.t2)(e.access_token)),i((0,g.dl)(e.organizations)),i((0,g.wK)(e.organizations[0].accountId.toString()))))})).catch((function(e){i((0,a.Ih)(e)),i((0,g.K4)(!1)),i((0,g.Z7)(""))}));case 11:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),k=(0,m.hg)("register/subnetLogin",function(){var e=(0,x.Z)((0,p.Z)().mark((function e(t,n){var r,i,o,s,c,l,u;return(0,p.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n.getState,n.rejectWithValue,i=n.dispatch,o=r(),s=o.register.license,c=o.register.subnetPassword,l=o.register.subnetEmail,!o.register.loading){e.next=8;break}return e.abrupt("return");case 8:i((0,g.K4)(!0)),u={username:l,password:c,apiKey:s},h.Z.invoke("POST","/api/v1/subnet/login",u).then((function(e){i((0,g.K4)(!1)),e&&e.registered?(i((0,g.jS)()),i(y())):e&&e.mfa_token?i((0,g.dK)(e.mfa_token)):e&&e.access_token&&e.organizations.length>0&&(i((0,g.t2)(e.access_token)),i((0,g.dl)(e.organizations)),i((0,g.wK)(e.organizations[0].accountId.toString())))})).catch((function(e){i((0,a.Ih)(e)),i((0,g.K4)(!1)),i((0,g.jS)())}));case 11:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),C=n(23814),S=n(27454),T=n(78029),P=n.n(T),O=function(e){var t=e.icon,n=e.description;return(0,u.jsxs)(o.xuv,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,u.jsx)(o.xuv,{className:"muted",style:{fontSize:"14px",fontStyle:"italic"},children:n})]})},I=function(){return(0,u.jsx)(o.KfX,{title:"Why should I register?",iconComponent:(0,u.jsx)(o.M9A,{}),help:(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{sx:{fontSize:"14px",marginBottom:"15px"},children:"Registering this cluster with the MinIO Subscription Network (SUBNET) provides the following benefits in addition to the commercial license and SLA backed support."}),(0,u.jsxs)(o.xuv,{sx:{display:"flex",flexFlow:"column"},children:[(0,u.jsx)(O,{icon:(0,u.jsx)(o._qw,{}),description:"Call Home Monitoring"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.toM,{}),description:"Health Diagnostics"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.Fsz,{}),description:"Performance Analysis"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.EQx,{}),description:(0,u.jsx)("a",{href:"https://min.io/signup?ref=con",target:"_blank",children:"More Features"})})]})]})})},B=n(9505),E=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetRegToken})),n=(0,s.v9)((function(e){return e.register.clusterRegistered})),l=(0,s.v9)((function(e){return e.register.licenseInfo})),d="https://subnet.min.io/cluster/register?token=".concat(t),p=(0,i.useState)(""),x=(0,r.Z)(p,2),g=x[0],h=x[1],m=(0,B.Z)((function(){e(y()),e((0,a.cN)(!0))}),(function(t){e((0,a.Ih)(t))})),b=(0,r.Z)(m,2),v=b[0],j=b[1];return(0,u.jsx)(i.Fragment,{children:(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:n&&l?(0,u.jsx)(f,{email:l.email}):(0,u.jsx)(o.ltY,{title:"Register cluster in an Air-gap environment",icon:(0,u.jsx)(o.YL8,{}),helpBox:(0,u.jsx)(I,{}),withBorders:!1,containerPadding:!1,children:(0,u.jsx)(o.xuv,{sx:{display:"flex",flexFlow:"column",flex:"2",marginTop:"15px","& .step-row":{fontSize:14,display:"flex",marginTop:"15px",marginBottom:"15px"}},children:(0,u.jsxs)(o.xuv,{children:[(0,u.jsx)(o.xuv,{className:"step-row",children:(0,u.jsx)(o.xuv,{className:"step-text",children:"Click on the link to register this cluster in SUBNET and get a License Key for this Air-Gap deployment"})}),(0,u.jsxs)(o.xuv,{sx:{flex:"1",display:"flex",alignItems:"center",gap:3},children:[(0,u.jsx)("a",{href:d,target:"_blank",children:"https://subnet.min.io/cluster/register"}),(0,u.jsx)(S.Z,{tooltip:"Copy to Clipboard",children:(0,u.jsx)(P(),{text:d,children:(0,u.jsx)(o.zxk,{type:"button",id:"copy-ult-to-clip-board",icon:(0,u.jsx)(o.TIy,{}),color:"primary",variant:"regular"})})})]}),(0,u.jsx)(o.xuv,{className:"muted",sx:{marginTop:"25px"},children:"Note: If this machine does not have internet connection, Copy paste the following URL in a browser where you access SUBNET and follow the instructions to complete the registration"}),(0,u.jsxs)(o.xuv,{sx:{marginTop:"25px",display:"flex",flexDirection:"column"},children:[(0,u.jsxs)("label",{style:{fontWeight:"bold",marginBottom:"10px"},children:["Paste the License Key"," "]}),(0,u.jsx)(o.q5m,{value:g,disabled:v,label:"",id:"licenseKey",name:"licenseKey",placeholder:"License Key",onChange:function(e){h(e.target.value)}})]}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"apply-license-key",onClick:function(){j("PUT","/api/v1/configs/subnet",{key_values:[{key:"license",value:g}]})},variant:"callAction",disabled:!g||v,label:"Apply Cluster License"})})]})})})})})},z=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetMFAToken})),n=(0,s.v9)((function(e){return e.register.subnetOTP})),r=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{title:"Two-Factor Authentication",helpBox:(0,u.jsx)(I,{}),withBorders:!1,containerPadding:!1,children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Please enter the 6-digit verification code that was sent to your email address. This code will be valid for 5 minutes."}),(0,u.jsx)(o.xuv,{children:(0,u.jsx)(o.Wzg,{overlayIcon:(0,u.jsx)(o.mBM,{}),id:"subnet-otp",name:"subnet-otp",onChange:function(t){return e((0,g.Z7)(t.target.value))},placeholder:"",label:"",value:n})}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"verify",onClick:function(){return e(w())},disabled:r||0===n.trim().length||0===t.trim().length,variant:"callAction",label:"Verify"})})]})},Z=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetAccessToken})),n=(0,s.v9)((function(e){return e.register.selectedSubnetOrganization})),r=(0,s.v9)((function(e){return e.register.subnetOrganizations})),i=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{title:"Register MinIO cluster",containerPadding:!0,withBorders:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.PhF,{id:"subnet-organization",name:"subnet-organization",onChange:function(t){return e((0,g.wK)(t))},label:"Select an organization",value:n,options:r.map((function(e){return{label:e.company,value:e.accountId.toString()}}))}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"register-cluster",onClick:function(){return function(){i||(e((0,g.K4)(!0)),t&&n&&e(j({token:t,account_id:n})))}},disabled:i||0===t.trim().length,variant:"callAction",label:"Register"})})]})},A=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetPassword})),n=(0,s.v9)((function(e){return e.register.subnetEmail})),r=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{icon:(0,u.jsx)(o.dRy,{}),title:"Online activation of MinIO Subscription Network License",withBorders:!1,containerPadding:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.xuv,{sx:{fontSize:"14px",display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Use your MinIO Subscription Network login credentials to register this cluster."}),(0,u.jsxs)(o.xuv,{sx:{flex:"1"},children:[(0,u.jsx)(o.Wzg,{id:"subnet-email",name:"subnet-email",onChange:function(t){return e((0,g.Ze)(t.target.value))},label:"Email",value:n,overlayIcon:(0,u.jsx)(o.oyc,{})}),(0,u.jsx)(o.Wzg,{id:"subnet-password",name:"subnet-password",onChange:function(t){return e((0,g.lr)(t.target.value))},label:"Password",type:"password",value:t}),(0,u.jsxs)(o.xuv,{sx:C.ID.modalButtonBar,children:[(0,u.jsx)(o.zxk,{id:"sign-up",type:"submit",variant:"regular",onClick:function(e){e.preventDefault(),window.open("https://min.io/signup?ref=con","_blank")},label:"Sign up"}),(0,u.jsx)(o.zxk,{id:"register-credentials",type:"submit",variant:"callAction",disabled:r||0===n.trim().length||0===t.trim().length,onClick:function(){return e(k())},label:"Register"})]})]})]})},_=n(47974),R=n(99670),L=n(57689),D=n(23508),F=function(e){var t=e.open,n=e.closeModal,s=e.onSet,l=(0,c.TL)(),f=(0,i.useState)(""),d=(0,r.Z)(f,2),p=d[0],x=d[1],g=(0,i.useState)(""),h=(0,r.Z)(g,2),m=h[0],b=h[1],v=(0,i.useState)(""),y=(0,r.Z)(v,2),j=y[0],w=y[1],k=(0,i.useState)(""),C=(0,r.Z)(k,2),S=C[0],T=C[1],P=(0,B.Z)((function(e){e.mfa_token?w(e.mfa_token):e.access_token?E("GET","/api/v1/subnet/apikey?token=".concat(e.access_token)):(s(e.apiKey),n())}),(function(e){l((0,a.Ih)(e)),n(),x(""),b(""),w(""),T("")})),O=(0,r.Z)(P,2),I=O[0],E=O[1],z=function(){return(0,u.jsxs)(o.ltY,{withBorders:!1,containerPadding:!1,children:[(0,u.jsx)(o.Wzg,{id:"subnet-email",name:"subnet-email",onChange:function(e){return x(e.target.value)},label:"Email",value:p,overlayIcon:(0,u.jsx)(o.oyc,{})}),(0,u.jsx)(o.Wzg,{id:"subnet-password",name:"subnet-password",onChange:function(e){return b(e.target.value)},label:"Password",type:"password",value:m})]})},Z=function(){return(0,u.jsx)(o.xuv,{sx:{display:"flex"},children:(0,u.jsxs)(o.xuv,{sx:{display:"flex",flexFlow:"column",flex:"2"},children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginTop:20,marginBottom:20},children:"Two-Factor Authentication"}),(0,u.jsx)(o.xuv,{children:"Please enter the 6-digit verification code that was sent to your email address. This code will be valid for 5 minutes."}),(0,u.jsx)(o.xuv,{sx:{flex:"1",marginTop:"30px"},children:(0,u.jsx)(o.Wzg,{overlayIcon:(0,u.jsx)(o.mBM,{}),id:"subnet-otp",name:"subnet-otp",onChange:function(e){return T(e.target.value)},placeholder:"",label:"",value:S})})]})})};return t?(0,u.jsx)(D.Z,{title:"Get API Key from SUBNET",confirmText:"Get API Key",isOpen:t,titleIcon:(0,u.jsx)(o.szr,{}),isLoading:I,cancelText:"Cancel",onConfirm:function(){""!==j?E("POST","/api/v1/subnet/login/mfa",{username:p,otp:S,mfa_token:j}):E("POST","/api/v1/subnet/login",{username:p,password:m})},onClose:n,confirmButtonProps:{variant:"callAction",disabled:!p||!m||I,hidden:!0},cancelButtonProps:{disabled:I},confirmationContent:""===j?z():Z()}):null},K=function(e){var t=e.registerEndpoint,n=(0,L.s0)(),s=(0,i.useState)(!1),l=(0,r.Z)(s,2),f=l[0],d=l[1],p=(0,i.useState)(""),x=(0,r.Z)(p,2),g=x[0],m=x[1],b=(0,i.useState)(!1),y=(0,r.Z)(b,2),j=y[0],w=y[1],k=(0,i.useState)(!1),S=(0,r.Z)(k,2),T=S[0],P=S[1],O=(0,c.TL)(),B=(0,i.useCallback)((function(){if(!j){w(!0);var e={apiKey:g};h.Z.invoke("POST",t,e).then((function(e){w(!1),e&&e.registered&&(O((0,a.cN)(!0)),n(v.gA.LICENSE))})).catch((function(e){O((0,a.Ih)(e)),w(!1),E()}))}}),[g,O,j,t,n]);(0,i.useEffect)((function(){T&&B()}),[T,B]);var E=function(){m(""),P(!1)};return(0,u.jsxs)(o.ltY,{title:"Register cluster with API key",icon:(0,u.jsx)(o.dRy,{}),containerPadding:!1,withBorders:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Use your MinIO Subscription Network API Key to register this cluster."}),(0,u.jsxs)(o.xuv,{sx:{flex:"1"},children:[(0,u.jsx)(o.Wzg,{id:"api-key",name:"api-key",onChange:function(e){return m(e.target.value)},label:"API Key",value:g}),(0,u.jsxs)(o.xuv,{sx:C.ID.modalButtonBar,children:[(0,u.jsx)(o.zxk,{id:"get-from-subnet",variant:"regular",disabled:j,onClick:function(){return d(!0)},label:"Get from SUBNET"}),(0,u.jsx)(o.zxk,{id:"register",type:"submit",variant:"callAction",disabled:j||0===g.trim().length,onClick:function(){return B()},label:"Register"})]})]}),(0,u.jsx)(F,{open:f,closeModal:function(){return d(!1)},onSet:function(e){m(e),P(!0)}})]})},N=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetMFAToken})),n=(0,s.v9)((function(e){return e.register.subnetAccessToken})),l=(0,s.v9)((function(e){return e.register.subnetRegToken})),p=(0,s.v9)((function(e){return e.register.subnetOrganizations})),x=(0,s.v9)((function(e){return e.register.loading})),m=(0,s.v9)((function(e){return e.register.loadingLicenseInfo})),b=(0,s.v9)((function(e){return e.register.clusterRegistered})),v=(0,s.v9)((function(e){return e.register.licenseInfo})),j=(0,s.v9)((function(e){return e.register.curTab})),w=(0,i.useState)(!0),k=(0,r.Z)(w,2),C=k[0],S=k[1];(0,i.useEffect)((function(){return function(){e((0,g.jS)())}}),[e]),(0,i.useEffect)((function(){if("simple-tab-2"===j&&!x&&!l){e((0,g.K4)(!0)),h.Z.invoke("GET","/api/v1/subnet/registration-token").then((function(t){e((0,g.K4)(!1)),t&&t.regToken&&e((0,g.wz)(t.regToken))})).catch((function(t){console.error(t),e((0,a.Ih)(t)),e((0,g.K4)(!1))}))}}),[j,x,l,e]),(0,i.useEffect)((function(){C&&(e(y()),S(!1))}),[C,S,e]);var T=(0,u.jsx)(i.Fragment,{});T=n&&p.length>0?(0,u.jsx)(Z,{}):t?(0,u.jsx)(z,{}):(0,u.jsx)(A,{});var P=(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:b&&v?(0,u.jsx)(f,{email:v.email}):(0,u.jsx)(K,{registerEndpoint:"/api/v1/subnet/login"})}),(0,u.jsx)(d,{})]}),O=(0,u.jsx)(E,{}),I=(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:b&&v?(0,u.jsx)(f,{email:v.email}):T}),!b&&(0,u.jsx)(d,{})]}),B=m?(0,u.jsx)("div",{children:"Loading.."}):I;return(0,i.useEffect)((function(){e((0,a.Sc)("register"))}),[]),(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(_.Z,{label:"Register to MinIO Subscription Network",actions:(0,u.jsx)(R.Z,{})}),(0,u.jsx)(o.Xgh,{children:(0,u.jsx)(o.mQc,{horizontal:!0,currentTabOrPath:j,onTabClick:function(t){e((0,g.m)(t))},options:[{tabConfig:{label:"Credentials",id:"simple-tab-0"},content:B},{tabConfig:{label:"API Key",id:"simple-tab-1"},content:P},{tabConfig:{label:"Air-Gap",id:"simple-tab-2"},content:O}]})})]})}},74440:function(e,t,n){"use strict";var r=n(4942),i=(n(72791),n(29945)),o=n(80184);t.Z=function(e){var t=e.email,n=void 0===t?"":t;return(0,o.jsxs)(i.xuv,{sx:{height:67,color:"#ffffff",display:"flex",position:"relative",top:-30,left:-32,width:"calc(100% + 64px)",alignItems:"center",justifyContent:"space-between",backgroundColor:"#2781B0",padding:"0 25px 0 25px","& .registered-box, .reg-badge-box":{display:"flex",alignItems:"center",justifyContent:"flex-start"},"& .reg-badge-box":{marginLeft:"20px","& .min-icon":{fill:"#2781B0"}}},children:[(0,o.jsxs)(i.xuv,{className:"registered-box",children:[(0,o.jsx)(i.xuv,{sx:{fontSize:"16px",fontWeight:400},children:"Register status:"}),(0,o.jsxs)(i.xuv,{className:"reg-badge-box",children:[(0,o.jsx)(i.SA,{}),(0,o.jsx)(i.xuv,{sx:{fontWeight:600},children:"Registered"})]})]}),(0,o.jsxs)(i.xuv,{className:"registered-acc-box",sx:(0,r.Z)({alignItems:"center",justifyContent:"flex-start",display:"flex"},"@media (max-width: ".concat(i.Egj.sm,"px)"),{display:"none"}),children:[(0,o.jsx)(i.xuv,{sx:{fontSize:"16px",fontWeight:400},children:"Registered to:"}),(0,o.jsx)(i.xuv,{sx:{marginLeft:"8px",fontWeight:600},children:n})]})]})}},76998:function(e,t,n){"use strict";var r=n(42458),i={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,o,s,a,c,l,u=!1;t||(t={}),n=t.debug||!1;try{if(s=r(),a=document.createRange(),c=document.getSelection(),(l=document.createElement("span")).textContent=e,l.ariaHidden="true",l.style.all="unset",l.style.position="fixed",l.style.top=0,l.style.clip="rect(0, 0, 0, 0)",l.style.whiteSpace="pre",l.style.webkitUserSelect="text",l.style.MozUserSelect="text",l.style.msUserSelect="text",l.style.userSelect="text",l.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),"undefined"===typeof r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var o=i[t.format]||i.default;window.clipboardData.setData(o,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(l),a.selectNodeContents(l),c.addRange(a),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(f){n&&console.error("unable to copy using execCommand: ",f),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(f){n&&console.error("unable to copy using clipboardData: ",f),n&&console.error("falling back to prompt"),o=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(o,e)}}finally{c&&("function"==typeof c.removeRange?c.removeRange(a):c.removeAllRanges()),l&&document.body.removeChild(l),s()}return u}},568:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var i=a(n(72791)),o=a(n(76998)),s=["text","onCopy","options","children"];function a(e){return e&&e.__esModule?e:{default:e}}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function f(e,t){for(var n=0;n0&&(1===e.organizations.length?i(j({token:e.access_token,account_id:e.organizations[0].accountId.toString()})):(i((0,g.t2)(e.access_token)),i((0,g.dl)(e.organizations)),i((0,g.wK)(e.organizations[0].accountId.toString()))))})).catch((function(e){i((0,a.Ih)(e)),i((0,g.K4)(!1)),i((0,g.Z7)(""))}));case 11:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),k=(0,m.hg)("register/subnetLogin",function(){var e=(0,x.Z)((0,p.Z)().mark((function e(t,n){var r,i,o,s,c,l,u;return(0,p.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n.getState,n.rejectWithValue,i=n.dispatch,o=r(),s=o.register.license,c=o.register.subnetPassword,l=o.register.subnetEmail,!o.register.loading){e.next=8;break}return e.abrupt("return");case 8:i((0,g.K4)(!0)),u={username:l,password:c,apiKey:s},h.Z.invoke("POST","/api/v1/subnet/login",u).then((function(e){i((0,g.K4)(!1)),e&&e.registered?(i((0,g.jS)()),i(y())):e&&e.mfa_token?i((0,g.dK)(e.mfa_token)):e&&e.access_token&&e.organizations.length>0&&(i((0,g.t2)(e.access_token)),i((0,g.dl)(e.organizations)),i((0,g.wK)(e.organizations[0].accountId.toString())))})).catch((function(e){i((0,a.Ih)(e)),i((0,g.K4)(!1)),i((0,g.jS)())}));case 11:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()),C=n(23814),S=n(27454),T=n(78029),P=n.n(T),O=function(e){var t=e.icon,n=e.description;return(0,u.jsxs)(o.xuv,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,u.jsx)(o.xuv,{className:"muted",style:{fontSize:"14px",fontStyle:"italic"},children:n})]})},I=function(){return(0,u.jsx)(o.KfX,{title:"Why should I register?",iconComponent:(0,u.jsx)(o.M9A,{}),help:(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{sx:{fontSize:"14px",marginBottom:"15px"},children:"Registering this cluster with the MinIO Subscription Network (SUBNET) provides the following benefits in addition to the commercial license and SLA backed support."}),(0,u.jsxs)(o.xuv,{sx:{display:"flex",flexFlow:"column"},children:[(0,u.jsx)(O,{icon:(0,u.jsx)(o._qw,{}),description:"Call Home Monitoring"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.toM,{}),description:"Health Diagnostics"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.Fsz,{}),description:"Performance Analysis"}),(0,u.jsx)(O,{icon:(0,u.jsx)(o.EQx,{}),description:(0,u.jsx)("a",{href:"https://min.io/signup?ref=con",target:"_blank",children:"More Features"})})]})]})})},B=n(9505),E=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetRegToken})),n=(0,s.v9)((function(e){return e.register.clusterRegistered})),l=(0,s.v9)((function(e){return e.register.licenseInfo})),d="https://subnet.min.io/cluster/register?token=".concat(t),p=(0,i.useState)(""),x=(0,r.Z)(p,2),g=x[0],h=x[1],m=(0,B.Z)((function(){e(y()),e((0,a.cN)(!0))}),(function(t){e((0,a.Ih)(t))})),b=(0,r.Z)(m,2),v=b[0],j=b[1];return(0,u.jsx)(i.Fragment,{children:(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:n&&l?(0,u.jsx)(f,{email:l.email}):(0,u.jsx)(o.ltY,{title:"Register cluster in an Air-gap environment",icon:(0,u.jsx)(o.YL8,{}),helpBox:(0,u.jsx)(I,{}),withBorders:!1,containerPadding:!1,children:(0,u.jsx)(o.xuv,{sx:{display:"flex",flexFlow:"column",flex:"2",marginTop:"15px","& .step-row":{fontSize:14,display:"flex",marginTop:"15px",marginBottom:"15px"}},children:(0,u.jsxs)(o.xuv,{children:[(0,u.jsx)(o.xuv,{className:"step-row",children:(0,u.jsx)(o.xuv,{className:"step-text",children:"Click on the link to register this cluster in SUBNET and get a License Key for this Air-Gap deployment"})}),(0,u.jsxs)(o.xuv,{sx:{flex:"1",display:"flex",alignItems:"center",gap:3},children:[(0,u.jsx)("a",{href:d,target:"_blank",children:"https://subnet.min.io/cluster/register"}),(0,u.jsx)(S.Z,{tooltip:"Copy to Clipboard",children:(0,u.jsx)(P(),{text:d,children:(0,u.jsx)(o.zxk,{type:"button",id:"copy-ult-to-clip-board",icon:(0,u.jsx)(o.TIy,{}),color:"primary",variant:"regular"})})})]}),(0,u.jsx)(o.xuv,{className:"muted",sx:{marginTop:"25px"},children:"Note: If this machine does not have internet connection, Copy paste the following URL in a browser where you access SUBNET and follow the instructions to complete the registration"}),(0,u.jsxs)(o.xuv,{sx:{marginTop:"25px",display:"flex",flexDirection:"column"},children:[(0,u.jsxs)("label",{style:{fontWeight:"bold",marginBottom:"10px"},children:["Paste the License Key"," "]}),(0,u.jsx)(o.q5m,{value:g,disabled:v,label:"",id:"licenseKey",name:"licenseKey",placeholder:"License Key",onChange:function(e){h(e.target.value)}})]}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"apply-license-key",onClick:function(){j("PUT","/api/v1/configs/subnet",{key_values:[{key:"license",value:g}]})},variant:"callAction",disabled:!g||v,label:"Apply Cluster License"})})]})})})})})},z=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetMFAToken})),n=(0,s.v9)((function(e){return e.register.subnetOTP})),r=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{title:"Two-Factor Authentication",helpBox:(0,u.jsx)(I,{}),withBorders:!1,containerPadding:!1,children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Please enter the 6-digit verification code that was sent to your email address. This code will be valid for 5 minutes."}),(0,u.jsx)(o.xuv,{children:(0,u.jsx)(o.Wzg,{overlayIcon:(0,u.jsx)(o.mBM,{}),id:"subnet-otp",name:"subnet-otp",onChange:function(t){return e((0,g.Z7)(t.target.value))},placeholder:"",label:"",value:n})}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"verify",onClick:function(){return e(w())},disabled:r||0===n.trim().length||0===t.trim().length,variant:"callAction",label:"Verify"})})]})},Z=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetAccessToken})),n=(0,s.v9)((function(e){return e.register.selectedSubnetOrganization})),r=(0,s.v9)((function(e){return e.register.subnetOrganizations})),i=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{title:"Register MinIO cluster",containerPadding:!0,withBorders:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.PhF,{id:"subnet-organization",name:"subnet-organization",onChange:function(t){return e((0,g.wK)(t))},label:"Select an organization",value:n,options:r.map((function(e){return{label:e.company,value:e.accountId.toString()}}))}),(0,u.jsx)(o.xuv,{sx:C.ID.modalButtonBar,children:(0,u.jsx)(o.zxk,{id:"register-cluster",onClick:function(){return function(){i||(e((0,g.K4)(!0)),t&&n&&e(j({token:t,account_id:n})))}},disabled:i||0===t.trim().length,variant:"callAction",label:"Register"})})]})},A=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetPassword})),n=(0,s.v9)((function(e){return e.register.subnetEmail})),r=(0,s.v9)((function(e){return e.register.loading}));return(0,u.jsxs)(o.ltY,{icon:(0,u.jsx)(o.dRy,{}),title:"Online activation of MinIO Subscription Network License",withBorders:!1,containerPadding:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.xuv,{sx:{fontSize:"14px",display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Use your MinIO Subscription Network login credentials to register this cluster."}),(0,u.jsxs)(o.xuv,{sx:{flex:"1"},children:[(0,u.jsx)(o.Wzg,{id:"subnet-email",name:"subnet-email",onChange:function(t){return e((0,g.Ze)(t.target.value))},label:"Email",value:n,overlayIcon:(0,u.jsx)(o.oyc,{})}),(0,u.jsx)(o.Wzg,{id:"subnet-password",name:"subnet-password",onChange:function(t){return e((0,g.lr)(t.target.value))},label:"Password",type:"password",value:t}),(0,u.jsxs)(o.xuv,{sx:C.ID.modalButtonBar,children:[(0,u.jsx)(o.zxk,{id:"sign-up",type:"submit",variant:"regular",onClick:function(e){e.preventDefault(),window.open("https://min.io/signup?ref=con","_blank")},label:"Sign up"}),(0,u.jsx)(o.zxk,{id:"register-credentials",type:"submit",variant:"callAction",disabled:r||0===n.trim().length||0===t.trim().length,onClick:function(){return e(k())},label:"Register"})]})]})]})},_=n(47974),R=n(99670),L=n(57689),D=n(23508),F=function(e){var t=e.open,n=e.closeModal,s=e.onSet,l=(0,c.TL)(),f=(0,i.useState)(""),d=(0,r.Z)(f,2),p=d[0],x=d[1],g=(0,i.useState)(""),h=(0,r.Z)(g,2),m=h[0],b=h[1],v=(0,i.useState)(""),y=(0,r.Z)(v,2),j=y[0],w=y[1],k=(0,i.useState)(""),C=(0,r.Z)(k,2),S=C[0],T=C[1],P=(0,B.Z)((function(e){e.mfa_token?w(e.mfa_token):e.access_token?E("GET","/api/v1/subnet/apikey?token=".concat(e.access_token)):(s(e.apiKey),n())}),(function(e){l((0,a.Ih)(e)),n(),x(""),b(""),w(""),T("")})),O=(0,r.Z)(P,2),I=O[0],E=O[1],z=function(){return(0,u.jsxs)(o.ltY,{withBorders:!1,containerPadding:!1,children:[(0,u.jsx)(o.Wzg,{id:"subnet-email",name:"subnet-email",onChange:function(e){return x(e.target.value)},label:"Email",value:p,overlayIcon:(0,u.jsx)(o.oyc,{})}),(0,u.jsx)(o.Wzg,{id:"subnet-password",name:"subnet-password",onChange:function(e){return b(e.target.value)},label:"Password",type:"password",value:m})]})},Z=function(){return(0,u.jsx)(o.xuv,{sx:{display:"flex"},children:(0,u.jsxs)(o.xuv,{sx:{display:"flex",flexFlow:"column",flex:"2"},children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginTop:20,marginBottom:20},children:"Two-Factor Authentication"}),(0,u.jsx)(o.xuv,{children:"Please enter the 6-digit verification code that was sent to your email address. This code will be valid for 5 minutes."}),(0,u.jsx)(o.xuv,{sx:{flex:"1",marginTop:"30px"},children:(0,u.jsx)(o.Wzg,{overlayIcon:(0,u.jsx)(o.mBM,{}),id:"subnet-otp",name:"subnet-otp",onChange:function(e){return T(e.target.value)},placeholder:"",label:"",value:S})})]})})};return t?(0,u.jsx)(D.Z,{title:"Get API Key from SUBNET",confirmText:"Get API Key",isOpen:t,titleIcon:(0,u.jsx)(o.szr,{}),isLoading:I,cancelText:"Cancel",onConfirm:function(){""!==j?E("POST","/api/v1/subnet/login/mfa",{username:p,otp:S,mfa_token:j}):E("POST","/api/v1/subnet/login",{username:p,password:m})},onClose:n,confirmButtonProps:{variant:"callAction",disabled:!p||!m||I,hidden:!0},cancelButtonProps:{disabled:I},confirmationContent:""===j?z():Z()}):null},K=function(e){var t=e.registerEndpoint,n=(0,L.s0)(),s=(0,i.useState)(!1),l=(0,r.Z)(s,2),f=l[0],d=l[1],p=(0,i.useState)(""),x=(0,r.Z)(p,2),g=x[0],m=x[1],b=(0,i.useState)(!1),y=(0,r.Z)(b,2),j=y[0],w=y[1],k=(0,i.useState)(!1),S=(0,r.Z)(k,2),T=S[0],P=S[1],O=(0,c.TL)(),B=(0,i.useCallback)((function(){if(!j){w(!0);var e={apiKey:g};h.Z.invoke("POST",t,e).then((function(e){w(!1),e&&e.registered&&(O((0,a.cN)(!0)),n(v.gA.LICENSE))})).catch((function(e){O((0,a.Ih)(e)),w(!1),E()}))}}),[g,O,j,t,n]);(0,i.useEffect)((function(){T&&B()}),[T,B]);var E=function(){m(""),P(!1)};return(0,u.jsxs)(o.ltY,{title:"Register cluster with API key",icon:(0,u.jsx)(o.dRy,{}),containerPadding:!1,withBorders:!1,helpBox:(0,u.jsx)(I,{}),children:[(0,u.jsx)(o.xuv,{sx:{fontSize:14,display:"flex",flexFlow:"column",marginBottom:"30px"},children:"Use your MinIO Subscription Network API Key to register this cluster."}),(0,u.jsxs)(o.xuv,{sx:{flex:"1"},children:[(0,u.jsx)(o.Wzg,{id:"api-key",name:"api-key",onChange:function(e){return m(e.target.value)},label:"API Key",value:g}),(0,u.jsxs)(o.xuv,{sx:C.ID.modalButtonBar,children:[(0,u.jsx)(o.zxk,{id:"get-from-subnet",variant:"regular",disabled:j,onClick:function(){return d(!0)},label:"Get from SUBNET"}),(0,u.jsx)(o.zxk,{id:"register",type:"submit",variant:"callAction",disabled:j||0===g.trim().length,onClick:function(){return B()},label:"Register"})]})]}),(0,u.jsx)(F,{open:f,closeModal:function(){return d(!1)},onSet:function(e){m(e),P(!0)}})]})},N=function(){var e=(0,c.TL)(),t=(0,s.v9)((function(e){return e.register.subnetMFAToken})),n=(0,s.v9)((function(e){return e.register.subnetAccessToken})),l=(0,s.v9)((function(e){return e.register.subnetRegToken})),p=(0,s.v9)((function(e){return e.register.subnetOrganizations})),x=(0,s.v9)((function(e){return e.register.loading})),m=(0,s.v9)((function(e){return e.register.loadingLicenseInfo})),b=(0,s.v9)((function(e){return e.register.clusterRegistered})),v=(0,s.v9)((function(e){return e.register.licenseInfo})),j=(0,s.v9)((function(e){return e.register.curTab})),w=(0,i.useState)(!0),k=(0,r.Z)(w,2),C=k[0],S=k[1];(0,i.useEffect)((function(){return function(){e((0,g.jS)())}}),[e]),(0,i.useEffect)((function(){if("simple-tab-2"===j&&!x&&!l){e((0,g.K4)(!0)),h.Z.invoke("GET","/api/v1/subnet/registration-token").then((function(t){e((0,g.K4)(!1)),t&&t.regToken&&e((0,g.wz)(t.regToken))})).catch((function(t){console.error(t),e((0,a.Ih)(t)),e((0,g.K4)(!1))}))}}),[j,x,l,e]),(0,i.useEffect)((function(){C&&(e(y()),S(!1))}),[C,S,e]);var T=(0,u.jsx)(i.Fragment,{});T=n&&p.length>0?(0,u.jsx)(Z,{}):t?(0,u.jsx)(z,{}):(0,u.jsx)(A,{});var P=(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:b&&v?(0,u.jsx)(f,{email:v.email}):(0,u.jsx)(K,{registerEndpoint:"/api/v1/subnet/login"})}),(0,u.jsx)(d,{})]}),O=(0,u.jsx)(E,{}),I=(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(o.xuv,{withBorders:!0,sx:{display:"flex",flexFlow:"column",padding:"43px"},children:b&&v?(0,u.jsx)(f,{email:v.email}):T}),!b&&(0,u.jsx)(d,{})]}),B=m?(0,u.jsx)("div",{children:"Loading.."}):I;return(0,i.useEffect)((function(){e((0,a.Sc)("register"))}),[]),(0,u.jsxs)(i.Fragment,{children:[(0,u.jsx)(_.Z,{label:"Register to MinIO Subscription Network",actions:(0,u.jsx)(R.Z,{})}),(0,u.jsx)(o.Xgh,{children:(0,u.jsx)(o.mQc,{horizontal:!0,currentTabOrPath:j,onTabClick:function(t){e((0,g.m)(t))},options:[{tabConfig:{label:"Credentials",id:"simple-tab-0"},content:B},{tabConfig:{label:"API Key",id:"simple-tab-1"},content:P},{tabConfig:{label:"Air-Gap",id:"simple-tab-2"},content:O}]})})]})}},74440:function(e,t,n){"use strict";var r=n(4942),i=(n(72791),n(29945)),o=n(80184);t.Z=function(e){var t=e.email,n=void 0===t?"":t;return(0,o.jsxs)(i.xuv,{sx:{height:67,color:"#ffffff",display:"flex",position:"relative",top:-30,left:-32,width:"calc(100% + 64px)",alignItems:"center",justifyContent:"space-between",backgroundColor:"#2781B0",padding:"0 25px 0 25px","& .registered-box, .reg-badge-box":{display:"flex",alignItems:"center",justifyContent:"flex-start"},"& .reg-badge-box":{marginLeft:"20px","& .min-icon":{fill:"#2781B0"}}},children:[(0,o.jsxs)(i.xuv,{className:"registered-box",children:[(0,o.jsx)(i.xuv,{sx:{fontSize:"16px",fontWeight:400},children:"Register status:"}),(0,o.jsxs)(i.xuv,{className:"reg-badge-box",children:[(0,o.jsx)(i.SA,{}),(0,o.jsx)(i.xuv,{sx:{fontWeight:600},children:"Registered"})]})]}),(0,o.jsxs)(i.xuv,{className:"registered-acc-box",sx:(0,r.Z)({alignItems:"center",justifyContent:"flex-start",display:"flex"},"@media (max-width: ".concat(i.Egj.sm,"px)"),{display:"none"}),children:[(0,o.jsx)(i.xuv,{sx:{fontSize:"16px",fontWeight:400},children:"Registered to:"}),(0,o.jsx)(i.xuv,{sx:{marginLeft:"8px",fontWeight:600},children:n})]})]})}},76998:function(e,t,n){"use strict";var r=n(42458),i={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,o,s,a,c,l,u=!1;t||(t={}),n=t.debug||!1;try{if(s=r(),a=document.createRange(),c=document.getSelection(),(l=document.createElement("span")).textContent=e,l.ariaHidden="true",l.style.all="unset",l.style.position="fixed",l.style.top=0,l.style.clip="rect(0, 0, 0, 0)",l.style.whiteSpace="pre",l.style.webkitUserSelect="text",l.style.MozUserSelect="text",l.style.msUserSelect="text",l.style.userSelect="text",l.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),"undefined"===typeof r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var o=i[t.format]||i.default;window.clipboardData.setData(o,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(l),a.selectNodeContents(l),c.addRange(a),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(f){n&&console.error("unable to copy using execCommand: ",f),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(f){n&&console.error("unable to copy using clipboardData: ",f),n&&console.error("falling back to prompt"),o=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(o,e)}}finally{c&&("function"==typeof c.removeRange?c.removeRange(a):c.removeAllRanges()),l&&document.body.removeChild(l),s()}return u}},568:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var i=a(n(72791)),o=a(n(76998)),s=["text","onCopy","options","children"];function a(e){return e&&e.__esModule?e:{default:e}}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function f(e,t){for(var n=0;n.\n\nimport React, { Fragment, useState } from \"react\";\nimport { CopyIcon, SettingsIcon, Box, Grid, Switch, InputBox } from \"mds\";\nimport RegistrationStatusBanner from \"./RegistrationStatusBanner\";\n\nexport const ClusterRegistered = ({ email }: { email: string }) => {\n return (\n \n \n \n \n Login to{\" \"}\n \n SUBNET\n {\" \"}\n to avail support for this MinIO cluster\n \n \n \n );\n};\n\nexport const ProxyConfiguration = () => {\n const proxyConfigurationCommand =\n \"mc admin config set {alias} subnet proxy={proxy}\";\n const [displaySubnetProxy, setDisplaySubnetProxy] = useState(false);\n return (\n \n \n \n \n \n
\n Proxy Configuration\n
\n \n \n For airgap/firewalled environments it is possible to{\" \"}\n \n configure a proxy\n {\" \"}\n to connect to SUBNET .\n \n \n {displaySubnetProxy && (\n {}}\n label=\"\"\n value={proxyConfigurationCommand}\n overlayIcon={}\n overlayAction={() =>\n navigator.clipboard.writeText(proxyConfigurationCommand)\n }\n />\n )}\n \n \n \n ) => {\n setDisplaySubnetProxy(event.target.checked);\n }}\n />\n \n \n \n );\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n resetRegisterForm,\n setClusterRegistered,\n setLicenseInfo,\n setLoading,\n setLoadingLicenseInfo,\n setSelectedSubnetOrganization,\n setSubnetAccessToken,\n setSubnetMFAToken,\n setSubnetOrganizations,\n setSubnetOTP,\n} from \"./registerSlice\";\nimport api from \"../../../common/api\";\nimport {\n SubnetInfo,\n SubnetLoginRequest,\n SubnetLoginResponse,\n SubnetLoginWithMFARequest,\n SubnetRegisterRequest,\n} from \"../License/types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { createAsyncThunk } from \"@reduxjs/toolkit\";\nimport { AppState } from \"../../../store\";\nimport { hasPermission } from \"../../../common/SecureComponent\";\nimport {\n CONSOLE_UI_RESOURCE,\n IAM_PAGES,\n IAM_PAGES_PERMISSIONS,\n} from \"../../../common/SecureComponent/permissions\";\n\nexport const fetchLicenseInfo = createAsyncThunk(\n \"register/fetchLicenseInfo\",\n async (_, { getState, dispatch }) => {\n const state = getState() as AppState;\n\n const getSubnetInfo = hasPermission(\n CONSOLE_UI_RESOURCE,\n IAM_PAGES_PERMISSIONS[IAM_PAGES.LICENSE],\n true,\n );\n\n const loadingLicenseInfo = state.register.loadingLicenseInfo;\n\n if (loadingLicenseInfo) {\n return;\n }\n if (getSubnetInfo) {\n dispatch(setLoadingLicenseInfo(true));\n api\n .invoke(\"GET\", `/api/v1/subnet/info`)\n .then((res: SubnetInfo) => {\n dispatch(setLicenseInfo(res));\n dispatch(setClusterRegistered(true));\n dispatch(setLoadingLicenseInfo(false));\n })\n .catch((err: ErrorResponseHandler) => {\n if (\n err.detailedError.toLowerCase() !==\n \"License is not present\".toLowerCase() &&\n err.detailedError.toLowerCase() !==\n \"license not found\".toLowerCase()\n ) {\n dispatch(setErrorSnackMessage(err));\n }\n dispatch(setClusterRegistered(false));\n dispatch(setLoadingLicenseInfo(false));\n });\n } else {\n dispatch(setLoadingLicenseInfo(false));\n }\n },\n);\n\nexport interface ClassRegisterArgs {\n token: string;\n account_id: string;\n}\n\nexport const callRegister = createAsyncThunk(\n \"register/callRegister\",\n async (args: ClassRegisterArgs, { dispatch }) => {\n const request: SubnetRegisterRequest = {\n token: args.token,\n account_id: args.account_id,\n };\n api\n .invoke(\"POST\", \"/api/v1/subnet/register\", request)\n .then(() => {\n dispatch(setLoading(false));\n dispatch(setServerNeedsRestart(true));\n dispatch(resetRegisterForm());\n dispatch(fetchLicenseInfo());\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n dispatch(setLoading(false));\n });\n },\n);\n\nexport const subnetLoginWithMFA = createAsyncThunk(\n \"register/subnetLoginWithMFA\",\n async (_, { getState, rejectWithValue, dispatch }) => {\n const state = getState() as AppState;\n\n const subnetEmail = state.register.subnetEmail;\n const subnetMFAToken = state.register.subnetMFAToken;\n const subnetOTP = state.register.subnetOTP;\n const loading = state.register.loading;\n\n if (loading) {\n return;\n }\n dispatch(setLoading(true));\n const request: SubnetLoginWithMFARequest = {\n username: subnetEmail,\n otp: subnetOTP,\n mfa_token: subnetMFAToken,\n };\n api\n .invoke(\"POST\", \"/api/v1/subnet/login/mfa\", request)\n .then((resp: SubnetLoginResponse) => {\n dispatch(setLoading(false));\n if (resp && resp.access_token && resp.organizations.length > 0) {\n if (resp.organizations.length === 1) {\n dispatch(\n callRegister({\n token: resp.access_token,\n account_id: resp.organizations[0].accountId.toString(),\n }),\n );\n } else {\n dispatch(setSubnetAccessToken(resp.access_token));\n dispatch(setSubnetOrganizations(resp.organizations));\n dispatch(\n setSelectedSubnetOrganization(\n resp.organizations[0].accountId.toString(),\n ),\n );\n }\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n dispatch(setLoading(false));\n dispatch(setSubnetOTP(\"\"));\n });\n },\n);\n\nexport const subnetLogin = createAsyncThunk(\n \"register/subnetLogin\",\n async (_, { getState, rejectWithValue, dispatch }) => {\n const state = getState() as AppState;\n\n const license = state.register.license;\n const subnetPassword = state.register.subnetPassword;\n const subnetEmail = state.register.subnetEmail;\n const loading = state.register.loading;\n\n if (loading) {\n return;\n }\n dispatch(setLoading(true));\n let request: SubnetLoginRequest = {\n username: subnetEmail,\n password: subnetPassword,\n apiKey: license,\n };\n api\n .invoke(\"POST\", \"/api/v1/subnet/login\", request)\n .then((resp: SubnetLoginResponse) => {\n dispatch(setLoading(false));\n if (resp && resp.registered) {\n dispatch(resetRegisterForm());\n dispatch(fetchLicenseInfo());\n } else if (resp && resp.mfa_token) {\n dispatch(setSubnetMFAToken(resp.mfa_token));\n } else if (resp && resp.access_token && resp.organizations.length > 0) {\n dispatch(setSubnetAccessToken(resp.access_token));\n dispatch(setSubnetOrganizations(resp.organizations));\n dispatch(\n setSelectedSubnetOrganization(\n resp.organizations[0].accountId.toString(),\n ),\n );\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n dispatch(setLoading(false));\n dispatch(resetRegisterForm());\n });\n },\n);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport {\n CallHomeFeatureIcon,\n DiagnosticsFeatureIcon,\n ExtraFeaturesIcon,\n HelpIconFilled,\n PerformanceFeatureIcon,\n Box,\n HelpBox,\n} from \"mds\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string | React.ReactNode;\n}) => {\n return (\n \n {icon}{\" \"}\n \n {description}\n \n \n );\n};\nconst RegisterHelpBox = () => {\n return (\n }\n help={\n \n \n Registering this cluster with the MinIO Subscription Network\n (SUBNET) provides the following benefits in addition to the\n commercial license and SLA backed support.\n \n\n \n }\n description={`Call Home Monitoring`}\n />\n }\n description={`Health Diagnostics`}\n />\n }\n description={`Performance Analysis`}\n />\n }\n description={\n \n More Features\n \n }\n />\n \n \n }\n />\n );\n};\n\nexport default RegisterHelpBox;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport {\n Box,\n Button,\n CommentBox,\n CopyIcon,\n FormLayout,\n OfflineRegistrationIcon,\n} from \"mds\";\nimport { ClusterRegistered } from \"./utils\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { useSelector } from \"react-redux\";\nimport { fetchLicenseInfo } from \"./registerThunks\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { modalStyleUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport useApi from \"../Common/Hooks/useApi\";\n\nconst OfflineRegistration = () => {\n const dispatch = useAppDispatch();\n const subnetRegToken = useSelector(\n (state: AppState) => state.register.subnetRegToken,\n );\n const clusterRegistered = useSelector(\n (state: AppState) => state.register.clusterRegistered,\n );\n const licenseInfo = useSelector(\n (state: AppState) => state.register.licenseInfo,\n );\n\n const offlineRegUrl = `https://subnet.min.io/cluster/register?token=${subnetRegToken}`;\n\n const [licenseKey, setLicenseKey] = useState(\"\");\n\n const [isSaving, invokeApplyLicenseApi] = useApi(\n () => {\n dispatch(fetchLicenseInfo());\n dispatch(setServerNeedsRestart(true));\n },\n (err) => {\n dispatch(setErrorSnackMessage(err));\n },\n );\n\n const applyAirGapLicense = () => {\n invokeApplyLicenseApi(\"PUT\", `/api/v1/configs/subnet`, {\n key_values: [{ key: \"license\", value: licenseKey }],\n });\n };\n\n return (\n \n \n {clusterRegistered && licenseInfo ? (\n \n ) : (\n }\n helpBox={}\n withBorders={false}\n containerPadding={false}\n >\n \n \n \n \n Click on the link to register this cluster in SUBNET and get\n a License Key for this Air-Gap deployment\n \n \n\n \n \n https://subnet.min.io/cluster/register\n \n\n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n\n \n Note: If this machine does not have internet connection, Copy\n paste the following URL in a browser where you access SUBNET\n and follow the instructions to complete the registration\n \n\n \n \n {\n setLicenseKey(e.target.value);\n }}\n />\n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default OfflineRegistration;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Box, Button, FormLayout, InputBox, LockIcon } from \"mds\";\nimport { useSelector } from \"react-redux\";\nimport { setSubnetOTP } from \"./registerSlice\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { subnetLoginWithMFA } from \"./registerThunks\";\nimport { modalStyleUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\n\nconst SubnetMFAToken = () => {\n const dispatch = useAppDispatch();\n\n const subnetMFAToken = useSelector(\n (state: AppState) => state.register.subnetMFAToken,\n );\n const subnetOTP = useSelector((state: AppState) => state.register.subnetOTP);\n const loading = useSelector((state: AppState) => state.register.loading);\n\n return (\n }\n withBorders={false}\n containerPadding={false}\n >\n \n Please enter the 6-digit verification code that was sent to your email\n address. This code will be valid for 5 minutes.\n \n\n \n }\n id=\"subnet-otp\"\n name=\"subnet-otp\"\n onChange={(event: React.ChangeEvent) =>\n dispatch(setSubnetOTP(event.target.value))\n }\n placeholder=\"\"\n label=\"\"\n value={subnetOTP}\n />\n \n \n \n \n );\n};\nexport default SubnetMFAToken;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2023 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Box, Button, FormLayout, Select } from \"mds\";\nimport { setLoading, setSelectedSubnetOrganization } from \"./registerSlice\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { callRegister } from \"./registerThunks\";\nimport { modalStyleUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\n\nconst ClusterRegistrationForm = () => {\n const dispatch = useAppDispatch();\n\n const subnetAccessToken = useSelector(\n (state: AppState) => state.register.subnetAccessToken,\n );\n const selectedSubnetOrganization = useSelector(\n (state: AppState) => state.register.selectedSubnetOrganization,\n );\n const subnetOrganizations = useSelector(\n (state: AppState) => state.register.subnetOrganizations,\n );\n const loading = useSelector((state: AppState) => state.register.loading);\n\n return (\n }\n >\n