\n \n \n }\n help={\n \n MinIO supports a variety of configurations ranging from\n encryption, compression, region, notifications, etc.\n \n \n You can learn more at our{\" \"}\n \n documentation\n \n .\n \n }\n />\n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfigurationOptions);\n","// This file is part of MinIO Console Server\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 .\nimport React from \"react\";\nimport PublicIcon from \"@mui/icons-material/Public\";\nimport CompressIcon from \"@mui/icons-material/Compress\";\nimport CodeIcon from \"@mui/icons-material/Code\";\nimport LocalHospitalIcon from \"@mui/icons-material/LocalHospital\";\nimport FindReplaceIcon from \"@mui/icons-material/FindReplace\";\nimport VpnKeyIcon from \"@mui/icons-material/VpnKey\";\nimport PendingActionsIcon from \"@mui/icons-material/PendingActions\";\nimport CallToActionIcon from \"@mui/icons-material/CallToAction\";\nimport { IElement, IElementValue, IOverrideEnv, OverrideValue } from \"./types\";\nimport { LogsIcon } from \"mds\";\n\nexport const configurationElements: IElement[] = [\n {\n icon: ,\n configuration_id: \"region\",\n configuration_label: \"Region\",\n },\n {\n icon: ,\n configuration_id: \"compression\",\n configuration_label: \"Compression\",\n },\n {\n icon: ,\n configuration_id: \"api\",\n configuration_label: \"API\",\n },\n {\n icon: ,\n configuration_id: \"heal\",\n configuration_label: \"Heal\",\n },\n {\n icon: ,\n configuration_id: \"scanner\",\n configuration_label: \"Scanner\",\n },\n {\n icon: ,\n configuration_id: \"etcd\",\n configuration_label: \"Etcd\",\n },\n {\n icon: ,\n configuration_id: \"logger_webhook\",\n configuration_label: \"Logger Webhook\",\n },\n {\n icon: ,\n configuration_id: \"audit_webhook\",\n configuration_label: \"Audit Webhook\",\n },\n {\n icon: (\n \n ),\n configuration_id: \"audit_kafka\",\n configuration_label: \"Audit Kafka\",\n },\n];\n\nexport const fieldsConfigurations: any = {\n region: [\n {\n name: \"name\",\n required: true,\n label: \"Server Location\",\n tooltip: 'Name of the location of the server e.g. \"us-west-rack2\"',\n type: \"string\",\n placeholder: \"e.g. us-west-rack-2\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n placeholder: \"Enter custom notes if any\",\n },\n ],\n compression: [\n {\n name: \"extensions\",\n required: false,\n label: \"Extensions\",\n tooltip:\n 'Extensions to compress e.g. \".txt\", \".log\" or \".csv\" - you can write one per field',\n type: \"csv\",\n placeholder: \"Enter an Extension\",\n withBorder: true,\n },\n {\n name: \"mime_types\",\n required: false,\n label: \"Mime Types\",\n tooltip:\n 'Mime types e.g. \"text/*\", \"application/json\" or \"application/xml\" - you can write one per field',\n type: \"csv\",\n placeholder: \"Enter a Mime Type\",\n withBorder: true,\n },\n ],\n api: [\n {\n name: \"requests_max\",\n required: false,\n label: \"Requests Max\",\n tooltip: \"Maximum number of concurrent requests, e.g. '1600'\",\n type: \"number\",\n placeholder: \"Enter Requests Max\",\n },\n {\n name: \"cors_allow_origin\",\n required: false,\n label: \"Cors Allow Origin\",\n tooltip: \"List of origins allowed for CORS requests\",\n type: \"csv\",\n placeholder: \"Enter allowed origin e.g. https://example.com\",\n },\n {\n name: \"replication_workers\",\n required: false,\n label: \"Replication Workers\",\n tooltip: \"Number of replication workers, defaults to 100\",\n type: \"number\",\n placeholder: \"Enter Replication Workers\",\n },\n {\n name: \"replication_failed_workers\",\n required: false,\n label: \"Replication Failed Workers\",\n tooltip:\n \"Number of replication workers for recently failed replicas, defaults to 4\",\n type: \"number\",\n placeholder: \"Enter Replication Failed Workers\",\n },\n ],\n heal: [\n {\n name: \"bitrotscan\",\n required: false,\n label: \"Bitrot Scan\",\n tooltip:\n \"Perform bitrot scan on disks when checking objects during scanner\",\n type: \"on|off\",\n },\n {\n name: \"max_sleep\",\n required: false,\n label: \"Max Sleep\",\n tooltip:\n \"Maximum sleep duration between objects to slow down heal operation, e.g. 2s\",\n type: \"duration\",\n placeholder: \"Enter Max Sleep Duration\",\n },\n {\n name: \"max_io\",\n required: false,\n label: \"Max IO\",\n tooltip:\n \"Maximum IO requests allowed between objects to slow down heal operation, e.g. 3\",\n type: \"number\",\n placeholder: \"Enter Max IO\",\n },\n ],\n scanner: [\n {\n name: \"delay\",\n required: false,\n label: \"Delay Multiplier\",\n tooltip: \"Scanner delay multiplier, defaults to '10.0'\",\n type: \"number\",\n placeholder: \"Enter Delay\",\n },\n {\n name: \"max_wait\",\n required: false,\n label: \"Max Wait\",\n tooltip: \"Maximum wait time between operations, defaults to '15s'\",\n type: \"duration\",\n placeholder: \"Enter Max Wait\",\n },\n {\n name: \"cycle\",\n required: false,\n label: \"Cycle\",\n tooltip: \"Time duration between scanner cycles, defaults to '1m'\",\n type: \"duration\",\n placeholder: \"Enter Cycle\",\n },\n ],\n etcd: [\n {\n name: \"endpoints\",\n required: true,\n label: \"Endpoints\",\n tooltip:\n 'List of etcd endpoints e.g. \"http://localhost:2379\" - you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"path_prefix\",\n required: false,\n label: \"Path Prefix\",\n tooltip: 'Namespace prefix to isolate tenants e.g. \"customer1/\"',\n type: \"string\",\n placeholder: \"Enter Path Prefix\",\n },\n {\n name: \"coredns_path\",\n required: false,\n label: \"Coredns Path\",\n tooltip: 'Shared bucket DNS records, default is \"/skydns\"',\n type: \"string\",\n placeholder: \"Enter Coredns Path\",\n },\n {\n name: \"client_cert\",\n required: false,\n label: \"Client Cert\",\n tooltip: \"Client cert for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_cert_key\",\n required: false,\n label: \"Client Cert Key\",\n tooltip: \"Client cert key for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert Key\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n multiline: true,\n placeholder: \"Enter custom notes if any\",\n },\n ],\n logger_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n audit_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n audit_kafka: [\n {\n name: \"enable\",\n required: false,\n label: \"Enable\",\n tooltip: \"Enable audit_kafka target\",\n type: \"on|off\",\n customValueProcess: (origValue: string) => {\n return origValue === \"\" || origValue === \"on\" ? \"on\" : \"off\";\n },\n },\n {\n name: \"brokers\",\n required: true,\n label: \"Brokers\",\n type: \"csv\",\n placeholder: \"Enter Kafka Broker\",\n },\n {\n name: \"topic\",\n required: false,\n label: \"Topic\",\n type: \"string\",\n placeholder: \"Enter Kafka Topic\",\n tooltip: \"Kafka topic used for bucket notifications\",\n },\n {\n name: \"sasl\",\n required: false,\n label: \"Use SASL\",\n tooltip:\n \"Enable SASL (Simple Authentication and Security Layer) authentication\",\n type: \"on|off\",\n },\n {\n name: \"sasl_username\",\n required: false,\n label: \"SASL Username\",\n type: \"string\",\n placeholder: \"Enter SASL Username\",\n tooltip: \"Username for SASL/PLAIN or SASL/SCRAM authentication\",\n },\n {\n name: \"sasl_password\",\n required: false,\n label: \"SASL Password\",\n type: \"password\",\n placeholder: \"Enter SASL Password\",\n tooltip: \"Password for SASL/PLAIN or SASL/SCRAM authentication\",\n },\n {\n name: \"sasl_mechanism\",\n required: false,\n label: \"SASL Mechanism\",\n type: \"string\",\n placeholder: \"Enter SASL Mechanism\",\n tooltip: \"SASL authentication mechanism\",\n },\n {\n name: \"tls\",\n required: false,\n label: \"Use TLS\",\n tooltip: \"Enable TLS (Transport Layer Security)\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n required: false,\n label: \"Skip TLS Verification\",\n tooltip: \"Trust server TLS without verification\",\n type: \"on|off\",\n },\n {\n name: \"client_tls_cert\",\n required: false,\n label: \"Client Cert\",\n tooltip: \"Client cert for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_tls_key\",\n required: false,\n label: \"Client Cert Key\",\n tooltip: \"Client cert key for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert Key\",\n },\n {\n name: \"tls_client_auth\",\n required: false,\n label: \"TLS Client Auth\",\n tooltip:\n \"ClientAuth determines the Kafka server's policy for TLS client authorization\",\n type: \"string\",\n },\n {\n name: \"version\",\n required: false,\n label: \"Version\",\n tooltip: \"Specify the version of the Kafka cluster\",\n type: \"string\",\n },\n ],\n};\n\nexport const removeEmptyFields = (formFields: IElementValue[]) => {\n const nonEmptyFields = formFields.filter((field) => field.value !== \"\");\n\n return nonEmptyFields;\n};\n\nexport const selectSAs = (\n e: React.ChangeEvent,\n setSelectedSAs: Function,\n selectedSAs: string[],\n) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selectedSAs]; // We clone the selectedSAs array\n if (checked) {\n // If the user has checked this field we need to push this to selectedSAs\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n setSelectedSAs(elements);\n return elements;\n};\n\nexport const overrideFields = (formFields: IElementValue[]): IOverrideEnv => {\n let overrideReturn: IOverrideEnv = {};\n\n formFields.forEach((envItem) => {\n // it has override values, we construct the value\n if (envItem.env_override) {\n const value: OverrideValue = {\n value: envItem.env_override.value,\n overrideEnv: envItem.env_override.name,\n };\n\n overrideReturn = { ...overrideReturn, [envItem.key]: value };\n }\n });\n\n return overrideReturn;\n};\n","// This file is part of MinIO Console Server\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, { useEffect, useState } from \"react\";\n\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { deleteDialogStyles } from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...deleteDialogStyles,\n });\n\ninterface IResetConfiguration {\n classes: any;\n configurationName: string;\n closeResetModalAndRefresh: (reloadConfiguration: boolean) => void;\n\n resetOpen: boolean;\n}\n\nconst ResetConfigurationModal = ({\n classes,\n configurationName,\n closeResetModalAndRefresh,\n resetOpen,\n}: IResetConfiguration) => {\n const dispatch = useAppDispatch();\n const [resetLoading, setResetLoading] = useState(false);\n\n useEffect(() => {\n if (resetLoading) {\n api.configs\n .resetConfig(configurationName)\n .then(() => {\n setResetLoading(false);\n closeResetModalAndRefresh(true);\n })\n .catch((err) => {\n setResetLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n }\n }, [closeResetModalAndRefresh, configurationName, resetLoading, dispatch]);\n\n const resetConfiguration = () => {\n setResetLoading(true);\n };\n\n return (\n }\n isLoading={resetLoading}\n onConfirm={resetConfiguration}\n onClose={() => {\n closeResetModalAndRefresh(false);\n }}\n confirmationContent={\n \n {resetLoading && }\n \n Are you sure you want to restore these configurations to default\n values?\n \n \n Please note that this may cause your system to not be accessible\n \n \n \n }\n />\n );\n};\n\nexport default withStyles(styles)(ResetConfigurationModal);\n"],"names":["StyledSwitch","withStyles","theme","root","width","height","padding","margin","switchBase","transform","color","palette","common","white","backgroundColor","boxShadow","opacity","border","thumb","marginLeft","track","borderRadius","transition","transitions","create","checked","focusVisible","switchContainer","display","alignItems","justifyContent","Switch","createStyles","_objectSpread","indicatorLabelOn","fontWeight","indicatorLabel","fontSize","fieldDescription","marginTop","tooltip","actionsTray","fieldBasic","_ref","_ref$label","label","onChange","value","id","name","_ref$checked","_ref$disabled","disabled","_ref$switchOnly","switchOnly","_ref$tooltip","_ref$description","description","classes","indicatorLabels","_ref$extraInputProps","extraInputProps","switchComponent","_jsxs","React","children","_jsx","className","clsx","_defineProperty","length","inputProps","disableRipple","disableFocusRipple","disableTouchRipple","Grid","container","item","xs","sm","md","InputLabel","htmlFor","inputLabel","tooltipContainer","Tooltip","title","placement","HelpIcon","textAlign","Typography","component","useStyles","makeStyles","headerBarIcon","marginRight","primary","main","headerBarSubheader","maxWidth","stContainer","borderBottom","flexFlow","titleColumn","leftItems","rightItems","icon","subTitle","actions","concat","style","tabStripStyle","minHeight","tabsContainer","tabsHeaderContainer","background","borderRight","marginBottom","tabContentContainer","tabPanel","flexDirection","_ref$selectedTab","selectedTab","routes","isRouteTabs","useTheme","_useLocation$pathname","useLocation","pathname","isSmallScreen","useMediaQuery","breakpoints","down","_useState","useState","_useState2","_slicedToArray","setValue","headerList","contentList","useEffect","tabConfigElement","find","tabConfig","to","forEach","child","push","content","TabContext","Box","TabList","event","newValue","orientation","variant","scrollButtons","tabList","map","index","Tab","tabHeader","focusRipple","TabPanel","open","type","onCloseEndpoint","setName","_useState3","_useState4","endpoint","setEndpoint","_useState5","_useState6","authToken","setAuthToken","_useState7","_useState8","saving","setSaving","_useState9","_useState10","invalidInputs","setInvalidInput","_useState11","_useState12","initialInputs","setInitialInputs","dispatch","useAppDispatch","initializeInput","filter","validateInput","valid","includes","_toConsumableArray","Webhook","CallToActionIcon","PendingActionsIcon","Fragment","ModalWrapper","modalOpen","onClose","titleIcon","sx","formFieldStyles","formFieldRow","InputBoxWrapper","target","validity","error","pattern","required","LinearProgress","Button","onClick","trim","payload","key_values","key","arn_resource_id","api","configs","setConfig","then","res","setServerNeedsRestart","data","restart","setSnackBarMessage","configurationIsLoading","catch","err","setErrorSnackMessage","errorToHandler","selectedARN","deleteLoading","setDeleteLoading","resetConfig","defaultWH","message","ConfirmDialog","confirmText","isOpen","isLoading","onConfirm","ConfirmDeleteIcon","confirmationContent","DialogContentText","_overrideValues$enabl","_overrideValues$endpo","_overrideValues$auth_","endpointInfo","endpointState","setEndpointState","endpointLocate","tokenLocate","enable","endpointValue","tokenValue","hasOverride","itm","env_override","overrideValues","overrideFields","PredefinedList","actionButton","paddingRight","overrideEnv","ConsoleIcon","auth_token","FormSwitchWrapper","e","setResetConfigurationOpen","WebhookSettingslist","newEndpointOpen","setNewEndpointOpen","deleteWebhookOpen","setDeleteWebhookOpen","editWebhookOpen","setEditWebhookOpen","setSelectedARN","selectedEndpoint","setSelectedEndpoint","disableButtonFunction","wHook","element","_wHook$key_values","AddEndpointModal","DeleteWebhookEndpoint","EditWebhookEndpoint","DataTable","columns","elementKey","renderFunction","EnableFilter","overrideEnabled","justifyItems","fill","TierOfflineIcon","TierOnlineIcon","endpointFilter","itemActions","idField","records","entityName","customPaperHeight","settingsCommon","settingsFormContainer","gridTemplateColumns","gridGap","selectedConfiguration","_ref$className","navigate","useNavigate","selConfigTab","substring","lastIndexOf","valuesObj","setValueObj","configValues","setConfigValues","configSubsysList","setConfigSubsysList","resetConfigurationOpen","overrideEnvs","setOverrideEnvs","loadingConfig","useSelector","state","system","loadingConfigurations","configId","get","configInfo","values","keyVals","fieldsConfigurations","field","includedValue","customValue","customValueProcess","removeEmptyFields","configuration_id","onValueChange","useCallback","resetConfigurationMOpen","onMouseMove","setHelpName","configuration_label","ResetConfigurationModal","configurationName","closeResetModalAndRefresh","resetOpen","paddingTop","Loader","WebhookSettings","noValidate","onSubmit","preventDefault","ConfTargetGeneric","fields","defaultVals","maxHeight","configName","validActiveConfig","configurationElements","containerClassName","minWidth","EditConfiguration","useDispatch","_useApi","useApi","performDownload","Blob","window","atob","DateTime","now","toFormat","_useApi2","isReqLoading","invokeApi","TooltipWrapper","UploadIcon","needsRestart","serverNeedsRestart","undefined","refreshPage","setRefreshPage","fileUpload","useRef","files","fileToUpload","formData","FormData","blobFile","append","ref","current","click","DownloadIcon","NON_SUB_SYS_CONFIG_ITEMS","IGNORED_CONFIG_SUB_SYS","settingsOptionsContainer","flexWrap","searchField","containerForHeader","configSubSysList","setConfigSubSysList","fetchConfigSubSysList","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","listConfig","_res$data","configurations","_res$data2","confSubSysList","reduce","acc","_ref3","_ref3$key","stop","availableConfigSubSys","_ref4","PageHeaderWrapper","HelpMenu","PageLayout","ScreenTitle","SettingsIcon","gap","ImportConfigButton","ExportConfigButton","VerticalTabs","Routes","Route","path","ConfigurationForm","Navigate","IAM_PAGES","SETTINGS","Link","HelpBox","iconComponent","help","href","rel","PublicIcon","CompressIcon","CodeIcon","LocalHospitalIcon","FindReplaceIcon","VpnKeyIcon","LogsIcon","region","placeholder","compression","withBorder","heal","scanner","etcd","multiline","logger_webhook","audit_webhook","audit_kafka","origValue","formFields","selectSAs","setSelectedSAs","selectedSAs","targetD","elements","overrideReturn","envItem","wrapText","whiteSpace","wordWrap","deleteDialogStyles","resetLoading","setResetLoading"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1432.963da344.chunk.js b/portal-ui/build/static/js/1432.963da344.chunk.js
deleted file mode 100644
index 3170ca26c..000000000
--- a/portal-ui/build/static/js/1432.963da344.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1432],{81159:function(e,n,t){var i=t(4942),o=t(1413),a=t(72791),r=t(11135),l=t(25787),s=t(9955),c=t(30829),d=t(20068),u=t(20890),f=t(61889),p=t(23814),h=t(29945),m=t(28182),x=t(80184),g=(0,l.Z)((function(e){return{root:{width:50,height:24,padding:0,margin:0},switchBase:{padding:1,"&$checked":{transform:"translateX(24px)",color:e.palette.common.white,"& + $track":{backgroundColor:"#4CCB92",boxShadow:"inset 0px 1px 4px rgba(0,0,0,0.1)",opacity:1,border:"none"}},"&$focusVisible $thumb":{color:"#4CCB92",border:"6px solid #fff"}},thumb:{width:22,height:22,backgroundColor:"#FAFAFA",border:"2px solid #FFFFFF",marginLeft:1},track:{borderRadius:12,backgroundColor:"#E2E2E2",boxShadow:"inset 0px 1px 4px rgba(0,0,0,0.1)",opacity:1,transition:e.transitions.create(["background-color","border"])},checked:{},focusVisible:{},switchContainer:{display:"flex",alignItems:"center",justifyContent:"flex-end"}}}))(s.Z);n.Z=(0,l.Z)((function(e){return(0,r.Z)((0,o.Z)((0,o.Z)({indicatorLabelOn:{fontWeight:"bold",color:"#081C42 !important"},indicatorLabel:{fontSize:12,color:"#E2E2E2",margin:"0 8px 0 10px"},fieldDescription:{marginTop:4,color:"#999999"},tooltip:{fontSize:16}},p.OR),p.YI))}))((function(e){var n=e.label,t=void 0===n?"":n,r=e.onChange,l=e.value,s=e.id,p=e.name,b=e.checked,v=void 0!==b&&b,y=e.disabled,j=void 0!==y&&y,Z=e.switchOnly,k=void 0!==Z&&Z,C=e.tooltip,w=void 0===C?"":C,_=e.description,E=void 0===_?"":_,S=e.classes,A=e.indicatorLabels,I=e.extraInputProps,T=void 0===I?{}:I,F=(0,x.jsxs)(a.Fragment,{children:[!k&&(0,x.jsx)("span",{className:(0,m.Z)(S.indicatorLabel,(0,i.Z)({},S.indicatorLabelOn,!v)),children:A&&A.length>1?A[1]:"OFF"}),(0,x.jsx)(g,{checked:v,onChange:r,color:"primary",name:p,inputProps:(0,o.Z)({"aria-label":"primary checkbox"},T),disabled:j,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:l,id:s}),!k&&(0,x.jsx)("span",{className:(0,m.Z)(S.indicatorLabel,(0,i.Z)({},S.indicatorLabelOn,v)),children:A?A[0]:"ON"})]});return k?F:(0,x.jsx)("div",{children:(0,x.jsxs)(f.ZP,{container:!0,alignItems:"center",children:[(0,x.jsx)(f.ZP,{item:!0,xs:12,sm:8,md:8,children:""!==t&&(0,x.jsxs)(c.Z,{htmlFor:s,className:S.inputLabel,children:[(0,x.jsx)("span",{children:t}),""!==w&&(0,x.jsx)("div",{className:S.tooltipContainer,children:(0,x.jsx)(d.Z,{title:w,placement:"top-start",children:(0,x.jsx)("div",{className:S.tooltip,children:(0,x.jsx)(h.byK,{})})})})]})}),(0,x.jsx)(f.ZP,{item:!0,xs:12,sm:""!==t?4:12,md:""!==t?4:12,textAlign:"right",justifyContent:"end",className:S.switchContainer,children:F}),""!==E&&(0,x.jsx)(f.ZP,{item:!0,xs:12,textAlign:"left",children:(0,x.jsx)(u.Z,{component:"p",className:S.fieldDescription,children:E})})]})})}))},14917:function(e,n,t){t(72791);var i=t(61889),o=t(72455),a=t(80184),r=(0,o.Z)((function(e){return{headerBarIcon:{marginRight:".7rem",color:e.palette.primary.main,"& .min-icon":{width:44,height:44},"@media (max-width: 600px)":{display:"none"}},headerBarSubheader:{color:"grey","@media (max-width: 900px)":{maxWidth:200}},stContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:8,borderBottom:"1px solid #EAEAEA","@media (max-width: 600px)":{flexFlow:"column"}},titleColumn:{height:"auto",justifyContent:"center",display:"flex",flexFlow:"column",alignItems:"flex-start","& h1":{fontSize:19}},leftItems:{display:"flex",alignItems:"center","@media (max-width: 600px)":{flexFlow:"column",width:"100%"}},rightItems:{display:"flex",alignItems:"center","& button":{marginLeft:8},"@media (max-width: 600px)":{width:"100%"}}}}));n.Z=function(e){var n=e.icon,t=e.title,o=e.subTitle,l=e.actions,s=e.className,c=r();return(0,a.jsx)(i.ZP,{container:!0,children:(0,a.jsxs)(i.ZP,{item:!0,xs:12,className:"".concat(c.stContainer," ").concat(s||""),children:[(0,a.jsxs)("div",{className:c.leftItems,children:[n?(0,a.jsx)("div",{className:c.headerBarIcon,children:n}):null,(0,a.jsxs)("div",{className:c.titleColumn,children:[(0,a.jsx)("h1",{style:{margin:0},children:t}),(0,a.jsx)("span",{className:c.headerBarSubheader,children:o})]})]}),(0,a.jsx)("div",{className:c.rightItems,children:l})]})})}},50276:function(e,n,t){var i=t(1413),o=t(29439),a=t(72791),r=t(64554),l=t(43896),s=t(83449),c=t(47283),d=t(82851),u=t(25787),f=t(13967),p=t(11135),h=t(95193),m=t(57689),x=t(80184),g={minHeight:60};n.Z=(0,u.Z)((function(e){return(0,p.Z)({tabsContainer:{display:"flex",height:"100%",width:"100%"},tabsHeaderContainer:{width:"300px",background:"#F8F8F8",borderRight:"1px solid #EAEAEA","& .MuiTabs-root":{"& .MuiTabs-indicator":{display:"none"},"& .MuiTab-root":{display:"flex",flexFlow:"row",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","& .MuiSvgIcon-root":{marginRight:8,marginBottom:0},"&.Mui-selected":{background:"#E5E5E5",fontWeight:600}},"&. MuiTabs-scroller":{display:"none"}}},tabContentContainer:{width:"100%","& .MuiTabPanel-root":{height:"100%"}},tabPanel:{height:"100%"},"@media (max-width: 900px)":{tabsContainer:{flexFlow:"column",flexDirection:"column"},tabsHeaderContainer:{width:"100%",borderBottom:" 1px solid #EAEAEA","& .MuiTabs-root .MuiTabs-scroller .MuiButtonBase-root":{borderBottom:" 0px"}}}})}))((function(e){var n=e.children,t=e.classes,u=e.selectedTab,p=void 0===u?"0":u,b=e.routes,v=e.isRouteTabs,y=(0,f.Z)(),j=(0,m.TH)().pathname,Z=void 0===j?"":j,k=(0,h.Z)(y.breakpoints.down("md")),C=(0,a.useState)(p),w=(0,o.Z)(C,2),_=w[0],E=w[1],S=[],A=[];if((0,a.useEffect)((function(){if(v){var e=n.find((function(e){return e.tabConfig.to===Z}));e&&E(e.tabConfig.value)}}),[v,n,Z]),!n)return null;n.forEach((function(e){S.push(e.tabConfig),A.push(e.content)}));return(0,x.jsx)(s.ZP,{value:"".concat(_),children:(0,x.jsxs)(r.Z,{className:t.tabsContainer,children:[(0,x.jsx)(r.Z,{className:t.tabsHeaderContainer,children:(0,x.jsx)(c.Z,{onChange:function(e,n){E(n)},orientation:k?"horizontal":"vertical",variant:k?"scrollable":"standard",scrollButtons:"auto",className:t.tabList,children:S.map((function(e,n){return e?(0,x.jsx)(l.Z,(0,i.Z)((0,i.Z)({className:t.tabHeader,value:"".concat(n),style:g},e),{},{disableRipple:!0,disableTouchRipple:!0,focusRipple:!0}),"v-tab-".concat(n)):null}))})}),(0,x.jsxs)(r.Z,{className:t.tabContentContainer,children:[v?null:A.map((function(e,n){return(0,x.jsx)(d.Z,{classes:(0,i.Z)({},t.tabPanel),value:"".concat(n),children:e||null},"v-tab-p-".concat(n))})),v?(0,x.jsx)("div",{className:t.tabPanel,children:b}):null]})]})})}))},11432:function(e,n,t){t.r(n),t.d(n,{default:function(){return J}});var i=t(1413),o=t(72791),a=t(11135),r=t(25787),l=t(61889),s=t(58493),c=t(23814),d=t(29945),u=t(57689),f=t(11087),p=t(50276),h=t(14917),m=t(29439),x=t(26181),g=t.n(x),b=t(64554),v=t(10091),y=t(90767),j=t(87995),Z=t(81551),k=t(93433),C=t(21435),w=t(56028),_=t(244),E=t(13901),S=t(36909),A=t(40986),I=t(31776),T=t(82342),F=t(80184),N=function(e){var n=e.open,t=e.type,a=e.onCloseEndpoint,r=(0,o.useState)(""),l=(0,m.Z)(r,2),s=l[0],u=l[1],f=(0,o.useState)(""),p=(0,m.Z)(f,2),h=p[0],x=p[1],g=(0,o.useState)(""),b=(0,m.Z)(g,2),v=b[0],y=b[1],N=(0,o.useState)(!1),L=(0,m.Z)(N,2),R=L[0],q=L[1],D=(0,o.useState)(["name","endpoint"]),M=(0,m.Z)(D,2),P=M[0],B=M[1],O=(0,o.useState)(["name","endpoint","auth-token"]),W=(0,m.Z)(O,2),z=W[0],K=W[1],H=(0,Z.TL)(),V=function(e){K(z.filter((function(n){return n!==e})))},$=function(e,n){P.includes(e)&&n?B(P.filter((function(n){return n!==e}))):n||P.includes(e)||B([].concat((0,k.Z)(P),[e]))},U="Add new Webhook",Y=(0,F.jsx)(_.Z,{});switch(t){case"logger_webhook":U="New Logger Webhook",Y=(0,F.jsx)(E.Z,{});break;case"audit_webhook":U="New Audit Webhook",Y=(0,F.jsx)(S.Z,{})}return(0,F.jsx)(o.Fragment,{children:(0,F.jsxs)(w.Z,{modalOpen:n,title:U,onClose:a,titleIcon:Y,children:[(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(C.Z,{id:"name",name:"name",onChange:function(e){V("name"),u(e.target.value),$("name",e.target.validity.valid)},error:P.includes("name")&&!z.includes("name")?"Invalid Name":"",label:"Name",value:s,pattern:"^(?=.*[a-zA-Z0-9]).{1,}$",required:!0})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(C.Z,{id:"endpoint",name:"endpoint",onChange:function(e){V("endpoint"),x(e.target.value),$("endpoint",e.target.validity.valid)},error:P.includes("endpoint")&&!z.includes("endpoint")?"Invalid Endpoint set":"",label:"Endpoint",value:h,pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-.\\/]*)?$",required:!0})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(C.Z,{id:"auth-token",name:"auth-token",onChange:function(e){V("auth-token"),y(e.target.value)},label:"Auth Token",value:v})}),R&&(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:{marginBottom:10},children:(0,F.jsx)(A.Z,{})}),(0,F.jsxs)(d.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:[(0,F.jsx)(d.zxk,{id:"reset",type:"button",variant:"regular",disabled:R,onClick:a,label:"Cancel",sx:{marginRight:10}}),(0,F.jsx)(d.zxk,{id:"save-lifecycle",type:"submit",variant:"callAction",color:"primary",disabled:R||0!==P.length,label:"Save",onClick:function(){if(!R&&0===P.length)if(""!==s.trim())if(""!==h.trim()){q(!0);var e={key_values:[{key:"endpoint",value:h},{key:"auth_token",value:v}],arn_resource_id:s};I.h.configs.setConfig(t,e).then((function(e){q(!1),H((0,j.cN)(e.data.restart||!1)),e.data.restart||H((0,j.y1)("Configuration saved successfully")),a(),H((0,j.Ie)(!0))})).catch((function(e){q(!1),H((0,j.Ih)((0,T.g)(e.error)))}))}else B([].concat((0,k.Z)(P),["endpoint"]));else B([].concat((0,k.Z)(P),["name"]))}})]})]})})},L=t(51691),R=t(23508),q=function(e){var n=e.modalOpen,t=e.onClose,i=e.selectedARN,a=(e.type,(0,o.useState)(!1)),r=(0,m.Z)(a,2),l=r[0],s=r[1],c=(0,Z.TL)();(0,o.useEffect)((function(){l&&I.h.configs.resetConfig(i).then((function(){s(!1),c((0,j.cN)(!0)),c((0,j.Ie)(!0)),t()})).catch((function(e){s(!1),c((0,j.Ih)((0,T.g)(e.error)))}))}),[l,c,t,i]);var u=!i.includes(":"),f="Are you sure you want to delete the Configured Endpoint";return u&&(f="Are you sure you want to reset the Default"),(0,F.jsx)(R.Z,{title:u?"Reset Default Webhook":"Delete Webhook",confirmText:u?"Reset":"Delete",isOpen:n,isLoading:l,onConfirm:function(){s(!0)},titleIcon:(0,F.jsx)(d.NvT,{}),onClose:t,confirmationContent:(0,F.jsxs)(L.Z,{children:["".concat(f," "),(0,F.jsx)("strong",{children:i}),"?"]})})},D=t(81159),M=t(64163),P=function(e){var n,t,a,r=e.open,l=e.type,u=e.endpointInfo,f=e.onCloseEndpoint,p=(0,o.useState)(""),h=(0,m.Z)(p,2),x=h[0],g=h[1],b=(0,o.useState)(""),v=(0,m.Z)(b,2),y=v[0],N=v[1],L=(0,o.useState)(""),R=(0,m.Z)(L,2),q=R[0],P=R[1],B=(0,o.useState)("on"),O=(0,m.Z)(B,2),W=O[0],z=O[1],K=(0,o.useState)(!1),H=(0,m.Z)(K,2),V=H[0],$=H[1],U=(0,o.useState)([]),Y=(0,m.Z)(U,2),G=Y[0],X=Y[1],Q=(0,Z.TL)();(0,o.useEffect)((function(){if(u){var e=u.key_values.find((function(e){return"endpoint"===e.key})),n=u.key_values.find((function(e){return"auth_token"===e.key})),t=u.key_values.find((function(e){return"enable"===e.key})),i=[];if(e){var o=e.value;""===o?i.push("endpoint"):N(o)}if(n){var a=n.value;""===a?i.push("auth-token"):P(a)}t&&"off"===t.value&&z(t.value),g(u.name||""),X(i)}}),[u]);var J=!x.includes(":"),ee=u.key_values.filter((function(e){return!!e.env_override})),ne=(0,s.F_)(ee),te="Edit Webhook",ie=(0,F.jsx)(_.Z,{});switch(l){case"logger_webhook":te="Edit ".concat(J?" the Default ":"","Logger Webhook"),ie=(0,F.jsx)(E.Z,{});break;case"audit_webhook":te="Edit ".concat(J?" the Default ":"","Audit Webhook"),ie=(0,F.jsx)(S.Z,{})}return ee.length>0&&(te="View env variable Webhook"),(0,F.jsx)(o.Fragment,{children:(0,F.jsx)(w.Z,{modalOpen:r,title:"".concat(te).concat(J?"":" - ".concat(x)),onClose:f,titleIcon:ie,children:ee.length>0?(0,F.jsxs)(o.Fragment,{children:[(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(M.Z,{label:"Enabled",content:(null===(n=ne.enable)||void 0===n?void 0:n.value)||"-",actionButton:(0,F.jsx)(d.rjZ,{item:!0,sx:{display:"flex",justifyContent:"flex-end",paddingRight:"10px"},children:(0,F.jsx)(d.ua7,{tooltip:ne.enable?"This value is set from the ".concat(ne.enable.overrideEnv," environment variable"):"",placement:"left",children:(0,F.jsx)(d.zD0,{style:{width:20}})})})})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(M.Z,{label:"Endpoint",content:(null===(t=ne.endpoint)||void 0===t?void 0:t.value)||"-",actionButton:(0,F.jsx)(d.rjZ,{item:!0,sx:{display:"flex",justifyContent:"flex-end",paddingRight:"10px"},children:(0,F.jsx)(d.ua7,{tooltip:ne.enable?"This value is set from the ".concat(ne.endpoint.overrideEnv," environment variable"):"",placement:"left",children:(0,F.jsx)(d.zD0,{style:{width:20}})})})})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(M.Z,{label:"Auth Token",content:(null===(a=ne.auth_token)||void 0===a?void 0:a.value)||"-",actionButton:(0,F.jsx)(d.rjZ,{item:!0,sx:{display:"flex",justifyContent:"flex-end",paddingRight:"10px"},children:(0,F.jsx)(d.ua7,{tooltip:ne.enable?"This value is set from the ".concat(ne.auth_token.overrideEnv," environment variable"):"",placement:"left",children:(0,F.jsx)(d.zD0,{style:{width:20}})})})})})]}):(0,F.jsxs)(o.Fragment,{children:[(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(D.Z,{onChange:function(e){var n=e.target.checked?"on":"off";z(n)},id:"endpoint_enabled",name:"endpoint_enabled",label:"Enabled",value:"switch_on",checked:"on"===W})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(C.Z,{id:"endpoint",name:"endpoint",onChange:function(e){N(e.target.value),function(e,n){G.includes(e)&&n?X(G.filter((function(n){return n!==e}))):n||G.includes(e)||X([].concat((0,k.Z)(G),[e]))}("endpoint",e.target.validity.valid)},error:G.includes("endpoint")?"Invalid Endpoint set":"",label:"Endpoint",value:y,pattern:"^(https?):\\/\\/([a-zA-Z0-9\\-.]+)(:[0-9]+)?(\\/[a-zA-Z0-9\\-.\\/]*)?$",required:!0})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:(0,i.Z)({},c.DF.formFieldRow),children:(0,F.jsx)(C.Z,{id:"auth-token",name:"auth-token",onChange:function(e){P(e.target.value)},label:"Auth Token",value:q})}),V&&(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:{marginBottom:10},children:(0,F.jsx)(A.Z,{})}),(0,F.jsxs)(d.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:[(0,F.jsx)(d.zxk,{id:"reset",type:"button",variant:"regular",disabled:V,onClick:f,label:"Cancel",sx:{marginRight:10}}),(0,F.jsx)(d.zxk,{id:"save-lifecycle",type:"submit",variant:"callAction",color:"primary",disabled:V||0!==G.length,label:"Update",onClick:function(){if(!V&&0===G.length)if(y&&""!==y.trim()){$(!0);var e={key_values:[{key:"endpoint",value:y},{key:"auth_token",value:q},{key:"enable",value:W}]};I.h.configs.setConfig(x,e).then((function(e){$(!1),Q((0,j.cN)(e.data.restart||!1)),e.data.restart||Q((0,j.y1)("Configuration saved successfully")),f(),Q((0,j.Ie)(!0))})).catch((function(e){$(!1),Q((0,j.Ih)((0,T.g)(e.error)))}))}else X([].concat((0,k.Z)(G),["endpoint"]))}})]})]})})})},B=function(e){e.setResetConfigurationOpen;var n=e.WebhookSettingslist,t=e.type,i=(0,o.useState)(!1),a=(0,m.Z)(i,2),r=a[0],l=a[1],s=(0,o.useState)(!1),c=(0,m.Z)(s,2),u=c[0],f=c[1],p=(0,o.useState)(!1),h=(0,m.Z)(p,2),x=h[0],g=h[1],b=(0,o.useState)(""),v=(0,m.Z)(b,2),y=v[0],j=v[1],Z=(0,o.useState)(null),k=(0,m.Z)(Z,2),C=k[0],w=k[1],_=[{type:"view",onClick:function(e){e.name&&(g(!0),w(e))}},{type:"delete",onClick:function(e){e.name&&(f(!0),j(e.name))},disableButtonFunction:function(e){var t=n.find((function(n){return n.name===e}));if(t){var i,o=null===(i=t.key_values)||void 0===i?void 0:i.filter((function(e){return!!e.env_override}));return!!(o&&o.length>0)}return!1}}];return(0,F.jsxs)(d.rjZ,{container:!0,children:[r&&(0,F.jsx)(N,{open:r,type:t,onCloseEndpoint:function(){l(!1)}}),u&&(0,F.jsx)(q,{modalOpen:u,onClose:function(){f(!1),j("")},selectedARN:y,type:t}),x&&C&&(0,F.jsx)(P,{open:x,type:t,endpointInfo:C,onCloseEndpoint:function(){g(!1),w(null)}}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-end"},children:(0,F.jsx)(d.zxk,{id:"newWebhook",variant:"callAction",onClick:function(){l(!0)},children:"New Endpoint"})}),(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:{padding:"0 10px 10px"},children:(0,F.jsxs)(o.Fragment,{children:[(0,F.jsx)("h3",{children:"Currently Configured Endpoints"}),(0,F.jsx)(d.wQF,{columns:[{label:"Status",elementKey:"key_values",renderFunction:function(e){var n=e.find((function(e){return"enable"===e.key}));if(null!==n&&void 0!==n&&n.env_override){var t=null!==n&&void 0!==n&&n.env_override.value&&"on"!==(null===n||void 0===n?void 0:n.env_override.value)&&null!==n&&void 0!==n&&n.env_override.value?"Disabled":"Enabled";return(0,F.jsxs)(d.rjZ,{container:!0,sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyItems:"start",fontSize:"8px"},children:[(0,F.jsx)(d.zD0,{style:{fill:"#052F51",width:"14px"}}),t?"Enabled":"Disabled"]})}return n&&"on"!==n.value&&n.value?(0,F.jsxs)(d.rjZ,{container:!0,sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyItems:"start",fontSize:"8px"},children:[(0,F.jsx)(d.qwj,{style:{fill:"#C83B51",width:14,height:14}}),"Disabled"]}):(0,F.jsxs)(d.rjZ,{container:!0,sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyItems:"start",fontSize:"8px"},children:[(0,F.jsx)(d.Yp9,{style:{fill:"#4CCB92",width:14,height:14}}),"Enabled"]})},width:50},{label:"Name",elementKey:"name"},{label:"Endpoint",elementKey:"key_values",renderFunction:function(e){var n=e.find((function(e){return"endpoint"===e.key}));return n?n.env_override?n.env_override.value:n.value:""}}],itemActions:_,idField:"name",isLoading:!1,records:n,entityName:"endpoints",customPaperHeight:"calc(100vh - 750px)"})]})})]})},O=t(78687),W=(0,r.Z)((function(e){return(0,a.Z)((0,i.Z)((0,i.Z)((0,i.Z)({},c.YI),c.Je),{},{settingsFormContainer:{display:"grid",gridTemplateColumns:"1fr",gridGap:"10px"}}))}))((function(e){var n=e.selectedConfiguration,t=e.classes,i=e.className,a=void 0===i?"":i,r=(0,Z.TL)(),c=(0,u.s0)(),f=(0,u.TH)().pathname,p=void 0===f?"":f,h=p.substring(p.lastIndexOf("/")+1);h="settings"===h?"region":h;var x=(0,o.useState)([]),k=(0,m.Z)(x,2),C=k[0],w=k[1],_=(0,o.useState)(!1),E=(0,m.Z)(_,2),S=E[0],A=E[1],N=(0,o.useState)([]),L=(0,m.Z)(N,2),R=L[0],q=L[1],D=(0,o.useState)([]),M=(0,m.Z)(D,2),P=M[0],W=M[1],z=(0,o.useState)(!1),K=(0,m.Z)(z,2),H=K[0],V=K[1],$=(0,o.useState)({}),U=(0,m.Z)($,2),Y=U[0],G=U[1],X=(0,O.v9)((function(e){return e.system.loadingConfigurations}));(0,o.useEffect)((function(){r((0,j.Ie)(!0))}),[h,r]),(0,o.useEffect)((function(){if(X){var e=g()(n,"configuration_id",!1);if(e)return void I.h.configs.configInfo(e).then((function(n){W(n.data);var t=g()(n.data[0],"key_values",[]),i=s.DP[e].map((function(e){var n=t.find((function(n){return n.key===e.name})),i=(null===n||void 0===n?void 0:n.value)||"";return{key:e.name,value:e.customValueProcess?e.customValueProcess(i):i}}));q(i),G((0,s.F_)(i)),r((0,j.Ie)(!1))})).catch((function(e){r((0,j.Ie)(!1)),r((0,j.Ih)((0,T.g)(e.error)))}));r((0,j.Ie)(!1))}}),[X,n,r]),(0,o.useEffect)((function(){if(S){var e={key_values:(0,s.DD)(C)};I.h.configs.setConfig(n.configuration_id,e).then((function(e){A(!1),r((0,j.cN)(e.data.restart||!1)),r((0,j.Ie)(!0)),e.data.restart||r((0,j.y1)("Configuration saved successfully"))})).catch((function(e){A(!1),r((0,j.Ih)((0,T.g)(e.error)))}))}}),[S,r,n,C,c]);var Q=(0,o.useCallback)((function(e){w(e)}),[w]),J=function(){V(!0)};return(0,F.jsx)(o.Fragment,{children:(0,F.jsxs)("div",{onMouseMove:function(){r((0,j.Sc)("settings_".concat(n.configuration_label)))},children:[H&&(0,F.jsx)(y.Z,{configurationName:n.configuration_id,closeResetModalAndRefresh:function(e){V(!1),r((0,j.cN)(e)),e&&r((0,j.Ie)(!0))},resetOpen:H}),X?(0,F.jsx)(l.ZP,{item:!0,xs:12,sx:{textAlign:"center",paddingTop:"15px"},children:(0,F.jsx)(d.aNw,{})}):(0,F.jsx)(b.Z,{sx:{padding:"15px",height:"100%"},children:"logger_webhook"===n.configuration_id||"audit_webhook"===n.configuration_id?(0,F.jsx)(B,{WebhookSettingslist:P,setResetConfigurationOpen:J,type:n.configuration_id}):(0,F.jsx)(o.Fragment,{children:(0,F.jsxs)("form",{noValidate:!0,onSubmit:function(e){e.preventDefault(),A(!0)},className:a,style:{height:"100%",display:"flex",flexFlow:"column"},children:[(0,F.jsx)(l.ZP,{item:!0,xs:12,className:t.settingsFormContainer,children:(0,F.jsx)(v.default,{fields:s.DP[n.configuration_id],onChange:Q,defaultVals:R,overrideEnv:Y})}),(0,F.jsxs)(l.ZP,{item:!0,xs:12,sx:{paddingTop:"15px ",textAlign:"right",maxHeight:"60px",display:"flex",alignItems:"center",justifyContent:"flex-end"},children:[(0,F.jsx)(d.zxk,{id:"restore-defaults",variant:"secondary",onClick:J,label:"Restore Defaults"}),"\xa0 \xa0",(0,F.jsx)(d.zxk,{id:"save",type:"submit",variant:"callAction",disabled:S,label:"Save"})]})]})})})]})})})),z=function(){var e=(0,u.TH)().pathname,n=void 0===e?"":e,t=n.substring(n.lastIndexOf("/")+1),i=s.bx.find((function(e){return e.configuration_id===t})),o="".concat(t);return(0,F.jsx)(d.rjZ,{item:!0,xs:12,sx:{height:"100%","& .identity_ldap, .api":{"& label":{minWidth:220,marginRight:0}}},children:i&&(0,F.jsx)(W,{className:"".concat(o),selectedConfiguration:i})})},K=t(56087),H=t(47974),V=t(9505),$=t(45248),U=t(99779),Y=t(27454),G=function(){var e=(0,O.I0)(),n=(0,V.Z)((function(e){(0,$.zZ)(new Blob([window.atob(e.value)]),"minio-server-config-".concat(U.ou.now().toFormat("LL-dd-yyyy-HH-mm-ss"),".conf"))}),(function(n){e((0,j.Ih)(n))})),t=(0,m.Z)(n,2),i=t[0],o=t[1];return(0,F.jsx)(Y.Z,{tooltip:"Warning! The resulting file will contain server configuration information in plain text",children:(0,F.jsx)(d.zxk,{id:"export-config",onClick:function(){o("GET","api/v1/configs/export")},icon:(0,F.jsx)(d.rG2,{}),label:"Export",variant:"regular",disabled:i})})},X=function(){var e=(0,u.s0)(),n=(0,O.I0)(),t=(0,O.v9)((function(e){return e.system.serverNeedsRestart})),i=(0,o.useState)(void 0),a=(0,m.Z)(i,2),r=a[0],l=a[1],s=(0,o.useRef)(null),c=(0,V.Z)((function(e){n((0,j.cN)(!0)),l(!0)}),(function(e){n((0,j.Ih)(e))})),f=(0,m.Z)(c,2),p=f[0],h=f[1];(0,o.useEffect)((function(){!t&&r&&e(0)}),[t,r,e]);return(0,F.jsxs)(o.Fragment,{children:[(0,F.jsx)("input",{type:"file",onChange:function(e){if(null!==e&&void 0!==e&&null!==e.target.files&&void 0!==e.target.files){e.preventDefault();var n=(0,m.Z)(e.target.files,1)[0],t=new FormData,i=new Blob([n],{type:n.type});t.append("file",i,n.name),h("POST","api/v1/configs/import",t),e.target.value=""}},style:{display:"none"},ref:s}),(0,F.jsx)(Y.Z,{tooltip:"The file must be valid and should have valid config values",children:(0,F.jsx)(d.zxk,{id:"import-config",onClick:function(){s&&s.current&&s.current.click()},icon:(0,F.jsx)(d._8t,{}),label:"Import",variant:"regular",disabled:p})})]})},Q=t(99670),J=(0,r.Z)((function(e){return(0,a.Z)((0,i.Z)((0,i.Z)((0,i.Z)({settingsOptionsContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-start",flexWrap:"wrap",border:"#E5E5E5 1px solid",borderRadius:2,backgroundColor:"#fff"}},c.qg),c.OR),c.Bz))}))((function(e){var n=e.classes,t=(0,u.TH)().pathname,i=void 0===t?"":t,a=i.substring(i.lastIndexOf("/")+1);a="settings"===a?"region":a;var r=(0,Z.TL)();return(0,o.useEffect)((function(){r((0,j.Sc)("settings_Region"))}),[]),(0,F.jsxs)(o.Fragment,{children:[(0,F.jsx)(H.Z,{label:"Settings",actions:(0,F.jsx)(Q.Z,{})}),(0,F.jsxs)(d.Xgh,{children:[(0,F.jsx)(l.ZP,{item:!0,xs:12,children:(0,F.jsxs)("div",{id:"settings-container",className:n.settingsOptionsContainer,children:[(0,F.jsx)(h.Z,{icon:(0,F.jsx)(d.ewm,{}),title:"MinIO Configuration:",actions:(0,F.jsxs)(b.Z,{sx:{display:"flex",gap:2},children:[(0,F.jsx)(X,{}),(0,F.jsx)(G,{})]})}),(0,F.jsx)(p.Z,{selectedTab:a,isRouteTabs:!0,routes:(0,F.jsxs)(u.Z5,{children:[s.bx.map((function(e){return(0,F.jsx)(u.AW,{path:"".concat(e.configuration_id),element:(0,F.jsx)(z,{})},"configItem-".concat(e.configuration_label))})),(0,F.jsx)(u.AW,{path:"/",element:(0,F.jsx)(u.Fg,{to:"".concat(K.gA.SETTINGS,"/region")})})]}),children:s.bx.map((function(e){var n,t=e.configuration_id;return{tabConfig:{label:e.configuration_label,value:t,icon:e.icon,component:f.rU,to:(n=t,"".concat(K.gA.SETTINGS,"/").concat(n))}}}))})]})}),(0,F.jsx)(l.ZP,{item:!0,xs:12,sx:{paddingTop:"15px"},children:(0,F.jsx)(d.KfX,{title:"Learn more about Configurations",iconComponent:(0,F.jsx)(d.ewm,{}),help:(0,F.jsxs)(o.Fragment,{children:["MinIO supports a variety of configurations ranging from encryption, compression, region, notifications, etc.",(0,F.jsx)("br",{}),(0,F.jsx)("br",{}),"You can learn more at our"," ",(0,F.jsx)("a",{href:"https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-config.html?ref=con#id4",target:"_blank",rel:"noopener",children:"documentation"}),"."]})})})]})]})}))},58493:function(e,n,t){t.d(n,{DD:function(){return b},DP:function(){return g},F_:function(){return y},_0:function(){return v},bx:function(){return x}});var i=t(4942),o=t(1413),a=t(93433),r=(t(72791),t(87569)),l=t(61809),s=t(31292),c=t(98095),d=t(67055),u=t(21141),f=t(36909),p=t(13901),h=t(29945),m=t(80184),x=[{icon:(0,m.jsx)(r.Z,{}),configuration_id:"region",configuration_label:"Region"},{icon:(0,m.jsx)(l.Z,{}),configuration_id:"compression",configuration_label:"Compression"},{icon:(0,m.jsx)(s.Z,{}),configuration_id:"api",configuration_label:"API"},{icon:(0,m.jsx)(c.Z,{}),configuration_id:"heal",configuration_label:"Heal"},{icon:(0,m.jsx)(d.Z,{}),configuration_id:"scanner",configuration_label:"Scanner"},{icon:(0,m.jsx)(u.Z,{}),configuration_id:"etcd",configuration_label:"Etcd"},{icon:(0,m.jsx)(p.Z,{}),configuration_id:"logger_webhook",configuration_label:"Logger Webhook"},{icon:(0,m.jsx)(f.Z,{}),configuration_id:"audit_webhook",configuration_label:"Audit Webhook"},{icon:(0,m.jsx)(h.I$E,{className:"MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiTab-iconWrapper css-i4bv87-MuiSvgIcon-root",style:{width:24,height:24}}),configuration_id:"audit_kafka",configuration_label:"Audit Kafka"}],g={region:[{name:"name",required:!0,label:"Server Location",tooltip:'Name of the location of the server e.g. "us-west-rack2"',type:"string",placeholder:"e.g. us-west-rack-2"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",placeholder:"Enter custom notes if any"}],compression:[{name:"extensions",required:!1,label:"Extensions",tooltip:'Extensions to compress e.g. ".txt", ".log" or ".csv" - you can write one per field',type:"csv",placeholder:"Enter an Extension",withBorder:!0},{name:"mime_types",required:!1,label:"Mime Types",tooltip:'Mime types e.g. "text/*", "application/json" or "application/xml" - you can write one per field',type:"csv",placeholder:"Enter a Mime Type",withBorder:!0}],api:[{name:"requests_max",required:!1,label:"Requests Max",tooltip:"Maximum number of concurrent requests, e.g. '1600'",type:"number",placeholder:"Enter Requests Max"},{name:"cors_allow_origin",required:!1,label:"Cors Allow Origin",tooltip:"List of origins allowed for CORS requests",type:"csv",placeholder:"Enter allowed origin e.g. https://example.com"},{name:"replication_workers",required:!1,label:"Replication Workers",tooltip:"Number of replication workers, defaults to 100",type:"number",placeholder:"Enter Replication Workers"},{name:"replication_failed_workers",required:!1,label:"Replication Failed Workers",tooltip:"Number of replication workers for recently failed replicas, defaults to 4",type:"number",placeholder:"Enter Replication Failed Workers"}],heal:[{name:"bitrotscan",required:!1,label:"Bitrot Scan",tooltip:"Perform bitrot scan on disks when checking objects during scanner",type:"on|off"},{name:"max_sleep",required:!1,label:"Max Sleep",tooltip:"Maximum sleep duration between objects to slow down heal operation, e.g. 2s",type:"duration",placeholder:"Enter Max Sleep Duration"},{name:"max_io",required:!1,label:"Max IO",tooltip:"Maximum IO requests allowed between objects to slow down heal operation, e.g. 3",type:"number",placeholder:"Enter Max IO"}],scanner:[{name:"delay",required:!1,label:"Delay Multiplier",tooltip:"Scanner delay multiplier, defaults to '10.0'",type:"number",placeholder:"Enter Delay"},{name:"max_wait",required:!1,label:"Max Wait",tooltip:"Maximum wait time between operations, defaults to '15s'",type:"duration",placeholder:"Enter Max Wait"},{name:"cycle",required:!1,label:"Cycle",tooltip:"Time duration between scanner cycles, defaults to '1m'",type:"duration",placeholder:"Enter Cycle"}],etcd:[{name:"endpoints",required:!0,label:"Endpoints",tooltip:'List of etcd endpoints e.g. "http://localhost:2379" - you can write one per field',type:"csv",placeholder:"Enter Endpoint"},{name:"path_prefix",required:!1,label:"Path Prefix",tooltip:'Namespace prefix to isolate tenants e.g. "customer1/"',type:"string",placeholder:"Enter Path Prefix"},{name:"coredns_path",required:!1,label:"Coredns Path",tooltip:'Shared bucket DNS records, default is "/skydns"',type:"string",placeholder:"Enter Coredns Path"},{name:"client_cert",required:!1,label:"Client Cert",tooltip:"Client cert for mTLS authentication",type:"string",placeholder:"Enter Client Cert"},{name:"client_cert_key",required:!1,label:"Client Cert Key",tooltip:"Client cert key for mTLS authentication",type:"string",placeholder:"Enter Client Cert Key"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",multiline:!0,placeholder:"Enter custom notes if any"}],logger_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}],audit_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}],audit_kafka:[{name:"enable",required:!1,label:"Enable",tooltip:"Enable audit_kafka target",type:"on|off",customValueProcess:function(e){return""===e||"on"===e?"on":"off"}},{name:"brokers",required:!0,label:"Brokers",type:"csv",placeholder:"Enter Kafka Broker"},{name:"topic",required:!1,label:"Topic",type:"string",placeholder:"Enter Kafka Topic",tooltip:"Kafka topic used for bucket notifications"},{name:"sasl",required:!1,label:"Use SASL",tooltip:"Enable SASL (Simple Authentication and Security Layer) authentication",type:"on|off"},{name:"sasl_username",required:!1,label:"SASL Username",type:"string",placeholder:"Enter SASL Username",tooltip:"Username for SASL/PLAIN or SASL/SCRAM authentication"},{name:"sasl_password",required:!1,label:"SASL Password",type:"password",placeholder:"Enter SASL Password",tooltip:"Password for SASL/PLAIN or SASL/SCRAM authentication"},{name:"sasl_mechanism",required:!1,label:"SASL Mechanism",type:"string",placeholder:"Enter SASL Mechanism",tooltip:"SASL authentication mechanism"},{name:"tls",required:!1,label:"Use TLS",tooltip:"Enable TLS (Transport Layer Security)",type:"on|off"},{name:"tls_skip_verify",required:!1,label:"Skip TLS Verification",tooltip:"Trust server TLS without verification",type:"on|off"},{name:"client_tls_cert",required:!1,label:"Client Cert",tooltip:"Client cert for mTLS authentication",type:"string",placeholder:"Enter Client Cert"},{name:"client_tls_key",required:!1,label:"Client Cert Key",tooltip:"Client cert key for mTLS authentication",type:"string",placeholder:"Enter Client Cert Key"},{name:"tls_client_auth",required:!1,label:"TLS Client Auth",tooltip:"ClientAuth determines the Kafka server's policy for TLS client authorization",type:"string"},{name:"version",required:!1,label:"Version",tooltip:"Specify the version of the Kafka cluster",type:"string"}]},b=function(e){return e.filter((function(e){return""!==e.value}))},v=function(e,n,t){var i=e.target,o=i.value,r=i.checked,l=(0,a.Z)(t);return r?l.push(o):l=l.filter((function(e){return e!==o})),n(l),l},y=function(e){var n={};return e.forEach((function(e){if(e.env_override){var t={value:e.env_override.value,overrideEnv:e.env_override.name};n=(0,o.Z)((0,o.Z)({},n),{},(0,i.Z)({},e.key,t))}})),n}},90767:function(e,n,t){var i=t(29439),o=t(1413),a=t(72791),r=t(40986),l=t(51691),s=t(11135),c=t(25787),d=t(23814),u=t(23508),f=t(29945),p=t(87995),h=t(81551),m=t(31776),x=t(82342),g=t(80184);n.Z=(0,c.Z)((function(e){return(0,s.Z)((0,o.Z)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}},d.Qw))}))((function(e){var n=e.classes,t=e.configurationName,o=e.closeResetModalAndRefresh,s=e.resetOpen,c=(0,h.TL)(),d=(0,a.useState)(!1),b=(0,i.Z)(d,2),v=b[0],y=b[1];(0,a.useEffect)((function(){v&&m.h.configs.resetConfig(t).then((function(){y(!1),o(!0)})).catch((function(e){y(!1),c((0,p.Ih)((0,x.g)(e.error)))}))}),[o,t,v,c]);return(0,g.jsx)(u.Z,{title:"Restore Defaults",confirmText:"Yes, Reset Configuration",isOpen:s,titleIcon:(0,g.jsx)(f.NvT,{}),isLoading:v,onConfirm:function(){y(!0)},onClose:function(){o(!1)},confirmationContent:(0,g.jsxs)(a.Fragment,{children:[v&&(0,g.jsx)(r.Z,{}),(0,g.jsxs)(l.Z,{children:["Are you sure you want to restore these configurations to default values?",(0,g.jsx)("br",{}),(0,g.jsx)("b",{className:n.wrapText,children:"Please note that this may cause your system to not be accessible"})]})]})})}))}}]);
-//# sourceMappingURL=1432.963da344.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1432.963da344.chunk.js.map b/portal-ui/build/static/js/1432.963da344.chunk.js.map
deleted file mode 100644
index cd9233d95..000000000
--- a/portal-ui/build/static/js/1432.963da344.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/1432.963da344.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper.tsx","screens/Console/Common/ScreenTitle/ScreenTitle.tsx","screens/Console/Common/VerticalTabs/VerticalTabs.tsx","screens/Console/EventDestinations/WebhookSettings/AddEndpointModal.tsx","screens/Console/EventDestinations/WebhookSettings/DeleteWebhookEndpoint.tsx","screens/Console/EventDestinations/WebhookSettings/EditWebhookEndpoint.tsx","screens/Console/EventDestinations/WebhookSettings/WebhookSettings.tsx","screens/Console/EventDestinations/CustomForms/EditConfiguration.tsx","screens/Console/Configurations/ConfigurationPanels/ConfigurationForm.tsx","screens/Console/Configurations/ConfigurationPanels/ExportConfigButton.tsx","screens/Console/Configurations/ConfigurationPanels/ImportConfigButton.tsx","screens/Console/Configurations/ConfigurationPanels/ConfigurationOptions.tsx","screens/Console/Configurations/utils.tsx","screens/Console/EventDestinations/CustomForms/ResetConfigurationModal.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\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 from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\nimport clsx from \"clsx\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input/Input\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n checked: boolean;\n switchOnly?: boolean;\n indicatorLabels?: string[];\n extraInputProps?: StandardInputProps[\"inputProps\"];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n indicatorLabelOn: {\n fontWeight: \"bold\",\n color: \"#081C42 !important\",\n },\n indicatorLabel: {\n fontSize: 12,\n color: \"#E2E2E2\",\n margin: \"0 8px 0 10px\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n tooltip: {\n fontSize: 16,\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles((theme) => ({\n root: {\n width: 50,\n height: 24,\n padding: 0,\n margin: 0,\n },\n switchBase: {\n padding: 1,\n \"&$checked\": {\n transform: \"translateX(24px)\",\n color: theme.palette.common.white,\n \"& + $track\": {\n backgroundColor: \"#4CCB92\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n border: \"none\",\n },\n },\n \"&$focusVisible $thumb\": {\n color: \"#4CCB92\",\n border: \"6px solid #fff\",\n },\n },\n thumb: {\n width: 22,\n height: 22,\n backgroundColor: \"#FAFAFA\",\n border: \"2px solid #FFFFFF\",\n marginLeft: 1,\n },\n track: {\n borderRadius: 24 / 2,\n backgroundColor: \"#E2E2E2\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n transition: theme.transitions.create([\"background-color\", \"border\"]),\n },\n checked: {},\n focusVisible: {},\n switchContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n },\n}))(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n classes,\n indicatorLabels,\n extraInputProps = {},\n}: IFormSwitch) => {\n const switchComponent = (\n \n {!switchOnly && (\n \n {indicatorLabels && indicatorLabels.length > 1\n ? indicatorLabels[1]\n : \"OFF\"}\n \n )}\n \n {!switchOnly && (\n \n {indicatorLabels ? indicatorLabels[0] : \"ON\"}\n \n )}\n \n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\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 from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Theme } from \"@mui/material/styles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\ninterface IScreenTitle {\n icon?: any;\n title?: any;\n subTitle?: any;\n actions?: any;\n className?: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n headerBarIcon: {\n marginRight: \".7rem\",\n color: theme.palette.primary.main,\n \"& .min-icon\": {\n width: 44,\n height: 44,\n },\n \"@media (max-width: 600px)\": {\n display: \"none\",\n },\n },\n headerBarSubheader: {\n color: \"grey\",\n \"@media (max-width: 900px)\": {\n maxWidth: 200,\n },\n },\n stContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: 8,\n\n borderBottom: \"1px solid #EAEAEA\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n titleColumn: {\n height: \"auto\",\n justifyContent: \"center\",\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n \"& h1\": {\n fontSize: 19,\n },\n },\n leftItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n width: \"100%\",\n },\n },\n rightItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"& button\": {\n marginLeft: 8,\n },\n \"@media (max-width: 600px)\": {\n width: \"100%\",\n },\n },\n}));\n\nconst ScreenTitle = ({\n icon,\n title,\n subTitle,\n actions,\n className,\n}: IScreenTitle) => {\n const classes = useStyles();\n return (\n \n \n
\n ) : null}\n \n \n \n );\n};\n\nexport default withStyles(styles)(VerticalTabs);\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 { Button, Grid } from \"mds\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { Webhook } from \"@mui/icons-material\";\nimport { formFieldStyles } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CallToActionIcon from \"@mui/icons-material/CallToAction\";\nimport PendingActionsIcon from \"@mui/icons-material/PendingActions\";\nimport {\n configurationIsLoading,\n setErrorSnackMessage,\n setServerNeedsRestart,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { LinearProgress } from \"@mui/material\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\ninterface IEndpointModal {\n open: boolean;\n type: string;\n onCloseEndpoint: () => void;\n}\n\nconst AddEndpointModal = ({ open, type, onCloseEndpoint }: IEndpointModal) => {\n const [name, setName] = useState(\"\");\n const [endpoint, setEndpoint] = useState(\"\");\n const [authToken, setAuthToken] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [invalidInputs, setInvalidInput] = useState([\n \"name\",\n \"endpoint\",\n ]);\n const [initialInputs, setInitialInputs] = useState([\n \"name\",\n \"endpoint\",\n \"auth-token\",\n ]);\n\n const dispatch = useAppDispatch();\n\n const saveWebhook = () => {\n if (saving) {\n return;\n }\n\n if (invalidInputs.length !== 0) {\n return;\n }\n\n if (name.trim() === \"\") {\n setInvalidInput([...invalidInputs, \"name\"]);\n\n return;\n }\n\n if (endpoint.trim() === \"\") {\n setInvalidInput([...invalidInputs, \"endpoint\"]);\n\n return;\n }\n\n setSaving(true);\n\n const payload = {\n key_values: [\n {\n key: \"endpoint\",\n value: endpoint,\n },\n {\n key: \"auth_token\",\n value: authToken,\n },\n ],\n arn_resource_id: name,\n };\n\n api.configs\n .setConfig(type, payload)\n .then((res) => {\n setSaving(false);\n dispatch(setServerNeedsRestart(res.data.restart || false));\n if (!res.data.restart) {\n dispatch(setSnackBarMessage(\"Configuration saved successfully\"));\n }\n\n onCloseEndpoint();\n dispatch(configurationIsLoading(true));\n })\n .catch((err) => {\n setSaving(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n const initializeInput = (name: string) => {\n setInitialInputs(initialInputs.filter((item) => item !== name));\n };\n\n const validateInput = (name: string, valid: boolean) => {\n if (invalidInputs.includes(name) && valid) {\n setInvalidInput(invalidInputs.filter((item) => item !== name));\n return;\n }\n\n if (!valid && !invalidInputs.includes(name)) {\n setInvalidInput([...invalidInputs, name]);\n }\n };\n\n let title = \"Add new Webhook\";\n let icon = ;\n\n switch (type) {\n case \"logger_webhook\":\n title = \"New Logger Webhook\";\n icon = ;\n break;\n case \"audit_webhook\":\n title = \"New Audit Webhook\";\n icon = ;\n break;\n }\n\n return (\n \n \n \n ) => {\n initializeInput(\"name\");\n setName(event.target.value);\n validateInput(\"name\", event.target.validity.valid);\n }}\n error={\n invalidInputs.includes(\"name\") && !initialInputs.includes(\"name\")\n ? \"Invalid Name\"\n : \"\"\n }\n label=\"Name\"\n value={name}\n pattern={\"^(?=.*[a-zA-Z0-9]).{1,}$\"}\n required\n />\n \n \n ) => {\n initializeInput(\"endpoint\");\n setEndpoint(event.target.value);\n validateInput(\"endpoint\", event.target.validity.valid);\n }}\n error={\n invalidInputs.includes(\"endpoint\") &&\n !initialInputs.includes(\"endpoint\")\n ? \"Invalid Endpoint set\"\n : \"\"\n }\n label=\"Endpoint\"\n value={endpoint}\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?(\\\\/[a-zA-Z0-9\\\\-.\\\\/]*)?$\"\n }\n required\n />\n \n \n ) => {\n initializeInput(\"auth-token\");\n setAuthToken(event.target.value);\n }}\n label=\"Auth Token\"\n value={authToken}\n />\n \n {saving && (\n \n \n \n )}\n \n \n \n \n \n \n );\n};\n\nexport default AddEndpointModal;\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, { useEffect, useState } from \"react\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { DialogContentText } from \"@mui/material\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport {\n configurationIsLoading,\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\ninterface IDeleteWebhookEndpoint {\n modalOpen: boolean;\n onClose: () => void;\n selectedARN: string;\n type: string;\n}\n\nconst DeleteWebhookEndpoint = ({\n modalOpen,\n onClose,\n selectedARN,\n type,\n}: IDeleteWebhookEndpoint) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (deleteLoading) {\n api.configs\n .resetConfig(selectedARN)\n .then(() => {\n setDeleteLoading(false);\n dispatch(setServerNeedsRestart(true));\n dispatch(configurationIsLoading(true));\n onClose();\n })\n .catch((err) => {\n setDeleteLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n }\n }, [deleteLoading, dispatch, onClose, selectedARN]);\n\n const onConfirmDelete = () => {\n setDeleteLoading(true);\n };\n\n const defaultWH = !selectedARN.includes(\":\");\n\n let message = \"Are you sure you want to delete the Configured Endpoint\";\n\n // Main webhook, we just reset\n if (defaultWH) {\n message = \"Are you sure you want to reset the Default\";\n }\n\n return (\n }\n onClose={onClose}\n confirmationContent={\n \n {`${message} `}\n {selectedARN}?\n \n }\n />\n );\n};\n\nexport default DeleteWebhookEndpoint;\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, useEffect, useState } from \"react\";\nimport { Button, ConsoleIcon, Grid, Tooltip } from \"mds\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { Webhook } from \"@mui/icons-material\";\nimport { formFieldStyles } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CallToActionIcon from \"@mui/icons-material/CallToAction\";\nimport PendingActionsIcon from \"@mui/icons-material/PendingActions\";\nimport {\n configurationIsLoading,\n setErrorSnackMessage,\n setServerNeedsRestart,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { LinearProgress } from \"@mui/material\";\nimport { IConfigurationSys } from \"../../Configurations/types\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\nimport { overrideFields } from \"../../Configurations/utils\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\ninterface IEndpointModal {\n open: boolean;\n type: string;\n endpointInfo: IConfigurationSys;\n onCloseEndpoint: () => void;\n}\n\nconst EditEndpointModal = ({\n open,\n type,\n endpointInfo,\n onCloseEndpoint,\n}: IEndpointModal) => {\n const [name, setName] = useState(\"\");\n const [endpoint, setEndpoint] = useState(\"\");\n const [authToken, setAuthToken] = useState(\"\");\n const [endpointState, setEndpointState] = useState(\"on\");\n const [saving, setSaving] = useState(false);\n const [invalidInputs, setInvalidInput] = useState([]);\n\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (endpointInfo) {\n const endpointLocate = endpointInfo.key_values.find(\n (key) => key.key === \"endpoint\"\n );\n const tokenLocate = endpointInfo.key_values.find(\n (key) => key.key === \"auth_token\"\n );\n const enable = endpointInfo.key_values.find(\n (key) => key.key === \"enable\"\n );\n\n let invalidInputs: string[] = [];\n\n if (endpointLocate) {\n const endpointValue = endpointLocate.value;\n\n if (endpointValue === \"\") {\n invalidInputs.push(\"endpoint\");\n } else {\n setEndpoint(endpointValue);\n }\n }\n\n if (tokenLocate) {\n const tokenValue = tokenLocate.value;\n\n if (tokenValue === \"\") {\n invalidInputs.push(\"auth-token\");\n } else {\n setAuthToken(tokenValue);\n }\n }\n\n if (enable) {\n if (enable.value === \"off\") {\n setEndpointState(enable.value);\n }\n }\n\n setName(endpointInfo.name || \"\");\n setInvalidInput(invalidInputs);\n }\n }, [endpointInfo]);\n\n const updateWebhook = () => {\n if (saving) {\n return;\n }\n\n if (invalidInputs.length !== 0) {\n return;\n }\n\n if (!endpoint || endpoint.trim() === \"\") {\n setInvalidInput([...invalidInputs, \"endpoint\"]);\n\n return;\n }\n\n setSaving(true);\n\n const payload = {\n key_values: [\n {\n key: \"endpoint\",\n value: endpoint,\n },\n {\n key: \"auth_token\",\n value: authToken,\n },\n {\n key: \"enable\",\n value: endpointState,\n },\n ],\n };\n\n api.configs\n .setConfig(name, payload)\n .then((res) => {\n setSaving(false);\n dispatch(setServerNeedsRestart(res.data.restart || false));\n if (!res.data.restart) {\n dispatch(setSnackBarMessage(\"Configuration saved successfully\"));\n }\n\n onCloseEndpoint();\n dispatch(configurationIsLoading(true));\n })\n .catch((err) => {\n setSaving(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n const validateInput = (name: string, valid: boolean) => {\n if (invalidInputs.includes(name) && valid) {\n setInvalidInput(invalidInputs.filter((item) => item !== name));\n return;\n }\n\n if (!valid && !invalidInputs.includes(name)) {\n setInvalidInput([...invalidInputs, name]);\n }\n };\n\n const defaultWH = !name.includes(\":\");\n const hasOverride = endpointInfo.key_values.filter(\n (itm) => !!itm.env_override\n );\n\n const overrideValues = overrideFields(hasOverride);\n\n let title = \"Edit Webhook\";\n let icon = ;\n\n switch (type) {\n case \"logger_webhook\":\n title = `Edit ${defaultWH ? \" the Default \" : \"\"}Logger Webhook`;\n icon = ;\n break;\n case \"audit_webhook\":\n title = `Edit ${defaultWH ? \" the Default \" : \"\"}Audit Webhook`;\n icon = ;\n break;\n }\n\n if (hasOverride.length > 0) {\n title = \"View env variable Webhook\";\n }\n\n return (\n \n \n {hasOverride.length > 0 ? (\n \n \n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n }\n />\n \n \n ) : (\n \n \n ) => {\n const value = e.target.checked ? \"on\" : \"off\";\n setEndpointState(value);\n }}\n id={\"endpoint_enabled\"}\n name={\"endpoint_enabled\"}\n label={\"Enabled\"}\n value={\"switch_on\"}\n checked={endpointState === \"on\"}\n />\n \n \n ) => {\n setEndpoint(event.target.value);\n validateInput(\"endpoint\", event.target.validity.valid);\n }}\n error={\n invalidInputs.includes(\"endpoint\")\n ? \"Invalid Endpoint set\"\n : \"\"\n }\n label=\"Endpoint\"\n value={endpoint}\n pattern={\n \"^(https?):\\\\/\\\\/([a-zA-Z0-9\\\\-.]+)(:[0-9]+)?(\\\\/[a-zA-Z0-9\\\\-.\\\\/]*)?$\"\n }\n required\n />\n \n \n ) => {\n setAuthToken(event.target.value);\n }}\n label=\"Auth Token\"\n value={authToken}\n />\n \n {saving && (\n \n \n \n )}\n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default EditEndpointModal;\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 { IConfigurationSys, IElementValue } from \"../../Configurations/types\";\nimport {\n Button,\n ConsoleIcon,\n DataTable,\n Grid,\n TierOfflineIcon,\n TierOnlineIcon,\n} from \"mds\";\nimport AddEndpointModal from \"./AddEndpointModal\";\nimport DeleteWebhookEndpoint from \"./DeleteWebhookEndpoint\";\nimport EditWebhookEndpoint from \"./EditWebhookEndpoint\";\nimport { Configuration } from \"api/consoleApi\";\n\ninterface WebhookSettingsProps {\n WebhookSettingslist: Configuration[];\n setResetConfigurationOpen: () => void;\n type: string;\n}\n\nconst WebhookSettings = ({\n setResetConfigurationOpen,\n WebhookSettingslist,\n type,\n}: WebhookSettingsProps) => {\n const [newEndpointOpen, setNewEndpointOpen] = useState(false);\n const [deleteWebhookOpen, setDeleteWebhookOpen] = useState(false);\n const [editWebhookOpen, setEditWebhookOpen] = useState(false);\n const [selectedARN, setSelectedARN] = useState(\"\");\n const [selectedEndpoint, setSelectedEndpoint] =\n useState(null);\n\n const renderEndpoint = (item: IElementValue[]) => {\n const endpointFilter = item.find((itm) => itm.key === \"endpoint\");\n\n if (endpointFilter) {\n if (endpointFilter.env_override) {\n return endpointFilter.env_override.value;\n }\n\n return endpointFilter.value;\n }\n\n return \"\";\n };\n\n const renderWebhookStatus = (item: IElementValue[]) => {\n const EnableFilter = item.find((itm) => itm.key === \"enable\");\n\n if (EnableFilter?.env_override) {\n const overrideEnabled =\n !EnableFilter?.env_override.value ||\n EnableFilter?.env_override.value === \"on\" ||\n !EnableFilter?.env_override.value\n ? \"Enabled\"\n : \"Disabled\";\n return (\n \n \n {overrideEnabled ? \"Enabled\" : \"Disabled\"}\n \n );\n }\n\n // If enable is not set, then enabled by default\n if (!EnableFilter || EnableFilter.value === \"on\" || !EnableFilter.value) {\n return (\n \n \n Enabled\n \n );\n }\n\n return (\n \n \n Disabled\n \n );\n };\n\n const onCloseDelete = () => {\n setDeleteWebhookOpen(false);\n setSelectedARN(\"\");\n };\n\n const onCloseEditWebhook = () => {\n setEditWebhookOpen(false);\n setSelectedEndpoint(null);\n };\n\n const actions = [\n {\n type: \"view\",\n onClick: (item: IConfigurationSys) => {\n if (item.name) {\n setEditWebhookOpen(true);\n setSelectedEndpoint(item);\n }\n },\n },\n {\n type: \"delete\",\n onClick: (item: IConfigurationSys) => {\n if (item.name) {\n setDeleteWebhookOpen(true);\n setSelectedARN(item.name);\n }\n },\n disableButtonFunction: (item: string) => {\n const wHook = WebhookSettingslist.find(\n (element) => element.name === item\n );\n\n if (wHook) {\n const hasOverride = wHook.key_values?.filter(\n (itm) => !!itm.env_override\n );\n\n // Has override values, we cannot delete.\n if (hasOverride && hasOverride.length > 0) {\n return true;\n }\n\n return false;\n }\n return false;\n },\n },\n ];\n return (\n \n {newEndpointOpen && (\n {\n setNewEndpointOpen(false);\n }}\n />\n )}\n {deleteWebhookOpen && (\n \n )}\n {editWebhookOpen && selectedEndpoint && (\n \n )}\n \n \n \n \n \n
Currently Configured Endpoints
\n \n \n \n \n );\n};\nexport default WebhookSettings;\n","// This file is part of MinIO Console Server\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, useCallback, useEffect, useState } from \"react\";\nimport { Button, Loader } from \"mds\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Box } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport ConfTargetGeneric from \"../ConfTargetGeneric\";\n\nimport {\n fieldBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n fieldsConfigurations,\n overrideFields,\n removeEmptyFields,\n} from \"../../Configurations/utils\";\nimport {\n IConfigurationElement,\n IElementValue,\n IOverrideEnv,\n KVField,\n} from \"../../Configurations/types\";\nimport ResetConfigurationModal from \"./ResetConfigurationModal\";\nimport {\n configurationIsLoading,\n setErrorSnackMessage,\n setHelpName,\n setServerNeedsRestart,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport WebhookSettings from \"../WebhookSettings/WebhookSettings\";\nimport { useSelector } from \"react-redux\";\nimport { api } from \"api\";\nimport { Configuration, ConfigurationKV } from \"api/consoleApi\";\nimport { errorToHandler } from \"api/errors\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...settingsCommon,\n settingsFormContainer: {\n display: \"grid\",\n gridTemplateColumns: \"1fr\",\n gridGap: \"10px\",\n },\n });\n\ninterface IAddNotificationEndpointProps {\n selectedConfiguration: IConfigurationElement;\n classes: any;\n className?: string;\n}\n\nconst EditConfiguration = ({\n selectedConfiguration,\n classes,\n className = \"\",\n}: IAddNotificationEndpointProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const { pathname = \"\" } = useLocation();\n\n let selConfigTab = pathname.substring(pathname.lastIndexOf(\"/\") + 1);\n selConfigTab = selConfigTab === \"settings\" ? \"region\" : selConfigTab;\n\n //Local States\n const [valuesObj, setValueObj] = useState([]);\n const [saving, setSaving] = useState(false);\n const [configValues, setConfigValues] = useState([]);\n const [configSubsysList, setConfigSubsysList] = useState([]);\n const [resetConfigurationOpen, setResetConfigurationOpen] =\n useState(false);\n const [overrideEnvs, setOverrideEnvs] = useState({});\n\n const loadingConfig = useSelector(\n (state: AppState) => state.system.loadingConfigurations\n );\n\n useEffect(() => {\n dispatch(configurationIsLoading(true));\n }, [selConfigTab, dispatch]);\n\n useEffect(() => {\n if (loadingConfig) {\n const configId = get(selectedConfiguration, \"configuration_id\", false);\n\n if (configId) {\n api.configs\n .configInfo(configId)\n .then((res) => {\n setConfigSubsysList(res.data);\n let values: ConfigurationKV[] = get(res.data[0], \"key_values\", []);\n\n const fieldsConfig: KVField[] = fieldsConfigurations[configId];\n\n const keyVals = fieldsConfig.map((field) => {\n const includedValue = values.find(\n (element: ConfigurationKV) => element.key === field.name\n );\n const customValue = includedValue?.value || \"\";\n\n return {\n key: field.name,\n value: field.customValueProcess\n ? field.customValueProcess(customValue)\n : customValue,\n };\n });\n\n setConfigValues(keyVals);\n setOverrideEnvs(overrideFields(keyVals));\n dispatch(configurationIsLoading(false));\n })\n .catch((err) => {\n dispatch(configurationIsLoading(false));\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n\n return;\n }\n dispatch(configurationIsLoading(false));\n }\n }, [loadingConfig, selectedConfiguration, dispatch]);\n\n useEffect(() => {\n if (saving) {\n const payload = {\n key_values: removeEmptyFields(valuesObj),\n };\n api.configs\n .setConfig(selectedConfiguration.configuration_id, payload)\n .then((res) => {\n setSaving(false);\n dispatch(setServerNeedsRestart(res.data.restart || false));\n dispatch(configurationIsLoading(true));\n if (!res.data.restart) {\n dispatch(setSnackBarMessage(\"Configuration saved successfully\"));\n }\n })\n .catch((err) => {\n setSaving(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n }\n }, [saving, dispatch, selectedConfiguration, valuesObj, navigate]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n const onValueChange = useCallback(\n (newValue: IElementValue[]) => {\n setValueObj(newValue);\n },\n [setValueObj]\n );\n\n const continueReset = (restart: boolean) => {\n setResetConfigurationOpen(false);\n dispatch(setServerNeedsRestart(restart));\n if (restart) {\n dispatch(configurationIsLoading(true));\n }\n };\n\n const resetConfigurationMOpen = () => {\n setResetConfigurationOpen(true);\n };\n\n return (\n \n
\n \n );\n};\n\nexport default withStyles(styles)(EditConfiguration);\n","// This file is part of MinIO Console Server\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 from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { Grid } from \"mds\";\nimport { configurationElements } from \"../utils\";\nimport EditConfiguration from \"../../EventDestinations/CustomForms/EditConfiguration\";\n\nconst ConfigurationsList = () => {\n const { pathname = \"\" } = useLocation();\n\n const configName = pathname.substring(pathname.lastIndexOf(\"/\") + 1);\n\n const validActiveConfig = configurationElements.find(\n (element) => element.configuration_id === configName\n );\n const containerClassName = `${configName}`;\n return (\n \n {validActiveConfig && (\n \n )}\n \n );\n};\n\nexport default ConfigurationsList;\n","import React from \"react\";\nimport { Button, UploadIcon } from \"mds\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport { performDownload } from \"../../../../common/utils\";\nimport { DateTime } from \"luxon\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useDispatch } from \"react-redux\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\n\nconst ExportConfigButton = () => {\n const dispatch = useDispatch();\n const [isReqLoading, invokeApi] = useApi(\n (res: any) => {\n //base64 encoded information so decode before downloading.\n performDownload(\n new Blob([window.atob(res.value)]),\n `minio-server-config-${DateTime.now().toFormat(\n \"LL-dd-yyyy-HH-mm-ss\"\n )}.conf`\n );\n },\n (err) => {\n dispatch(setErrorSnackMessage(err));\n }\n );\n\n return (\n \n \n );\n};\n\nexport default ExportConfigButton;\n","import React, { Fragment, useEffect, useRef, useState } from \"react\";\nimport { Button, DownloadIcon } from \"mds\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../../systemSlice\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { AppState } from \"../../../../store\";\n\nconst ImportConfigButton = () => {\n const navigate = useNavigate();\n const dispatch = useDispatch();\n\n const needsRestart = useSelector(\n (state: AppState) => state.system.serverNeedsRestart\n );\n\n const [refreshPage, setRefreshPage] = useState(\n undefined\n );\n const fileUpload = useRef(null);\n\n const [isReqLoading, invokeApi] = useApi(\n (res: any) => {\n //base64 encoded information so decode before downloading.\n dispatch(setServerNeedsRestart(true)); //import should refreshPage as per mc.\n setRefreshPage(true);\n },\n (err) => {\n dispatch(setErrorSnackMessage(err));\n }\n );\n\n useEffect(() => {\n if (!needsRestart && refreshPage) {\n navigate(0); // refresh the page.\n }\n }, [needsRestart, refreshPage, navigate]);\n\n const handleUploadButton = (e: any) => {\n if (\n e === null ||\n e === undefined ||\n e.target.files === null ||\n e.target.files === undefined\n ) {\n return;\n }\n e.preventDefault();\n const [fileToUpload] = e.target.files;\n\n const formData = new FormData();\n const blobFile = new Blob([fileToUpload], { type: fileToUpload.type });\n\n formData.append(\"file\", blobFile, fileToUpload.name);\n // @ts-ignore\n invokeApi(\"POST\", `api/v1/configs/import`, formData);\n\n e.target.value = \"\";\n };\n\n return (\n \n \n \n \n \n );\n};\n\nexport default ImportConfigButton;\n","// This file is part of MinIO Console Server\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 } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\n\nimport { configurationElements } from \"../utils\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { HelpBox, PageLayout, SettingsIcon } from \"mds\";\nimport { Link, Navigate, Route, Routes, useLocation } from \"react-router-dom\";\nimport VerticalTabs from \"../../Common/VerticalTabs/VerticalTabs\";\nimport ScreenTitle from \"../../Common/ScreenTitle/ScreenTitle\";\nimport ConfigurationForm from \"./ConfigurationForm\";\nimport { IAM_PAGES } from \"../../../../common/SecureComponent/permissions\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport ExportConfigButton from \"./ExportConfigButton\";\nimport ImportConfigButton from \"./ImportConfigButton\";\nimport { Box } from \"@mui/material\";\nimport HelpMenu from \"../../HelpMenu\";\nimport { setHelpName } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\n\ninterface IConfigurationOptions {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n settingsOptionsContainer: {\n display: \"flex\" as const,\n flexDirection: \"row\" as const,\n justifyContent: \"flex-start\" as const,\n flexWrap: \"wrap\" as const,\n border: \"#E5E5E5 1px solid\",\n borderRadius: 2,\n backgroundColor: \"#fff\",\n },\n ...searchField,\n ...actionsTray,\n ...containerForHeader,\n });\n\nconst getRoutePath = (path: string) => {\n return `${IAM_PAGES.SETTINGS}/${path}`;\n};\n\nconst ConfigurationOptions = ({ classes }: IConfigurationOptions) => {\n const { pathname = \"\" } = useLocation();\n\n let selConfigTab = pathname.substring(pathname.lastIndexOf(\"/\") + 1);\n selConfigTab = selConfigTab === \"settings\" ? \"region\" : selConfigTab;\n const dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(setHelpName(\"settings_Region\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n } />\n \n \n
\n \n \n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\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 .\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n FormControl,\n InputBase,\n InputLabel,\n MenuItem,\n Select,\n SelectChangeEvent,\n Tooltip,\n} from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\n\nexport interface selectorTypes {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n options: selectorTypes[];\n value: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n onChange: (e: SelectChangeEvent) => void;\n disabled?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n fieldContainer: {\n display: \"flex\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n height: 38,\n lineHeight: 1,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n height: 38,\n position: \"relative\",\n color: \"#07193E\",\n fontSize: 13,\n fontWeight: 600,\n padding: \"8px 20px 10px 10px\",\n border: \"#e5e5e5 1px solid\",\n borderRadius: 4,\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n borderColor: \"#393939\",\n },\n \"&:focus\": {\n backgroundColor: \"#fff\",\n },\n },\n })\n)(InputBase);\n\nconst SelectWrapper = ({\n classes,\n id,\n name,\n onChange,\n options,\n label,\n tooltip = \"\",\n value,\n disabled = false,\n}: SelectProps) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n )}\n \n }\n disabled={disabled}\n >\n {options.map((option) => (\n \n ))}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(SelectWrapper);\n","import { Box, Grid, Link } from \"@mui/material\";\nimport { Fragment, useState } from \"react\";\nimport { CopyIcon, SettingsIcon } from \"mds\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RegistrationStatusBanner from \"./RegistrationStatusBanner\";\n\nexport const FormTitle = ({\n icon = null,\n title,\n}: {\n icon?: any;\n title: any;\n}) => {\n return (\n \n {icon}\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 extraInputProps={{\n readOnly: true,\n }}\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) 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 { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\nimport {\n containerForHeader,\n spacingUtils,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport React, { useState } from \"react\";\nimport { InfoIcon, UsersIcon } from \"mds\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useAppDispatch } from \"../../../store\";\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport { Box } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...containerForHeader,\n ...spacingUtils,\n });\n\ninterface IGetApiKeyModalProps {\n open: boolean;\n closeModal: () => void;\n onSet: (apiKey: string) => void;\n classes: any;\n}\n\nconst GetApiKeyModal = ({\n open,\n closeModal,\n classes,\n onSet,\n}: IGetApiKeyModalProps) => {\n const dispatch = useAppDispatch();\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [showPassword, setShowPassword] = useState(false);\n const [mfaToken, setMfaToken] = useState(\"\");\n const [subnetOTP, setSubnetOTP] = useState(\"\");\n\n const onError = (err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n closeModal();\n setEmail(\"\");\n setPassword(\"\");\n setShowPassword(false);\n setMfaToken(\"\");\n setSubnetOTP(\"\");\n };\n\n const onSuccess = (res: any) => {\n if (res.mfa_token) {\n setMfaToken(res.mfa_token);\n } else if (res.access_token) {\n invokeApi(\"GET\", `/api/v1/subnet/apikey?token=${res.access_token}`);\n } else {\n onSet(res.apiKey);\n closeModal();\n }\n };\n\n const [isLoading, invokeApi] = useApi(onSuccess, onError);\n\n const onConfirm = () => {\n if (mfaToken !== \"\") {\n invokeApi(\"POST\", \"/api/v1/subnet/login/mfa\", {\n username: email,\n otp: subnetOTP,\n mfa_token: mfaToken,\n });\n } else {\n invokeApi(\"POST\", \"/api/v1/subnet/login\", { username: email, password });\n }\n };\n\n const getDialogContent = () => {\n if (mfaToken === \"\") {\n return getCredentialsDialog();\n }\n return getMFADialog();\n };\n\n const getCredentialsDialog = () => {\n return (\n \n ) =>\n setEmail(event.target.value)\n }\n label=\"Email\"\n value={email}\n overlayIcon={}\n />\n ) =>\n setPassword(event.target.value)\n }\n label=\"Password\"\n type={showPassword ? \"text\" : \"password\"}\n value={password}\n overlayIcon={\n showPassword ? : \n }\n overlayAction={() => setShowPassword(!showPassword)}\n />\n \n );\n };\n\n const getMFADialog = () => {\n return (\n \n \n \n Two-Factor Authentication\n \n\n \n Please enter the 6-digit verification code that was sent to your\n email 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 setSubnetOTP(event.target.value)\n }\n placeholder=\"\"\n label=\"\"\n value={subnetOTP}\n />\n \n \n \n \n );\n };\n\n return open ? (\n }\n isLoading={isLoading}\n cancelText={\"Cancel\"}\n onConfirm={onConfirm}\n onClose={closeModal}\n confirmButtonProps={{\n variant: \"callAction\",\n disabled: !email || !password || isLoading,\n hidden: true,\n }}\n cancelButtonProps={{\n disabled: isLoading,\n }}\n confirmationContent={getDialogContent()}\n />\n ) : null;\n};\n\nexport default withStyles(styles)(GetApiKeyModal);\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 { Box, Link } from \"@mui/material\";\nimport {\n CallHomeFeatureIcon,\n DiagnosticsFeatureIcon,\n ExtraFeaturesIcon,\n HelpIconFilled,\n PerformanceFeatureIcon,\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 \n \n Registering this cluster with the MinIO Subscription Network (SUBNET)\n provides the following benefits in addition to the commercial license\n 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\nexport default RegisterHelpBox;\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, useCallback, useEffect, useState } from \"react\";\nimport { Box } from \"@mui/material\";\nimport { Button, OnlineRegistrationIcon } from \"mds\";\nimport { FormTitle } from \"./utils\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport GetApiKeyModal from \"./GetApiKeyModal\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { SubnetLoginRequest, SubnetLoginResponse } from \"../License/types\";\nimport api from \"../../../common/api\";\nimport { useAppDispatch } from \"../../../store\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { useNavigate } from \"react-router-dom\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\n\ninterface IApiKeyRegister {\n classes: any;\n registerEndpoint: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n });\n\nconst ApiKeyRegister = ({ classes, registerEndpoint }: IApiKeyRegister) => {\n const navigate = useNavigate();\n\n const [showApiKeyModal, setShowApiKeyModal] = useState(false);\n const [apiKey, setApiKey] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [fromModal, setFromModal] = useState(false);\n const dispatch = useAppDispatch();\n\n const onRegister = useCallback(() => {\n if (loading) {\n return;\n }\n setLoading(true);\n let request: SubnetLoginRequest = { apiKey };\n api\n .invoke(\"POST\", registerEndpoint, request)\n .then((resp: SubnetLoginResponse) => {\n setLoading(false);\n if (resp && resp.registered) {\n dispatch(setServerNeedsRestart(true));\n navigate(IAM_PAGES.LICENSE);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n reset();\n });\n }, [apiKey, dispatch, loading, registerEndpoint, navigate]);\n\n useEffect(() => {\n if (fromModal) {\n onRegister();\n }\n }, [fromModal, onRegister]);\n\n const reset = () => {\n setApiKey(\"\");\n setFromModal(false);\n };\n\n return (\n \n \n }\n title={`Register cluster with API key`}\n />\n \n \n \n \n Use your MinIO Subscription Network API Key to register this\n cluster.\n \n \n ) =>\n setApiKey(event.target.value)\n }\n label=\"API Key\"\n value={apiKey}\n />\n\n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ApiKeyRegister);\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) 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 { Box, Link } from \"@mui/material\";\nimport { ClusterRegistered, FormTitle } from \"./utils\";\nimport { Button, CopyIcon, OfflineRegistrationIcon } from \"mds\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { useSelector } from \"react-redux\";\nimport CommentBoxWrapper from \"../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport { fetchLicenseInfo } from \"./registerThunks\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\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 \n }\n title={`Register cluster in an Air-gap environment`}\n />\n \n\n \n \n \n \n
\n Click on the link to register this cluster in SUBNET and\n get a License Key for this Air-Gap deployment\n
\n Note: If this machine does not have internet connection,\n Copy paste the following URL in a browser where you access\n SUBNET and follow the instructions to complete the\n 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 );\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 } from \"@mui/material\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\nimport { setSubnetOTP } from \"./registerSlice\";\nimport { Button } from \"mds\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { useSelector } from \"react-redux\";\nimport { subnetLoginWithMFA } from \"./registerThunks\";\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 \n \n Two-Factor Authentication\n \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 dispatch(subnetLoginWithMFA())}\n disabled={\n loading ||\n subnetOTP.trim().length === 0 ||\n subnetMFAToken.trim().length === 0\n }\n variant=\"callAction\"\n label={\"Verify\"}\n />\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 } from \"@mui/material\";\nimport { FormTitle } from \"./utils\";\nimport SelectWrapper from \"../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { setLoading, setSelectedSubnetOrganization } from \"./registerSlice\";\nimport { Button } from \"mds\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { callRegister } from \"./registerThunks\";\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 \n \n \n \n \n dispatch(setSelectedSubnetOrganization(e.target.value as string))\n }\n label=\"Select an organization\"\n value={selectedSubnetOrganization}\n options={subnetOrganizations.map((organization) => ({\n label: organization.company,\n value: organization.accountId.toString(),\n }))}\n />\n \n () => {\n if (loading) {\n return;\n }\n dispatch(setLoading(true));\n if (subnetAccessToken && selectedSubnetOrganization) {\n dispatch(\n callRegister({\n token: subnetAccessToken,\n account_id: selectedSubnetOrganization,\n })\n );\n }\n }}\n disabled={loading || subnetAccessToken.trim().length === 0}\n variant=\"callAction\"\n label={\"Register\"}\n />\n \n \n \n \n \n );\n};\n\nexport default ClusterRegistrationForm;\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 } from \"react\";\nimport { Box } from \"@mui/material\";\nimport { FormTitle } from \"./utils\";\nimport { Button, OnlineRegistrationIcon, UsersIcon } from \"mds\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport {\n setShowPassword,\n setSubnetEmail,\n setSubnetPassword,\n} from \"./registerSlice\";\nimport { subnetLogin } from \"./registerThunks\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n })\n);\n\nconst OnlineRegistration = () => {\n const classes = useStyles();\n const dispatch = useAppDispatch();\n\n const subnetPassword = useSelector(\n (state: AppState) => state.register.subnetPassword\n );\n const subnetEmail = useSelector(\n (state: AppState) => state.register.subnetEmail\n );\n const showPassword = useSelector(\n (state: AppState) => state.register.showPassword\n );\n const loading = useSelector((state: AppState) => state.register.loading);\n\n return (\n \n \n }\n title={`Online activation of MinIO Subscription Network License`}\n />\n \n \n \n \n Use your MinIO Subscription Network login credentials to register\n this cluster.\n \n \n ) =>\n dispatch(setSubnetEmail(event.target.value))\n }\n label=\"Email\"\n value={subnetEmail}\n overlayIcon={}\n />\n ) =>\n dispatch(setSubnetPassword(event.target.value))\n }\n label=\"Password\"\n type={showPassword ? \"text\" : \"password\"}\n value={subnetPassword}\n overlayIcon={\n showPassword ? : \n }\n overlayAction={() => dispatch(setShowPassword(!showPassword))}\n />\n\n \n {\n e.preventDefault();\n window.open(`https://min.io/signup?ref=con`, \"_blank\");\n }}\n label={\"Sign up\"}\n />\n dispatch(subnetLogin())}\n label={\"Register\"}\n />\n \n \n \n \n \n \n );\n};\n\nexport default OnlineRegistration;\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 { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Box } from \"@mui/material\";\nimport api from \"../../../common/api\";\n\nimport { SubnetRegTokenResponse } from \"../License/types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { useSelector } from \"react-redux\";\nimport { setErrorSnackMessage, setHelpName } from \"../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport { TabPanel } from \"../../shared/tabs\";\nimport { ClusterRegistered, ProxyConfiguration } from \"./utils\";\nimport ApiKeyRegister from \"./ApiKeyRegister\";\nimport { fetchLicenseInfo } from \"./registerThunks\";\nimport {\n resetRegisterForm,\n setCurTab,\n setLoading,\n setSubnetRegToken,\n} from \"./registerSlice\";\nimport OfflineRegistration from \"./OfflineRegistration\";\nimport SubnetMFAToken from \"./SubnetMFAToken\";\nimport ClusterRegistrationForm from \"./ClusterRegistrationForm\";\nimport OnlineRegistration from \"./OnlineRegistration\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { PageLayout } from \"mds\";\nimport HelpMenu from \"../HelpMenu\";\n\ninterface IRegister {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n });\n\nconst Register = ({ classes }: IRegister) => {\n const dispatch = useAppDispatch();\n\n const subnetMFAToken = useSelector(\n (state: AppState) => state.register.subnetMFAToken\n );\n const subnetAccessToken = useSelector(\n (state: AppState) => state.register.subnetAccessToken\n );\n\n const subnetRegToken = useSelector(\n (state: AppState) => state.register.subnetRegToken\n );\n const subnetOrganizations = useSelector(\n (state: AppState) => state.register.subnetOrganizations\n );\n\n const loading = useSelector((state: AppState) => state.register.loading);\n const loadingLicenseInfo = useSelector(\n (state: AppState) => state.register.loadingLicenseInfo\n );\n const clusterRegistered = useSelector(\n (state: AppState) => state.register.clusterRegistered\n );\n const licenseInfo = useSelector(\n (state: AppState) => state.register.licenseInfo\n );\n const curTab = useSelector((state: AppState) => state.register.curTab);\n\n const [initialLicenseLoading, setInitialLicenseLoading] =\n useState(true);\n\n useEffect(() => {\n // when unmounted, reset\n return () => {\n dispatch(resetRegisterForm());\n };\n }, [dispatch]);\n\n const fetchSubnetRegToken = () => {\n if (loading || subnetRegToken) {\n return;\n }\n dispatch(setLoading(true));\n api\n .invoke(\"GET\", \"/api/v1/subnet/registration-token\")\n .then((resp: SubnetRegTokenResponse) => {\n dispatch(setLoading(false));\n if (resp && resp.regToken) {\n dispatch(setSubnetRegToken(resp.regToken));\n }\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n dispatch(setErrorSnackMessage(err));\n dispatch(setLoading(false));\n });\n };\n\n useEffect(() => {\n if (initialLicenseLoading) {\n dispatch(fetchLicenseInfo());\n setInitialLicenseLoading(false);\n }\n }, [initialLicenseLoading, setInitialLicenseLoading, dispatch]);\n\n let clusterRegistrationForm: JSX.Element = ;\n\n if (subnetAccessToken && subnetOrganizations.length > 0) {\n clusterRegistrationForm = ;\n } else if (subnetMFAToken) {\n clusterRegistrationForm = ;\n } else {\n clusterRegistrationForm = ;\n }\n\n const apiKeyRegistration = (\n \n \n {clusterRegistered && licenseInfo ? (\n \n ) : (\n \n )}\n \n \n \n );\n\n const offlineRegistration = ;\n\n const regUi = (\n \n \n {clusterRegistered && licenseInfo ? (\n \n ) : (\n clusterRegistrationForm\n )}\n \n\n {!clusterRegistered && }\n \n );\n\n const loadingUi =
Loading..
;\n const uiToShow = loadingLicenseInfo ? loadingUi : regUi;\n\n useEffect(() => {\n dispatch(setHelpName(\"register\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n }\n />\n\n \n , newValue: number) => {\n dispatch(setCurTab(newValue));\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n \n \n fetchSubnetRegToken()}\n />\n \n\n \n {uiToShow}\n \n \n {apiKeyRegistration}\n \n \n {offlineRegistration}\n \n \n \n );\n};\n\nexport default withStyles(styles)(Register);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { VerifiedIcon } from \"mds\";\n\nconst RegistrationStatusBanner = ({ email = \"\" }: { email?: string }) => {\n return (\n \n \n Register status:\n \n \n \n Registered\n \n \n \n\n \n Registered to:\n {email}\n \n \n );\n};\nexport default RegistrationStatusBanner;\n"],"names":["withStyles","theme","createStyles","_objectSpread","fieldBasic","tooltipHelper","inputLabel","fontSize","margin","alignItems","paddingTop","flexWrap","display","textBoxContainer","flexGrow","position","cssOutlinedInput","borderColor","padding","rootContainer","minHeight","borderWidth","color","fontWeight","opacity","_ref","label","onChange","value","id","name","_ref$disabled","disabled","_ref$tooltip","tooltip","_ref$index","index","_ref$error","error","_ref$required","required","_ref$placeholder","placeholder","classes","inputProps","_jsx","React","children","_jsxs","Grid","item","xs","className","concat","fieldContainer","errorInField","InputLabel","htmlFor","tooltipContainer","Tooltip","title","placement","HelpIcon","TextField","fullWidth","multiline","rows","helperText","InputLabelProps","shrink","InputProps","notchedOutline","root","variant","inputStyles","makeStyles","inputFieldStyles","InputField","props","overlayAction","right","top","maxWidth","maxHeight","_ref$type","type","_ref$autoComplete","autoComplete","_ref$multiline","min","max","overlayId","_ref$overlayIcon","overlayIcon","_ref$overlayObject","overlayObject","_ref$extraInputProps","extraInputProps","_ref$noLabelMinWidth","noLabelMinWidth","_ref$pattern","pattern","_ref$autoFocus","autoFocus","_ref$className","onKeyPress","onFocus","onPaste","_useState","useState","_useState2","_slicedToArray","toggleTextInput","setToggleTextInput","inputBoxWrapperIcon","inputBoxWrapperType","VisibilityOffIcon","RemoveRedEyeIcon","container","clsx","inputBoxContainer","noMinWidthLabel","inputRebase","IconButton","onClick","size","disableFocusRipple","disableRipple","disableTouchRipple","SelectStyled","height","lineHeight","marginTop","spacing","input","border","borderRadius","backgroundColor","InputBase","flexFlow","options","FormControl","Select","map","option","MenuItem","FormTitle","_ref$icon","icon","Box","sx","justifyContent","ClusterRegistered","_ref2","email","Fragment","RegistrationStatusBanner","cursor","Link","href","target","style","ProxyConfiguration","proxyConfigurationCommand","displaySubnetProxy","setDisplaySubnetProxy","width","SettingsIcon","marginLeft","marginBottom","InputBoxWrapper","CopyIcon","readOnly","navigator","clipboard","writeText","FormSwitchWrapper","checked","event","sizedLabel","minWidth","containerForHeader","spacingUtils","open","closeModal","onSet","dispatch","useAppDispatch","setEmail","_useState3","_useState4","password","setPassword","_useState5","_useState6","showPassword","setShowPassword","_useState7","_useState8","mfaToken","setMfaToken","_useState9","_useState10","subnetOTP","setSubnetOTP","_useApi","useApi","res","mfa_token","access_token","invokeApi","apiKey","err","setErrorSnackMessage","_useApi2","isLoading","getCredentialsDialog","spacerBottom","UsersIcon","getMFADialog","flex","LockOutlinedIcon","ConfirmDialog","confirmText","isOpen","titleIcon","InfoIcon","cancelText","onConfirm","username","otp","onClose","confirmButtonProps","hidden","cancelButtonProps","confirmationContent","FeatureItem","description","marginRight","fontStyle","_ref2$hasMargin","hasMargin","sm","md","HelpIconFilled","CallHomeFeatureIcon","DiagnosticsFeatureIcon","PerformanceFeatureIcon","ExtraFeaturesIcon","registerEndpoint","navigate","useNavigate","showApiKeyModal","setShowApiKeyModal","setApiKey","loading","setLoading","fromModal","setFromModal","onRegister","useCallback","request","api","invoke","then","resp","registered","setServerNeedsRestart","IAM_PAGES","LICENSE","catch","reset","useEffect","OnlineRegistrationIcon","Button","spacerRight","trim","length","GetApiKeyModal","RegisterHelpBox","fetchLicenseInfo","createAsyncThunk","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_","getState","state","getSubnetInfo","wrap","_context","prev","next","hasPermission","CONSOLE_UI_RESOURCE","IAM_PAGES_PERMISSIONS","register","loadingLicenseInfo","abrupt","setLoadingLicenseInfo","setLicenseInfo","setClusterRegistered","detailedError","toLowerCase","stop","_x","_x2","apply","arguments","callRegister","_ref4","_callee2","args","_ref3","_context2","token","account_id","resetRegisterForm","_x3","_x4","subnetLoginWithMFA","_ref6","_callee3","_ref5","subnetEmail","subnetMFAToken","_context3","rejectWithValue","organizations","accountId","toString","setSubnetAccessToken","setSubnetOrganizations","setSelectedSubnetOrganization","_x5","_x6","subnetLogin","_ref8","_callee4","_ref7","license","subnetPassword","_context4","setSubnetMFAToken","_x7","_x8","subnetRegToken","useSelector","clusterRegistered","licenseInfo","offlineRegUrl","licenseKey","setLicenseKey","isSaving","invokeApplyLicenseApi","OfflineRegistrationIcon","background","textAlign","gap","TooltipWrapper","CopyToClipboard","text","flexDirection","CommentBoxWrapper","e","key_values","key","subnetAccessToken","selectedSubnetOrganization","subnetOrganizations","SelectWrapper","organization","company","useStyles","setSubnetEmail","setSubnetPassword","preventDefault","window","curTab","initialLicenseLoading","setInitialLicenseLoading","clusterRegistrationForm","ClusterRegistrationForm","SubnetMFAToken","OnlineRegistration","apiKeyRegistration","ApiKeyRegister","offlineRegistration","OfflineRegistration","regUi","uiToShow","setHelpName","PageHeaderWrapper","actions","HelpMenu","PageLayout","Tabs","newValue","setCurTab","indicatorColor","textColor","scrollButtons","Tab","regToken","setSubnetRegToken","console","TabPanel","_ref$email","left","fill","VerifiedIcon"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"static/js/1516.216550a5.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/SelectWrapper/SelectWrapper.tsx","screens/Console/Support/utils.tsx","screens/Console/Support/GetApiKeyModal.tsx","screens/Console/Support/RegisterHelpBox.tsx","screens/Console/Support/ApiKeyRegister.tsx","screens/Console/Support/registerThunks.ts","screens/Console/Support/OfflineRegistration.tsx","screens/Console/Support/SubnetMFAToken.tsx","screens/Console/Support/ClusterRegistrationForm.tsx","screens/Console/Support/OnlineRegistration.tsx","screens/Console/Support/Register.tsx","screens/Console/Support/RegistrationStatusBanner.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\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 from \"react\";\nimport { Grid, InputLabel, TextField, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\n\ninterface CommentBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: 14,\n margin: 0,\n alignItems: \"flex-start\",\n paddingTop: \"20px\",\n flexWrap: \"wrap\",\n display: \"flex\",\n },\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n cssOutlinedInput: {\n borderColor: \"#EAEAEA\",\n padding: 16,\n },\n rootContainer: {\n \"& .MuiOutlinedInput-inputMultiline\": {\n ...fieldBasic.inputLabel,\n fontSize: 13,\n minHeight: 150,\n },\n \"&.Mui-focused .MuiOutlinedInput-notchedOutline\": {\n borderColor: \"#07193E\",\n borderWidth: 1,\n },\n \"& textarea\": {\n color: \"#07193E\",\n fontSize: 13,\n fontWeight: 600,\n \"&:placeholder\": {\n color: \"#858585\",\n opacity: 1,\n fontWeight: 400,\n },\n },\n },\n });\n\nconst CommentBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n classes,\n}: CommentBoxProps) => {\n let inputProps: any = { \"data-index\": index };\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n )}\n\n
\n \n
\n \n \n );\n};\n\nexport default withStyles(styles)(CommentBoxWrapper);\n","// This file is part of MinIO Console Server\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 .\nimport React, { ClipboardEvent, useState } from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n onKeyPress?: (e: any) => void;\n onFocus?: () => void;\n onPaste?: (e: ClipboardEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayId?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n }),\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayId,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n onKeyPress,\n onFocus,\n onPaste,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n const [toggleTextInput, setToggleTextInput] = useState(false);\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n let inputBoxWrapperIcon = overlayIcon;\n let inputBoxWrapperType = type;\n\n if (type === \"password\" && overlayIcon === null) {\n inputBoxWrapperIcon = toggleTextInput ? (\n \n ) : (\n \n );\n inputBoxWrapperType = toggleTextInput ? \"text\" : \"password\";\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n \n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\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 .\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n FormControl,\n InputBase,\n InputLabel,\n MenuItem,\n Select,\n SelectChangeEvent,\n Tooltip,\n} from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\n\nexport interface selectorTypes {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n options: selectorTypes[];\n value: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n onChange: (e: SelectChangeEvent) => void;\n disabled?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n fieldContainer: {\n display: \"flex\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n height: 38,\n lineHeight: 1,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n height: 38,\n position: \"relative\",\n color: \"#07193E\",\n fontSize: 13,\n fontWeight: 600,\n padding: \"8px 20px 10px 10px\",\n border: \"#e5e5e5 1px solid\",\n borderRadius: 4,\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n borderColor: \"#393939\",\n },\n \"&:focus\": {\n backgroundColor: \"#fff\",\n },\n },\n }),\n)(InputBase);\n\nconst SelectWrapper = ({\n classes,\n id,\n name,\n onChange,\n options,\n label,\n tooltip = \"\",\n value,\n disabled = false,\n}: SelectProps) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n )}\n \n }\n disabled={disabled}\n >\n {options.map((option) => (\n \n ))}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(SelectWrapper);\n","import { Box, Grid, Link } from \"@mui/material\";\nimport { Fragment, useState } from \"react\";\nimport { CopyIcon, SettingsIcon } from \"mds\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RegistrationStatusBanner from \"./RegistrationStatusBanner\";\n\nexport const FormTitle = ({\n icon = null,\n title,\n}: {\n icon?: any;\n title: any;\n}) => {\n return (\n \n {icon}\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 extraInputProps={{\n readOnly: true,\n }}\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) 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 { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\nimport {\n containerForHeader,\n spacingUtils,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport ConfirmDialog from \"../Common/ModalWrapper/ConfirmDialog\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport React, { useState } from \"react\";\nimport { InfoIcon, UsersIcon } from \"mds\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { useAppDispatch } from \"../../../store\";\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport { Box } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...containerForHeader,\n ...spacingUtils,\n });\n\ninterface IGetApiKeyModalProps {\n open: boolean;\n closeModal: () => void;\n onSet: (apiKey: string) => void;\n classes: any;\n}\n\nconst GetApiKeyModal = ({\n open,\n closeModal,\n classes,\n onSet,\n}: IGetApiKeyModalProps) => {\n const dispatch = useAppDispatch();\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [showPassword, setShowPassword] = useState(false);\n const [mfaToken, setMfaToken] = useState(\"\");\n const [subnetOTP, setSubnetOTP] = useState(\"\");\n\n const onError = (err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n closeModal();\n setEmail(\"\");\n setPassword(\"\");\n setShowPassword(false);\n setMfaToken(\"\");\n setSubnetOTP(\"\");\n };\n\n const onSuccess = (res: any) => {\n if (res.mfa_token) {\n setMfaToken(res.mfa_token);\n } else if (res.access_token) {\n invokeApi(\"GET\", `/api/v1/subnet/apikey?token=${res.access_token}`);\n } else {\n onSet(res.apiKey);\n closeModal();\n }\n };\n\n const [isLoading, invokeApi] = useApi(onSuccess, onError);\n\n const onConfirm = () => {\n if (mfaToken !== \"\") {\n invokeApi(\"POST\", \"/api/v1/subnet/login/mfa\", {\n username: email,\n otp: subnetOTP,\n mfa_token: mfaToken,\n });\n } else {\n invokeApi(\"POST\", \"/api/v1/subnet/login\", { username: email, password });\n }\n };\n\n const getDialogContent = () => {\n if (mfaToken === \"\") {\n return getCredentialsDialog();\n }\n return getMFADialog();\n };\n\n const getCredentialsDialog = () => {\n return (\n \n ) =>\n setEmail(event.target.value)\n }\n label=\"Email\"\n value={email}\n overlayIcon={}\n />\n ) =>\n setPassword(event.target.value)\n }\n label=\"Password\"\n type={showPassword ? \"text\" : \"password\"}\n value={password}\n overlayIcon={\n showPassword ? : \n }\n overlayAction={() => setShowPassword(!showPassword)}\n />\n \n );\n };\n\n const getMFADialog = () => {\n return (\n \n \n \n Two-Factor Authentication\n \n\n \n Please enter the 6-digit verification code that was sent to your\n email 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 setSubnetOTP(event.target.value)\n }\n placeholder=\"\"\n label=\"\"\n value={subnetOTP}\n />\n \n \n \n \n );\n };\n\n return open ? (\n }\n isLoading={isLoading}\n cancelText={\"Cancel\"}\n onConfirm={onConfirm}\n onClose={closeModal}\n confirmButtonProps={{\n variant: \"callAction\",\n disabled: !email || !password || isLoading,\n hidden: true,\n }}\n cancelButtonProps={{\n disabled: isLoading,\n }}\n confirmationContent={getDialogContent()}\n />\n ) : null;\n};\n\nexport default withStyles(styles)(GetApiKeyModal);\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 { Box, Link } from \"@mui/material\";\nimport {\n CallHomeFeatureIcon,\n DiagnosticsFeatureIcon,\n ExtraFeaturesIcon,\n HelpIconFilled,\n PerformanceFeatureIcon,\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 \n \n Registering this cluster with the MinIO Subscription Network (SUBNET)\n provides the following benefits in addition to the commercial license\n 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\nexport default RegisterHelpBox;\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, useCallback, useEffect, useState } from \"react\";\nimport { Box } from \"@mui/material\";\nimport { Button, OnlineRegistrationIcon } from \"mds\";\nimport { FormTitle } from \"./utils\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport GetApiKeyModal from \"./GetApiKeyModal\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { SubnetLoginRequest, SubnetLoginResponse } from \"../License/types\";\nimport api from \"../../../common/api\";\nimport { useAppDispatch } from \"../../../store\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { useNavigate } from \"react-router-dom\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\n\ninterface IApiKeyRegister {\n classes: any;\n registerEndpoint: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n });\n\nconst ApiKeyRegister = ({ classes, registerEndpoint }: IApiKeyRegister) => {\n const navigate = useNavigate();\n\n const [showApiKeyModal, setShowApiKeyModal] = useState(false);\n const [apiKey, setApiKey] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [fromModal, setFromModal] = useState(false);\n const dispatch = useAppDispatch();\n\n const onRegister = useCallback(() => {\n if (loading) {\n return;\n }\n setLoading(true);\n let request: SubnetLoginRequest = { apiKey };\n api\n .invoke(\"POST\", registerEndpoint, request)\n .then((resp: SubnetLoginResponse) => {\n setLoading(false);\n if (resp && resp.registered) {\n dispatch(setServerNeedsRestart(true));\n navigate(IAM_PAGES.LICENSE);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n setLoading(false);\n reset();\n });\n }, [apiKey, dispatch, loading, registerEndpoint, navigate]);\n\n useEffect(() => {\n if (fromModal) {\n onRegister();\n }\n }, [fromModal, onRegister]);\n\n const reset = () => {\n setApiKey(\"\");\n setFromModal(false);\n };\n\n return (\n \n \n }\n title={`Register cluster with API key`}\n />\n \n \n \n \n Use your MinIO Subscription Network API Key to register this\n cluster.\n \n \n ) =>\n setApiKey(event.target.value)\n }\n label=\"API Key\"\n value={apiKey}\n />\n\n \n setShowApiKeyModal(true)}\n label={\"Get from SUBNET\"}\n />\n onRegister()}\n label={\"Register\"}\n />\n setShowApiKeyModal(false)}\n onSet={(value) => {\n setApiKey(value);\n setFromModal(true);\n }}\n />\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ApiKeyRegister);\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) 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 { Box, Link } from \"@mui/material\";\nimport { ClusterRegistered, FormTitle } from \"./utils\";\nimport { Button, CopyIcon, OfflineRegistrationIcon } from \"mds\";\nimport TooltipWrapper from \"../Common/TooltipWrapper/TooltipWrapper\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { useSelector } from \"react-redux\";\nimport CommentBoxWrapper from \"../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport useApi from \"../Common/Hooks/useApi\";\nimport { fetchLicenseInfo } from \"./registerThunks\";\nimport {\n setErrorSnackMessage,\n setServerNeedsRestart,\n} from \"../../../systemSlice\";\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 \n }\n title={`Register cluster in an Air-gap environment`}\n />\n \n\n \n \n \n \n
\n Click on the link to register this cluster in SUBNET and\n get a License Key for this Air-Gap deployment\n
\n Note: If this machine does not have internet connection,\n Copy paste the following URL in a browser where you access\n SUBNET and follow the instructions to complete the\n 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 );\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 } from \"@mui/material\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport LockOutlinedIcon from \"@mui/icons-material/LockOutlined\";\nimport { setSubnetOTP } from \"./registerSlice\";\nimport { Button } from \"mds\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { useSelector } from \"react-redux\";\nimport { subnetLoginWithMFA } from \"./registerThunks\";\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 \n \n Two-Factor Authentication\n \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 dispatch(subnetLoginWithMFA())}\n disabled={\n loading ||\n subnetOTP.trim().length === 0 ||\n subnetMFAToken.trim().length === 0\n }\n variant=\"callAction\"\n label={\"Verify\"}\n />\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 } from \"@mui/material\";\nimport { FormTitle } from \"./utils\";\nimport SelectWrapper from \"../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { setLoading, setSelectedSubnetOrganization } from \"./registerSlice\";\nimport { Button } from \"mds\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { callRegister } from \"./registerThunks\";\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 \n \n \n \n \n dispatch(setSelectedSubnetOrganization(e.target.value as string))\n }\n label=\"Select an organization\"\n value={selectedSubnetOrganization}\n options={subnetOrganizations.map((organization) => ({\n label: organization.company,\n value: organization.accountId.toString(),\n }))}\n />\n \n () => {\n if (loading) {\n return;\n }\n dispatch(setLoading(true));\n if (subnetAccessToken && selectedSubnetOrganization) {\n dispatch(\n callRegister({\n token: subnetAccessToken,\n account_id: selectedSubnetOrganization,\n }),\n );\n }\n }}\n disabled={loading || subnetAccessToken.trim().length === 0}\n variant=\"callAction\"\n label={\"Register\"}\n />\n \n \n \n \n \n );\n};\n\nexport default ClusterRegistrationForm;\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 } from \"react\";\nimport { Box } from \"@mui/material\";\nimport { FormTitle } from \"./utils\";\nimport { Button, OnlineRegistrationIcon, UsersIcon } from \"mds\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport RegisterHelpBox from \"./RegisterHelpBox\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { useSelector } from \"react-redux\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport {\n setShowPassword,\n setSubnetEmail,\n setSubnetPassword,\n} from \"./registerSlice\";\nimport { subnetLogin } from \"./registerThunks\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n }),\n);\n\nconst OnlineRegistration = () => {\n const classes = useStyles();\n const dispatch = useAppDispatch();\n\n const subnetPassword = useSelector(\n (state: AppState) => state.register.subnetPassword,\n );\n const subnetEmail = useSelector(\n (state: AppState) => state.register.subnetEmail,\n );\n const showPassword = useSelector(\n (state: AppState) => state.register.showPassword,\n );\n const loading = useSelector((state: AppState) => state.register.loading);\n\n return (\n \n \n }\n title={`Online activation of MinIO Subscription Network License`}\n />\n \n \n \n \n Use your MinIO Subscription Network login credentials to register\n this cluster.\n \n \n ) =>\n dispatch(setSubnetEmail(event.target.value))\n }\n label=\"Email\"\n value={subnetEmail}\n overlayIcon={}\n />\n ) =>\n dispatch(setSubnetPassword(event.target.value))\n }\n label=\"Password\"\n type={showPassword ? \"text\" : \"password\"}\n value={subnetPassword}\n overlayIcon={\n showPassword ? : \n }\n overlayAction={() => dispatch(setShowPassword(!showPassword))}\n />\n\n \n {\n e.preventDefault();\n window.open(`https://min.io/signup?ref=con`, \"_blank\");\n }}\n label={\"Sign up\"}\n />\n dispatch(subnetLogin())}\n label={\"Register\"}\n />\n \n \n \n \n \n \n );\n};\n\nexport default OnlineRegistration;\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 { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { spacingUtils } from \"../Common/FormComponents/common/styleLibrary\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Box } from \"@mui/material\";\nimport api from \"../../../common/api\";\n\nimport { SubnetRegTokenResponse } from \"../License/types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { useSelector } from \"react-redux\";\nimport { setErrorSnackMessage, setHelpName } from \"../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport { TabPanel } from \"../../shared/tabs\";\nimport { ClusterRegistered, ProxyConfiguration } from \"./utils\";\nimport ApiKeyRegister from \"./ApiKeyRegister\";\nimport { fetchLicenseInfo } from \"./registerThunks\";\nimport {\n resetRegisterForm,\n setCurTab,\n setLoading,\n setSubnetRegToken,\n} from \"./registerSlice\";\nimport OfflineRegistration from \"./OfflineRegistration\";\nimport SubnetMFAToken from \"./SubnetMFAToken\";\nimport ClusterRegistrationForm from \"./ClusterRegistrationForm\";\nimport OnlineRegistration from \"./OnlineRegistration\";\nimport PageHeaderWrapper from \"../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { PageLayout } from \"mds\";\nimport HelpMenu from \"../HelpMenu\";\n\ninterface IRegister {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizedLabel: {\n minWidth: \"75px\",\n },\n ...spacingUtils,\n });\n\nconst Register = ({ classes }: IRegister) => {\n const dispatch = useAppDispatch();\n\n const subnetMFAToken = useSelector(\n (state: AppState) => state.register.subnetMFAToken,\n );\n const subnetAccessToken = useSelector(\n (state: AppState) => state.register.subnetAccessToken,\n );\n\n const subnetRegToken = useSelector(\n (state: AppState) => state.register.subnetRegToken,\n );\n const subnetOrganizations = useSelector(\n (state: AppState) => state.register.subnetOrganizations,\n );\n\n const loading = useSelector((state: AppState) => state.register.loading);\n const loadingLicenseInfo = useSelector(\n (state: AppState) => state.register.loadingLicenseInfo,\n );\n const clusterRegistered = useSelector(\n (state: AppState) => state.register.clusterRegistered,\n );\n const licenseInfo = useSelector(\n (state: AppState) => state.register.licenseInfo,\n );\n const curTab = useSelector((state: AppState) => state.register.curTab);\n\n const [initialLicenseLoading, setInitialLicenseLoading] =\n useState(true);\n\n useEffect(() => {\n // when unmounted, reset\n return () => {\n dispatch(resetRegisterForm());\n };\n }, [dispatch]);\n\n const fetchSubnetRegToken = () => {\n if (loading || subnetRegToken) {\n return;\n }\n dispatch(setLoading(true));\n api\n .invoke(\"GET\", \"/api/v1/subnet/registration-token\")\n .then((resp: SubnetRegTokenResponse) => {\n dispatch(setLoading(false));\n if (resp && resp.regToken) {\n dispatch(setSubnetRegToken(resp.regToken));\n }\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n dispatch(setErrorSnackMessage(err));\n dispatch(setLoading(false));\n });\n };\n\n useEffect(() => {\n if (initialLicenseLoading) {\n dispatch(fetchLicenseInfo());\n setInitialLicenseLoading(false);\n }\n }, [initialLicenseLoading, setInitialLicenseLoading, dispatch]);\n\n let clusterRegistrationForm: JSX.Element = ;\n\n if (subnetAccessToken && subnetOrganizations.length > 0) {\n clusterRegistrationForm = ;\n } else if (subnetMFAToken) {\n clusterRegistrationForm = ;\n } else {\n clusterRegistrationForm = ;\n }\n\n const apiKeyRegistration = (\n \n \n {clusterRegistered && licenseInfo ? (\n \n ) : (\n \n )}\n \n \n \n );\n\n const offlineRegistration = ;\n\n const regUi = (\n \n \n {clusterRegistered && licenseInfo ? (\n \n ) : (\n clusterRegistrationForm\n )}\n \n\n {!clusterRegistered && }\n \n );\n\n const loadingUi =
Loading..
;\n const uiToShow = loadingLicenseInfo ? loadingUi : regUi;\n\n useEffect(() => {\n dispatch(setHelpName(\"register\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n }\n />\n\n \n , newValue: number) => {\n dispatch(setCurTab(newValue));\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n \n \n fetchSubnetRegToken()}\n />\n \n\n \n {uiToShow}\n \n \n {apiKeyRegistration}\n \n \n {offlineRegistration}\n \n \n \n );\n};\n\nexport default withStyles(styles)(Register);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { VerifiedIcon } from \"mds\";\n\nconst RegistrationStatusBanner = ({ email = \"\" }: { email?: string }) => {\n return (\n \n \n Register status:\n \n \n \n Registered\n \n \n \n\n \n Registered to:\n {email}\n \n \n );\n};\nexport default RegistrationStatusBanner;\n"],"names":["withStyles","theme","createStyles","_objectSpread","fieldBasic","tooltipHelper","inputLabel","fontSize","margin","alignItems","paddingTop","flexWrap","display","textBoxContainer","flexGrow","position","cssOutlinedInput","borderColor","padding","rootContainer","minHeight","borderWidth","color","fontWeight","opacity","_ref","label","onChange","value","id","name","_ref$disabled","disabled","_ref$tooltip","tooltip","_ref$index","index","_ref$error","error","_ref$required","required","_ref$placeholder","placeholder","classes","inputProps","_jsx","React","children","_jsxs","Grid","item","xs","className","concat","fieldContainer","errorInField","InputLabel","htmlFor","tooltipContainer","Tooltip","title","placement","HelpIcon","TextField","fullWidth","multiline","rows","helperText","InputLabelProps","shrink","InputProps","notchedOutline","root","variant","inputStyles","makeStyles","inputFieldStyles","InputField","props","overlayAction","right","top","maxWidth","maxHeight","_ref$type","type","_ref$autoComplete","autoComplete","_ref$multiline","min","max","overlayId","_ref$overlayIcon","overlayIcon","_ref$overlayObject","overlayObject","_ref$extraInputProps","extraInputProps","_ref$noLabelMinWidth","noLabelMinWidth","_ref$pattern","pattern","_ref$autoFocus","autoFocus","_ref$className","onKeyPress","onFocus","onPaste","_useState","useState","_useState2","_slicedToArray","toggleTextInput","setToggleTextInput","inputBoxWrapperIcon","inputBoxWrapperType","VisibilityOffIcon","RemoveRedEyeIcon","container","clsx","inputBoxContainer","noMinWidthLabel","inputRebase","IconButton","onClick","size","disableFocusRipple","disableRipple","disableTouchRipple","SelectStyled","height","lineHeight","marginTop","spacing","input","border","borderRadius","backgroundColor","InputBase","flexFlow","options","FormControl","Select","map","option","MenuItem","FormTitle","_ref$icon","icon","Box","sx","justifyContent","ClusterRegistered","_ref2","email","Fragment","RegistrationStatusBanner","cursor","Link","href","target","style","ProxyConfiguration","proxyConfigurationCommand","displaySubnetProxy","setDisplaySubnetProxy","width","SettingsIcon","marginLeft","marginBottom","InputBoxWrapper","CopyIcon","readOnly","navigator","clipboard","writeText","FormSwitchWrapper","checked","event","sizedLabel","minWidth","containerForHeader","spacingUtils","open","closeModal","onSet","dispatch","useAppDispatch","setEmail","_useState3","_useState4","password","setPassword","_useState5","_useState6","showPassword","setShowPassword","_useState7","_useState8","mfaToken","setMfaToken","_useState9","_useState10","subnetOTP","setSubnetOTP","_useApi","useApi","res","mfa_token","access_token","invokeApi","apiKey","err","setErrorSnackMessage","_useApi2","isLoading","getCredentialsDialog","spacerBottom","UsersIcon","getMFADialog","flex","LockOutlinedIcon","ConfirmDialog","confirmText","isOpen","titleIcon","InfoIcon","cancelText","onConfirm","username","otp","onClose","confirmButtonProps","hidden","cancelButtonProps","confirmationContent","FeatureItem","description","marginRight","fontStyle","_ref2$hasMargin","hasMargin","sm","md","HelpIconFilled","CallHomeFeatureIcon","DiagnosticsFeatureIcon","PerformanceFeatureIcon","ExtraFeaturesIcon","registerEndpoint","navigate","useNavigate","showApiKeyModal","setShowApiKeyModal","setApiKey","loading","setLoading","fromModal","setFromModal","onRegister","useCallback","request","api","invoke","then","resp","registered","setServerNeedsRestart","IAM_PAGES","LICENSE","catch","reset","useEffect","OnlineRegistrationIcon","Button","spacerRight","trim","length","GetApiKeyModal","RegisterHelpBox","fetchLicenseInfo","createAsyncThunk","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_","getState","state","getSubnetInfo","wrap","_context","prev","next","hasPermission","CONSOLE_UI_RESOURCE","IAM_PAGES_PERMISSIONS","register","loadingLicenseInfo","abrupt","setLoadingLicenseInfo","setLicenseInfo","setClusterRegistered","detailedError","toLowerCase","stop","_x","_x2","apply","arguments","callRegister","_ref4","_callee2","args","_ref3","_context2","token","account_id","resetRegisterForm","_x3","_x4","subnetLoginWithMFA","_ref6","_callee3","_ref5","subnetEmail","subnetMFAToken","_context3","rejectWithValue","organizations","accountId","toString","setSubnetAccessToken","setSubnetOrganizations","setSelectedSubnetOrganization","_x5","_x6","subnetLogin","_ref8","_callee4","_ref7","license","subnetPassword","_context4","setSubnetMFAToken","_x7","_x8","subnetRegToken","useSelector","clusterRegistered","licenseInfo","offlineRegUrl","licenseKey","setLicenseKey","isSaving","invokeApplyLicenseApi","OfflineRegistrationIcon","background","textAlign","gap","TooltipWrapper","CopyToClipboard","text","flexDirection","CommentBoxWrapper","e","key_values","key","subnetAccessToken","selectedSubnetOrganization","subnetOrganizations","SelectWrapper","organization","company","useStyles","setSubnetEmail","setSubnetPassword","preventDefault","window","curTab","initialLicenseLoading","setInitialLicenseLoading","clusterRegistrationForm","ClusterRegistrationForm","SubnetMFAToken","OnlineRegistration","apiKeyRegistration","ApiKeyRegister","offlineRegistration","OfflineRegistration","regUi","uiToShow","setHelpName","PageHeaderWrapper","actions","HelpMenu","PageLayout","Tabs","newValue","setCurTab","indicatorColor","textColor","scrollButtons","Tab","regToken","setSubnetRegToken","console","TabPanel","_ref$email","left","fill","VerifiedIcon"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1520.af5d5afd.chunk.js b/portal-ui/build/static/js/1520.af5d5afd.chunk.js
new file mode 100644
index 000000000..10dbf3c2f
--- /dev/null
+++ b/portal-ui/build/static/js/1520.af5d5afd.chunk.js
@@ -0,0 +1,2 @@
+"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1520],{85523:function(e,r,o){o.d(r,{Z:function(){return S}});var a=o(4942),n=o(63366),t=o(87462),l=o(72791),i=o(28182),c=o(94419),s=o(52930),u=o(20890),d=o(14036),m=o(66934),f=o(31402),p=o(75878),v=o(21217);function Z(e){return(0,v.Z)("MuiFormControlLabel",e)}var h=(0,p.Z)("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]),b=o(76147),g=o(80184),w=["checked","className","componentsProps","control","disabled","disableTypography","inputRef","label","labelPlacement","name","onChange","required","slotProps","value"],C=(0,m.ZP)("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:function(e,r){var o=e.ownerState;return[(0,a.Z)({},"& .".concat(h.label),r.label),r.root,r["labelPlacement".concat((0,d.Z)(o.labelPlacement))]]}})((function(e){var r=e.theme,o=e.ownerState;return(0,t.Z)((0,a.Z)({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16},"&.".concat(h.disabled),{cursor:"default"}),"start"===o.labelPlacement&&{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},"top"===o.labelPlacement&&{flexDirection:"column-reverse",marginLeft:16},"bottom"===o.labelPlacement&&{flexDirection:"column",marginLeft:16},(0,a.Z)({},"& .".concat(h.label),(0,a.Z)({},"&.".concat(h.disabled),{color:(r.vars||r).palette.text.disabled})))})),k=(0,m.ZP)("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:function(e,r){return r.asterisk}})((function(e){var r=e.theme;return(0,a.Z)({},"&.".concat(h.error),{color:(r.vars||r).palette.error.main})})),S=l.forwardRef((function(e,r){var o,a,m=(0,f.Z)({props:e,name:"MuiFormControlLabel"}),p=m.className,v=m.componentsProps,h=void 0===v?{}:v,S=m.control,x=m.disabled,P=m.disableTypography,y=m.label,R=m.labelPlacement,M=void 0===R?"end":R,j=m.required,N=m.slotProps,F=void 0===N?{}:N,z=(0,n.Z)(m,w),q=(0,s.Z)(),L=null!=(o=null!=x?x:S.props.disabled)?o:null==q?void 0:q.disabled,I=null!=j?j:S.props.required,D={disabled:L,required:I};["checked","name","onChange","value","inputRef"].forEach((function(e){"undefined"===typeof S.props[e]&&"undefined"!==typeof m[e]&&(D[e]=m[e])}));var G=(0,b.Z)({props:m,muiFormControl:q,states:["error"]}),E=(0,t.Z)({},m,{disabled:L,labelPlacement:M,required:I,error:G.error}),O=function(e){var r=e.classes,o=e.disabled,a=e.labelPlacement,n=e.error,t=e.required,l={root:["root",o&&"disabled","labelPlacement".concat((0,d.Z)(a)),n&&"error",t&&"required"],label:["label",o&&"disabled"],asterisk:["asterisk",n&&"error"]};return(0,c.Z)(l,Z,r)}(E),T=null!=(a=F.typography)?a:h.typography,B=y;return null==B||B.type===u.Z||P||(B=(0,g.jsx)(u.Z,(0,t.Z)({component:"span"},T,{className:(0,i.Z)(O.label,null==T?void 0:T.className),children:B}))),(0,g.jsxs)(C,(0,t.Z)({className:(0,i.Z)(O.root,p),ownerState:E,ref:r},z,{children:[l.cloneElement(S,D),B,I&&(0,g.jsxs)(k,{ownerState:E,"aria-hidden":!0,className:O.asterisk,children:["\u2009","*"]})]}))}))},61419:function(e,r,o){o.d(r,{Z:function(){return z}});var a=o(4942),n=o(63366),t=o(87462),l=o(72791),i=o(28182),c=o(94419),s=o(12065),u=o(97278),d=o(31402),m=o(76189),f=o(80184),p=(0,m.Z)((0,f.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),v=(0,m.Z)((0,f.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked"),Z=o(66934),h=(0,Z.ZP)("span")({position:"relative",display:"flex"}),b=(0,Z.ZP)(p)({transform:"scale(1)"}),g=(0,Z.ZP)(v)((function(e){var r=e.theme,o=e.ownerState;return(0,t.Z)({left:0,position:"absolute",transform:"scale(0)",transition:r.transitions.create("transform",{easing:r.transitions.easing.easeIn,duration:r.transitions.duration.shortest})},o.checked&&{transform:"scale(1)",transition:r.transitions.create("transform",{easing:r.transitions.easing.easeOut,duration:r.transitions.duration.shortest})})}));var w=function(e){var r=e.checked,o=void 0!==r&&r,a=e.classes,n=void 0===a?{}:a,l=e.fontSize,i=(0,t.Z)({},e,{checked:o});return(0,f.jsxs)(h,{className:n.root,ownerState:i,children:[(0,f.jsx)(b,{fontSize:l,className:n.background,ownerState:i}),(0,f.jsx)(g,{fontSize:l,className:n.dot,ownerState:i})]})},C=o(14036),k=o(31260),S=o(18672);var x=o(75878),P=o(21217);function y(e){return(0,P.Z)("MuiRadio",e)}var R=(0,x.Z)("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary"]),M=["checked","checkedIcon","color","icon","name","onChange","size","className"],j=(0,Z.ZP)(u.Z,{shouldForwardProp:function(e){return(0,Z.FO)(e)||"classes"===e},name:"MuiRadio",slot:"Root",overridesResolver:function(e,r){var o=e.ownerState;return[r.root,r["color".concat((0,C.Z)(o.color))]]}})((function(e){var r=e.theme,o=e.ownerState;return(0,t.Z)({color:(r.vars||r).palette.text.secondary},!o.disableRipple&&{"&:hover":{backgroundColor:r.vars?"rgba(".concat("default"===o.color?r.vars.palette.action.activeChannel:r.vars.palette[o.color].mainChannel," / ").concat(r.vars.palette.action.hoverOpacity,")"):(0,s.Fq)("default"===o.color?r.palette.action.active:r.palette[o.color].main,r.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==o.color&&(0,a.Z)({},"&.".concat(R.checked),{color:(r.vars||r).palette[o.color].main}),(0,a.Z)({},"&.".concat(R.disabled),{color:(r.vars||r).palette.action.disabled}))}));var N=(0,f.jsx)(w,{checked:!0}),F=(0,f.jsx)(w,{}),z=l.forwardRef((function(e,r){var o,a,s,u,m=(0,d.Z)({props:e,name:"MuiRadio"}),p=m.checked,v=m.checkedIcon,Z=void 0===v?N:v,h=m.color,b=void 0===h?"primary":h,g=m.icon,w=void 0===g?F:g,x=m.name,P=m.onChange,R=m.size,z=void 0===R?"medium":R,q=m.className,L=(0,n.Z)(m,M),I=(0,t.Z)({},m,{color:b,size:z}),D=function(e){var r=e.classes,o=e.color,a={root:["root","color".concat((0,C.Z)(o))]};return(0,t.Z)({},r,(0,c.Z)(a,y,r))}(I),G=l.useContext(S.Z),E=p,O=(0,k.Z)(P,G&&G.onChange),T=x;return G&&("undefined"===typeof E&&(s=G.value,E="object"===typeof(u=m.value)&&null!==u?s===u:String(s)===String(u)),"undefined"===typeof T&&(T=G.name)),(0,f.jsx)(j,(0,t.Z)({type:"radio",icon:l.cloneElement(w,{fontSize:null!=(o=F.props.fontSize)?o:z}),checkedIcon:l.cloneElement(Z,{fontSize:null!=(a=N.props.fontSize)?a:z}),ownerState:I,classes:D,name:T,checked:E,onChange:O,ref:r,className:(0,i.Z)(D.root,q)},L))}))},10765:function(e,r,o){o.d(r,{Z:function(){return P}});var a=o(29439),n=o(87462),t=o(63366),l=o(72791),i=o(28182),c=o(94419),s=o(66934),u=o(31402),d=o(75878),m=o(21217);function f(e){return(0,m.Z)("MuiFormGroup",e)}(0,d.Z)("MuiFormGroup",["root","row","error"]);var p=o(52930),v=o(76147),Z=o(80184),h=["className","row"],b=(0,s.ZP)("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:function(e,r){var o=e.ownerState;return[r.root,o.row&&r.row]}})((function(e){var r=e.ownerState;return(0,n.Z)({display:"flex",flexDirection:"column",flexWrap:"wrap"},r.row&&{flexDirection:"row"})})),g=l.forwardRef((function(e,r){var o=(0,u.Z)({props:e,name:"MuiFormGroup"}),a=o.className,l=o.row,s=void 0!==l&&l,d=(0,t.Z)(o,h),m=(0,p.Z)(),g=(0,v.Z)({props:o,muiFormControl:m,states:["error"]}),w=(0,n.Z)({},o,{row:s,error:g.error}),C=function(e){var r=e.classes,o={root:["root",e.row&&"row",e.error&&"error"]};return(0,c.Z)(o,f,r)}(w);return(0,Z.jsx)(b,(0,n.Z)({className:(0,i.Z)(C.root,a),ownerState:w,ref:r},d))})),w=o(42071),C=o(98278),k=o(18672),S=o(67384),x=["actions","children","defaultValue","name","onChange","value"],P=l.forwardRef((function(e,r){var o=e.actions,i=e.children,c=e.defaultValue,s=e.name,u=e.onChange,d=e.value,m=(0,t.Z)(e,x),f=l.useRef(null),p=(0,C.Z)({controlled:d,default:c,name:"RadioGroup"}),v=(0,a.Z)(p,2),h=v[0],b=v[1];l.useImperativeHandle(o,(function(){return{focus:function(){var e=f.current.querySelector("input:not(:disabled):checked");e||(e=f.current.querySelector("input:not(:disabled)")),e&&e.focus()}}}),[]);var P=(0,w.Z)(r,f),y=(0,S.Z)(s),R=l.useMemo((function(){return{name:y,onChange:function(e){b(e.target.value),u&&u(e,e.target.value)},value:h}}),[y,u,b,h]);return(0,Z.jsx)(k.Z.Provider,{value:R,children:(0,Z.jsx)(g,(0,n.Z)({role:"radiogroup",ref:P},m,{children:i}))})}))},18672:function(e,r,o){var a=o(72791).createContext(void 0);r.Z=a}}]);
+//# sourceMappingURL=1520.af5d5afd.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1520.af5d5afd.chunk.js.map b/portal-ui/build/static/js/1520.af5d5afd.chunk.js.map
new file mode 100644
index 000000000..e4e3508b0
--- /dev/null
+++ b/portal-ui/build/static/js/1520.af5d5afd.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/1520.af5d5afd.chunk.js","mappings":"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","sources":["../node_modules/@mui/material/FormControlLabel/formControlLabelClasses.js","../node_modules/@mui/material/FormControlLabel/FormControlLabel.js","../node_modules/@mui/material/internal/svg-icons/RadioButtonUnchecked.js","../node_modules/@mui/material/internal/svg-icons/RadioButtonChecked.js","../node_modules/@mui/material/Radio/RadioButtonIcon.js","../node_modules/@mui/material/Radio/radioClasses.js","../node_modules/@mui/material/Radio/Radio.js","../node_modules/@mui/material/RadioGroup/useRadioGroup.js","../node_modules/@mui/material/FormGroup/formGroupClasses.js","../node_modules/@mui/material/FormGroup/FormGroup.js","../node_modules/@mui/material/RadioGroup/RadioGroup.js","../node_modules/@mui/material/RadioGroup/RadioGroupContext.js"],"sourcesContent":["import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getFormControlLabelUtilityClasses(slot) {\n return generateUtilityClass('MuiFormControlLabel', slot);\n}\nconst formControlLabelClasses = generateUtilityClasses('MuiFormControlLabel', ['root', 'labelPlacementStart', 'labelPlacementTop', 'labelPlacementBottom', 'disabled', 'label', 'error', 'required', 'asterisk']);\nexport default formControlLabelClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"checked\", \"className\", \"componentsProps\", \"control\", \"disabled\", \"disableTypography\", \"inputRef\", \"label\", \"labelPlacement\", \"name\", \"onChange\", \"required\", \"slotProps\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { useFormControl } from '../FormControl';\nimport Typography from '../Typography';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport formControlLabelClasses, { getFormControlLabelUtilityClasses } from './formControlLabelClasses';\nimport formControlState from '../FormControl/formControlState';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disabled,\n labelPlacement,\n error,\n required\n } = ownerState;\n const slots = {\n root: ['root', disabled && 'disabled', `labelPlacement${capitalize(labelPlacement)}`, error && 'error', required && 'required'],\n label: ['label', disabled && 'disabled'],\n asterisk: ['asterisk', error && 'error']\n };\n return composeClasses(slots, getFormControlLabelUtilityClasses, classes);\n};\nexport const FormControlLabelRoot = styled('label', {\n name: 'MuiFormControlLabel',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${formControlLabelClasses.label}`]: styles.label\n }, styles.root, styles[`labelPlacement${capitalize(ownerState.labelPlacement)}`]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'inline-flex',\n alignItems: 'center',\n cursor: 'pointer',\n // For correct alignment with the text.\n verticalAlign: 'middle',\n WebkitTapHighlightColor: 'transparent',\n marginLeft: -11,\n marginRight: 16,\n // used for row presentation of radio/checkbox\n [`&.${formControlLabelClasses.disabled}`]: {\n cursor: 'default'\n }\n}, ownerState.labelPlacement === 'start' && {\n flexDirection: 'row-reverse',\n marginLeft: 16,\n // used for row presentation of radio/checkbox\n marginRight: -11\n}, ownerState.labelPlacement === 'top' && {\n flexDirection: 'column-reverse',\n marginLeft: 16\n}, ownerState.labelPlacement === 'bottom' && {\n flexDirection: 'column',\n marginLeft: 16\n}, {\n [`& .${formControlLabelClasses.label}`]: {\n [`&.${formControlLabelClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n }\n }\n}));\nconst AsteriskComponent = styled('span', {\n name: 'MuiFormControlLabel',\n slot: 'Asterisk',\n overridesResolver: (props, styles) => styles.asterisk\n})(({\n theme\n}) => ({\n [`&.${formControlLabelClasses.error}`]: {\n color: (theme.vars || theme).palette.error.main\n }\n}));\n\n/**\n * Drop-in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\nconst FormControlLabel = /*#__PURE__*/React.forwardRef(function FormControlLabel(inProps, ref) {\n var _ref, _slotProps$typography;\n const props = useThemeProps({\n props: inProps,\n name: 'MuiFormControlLabel'\n });\n const {\n className,\n componentsProps = {},\n control,\n disabled: disabledProp,\n disableTypography,\n label: labelProp,\n labelPlacement = 'end',\n required: requiredProp,\n slotProps = {}\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl();\n const disabled = (_ref = disabledProp != null ? disabledProp : control.props.disabled) != null ? _ref : muiFormControl == null ? void 0 : muiFormControl.disabled;\n const required = requiredProp != null ? requiredProp : control.props.required;\n const controlProps = {\n disabled,\n required\n };\n ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(key => {\n if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n controlProps[key] = props[key];\n }\n });\n const fcs = formControlState({\n props,\n muiFormControl,\n states: ['error']\n });\n const ownerState = _extends({}, props, {\n disabled,\n labelPlacement,\n required,\n error: fcs.error\n });\n const classes = useUtilityClasses(ownerState);\n const typographySlotProps = (_slotProps$typography = slotProps.typography) != null ? _slotProps$typography : componentsProps.typography;\n let label = labelProp;\n if (label != null && label.type !== Typography && !disableTypography) {\n label = /*#__PURE__*/_jsx(Typography, _extends({\n component: \"span\"\n }, typographySlotProps, {\n className: clsx(classes.label, typographySlotProps == null ? void 0 : typographySlotProps.className),\n children: label\n }));\n }\n return /*#__PURE__*/_jsxs(FormControlLabelRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other, {\n children: [/*#__PURE__*/React.cloneElement(control, controlProps), label, required && /*#__PURE__*/_jsxs(AsteriskComponent, {\n ownerState: ownerState,\n \"aria-hidden\": true,\n className: classes.asterisk,\n children: [\"\\u2009\", '*']\n })]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControlLabel.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * If `true`, the component appears selected.\n */\n checked: PropTypes.bool,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The props used for each slot inside.\n * @default {}\n */\n componentsProps: PropTypes.shape({\n typography: PropTypes.object\n }),\n /**\n * A control element. For instance, it can be a `Radio`, a `Switch` or a `Checkbox`.\n */\n control: PropTypes.element.isRequired,\n /**\n * If `true`, the control is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the label is rendered as it is passed without an additional typography node.\n */\n disableTypography: PropTypes.bool,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * A text or an element to be used in an enclosing label element.\n */\n label: PropTypes.node,\n /**\n * The position of the label.\n * @default 'end'\n */\n labelPlacement: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n /**\n * @ignore\n */\n name: PropTypes.string,\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * If `true`, the label will indicate that the `input` is required.\n */\n required: PropTypes.bool,\n /**\n * The props used for each slot inside.\n * @default {}\n */\n slotProps: PropTypes.shape({\n typography: PropTypes.object\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the component.\n */\n value: PropTypes.any\n} : void 0;\nexport default FormControlLabel;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'RadioButtonUnchecked');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z\"\n}), 'RadioButtonChecked');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport RadioButtonUncheckedIcon from '../internal/svg-icons/RadioButtonUnchecked';\nimport RadioButtonCheckedIcon from '../internal/svg-icons/RadioButtonChecked';\nimport styled from '../styles/styled';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst RadioButtonIconRoot = styled('span')({\n position: 'relative',\n display: 'flex'\n});\nconst RadioButtonIconBackground = styled(RadioButtonUncheckedIcon)({\n // Scale applied to prevent dot misalignment in Safari\n transform: 'scale(1)'\n});\nconst RadioButtonIconDot = styled(RadioButtonCheckedIcon)(({\n theme,\n ownerState\n}) => _extends({\n left: 0,\n position: 'absolute',\n transform: 'scale(0)',\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeIn,\n duration: theme.transitions.duration.shortest\n })\n}, ownerState.checked && {\n transform: 'scale(1)',\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.shortest\n })\n}));\n\n/**\n * @ignore - internal component.\n */\nfunction RadioButtonIcon(props) {\n const {\n checked = false,\n classes = {},\n fontSize\n } = props;\n const ownerState = _extends({}, props, {\n checked\n });\n return /*#__PURE__*/_jsxs(RadioButtonIconRoot, {\n className: classes.root,\n ownerState: ownerState,\n children: [/*#__PURE__*/_jsx(RadioButtonIconBackground, {\n fontSize: fontSize,\n className: classes.background,\n ownerState: ownerState\n }), /*#__PURE__*/_jsx(RadioButtonIconDot, {\n fontSize: fontSize,\n className: classes.dot,\n ownerState: ownerState\n })]\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? RadioButtonIcon.propTypes = {\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n /**\n * The size of the component.\n * `small` is equivalent to the dense radio styling.\n */\n fontSize: PropTypes.oneOf(['small', 'medium'])\n} : void 0;\nexport default RadioButtonIcon;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getRadioUtilityClass(slot) {\n return generateUtilityClass('MuiRadio', slot);\n}\nconst radioClasses = generateUtilityClasses('MuiRadio', ['root', 'checked', 'disabled', 'colorPrimary', 'colorSecondary']);\nexport default radioClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"checked\", \"checkedIcon\", \"color\", \"icon\", \"name\", \"onChange\", \"size\", \"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport SwitchBase from '../internal/SwitchBase';\nimport useThemeProps from '../styles/useThemeProps';\nimport RadioButtonIcon from './RadioButtonIcon';\nimport capitalize from '../utils/capitalize';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport useRadioGroup from '../RadioGroup/useRadioGroup';\nimport radioClasses, { getRadioUtilityClass } from './radioClasses';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n color\n } = ownerState;\n const slots = {\n root: ['root', `color${capitalize(color)}`]\n };\n return _extends({}, classes, composeClasses(slots, getRadioUtilityClass, classes));\n};\nconst RadioRoot = styled(SwitchBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiRadio',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n color: (theme.vars || theme).palette.text.secondary\n}, !ownerState.disableRipple && {\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${ownerState.color === 'default' ? theme.vars.palette.action.activeChannel : theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(ownerState.color === 'default' ? theme.palette.action.active : theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${radioClasses.checked}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main\n }\n}, {\n [`&.${radioClasses.disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n}));\nfunction areEqualValues(a, b) {\n if (typeof b === 'object' && b !== null) {\n return a === b;\n }\n\n // The value could be a number, the DOM will stringify it anyway.\n return String(a) === String(b);\n}\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(RadioButtonIcon, {\n checked: true\n});\nconst defaultIcon = /*#__PURE__*/_jsx(RadioButtonIcon, {});\nconst Radio = /*#__PURE__*/React.forwardRef(function Radio(inProps, ref) {\n var _defaultIcon$props$fo, _defaultCheckedIcon$p;\n const props = useThemeProps({\n props: inProps,\n name: 'MuiRadio'\n });\n const {\n checked: checkedProp,\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon = defaultIcon,\n name: nameProp,\n onChange: onChangeProp,\n size = 'medium',\n className\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n color,\n size\n });\n const classes = useUtilityClasses(ownerState);\n const radioGroup = useRadioGroup();\n let checked = checkedProp;\n const onChange = createChainedFunction(onChangeProp, radioGroup && radioGroup.onChange);\n let name = nameProp;\n if (radioGroup) {\n if (typeof checked === 'undefined') {\n checked = areEqualValues(radioGroup.value, props.value);\n }\n if (typeof name === 'undefined') {\n name = radioGroup.name;\n }\n }\n return /*#__PURE__*/_jsx(RadioRoot, _extends({\n type: \"radio\",\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: (_defaultIcon$props$fo = defaultIcon.props.fontSize) != null ? _defaultIcon$props$fo : size\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(checkedIcon, {\n fontSize: (_defaultCheckedIcon$p = defaultCheckedIcon.props.fontSize) != null ? _defaultCheckedIcon$p : size\n }),\n ownerState: ownerState,\n classes: classes,\n name: name,\n checked: checked,\n onChange: onChange,\n ref: ref,\n className: clsx(classes.root, className)\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Radio.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * The icon to display when the component is checked.\n * @default \n */\n checkedIcon: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the ripple effect is disabled.\n * @default false\n */\n disableRipple: PropTypes.bool,\n /**\n * The icon to display when the component is unchecked.\n * @default \n */\n icon: PropTypes.node,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * Name attribute of the `input` element.\n */\n name: PropTypes.string,\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (string).\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * If `true`, the `input` element is required.\n * @default false\n */\n required: PropTypes.bool,\n /**\n * The size of the component.\n * `small` is equivalent to the dense radio styling.\n * @default 'medium'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the component. The DOM API casts this to a string.\n */\n value: PropTypes.any\n} : void 0;\nexport default Radio;","import * as React from 'react';\nimport RadioGroupContext from './RadioGroupContext';\nexport default function useRadioGroup() {\n return React.useContext(RadioGroupContext);\n}","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getFormGroupUtilityClass(slot) {\n return generateUtilityClass('MuiFormGroup', slot);\n}\nconst formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row', 'error']);\nexport default formGroupClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"row\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getFormGroupUtilityClass } from './formGroupClasses';\nimport useFormControl from '../FormControl/useFormControl';\nimport formControlState from '../FormControl/formControlState';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n row,\n error\n } = ownerState;\n const slots = {\n root: ['root', row && 'row', error && 'error']\n };\n return composeClasses(slots, getFormGroupUtilityClass, classes);\n};\nconst FormGroupRoot = styled('div', {\n name: 'MuiFormGroup',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.row && styles.row];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap'\n}, ownerState.row && {\n flexDirection: 'row'\n}));\n\n/**\n * `FormGroup` wraps controls such as `Checkbox` and `Switch`.\n * It provides compact row layout.\n * For the `Radio`, you should be using the `RadioGroup` component instead of this one.\n */\nconst FormGroup = /*#__PURE__*/React.forwardRef(function FormGroup(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiFormGroup'\n });\n const {\n className,\n row = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl();\n const fcs = formControlState({\n props,\n muiFormControl,\n states: ['error']\n });\n const ownerState = _extends({}, props, {\n row,\n error: fcs.error\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(FormGroupRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormGroup.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * Display group of elements in a compact row.\n * @default false\n */\n row: PropTypes.bool,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"actions\", \"children\", \"defaultValue\", \"name\", \"onChange\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport FormGroup from '../FormGroup';\nimport useForkRef from '../utils/useForkRef';\nimport useControlled from '../utils/useControlled';\nimport RadioGroupContext from './RadioGroupContext';\nimport useId from '../utils/useId';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {\n const {\n // private\n // eslint-disable-next-line react/prop-types\n actions,\n children,\n defaultValue,\n name: nameProp,\n onChange,\n value: valueProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const rootRef = React.useRef(null);\n const [value, setValueState] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: 'RadioGroup'\n });\n React.useImperativeHandle(actions, () => ({\n focus: () => {\n let input = rootRef.current.querySelector('input:not(:disabled):checked');\n if (!input) {\n input = rootRef.current.querySelector('input:not(:disabled)');\n }\n if (input) {\n input.focus();\n }\n }\n }), []);\n const handleRef = useForkRef(ref, rootRef);\n const name = useId(nameProp);\n const contextValue = React.useMemo(() => ({\n name,\n onChange(event) {\n setValueState(event.target.value);\n if (onChange) {\n onChange(event, event.target.value);\n }\n },\n value\n }), [name, onChange, setValueState, value]);\n return /*#__PURE__*/_jsx(RadioGroupContext.Provider, {\n value: contextValue,\n children: /*#__PURE__*/_jsx(FormGroup, _extends({\n role: \"radiogroup\",\n ref: handleRef\n }, other, {\n children: children\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? RadioGroup.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue: PropTypes.any,\n /**\n * The name used to reference the value of the control.\n * If you don't provide this prop, it falls back to a randomly generated name.\n */\n name: PropTypes.string,\n /**\n * Callback fired when a radio button is selected.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * @param {string} value The value of the selected radio button.\n * You can pull out the new value by accessing `event.target.value` (string).\n */\n onChange: PropTypes.func,\n /**\n * Value of the selected radio button. The DOM API casts this to a string.\n */\n value: PropTypes.any\n} : void 0;\nexport default RadioGroup;","import * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst RadioGroupContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n RadioGroupContext.displayName = 'RadioGroupContext';\n}\nexport default RadioGroupContext;"],"names":["getFormControlLabelUtilityClasses","slot","generateUtilityClass","generateUtilityClasses","_excluded","FormControlLabelRoot","styled","name","overridesResolver","props","styles","ownerState","_defineProperty","concat","formControlLabelClasses","label","root","capitalize","labelPlacement","_ref3","theme","_extends","display","alignItems","cursor","verticalAlign","WebkitTapHighlightColor","marginLeft","marginRight","disabled","flexDirection","color","vars","palette","text","AsteriskComponent","asterisk","_ref4","error","main","React","inProps","ref","_ref","_slotProps$typography","useThemeProps","className","_props$componentsProp","componentsProps","control","disabledProp","disableTypography","labelProp","_props$labelPlacement","requiredProp","required","_props$slotProps","slotProps","other","_objectWithoutPropertiesLoose","muiFormControl","useFormControl","controlProps","forEach","key","fcs","formControlState","states","classes","slots","composeClasses","useUtilityClasses","typographySlotProps","typography","type","Typography","_jsx","component","clsx","children","_jsxs","createSvgIcon","d","RadioButtonIconRoot","position","RadioButtonIconBackground","RadioButtonUncheckedIcon","transform","RadioButtonIconDot","RadioButtonCheckedIcon","left","transition","transitions","create","easing","easeIn","duration","shortest","checked","easeOut","_props$checked","_props$classes","fontSize","background","dot","getRadioUtilityClass","RadioRoot","SwitchBase","shouldForwardProp","prop","rootShouldForwardProp","secondary","disableRipple","backgroundColor","action","activeChannel","mainChannel","hoverOpacity","alpha","active","radioClasses","defaultCheckedIcon","RadioButtonIcon","defaultIcon","_defaultIcon$props$fo","_defaultCheckedIcon$p","a","b","checkedProp","_props$checkedIcon","checkedIcon","_props$color","_props$icon","icon","nameProp","onChangeProp","onChange","_props$size","size","radioGroup","RadioGroupContext","createChainedFunction","value","String","getFormGroupUtilityClass","FormGroupRoot","row","flexWrap","_props$row","actions","defaultValue","valueProp","rootRef","_useControlled","useControlled","controlled","default","_useControlled2","_slicedToArray","setValueState","focus","input","current","querySelector","handleRef","useForkRef","useId","contextValue","event","target","Provider","FormGroup","role","undefined"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1569.eb3c10a7.chunk.js b/portal-ui/build/static/js/1569.eb3c10a7.chunk.js
new file mode 100644
index 000000000..7da959fb1
--- /dev/null
+++ b/portal-ui/build/static/js/1569.eb3c10a7.chunk.js
@@ -0,0 +1,2 @@
+(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1569,4882,7981,9581,6662,222],{3579:function(e,t,r){"use strict";var n=r(64836);t.Z=void 0;var o=n(r(45649)),a=r(80184),i=(0,o.default)((0,a.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"RemoveRedEye");t.Z=i},20165:function(e,t,r){"use strict";var n=r(64836);t.Z=void 0;var o=n(r(45649)),a=r(80184),i=(0,o.default)((0,a.jsx)("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");t.Z=i},45649:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return n.createSvgIcon}});var n=r(28610)},93840:function(e,t,r){"use strict";var n=r(72791).createContext(void 0);t.Z=n},76147:function(e,t,r){"use strict";function n(e){var t=e.props,r=e.states,n=e.muiFormControl;return r.reduce((function(e,r){return e[r]=t[r],n&&"undefined"===typeof t[r]&&(e[r]=n[r]),e}),{})}r.d(t,{Z:function(){return n}})},52930:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});var n=r(72791),o=r(93840);function a(){return n.useContext(o.Z)}},17133:function(e,t,r){"use strict";var n=r(4942),o=r(63366),a=r(87462),i=r(72791),c=r(28182),s=r(94419),l=r(76147),u=r(52930),d=r(14036),f=r(31402),p=r(66934),m=r(10843),h=r(80184),v=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,p.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:function(e,t){var r=e.ownerState;return(0,a.Z)({},t.root,"secondary"===r.color&&t.colorSecondary,r.filled&&t.filled)}})((function(e){var t,r=e.theme,o=e.ownerState;return(0,a.Z)({color:(r.vars||r).palette.text.secondary},r.typography.body1,(t={lineHeight:"1.4375em",padding:0,position:"relative"},(0,n.Z)(t,"&.".concat(m.Z.focused),{color:(r.vars||r).palette[o.color].main}),(0,n.Z)(t,"&.".concat(m.Z.disabled),{color:(r.vars||r).palette.text.disabled}),(0,n.Z)(t,"&.".concat(m.Z.error),{color:(r.vars||r).palette.error.main}),t))})),b=(0,p.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:function(e,t){return t.asterisk}})((function(e){var t=e.theme;return(0,n.Z)({},"&.".concat(m.Z.error),{color:(t.vars||t).palette.error.main})})),g=i.forwardRef((function(e,t){var r=(0,f.Z)({props:e,name:"MuiFormLabel"}),n=r.children,i=r.className,p=r.component,g=void 0===p?"label":p,k=(0,o.Z)(r,v),x=(0,u.Z)(),w=(0,l.Z)({props:r,muiFormControl:x,states:["color","required","focused","disabled","error","filled"]}),S=(0,a.Z)({},r,{color:w.color||"primary",component:g,disabled:w.disabled,error:w.error,filled:w.filled,focused:w.focused,required:w.required}),y=function(e){var t=e.classes,r=e.color,n=e.focused,o=e.disabled,a=e.error,i=e.filled,c=e.required,l={root:["root","color".concat((0,d.Z)(r)),o&&"disabled",a&&"error",i&&"filled",n&&"focused",c&&"required"],asterisk:["asterisk",a&&"error"]};return(0,s.Z)(l,m.M,t)}(S);return(0,h.jsxs)(Z,(0,a.Z)({as:g,ownerState:S,className:(0,c.Z)(y.root,i),ref:t},k,{children:[n,w.required&&(0,h.jsxs)(b,{ownerState:S,"aria-hidden":!0,className:y.asterisk,children:["\u2009","*"]})]}))}));t.Z=g},10843:function(e,t,r){"use strict";r.d(t,{M:function(){return a}});var n=r(75878),o=r(21217);function a(e){return(0,o.Z)("MuiFormLabel",e)}var i=(0,n.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);t.Z=i},30829:function(e,t,r){"use strict";r.d(t,{Z:function(){return x}});var n=r(4942),o=r(63366),a=r(87462),i=r(72791),c=r(94419),s=r(28182),l=r(76147),u=r(52930),d=r(17133),f=r(10843),p=r(31402),m=r(66934),h=r(75878),v=r(21217);function Z(e){return(0,v.Z)("MuiInputLabel",e)}(0,h.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);var b=r(80184),g=["disableAnimation","margin","shrink","variant","className"],k=(0,m.ZP)(d.Z,{shouldForwardProp:function(e){return(0,m.FO)(e)||"classes"===e},name:"MuiInputLabel",slot:"Root",overridesResolver:function(e,t){var r=e.ownerState;return[(0,n.Z)({},"& .".concat(f.Z.asterisk),t.asterisk),t.root,r.formControl&&t.formControl,"small"===r.size&&t.sizeSmall,r.shrink&&t.shrink,!r.disableAnimation&&t.animated,t[r.variant]]}})((function(e){var t=e.theme,r=e.ownerState;return(0,a.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},r.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===r.size&&{transform:"translate(0, 17px) scale(1)"},r.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!r.disableAnimation&&{transition:t.transitions.create(["color","transform","max-width"],{duration:t.transitions.duration.shorter,easing:t.transitions.easing.easeOut})},"filled"===r.variant&&(0,a.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===r.size&&{transform:"translate(12px, 13px) scale(1)"},r.shrink&&(0,a.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===r.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===r.variant&&(0,a.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===r.size&&{transform:"translate(14px, 9px) scale(1)"},r.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"}))})),x=i.forwardRef((function(e,t){var r=(0,p.Z)({name:"MuiInputLabel",props:e}),n=r.disableAnimation,i=void 0!==n&&n,d=r.shrink,f=r.className,m=(0,o.Z)(r,g),h=(0,u.Z)(),v=d;"undefined"===typeof v&&h&&(v=h.filled||h.focused||h.adornedStart);var x=(0,l.Z)({props:r,muiFormControl:h,states:["size","variant","required"]}),w=(0,a.Z)({},r,{disableAnimation:i,formControl:h,shrink:v,size:x.size,variant:x.variant,required:x.required}),S=function(e){var t=e.classes,r=e.formControl,n=e.size,o=e.shrink,i={root:["root",r&&"formControl",!e.disableAnimation&&"animated",o&&"shrink","small"===n&&"sizeSmall",e.variant],asterisk:[e.required&&"asterisk"]},s=(0,c.Z)(i,Z,t);return(0,a.Z)({},t,s)}(w);return(0,b.jsx)(k,(0,a.Z)({"data-shrink":v,ownerState:w,ref:t,className:(0,s.Z)(S.root,f)},m,{classes:S}))}))},9955:function(e,t,r){"use strict";r.d(t,{Z:function(){return y}});var n=r(4942),o=r(63366),a=r(87462),i=r(72791),c=r(28182),s=r(94419),l=r(12065),u=r(14036),d=r(97278),f=r(31402),p=r(66934),m=r(75878),h=r(21217);function v(e){return(0,h.Z)("MuiSwitch",e)}var Z=(0,m.Z)("MuiSwitch",["root","edgeStart","edgeEnd","switchBase","colorPrimary","colorSecondary","sizeSmall","sizeMedium","checked","disabled","input","thumb","track"]),b=r(80184),g=["className","color","edge","size","sx"],k=(0,p.ZP)("span",{name:"MuiSwitch",slot:"Root",overridesResolver:function(e,t){var r=e.ownerState;return[t.root,r.edge&&t["edge".concat((0,u.Z)(r.edge))],t["size".concat((0,u.Z)(r.size))]]}})((function(e){var t,r=e.ownerState;return(0,a.Z)({display:"inline-flex",width:58,height:38,overflow:"hidden",padding:12,boxSizing:"border-box",position:"relative",flexShrink:0,zIndex:0,verticalAlign:"middle","@media print":{colorAdjust:"exact"}},"start"===r.edge&&{marginLeft:-8},"end"===r.edge&&{marginRight:-8},"small"===r.size&&(t={width:40,height:24,padding:7},(0,n.Z)(t,"& .".concat(Z.thumb),{width:16,height:16}),(0,n.Z)(t,"& .".concat(Z.switchBase),(0,n.Z)({padding:4},"&.".concat(Z.checked),{transform:"translateX(16px)"})),t))})),x=(0,p.ZP)(d.Z,{name:"MuiSwitch",slot:"SwitchBase",overridesResolver:function(e,t){var r=e.ownerState;return[t.switchBase,(0,n.Z)({},"& .".concat(Z.input),t.input),"default"!==r.color&&t["color".concat((0,u.Z)(r.color))]]}})((function(e){var t,r=e.theme;return t={position:"absolute",top:0,left:0,zIndex:1,color:r.vars?r.vars.palette.Switch.defaultColor:"".concat("light"===r.palette.mode?r.palette.common.white:r.palette.grey[300]),transition:r.transitions.create(["left","transform"],{duration:r.transitions.duration.shortest})},(0,n.Z)(t,"&.".concat(Z.checked),{transform:"translateX(20px)"}),(0,n.Z)(t,"&.".concat(Z.disabled),{color:r.vars?r.vars.palette.Switch.defaultDisabledColor:"".concat("light"===r.palette.mode?r.palette.grey[100]:r.palette.grey[600])}),(0,n.Z)(t,"&.".concat(Z.checked," + .").concat(Z.track),{opacity:.5}),(0,n.Z)(t,"&.".concat(Z.disabled," + .").concat(Z.track),{opacity:r.vars?r.vars.opacity.switchTrackDisabled:"".concat("light"===r.palette.mode?.12:.2)}),(0,n.Z)(t,"& .".concat(Z.input),{left:"-100%",width:"300%"}),t}),(function(e){var t,r=e.theme,o=e.ownerState;return(0,a.Z)({"&:hover":{backgroundColor:r.vars?"rgba(".concat(r.vars.palette.action.activeChannel," / ").concat(r.vars.palette.action.hoverOpacity,")"):(0,l.Fq)(r.palette.action.active,r.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==o.color&&(t={},(0,n.Z)(t,"&.".concat(Z.checked),(0,n.Z)({color:(r.vars||r).palette[o.color].main,"&:hover":{backgroundColor:r.vars?"rgba(".concat(r.vars.palette[o.color].mainChannel," / ").concat(r.vars.palette.action.hoverOpacity,")"):(0,l.Fq)(r.palette[o.color].main,r.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"&.".concat(Z.disabled),{color:r.vars?r.vars.palette.Switch["".concat(o.color,"DisabledColor")]:"".concat("light"===r.palette.mode?(0,l.$n)(r.palette[o.color].main,.62):(0,l._j)(r.palette[o.color].main,.55))})),(0,n.Z)(t,"&.".concat(Z.checked," + .").concat(Z.track),{backgroundColor:(r.vars||r).palette[o.color].main}),t))})),w=(0,p.ZP)("span",{name:"MuiSwitch",slot:"Track",overridesResolver:function(e,t){return t.track}})((function(e){var t=e.theme;return{height:"100%",width:"100%",borderRadius:7,zIndex:-1,transition:t.transitions.create(["opacity","background-color"],{duration:t.transitions.duration.shortest}),backgroundColor:t.vars?t.vars.palette.common.onBackground:"".concat("light"===t.palette.mode?t.palette.common.black:t.palette.common.white),opacity:t.vars?t.vars.opacity.switchTrack:"".concat("light"===t.palette.mode?.38:.3)}})),S=(0,p.ZP)("span",{name:"MuiSwitch",slot:"Thumb",overridesResolver:function(e,t){return t.thumb}})((function(e){var t=e.theme;return{boxShadow:(t.vars||t).shadows[1],backgroundColor:"currentColor",width:20,height:20,borderRadius:"50%"}})),y=i.forwardRef((function(e,t){var r=(0,f.Z)({props:e,name:"MuiSwitch"}),n=r.className,i=r.color,l=void 0===i?"primary":i,d=r.edge,p=void 0!==d&&d,m=r.size,h=void 0===m?"medium":m,Z=r.sx,y=(0,o.Z)(r,g),C=(0,a.Z)({},r,{color:l,edge:p,size:h}),z=function(e){var t=e.classes,r=e.edge,n=e.size,o=e.color,i=e.checked,c=e.disabled,l={root:["root",r&&"edge".concat((0,u.Z)(r)),"size".concat((0,u.Z)(n))],switchBase:["switchBase","color".concat((0,u.Z)(o)),i&&"checked",c&&"disabled"],thumb:["thumb"],track:["track"],input:["input"]},d=(0,s.Z)(l,v,t);return(0,a.Z)({},t,d)}(C),R=(0,b.jsx)(S,{className:z.thumb,ownerState:C});return(0,b.jsxs)(k,{className:(0,c.Z)(z.root,n),sx:Z,ownerState:C,children:[(0,b.jsx)(x,(0,a.Z)({type:"checkbox",icon:R,checkedIcon:R,ref:t,ownerState:C},y,{classes:(0,a.Z)({},z,{root:z.switchBase})})),(0,b.jsx)(w,{className:z.track,ownerState:C})]})}))},97278:function(e,t,r){"use strict";r.d(t,{Z:function(){return x}});var n=r(29439),o=r(63366),a=r(87462),i=r(72791),c=r(28182),s=r(94419),l=r(14036),u=r(66934),d=r(98278),f=r(52930),p=r(95080),m=r(75878),h=r(21217);function v(e){return(0,h.Z)("PrivateSwitchBase",e)}(0,m.Z)("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]);var Z=r(80184),b=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],g=(0,u.ZP)(p.Z)((function(e){var t=e.ownerState;return(0,a.Z)({padding:9,borderRadius:"50%"},"start"===t.edge&&{marginLeft:"small"===t.size?-3:-12},"end"===t.edge&&{marginRight:"small"===t.size?-3:-12})})),k=(0,u.ZP)("input")({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),x=i.forwardRef((function(e,t){var r=e.autoFocus,i=e.checked,u=e.checkedIcon,p=e.className,m=e.defaultChecked,h=e.disabled,x=e.disableFocusRipple,w=void 0!==x&&x,S=e.edge,y=void 0!==S&&S,C=e.icon,z=e.id,R=e.inputProps,M=e.inputRef,F=e.name,I=e.onBlur,P=e.onChange,q=e.onFocus,N=e.readOnly,B=e.required,O=void 0!==B&&B,j=e.tabIndex,E=e.type,L=e.value,_=(0,o.Z)(e,b),A=(0,d.Z)({controlled:i,default:Boolean(m),name:"SwitchBase",state:"checked"}),W=(0,n.Z)(A,2),T=W[0],D=W[1],V=(0,f.Z)(),X=h;V&&"undefined"===typeof X&&(X=V.disabled);var G="checkbox"===E||"radio"===E,H=(0,a.Z)({},e,{checked:T,disabled:X,disableFocusRipple:w,edge:y}),$=function(e){var t=e.classes,r=e.checked,n=e.disabled,o=e.edge,a={root:["root",r&&"checked",n&&"disabled",o&&"edge".concat((0,l.Z)(o))],input:["input"]};return(0,s.Z)(a,v,t)}(H);return(0,Z.jsxs)(g,(0,a.Z)({component:"span",className:(0,c.Z)($.root,p),centerRipple:!0,focusRipple:!w,disabled:X,tabIndex:null,role:void 0,onFocus:function(e){q&&q(e),V&&V.onFocus&&V.onFocus(e)},onBlur:function(e){I&&I(e),V&&V.onBlur&&V.onBlur(e)},ownerState:H,ref:t},_,{children:[(0,Z.jsx)(k,(0,a.Z)({autoFocus:r,checked:i,defaultChecked:m,className:$.input,disabled:X,id:G?z:void 0,name:F,onChange:function(e){if(!e.nativeEvent.defaultPrevented){var t=e.target.checked;D(t),P&&P(e,t)}},readOnly:N,ref:M,required:O,ownerState:H,tabIndex:j,type:E},"checkbox"===E&&void 0===L?{}:{value:L},R)),T?u:C]}))}))},31260:function(e,t,r){"use strict";var n=r(78949);t.Z=n.Z},28610:function(e,t,r){"use strict";r.r(t),r.d(t,{capitalize:function(){return o.Z},createChainedFunction:function(){return a.Z},createSvgIcon:function(){return i.Z},debounce:function(){return c.Z},deprecatedPropType:function(){return s},isMuiElement:function(){return l.Z},ownerDocument:function(){return u.Z},ownerWindow:function(){return d.Z},requirePropFactory:function(){return f},setRef:function(){return p},unstable_ClassNameGenerator:function(){return x},unstable_useEnhancedEffect:function(){return m.Z},unstable_useId:function(){return h.Z},unsupportedProp:function(){return v},useControlled:function(){return Z.Z},useEventCallback:function(){return b.Z},useForkRef:function(){return g.Z},useIsFocusVisible:function(){return k.Z}});var n=r(55902),o=r(14036),a=r(31260),i=r(76189),c=r(83199);var s=function(e,t){return function(){return null}},l=r(19103),u=r(98301),d=r(17602);r(87462);var f=function(e,t){return function(){return null}},p=r(62971).Z,m=r(40162),h=r(67384);var v=function(e,t,r,n,o){return null},Z=r(98278),b=r(89683),g=r(42071),k=r(23031),x={configure:function(e){n.Z.configure(e)}}},19103:function(e,t,r){"use strict";r.d(t,{Z:function(){return o}});var n=r(72791);var o=function(e,t){return n.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},78949:function(e,t,r){"use strict";function n(){for(var e=arguments.length,t=new Array(e),r=0;r {\n acc[state] = props[state];\n if (muiFormControl) {\n if (typeof props[state] === 'undefined') {\n acc[state] = muiFormControl[state];\n }\n }\n return acc;\n }, {});\n}","import * as React from 'react';\nimport FormControlContext from './FormControlContext';\nexport default function useFormControl() {\n return React.useContext(FormControlContext);\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"className\", \"color\", \"component\", \"disabled\", \"error\", \"filled\", \"focused\", \"required\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport formLabelClasses, { getFormLabelUtilityClasses } from './formLabelClasses';\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n color,\n focused,\n disabled,\n error,\n filled,\n required\n } = ownerState;\n const slots = {\n root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],\n asterisk: ['asterisk', error && 'error']\n };\n return composeClasses(slots, getFormLabelUtilityClasses, classes);\n};\nexport const FormLabelRoot = styled('label', {\n name: 'MuiFormLabel',\n slot: 'Root',\n overridesResolver: ({\n ownerState\n }, styles) => {\n return _extends({}, styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled);\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n color: (theme.vars || theme).palette.text.secondary\n}, theme.typography.body1, {\n lineHeight: '1.4375em',\n padding: 0,\n position: 'relative',\n [`&.${formLabelClasses.focused}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main\n },\n [`&.${formLabelClasses.disabled}`]: {\n color: (theme.vars || theme).palette.text.disabled\n },\n [`&.${formLabelClasses.error}`]: {\n color: (theme.vars || theme).palette.error.main\n }\n}));\nconst AsteriskComponent = styled('span', {\n name: 'MuiFormLabel',\n slot: 'Asterisk',\n overridesResolver: (props, styles) => styles.asterisk\n})(({\n theme\n}) => ({\n [`&.${formLabelClasses.error}`]: {\n color: (theme.vars || theme).palette.error.main\n }\n}));\nconst FormLabel = /*#__PURE__*/React.forwardRef(function FormLabel(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiFormLabel'\n });\n const {\n children,\n className,\n component = 'label'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl();\n const fcs = formControlState({\n props,\n muiFormControl,\n states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n });\n const ownerState = _extends({}, props, {\n color: fcs.color || 'primary',\n component,\n disabled: fcs.disabled,\n error: fcs.error,\n filled: fcs.filled,\n focused: fcs.focused,\n required: fcs.required\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(FormLabelRoot, _extends({\n as: component,\n ownerState: ownerState,\n className: clsx(classes.root, className),\n ref: ref\n }, other, {\n children: [children, fcs.required && /*#__PURE__*/_jsxs(AsteriskComponent, {\n ownerState: ownerState,\n \"aria-hidden\": true,\n className: classes.asterisk,\n children: [\"\\u2009\", '*']\n })]\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? FormLabel.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * If `true`, the label should be displayed in a disabled state.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the label is displayed in an error state.\n */\n error: PropTypes.bool,\n /**\n * If `true`, the label should use filled classes key.\n */\n filled: PropTypes.bool,\n /**\n * If `true`, the input of this label is focused (used by `FormGroup` components).\n */\n focused: PropTypes.bool,\n /**\n * If `true`, the label will indicate that the `input` is required.\n */\n required: PropTypes.bool,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormLabel;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getFormLabelUtilityClasses(slot) {\n return generateUtilityClass('MuiFormLabel', slot);\n}\nconst formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);\nexport default formLabelClasses;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getInputLabelUtilityClasses(slot) {\n return generateUtilityClass('MuiInputLabel', slot);\n}\nconst inputLabelClasses = generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);\nexport default inputLabelClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"disableAnimation\", \"margin\", \"shrink\", \"variant\", \"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport clsx from 'clsx';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport FormLabel, { formLabelClasses } from '../FormLabel';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport { getInputLabelUtilityClasses } from './inputLabelClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n formControl,\n size,\n shrink,\n disableAnimation,\n variant,\n required\n } = ownerState;\n const slots = {\n root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size === 'small' && 'sizeSmall', variant],\n asterisk: [required && 'asterisk']\n };\n const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);\n return _extends({}, classes, composedClasses);\n};\nconst InputLabelRoot = styled(FormLabel, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiInputLabel',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [{\n [`& .${formLabelClasses.asterisk}`]: styles.asterisk\n }, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, styles[ownerState.variant]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n display: 'block',\n transformOrigin: 'top left',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '100%'\n}, ownerState.formControl && {\n position: 'absolute',\n left: 0,\n top: 0,\n // slight alteration to spec spacing to match visual spec result\n transform: 'translate(0, 20px) scale(1)'\n}, ownerState.size === 'small' && {\n // Compensation for the `Input.inputSizeSmall` style.\n transform: 'translate(0, 17px) scale(1)'\n}, ownerState.shrink && {\n transform: 'translate(0, -1.5px) scale(0.75)',\n transformOrigin: 'top left',\n maxWidth: '133%'\n}, !ownerState.disableAnimation && {\n transition: theme.transitions.create(['color', 'transform', 'max-width'], {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut\n })\n}, ownerState.variant === 'filled' && _extends({\n // Chrome's autofill feature gives the input field a yellow background.\n // Since the input field is behind the label in the HTML tree,\n // the input field is drawn last and hides the label with an opaque background color.\n // zIndex: 1 will raise the label above opaque background-colors of input.\n zIndex: 1,\n pointerEvents: 'none',\n transform: 'translate(12px, 16px) scale(1)',\n maxWidth: 'calc(100% - 24px)'\n}, ownerState.size === 'small' && {\n transform: 'translate(12px, 13px) scale(1)'\n}, ownerState.shrink && _extends({\n userSelect: 'none',\n pointerEvents: 'auto',\n transform: 'translate(12px, 7px) scale(0.75)',\n maxWidth: 'calc(133% - 24px)'\n}, ownerState.size === 'small' && {\n transform: 'translate(12px, 4px) scale(0.75)'\n})), ownerState.variant === 'outlined' && _extends({\n // see comment above on filled.zIndex\n zIndex: 1,\n pointerEvents: 'none',\n transform: 'translate(14px, 16px) scale(1)',\n maxWidth: 'calc(100% - 24px)'\n}, ownerState.size === 'small' && {\n transform: 'translate(14px, 9px) scale(1)'\n}, ownerState.shrink && {\n userSelect: 'none',\n pointerEvents: 'auto',\n // Theoretically, we should have (8+5)*2/0.75 = 34px\n // but it feels a better when it bleeds a bit on the left, so 32px.\n maxWidth: 'calc(133% - 32px)',\n transform: 'translate(14px, -9px) scale(0.75)'\n})));\nconst InputLabel = /*#__PURE__*/React.forwardRef(function InputLabel(inProps, ref) {\n const props = useThemeProps({\n name: 'MuiInputLabel',\n props: inProps\n });\n const {\n disableAnimation = false,\n shrink: shrinkProp,\n className\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const muiFormControl = useFormControl();\n let shrink = shrinkProp;\n if (typeof shrink === 'undefined' && muiFormControl) {\n shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n }\n const fcs = formControlState({\n props,\n muiFormControl,\n states: ['size', 'variant', 'required']\n });\n const ownerState = _extends({}, props, {\n disableAnimation,\n formControl: muiFormControl,\n shrink,\n size: fcs.size,\n variant: fcs.variant,\n required: fcs.required\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(InputLabelRoot, _extends({\n \"data-shrink\": shrink,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className)\n }, other, {\n classes: classes\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? InputLabel.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n /**\n * If `true`, the transition animation is disabled.\n * @default false\n */\n disableAnimation: PropTypes.bool,\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the label is displayed in an error state.\n */\n error: PropTypes.bool,\n /**\n * If `true`, the `input` of this label is focused.\n */\n focused: PropTypes.bool,\n /**\n * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n * FormControl.\n */\n margin: PropTypes.oneOf(['dense']),\n /**\n * if `true`, the label will indicate that the `input` is required.\n */\n required: PropTypes.bool,\n /**\n * If `true`, the label is shrunk.\n */\n shrink: PropTypes.bool,\n /**\n * The size of the component.\n * @default 'normal'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['normal', 'small']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The variant to use.\n */\n variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputLabel;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getSwitchUtilityClass(slot) {\n return generateUtilityClass('MuiSwitch', slot);\n}\nconst switchClasses = generateUtilityClasses('MuiSwitch', ['root', 'edgeStart', 'edgeEnd', 'switchBase', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium', 'checked', 'disabled', 'input', 'thumb', 'track']);\nexport default switchClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"edge\", \"size\", \"sx\"];\n// @inheritedComponent IconButton\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha, darken, lighten } from '@mui/system';\nimport capitalize from '../utils/capitalize';\nimport SwitchBase from '../internal/SwitchBase';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport switchClasses, { getSwitchUtilityClass } from './switchClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n edge,\n size,\n color,\n checked,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n switchBase: ['switchBase', `color${capitalize(color)}`, checked && 'checked', disabled && 'disabled'],\n thumb: ['thumb'],\n track: ['track'],\n input: ['input']\n };\n const composedClasses = composeClasses(slots, getSwitchUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\nconst SwitchRoot = styled('span', {\n name: 'MuiSwitch',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'inline-flex',\n width: 34 + 12 * 2,\n height: 14 + 12 * 2,\n overflow: 'hidden',\n padding: 12,\n boxSizing: 'border-box',\n position: 'relative',\n flexShrink: 0,\n zIndex: 0,\n // Reset the stacking context.\n verticalAlign: 'middle',\n // For correct alignment with the text.\n '@media print': {\n colorAdjust: 'exact'\n }\n}, ownerState.edge === 'start' && {\n marginLeft: -8\n}, ownerState.edge === 'end' && {\n marginRight: -8\n}, ownerState.size === 'small' && {\n width: 40,\n height: 24,\n padding: 7,\n [`& .${switchClasses.thumb}`]: {\n width: 16,\n height: 16\n },\n [`& .${switchClasses.switchBase}`]: {\n padding: 4,\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(16px)'\n }\n }\n}));\nconst SwitchSwitchBase = styled(SwitchBase, {\n name: 'MuiSwitch',\n slot: 'SwitchBase',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.switchBase, {\n [`& .${switchClasses.input}`]: styles.input\n }, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme\n}) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n // Render above the focus ripple.\n color: theme.vars ? theme.vars.palette.Switch.defaultColor : `${theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.grey[300]}`,\n transition: theme.transitions.create(['left', 'transform'], {\n duration: theme.transitions.duration.shortest\n }),\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(20px)'\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.vars ? theme.vars.palette.Switch.defaultDisabledColor : `${theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[600]}`\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n opacity: 0.5\n },\n [`&.${switchClasses.disabled} + .${switchClasses.track}`]: {\n opacity: theme.vars ? theme.vars.opacity.switchTrackDisabled : `${theme.palette.mode === 'light' ? 0.12 : 0.2}`\n },\n [`& .${switchClasses.input}`]: {\n left: '-100%',\n width: '300%'\n }\n}), ({\n theme,\n ownerState\n}) => _extends({\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${switchClasses.checked}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main,\n '&:hover': {\n backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.vars ? theme.vars.palette.Switch[`${ownerState.color}DisabledColor`] : `${theme.palette.mode === 'light' ? lighten(theme.palette[ownerState.color].main, 0.62) : darken(theme.palette[ownerState.color].main, 0.55)}`\n }\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n backgroundColor: (theme.vars || theme).palette[ownerState.color].main\n }\n}));\nconst SwitchTrack = styled('span', {\n name: 'MuiSwitch',\n slot: 'Track',\n overridesResolver: (props, styles) => styles.track\n})(({\n theme\n}) => ({\n height: '100%',\n width: '100%',\n borderRadius: 14 / 2,\n zIndex: -1,\n transition: theme.transitions.create(['opacity', 'background-color'], {\n duration: theme.transitions.duration.shortest\n }),\n backgroundColor: theme.vars ? theme.vars.palette.common.onBackground : `${theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white}`,\n opacity: theme.vars ? theme.vars.opacity.switchTrack : `${theme.palette.mode === 'light' ? 0.38 : 0.3}`\n}));\nconst SwitchThumb = styled('span', {\n name: 'MuiSwitch',\n slot: 'Thumb',\n overridesResolver: (props, styles) => styles.thumb\n})(({\n theme\n}) => ({\n boxShadow: (theme.vars || theme).shadows[1],\n backgroundColor: 'currentColor',\n width: 20,\n height: 20,\n borderRadius: '50%'\n}));\nconst Switch = /*#__PURE__*/React.forwardRef(function Switch(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiSwitch'\n });\n const {\n className,\n color = 'primary',\n edge = false,\n size = 'medium',\n sx\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = _extends({}, props, {\n color,\n edge,\n size\n });\n const classes = useUtilityClasses(ownerState);\n const icon = /*#__PURE__*/_jsx(SwitchThumb, {\n className: classes.thumb,\n ownerState: ownerState\n });\n return /*#__PURE__*/_jsxs(SwitchRoot, {\n className: clsx(classes.root, className),\n sx: sx,\n ownerState: ownerState,\n children: [/*#__PURE__*/_jsx(SwitchSwitchBase, _extends({\n type: \"checkbox\",\n icon: icon,\n checkedIcon: icon,\n ref: ref,\n ownerState: ownerState\n }, other, {\n classes: _extends({}, classes, {\n root: classes.switchBase\n })\n })), /*#__PURE__*/_jsx(SwitchTrack, {\n className: classes.track,\n ownerState: ownerState\n })]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Switch.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the ripple effect is disabled.\n * @default false\n */\n disableRipple: PropTypes.bool,\n /**\n * If given, uses a negative margin to counteract the padding on one\n * side (this is often helpful for aligning the left or right\n * side of the icon with content above or below, without ruining the border\n * size and shape).\n * @default false\n */\n edge: PropTypes.oneOf(['end', 'start', false]),\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (string).\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * If `true`, the `input` element is required.\n * @default false\n */\n required: PropTypes.bool,\n /**\n * The size of the component.\n * `small` is equivalent to the dense switch styling.\n * @default 'medium'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Switch;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getSwitchBaseUtilityClass(slot) {\n return generateUtilityClass('PrivateSwitchBase', slot);\n}\nconst switchBaseClasses = generateUtilityClasses('PrivateSwitchBase', ['root', 'checked', 'disabled', 'input', 'edgeStart', 'edgeEnd']);\nexport default switchBaseClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"autoFocus\", \"checked\", \"checkedIcon\", \"className\", \"defaultChecked\", \"disabled\", \"disableFocusRipple\", \"edge\", \"icon\", \"id\", \"inputProps\", \"inputRef\", \"name\", \"onBlur\", \"onChange\", \"onFocus\", \"readOnly\", \"required\", \"tabIndex\", \"type\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useControlled from '../utils/useControlled';\nimport useFormControl from '../FormControl/useFormControl';\nimport ButtonBase from '../ButtonBase';\nimport { getSwitchBaseUtilityClass } from './switchBaseClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n checked,\n disabled,\n edge\n } = ownerState;\n const slots = {\n root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${capitalize(edge)}`],\n input: ['input']\n };\n return composeClasses(slots, getSwitchBaseUtilityClass, classes);\n};\nconst SwitchBaseRoot = styled(ButtonBase)(({\n ownerState\n}) => _extends({\n padding: 9,\n borderRadius: '50%'\n}, ownerState.edge === 'start' && {\n marginLeft: ownerState.size === 'small' ? -3 : -12\n}, ownerState.edge === 'end' && {\n marginRight: ownerState.size === 'small' ? -3 : -12\n}));\nconst SwitchBaseInput = styled('input')({\n cursor: 'inherit',\n position: 'absolute',\n opacity: 0,\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n zIndex: 1\n});\n\n/**\n * @ignore - internal component.\n */\nconst SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) {\n const {\n autoFocus,\n checked: checkedProp,\n checkedIcon,\n className,\n defaultChecked,\n disabled: disabledProp,\n disableFocusRipple = false,\n edge = false,\n icon,\n id,\n inputProps,\n inputRef,\n name,\n onBlur,\n onChange,\n onFocus,\n readOnly,\n required = false,\n tabIndex,\n type,\n value\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const [checked, setCheckedState] = useControlled({\n controlled: checkedProp,\n default: Boolean(defaultChecked),\n name: 'SwitchBase',\n state: 'checked'\n });\n const muiFormControl = useFormControl();\n const handleFocus = event => {\n if (onFocus) {\n onFocus(event);\n }\n if (muiFormControl && muiFormControl.onFocus) {\n muiFormControl.onFocus(event);\n }\n };\n const handleBlur = event => {\n if (onBlur) {\n onBlur(event);\n }\n if (muiFormControl && muiFormControl.onBlur) {\n muiFormControl.onBlur(event);\n }\n };\n const handleInputChange = event => {\n // Workaround for https://github.com/facebook/react/issues/9023\n if (event.nativeEvent.defaultPrevented) {\n return;\n }\n const newChecked = event.target.checked;\n setCheckedState(newChecked);\n if (onChange) {\n // TODO v6: remove the second argument.\n onChange(event, newChecked);\n }\n };\n let disabled = disabledProp;\n if (muiFormControl) {\n if (typeof disabled === 'undefined') {\n disabled = muiFormControl.disabled;\n }\n }\n const hasLabelFor = type === 'checkbox' || type === 'radio';\n const ownerState = _extends({}, props, {\n checked,\n disabled,\n disableFocusRipple,\n edge\n });\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SwitchBaseRoot, _extends({\n component: \"span\",\n className: clsx(classes.root, className),\n centerRipple: true,\n focusRipple: !disableFocusRipple,\n disabled: disabled,\n tabIndex: null,\n role: undefined,\n onFocus: handleFocus,\n onBlur: handleBlur,\n ownerState: ownerState,\n ref: ref\n }, other, {\n children: [/*#__PURE__*/_jsx(SwitchBaseInput, _extends({\n autoFocus: autoFocus,\n checked: checkedProp,\n defaultChecked: defaultChecked,\n className: classes.input,\n disabled: disabled,\n id: hasLabelFor ? id : undefined,\n name: name,\n onChange: handleInputChange,\n readOnly: readOnly,\n ref: inputRef,\n required: required,\n ownerState: ownerState,\n tabIndex: tabIndex,\n type: type\n }, type === 'checkbox' && value === undefined ? {} : {\n value\n }, inputProps)), checked ? checkedIcon : icon]\n }));\n});\n\n// NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\nprocess.env.NODE_ENV !== \"production\" ? SwitchBase.propTypes = {\n /**\n * If `true`, the `input` element is focused during the first mount.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node.isRequired,\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * @ignore\n */\n defaultChecked: PropTypes.bool,\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the keyboard focus ripple is disabled.\n * @default false\n */\n disableFocusRipple: PropTypes.bool,\n /**\n * If given, uses a negative margin to counteract the padding on one\n * side (this is often helpful for aligning the left or right\n * side of the icon with content above or below, without ruining the border\n * size and shape).\n * @default false\n */\n edge: PropTypes.oneOf(['end', 'start', false]),\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node.isRequired,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /*\n * @ignore\n */\n name: PropTypes.string,\n /**\n * @ignore\n */\n onBlur: PropTypes.func,\n /**\n * Callback fired when the state is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n /**\n * It prevents the user from changing the value of the field\n * (not from interacting with the field).\n */\n readOnly: PropTypes.bool,\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.object,\n /**\n * @ignore\n */\n tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The input component prop `type`.\n */\n type: PropTypes.string.isRequired,\n /**\n * The value of the component.\n */\n value: PropTypes.any\n} : void 0;\nexport default SwitchBase;","import { unstable_createChainedFunction as createChainedFunction } from '@mui/utils';\nexport default createChainedFunction;","import { unstable_deprecatedPropType as deprecatedPropType } from '@mui/utils';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => 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}","import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/className';\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}","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","FormControlContext","React","undefined","formControlState","_ref","props","states","muiFormControl","reduce","acc","state","useFormControl","_excluded","FormLabelRoot","styled","name","slot","overridesResolver","styles","ownerState","_extends","root","color","colorSecondary","filled","_ref2","_extends2","theme","vars","palette","text","secondary","typography","body1","lineHeight","padding","position","_defineProperty","concat","formLabelClasses","focused","main","disabled","error","AsteriskComponent","asterisk","_ref3","FormLabel","inProps","ref","useThemeProps","children","className","_props$component","component","other","_objectWithoutPropertiesLoose","fcs","required","classes","slots","capitalize","composeClasses","getFormLabelUtilityClasses","useUtilityClasses","_jsxs","as","clsx","generateUtilityClass","generateUtilityClasses","getInputLabelUtilityClasses","InputLabelRoot","shouldForwardProp","prop","rootShouldForwardProp","formControl","size","sizeSmall","shrink","disableAnimation","animated","variant","display","transformOrigin","whiteSpace","overflow","textOverflow","maxWidth","left","top","transform","transition","transitions","create","duration","shorter","easing","easeOut","zIndex","pointerEvents","userSelect","_props$disableAnimati","shrinkProp","adornedStart","composedClasses","_jsx","getSwitchUtilityClass","SwitchRoot","edge","width","height","boxSizing","flexShrink","verticalAlign","colorAdjust","marginLeft","marginRight","switchClasses","thumb","switchBase","checked","SwitchSwitchBase","SwitchBase","input","_ref4","_ref5","Switch","defaultColor","mode","common","white","grey","shortest","defaultDisabledColor","track","opacity","switchTrackDisabled","_ref6","_ref7","backgroundColor","action","activeChannel","hoverOpacity","alpha","active","mainChannel","lighten","darken","SwitchTrack","_ref8","borderRadius","onBackground","black","switchTrack","SwitchThumb","_ref9","boxShadow","shadows","_props$color","_props$edge","_props$size","sx","icon","type","checkedIcon","getSwitchBaseUtilityClass","SwitchBaseRoot","ButtonBase","SwitchBaseInput","cursor","margin","autoFocus","checkedProp","defaultChecked","disabledProp","_props$disableFocusRi","disableFocusRipple","id","inputProps","inputRef","onBlur","onChange","onFocus","readOnly","_props$required","tabIndex","_useControlled","useControlled","controlled","Boolean","_useControlled2","_slicedToArray","setCheckedState","hasLabelFor","centerRipple","focusRipple","role","event","nativeEvent","defaultPrevented","newChecked","target","createChainedFunction","validator","reason","componentNameInError","Component","propName","componentName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","element","muiNames","indexOf","muiName","_len","arguments","length","funcs","Array","_key","func","_len2","args","_key2","apply","this","module","obj","__esModule"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1581.bec44ff2.chunk.js b/portal-ui/build/static/js/1581.bec44ff2.chunk.js
new file mode 100644
index 000000000..96255da0f
--- /dev/null
+++ b/portal-ui/build/static/js/1581.bec44ff2.chunk.js
@@ -0,0 +1,2 @@
+(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1581,4882,7981,1569,9581,6662,222],{1581:function(e,t,n){"use strict";n.r(t);var r=n(29439),o=n(1413),a=n(72791),i=n(40986),c=n(29945),s=n(11135),l=n(25787),d=n(61889),u=n(45248),p=n(23814),f=n(81159),m=n(21435),h=n(56028),v=n(84741),Z=n(87995),b=n(81551),x=n(31776),g=n(82342),k=n(80184);t.default=(0,l.Z)((function(e){return(0,s.Z)((0,o.Z)((0,o.Z)({},p.DF),p.ID))}))((function(e){var t=e.classes,n=e.open,o=e.enabled,s=e.cfg,l=e.selectedBucket,p=e.closeModalAndRefresh,w=(0,b.TL)(),y=(0,a.useState)(!1),C=(0,r.Z)(y,2),j=C[0],S=C[1],F=(0,a.useState)(!1),z=(0,r.Z)(F,2),P=z[0],R=z[1],N=(0,a.useState)("1"),I=(0,r.Z)(N,2),M=I[0],q=I[1],L=(0,a.useState)("Ti"),B=(0,r.Z)(L,2),O=B[0],E=B[1],A=(0,a.useState)(!1),_=(0,r.Z)(A,2),T=_[0],W=_[1];(0,a.useEffect)((function(){if(o&&(R(!0),s)){var e=(0,u.Am)(s.quota||0,!0,!1,!0);q(e.total.toString()),E(e.unit),W(!0)}}),[o,s]),(0,a.useEffect)((function(){W(!P||/^\d*(?:\.\d{1,2})?$/.test(M))}),[P,M]);return(0,k.jsx)(h.Z,{modalOpen:n,onClose:function(){p()},title:"Enable Bucket Quota",titleIcon:(0,k.jsx)(c.Wqw,{}),children:(0,k.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),!j&&T&&x.h.buckets.setBucketQuota(l,{enabled:P,amount:parseInt((0,u.Pw)(M,O,!0)),quota_type:"hard"}).then((function(){S(!1),p()})).catch((function(e){S(!1),w((0,Z.zb)((0,g.g)(e.error)))}))},children:(0,k.jsxs)(d.ZP,{container:!0,children:[(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.formScrollable,children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(f.Z,{value:"bucket_quota",id:"bucket_quota",name:"bucket_quota",checked:P,onChange:function(e){R(e.target.checked)},label:"Enabled"})}),P&&(0,k.jsx)(a.Fragment,{children:(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(d.ZP,{container:!0,children:(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(m.Z,{id:"quota_size",name:"quota_size",onChange:function(e){q(e.target.value),e.target.validity.valid?W(!0):W(!1)},label:"Quota",value:M,required:!0,min:"1",overlayObject:(0,k.jsx)(v.Z,{id:"quota_unit",onUnitChange:function(e){E(e)},unitSelected:O,unitsList:(0,u.zQ)(["Ki"]),disabled:!1}),error:T?"":"Please enter a valid quota"})})})})})]}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.modalButtonBar,children:[(0,k.jsx)(c.zxk,{id:"cancel",type:"button",variant:"regular",disabled:j,onClick:function(){p()},label:"Cancel"}),(0,k.jsx)(c.zxk,{id:"save",type:"submit",variant:"callAction",disabled:j||!T,label:"Save"})]}),j&&(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(i.Z,{})})]})})})}))},81159:function(e,t,n){"use strict";var r=n(4942),o=n(1413),a=n(72791),i=n(11135),c=n(25787),s=n(9955),l=n(30829),d=n(20068),u=n(20890),p=n(61889),f=n(23814),m=n(29945),h=n(28182),v=n(80184),Z=(0,c.Z)((function(e){return{root:{width:50,height:24,padding:0,margin:0},switchBase:{padding:1,"&$checked":{transform:"translateX(24px)",color:e.palette.common.white,"& + $track":{backgroundColor:"#4CCB92",boxShadow:"inset 0px 1px 4px rgba(0,0,0,0.1)",opacity:1,border:"none"}},"&$focusVisible $thumb":{color:"#4CCB92",border:"6px solid #fff"}},thumb:{width:22,height:22,backgroundColor:"#FAFAFA",border:"2px solid #FFFFFF",marginLeft:1},track:{borderRadius:12,backgroundColor:"#E2E2E2",boxShadow:"inset 0px 1px 4px rgba(0,0,0,0.1)",opacity:1,transition:e.transitions.create(["background-color","border"])},checked:{},focusVisible:{},switchContainer:{display:"flex",alignItems:"center",justifyContent:"flex-end"}}}))(s.Z);t.Z=(0,c.Z)((function(e){return(0,i.Z)((0,o.Z)((0,o.Z)({indicatorLabelOn:{fontWeight:"bold",color:"#081C42 !important"},indicatorLabel:{fontSize:12,color:"#E2E2E2",margin:"0 8px 0 10px"},fieldDescription:{marginTop:4,color:"#999999"},tooltip:{fontSize:16}},f.OR),f.YI))}))((function(e){var t=e.label,n=void 0===t?"":t,i=e.onChange,c=e.value,s=e.id,f=e.name,b=e.checked,x=void 0!==b&&b,g=e.disabled,k=void 0!==g&&g,w=e.switchOnly,y=void 0!==w&&w,C=e.tooltip,j=void 0===C?"":C,S=e.description,F=void 0===S?"":S,z=e.classes,P=e.indicatorLabels,R=e.extraInputProps,N=void 0===R?{}:R,I=(0,v.jsxs)(a.Fragment,{children:[!y&&(0,v.jsx)("span",{className:(0,h.Z)(z.indicatorLabel,(0,r.Z)({},z.indicatorLabelOn,!x)),children:P&&P.length>1?P[1]:"OFF"}),(0,v.jsx)(Z,{checked:x,onChange:i,color:"primary",name:f,inputProps:(0,o.Z)({"aria-label":"primary checkbox"},N),disabled:k,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:c,id:s}),!y&&(0,v.jsx)("span",{className:(0,h.Z)(z.indicatorLabel,(0,r.Z)({},z.indicatorLabelOn,x)),children:P?P[0]:"ON"})]});return y?I:(0,v.jsx)("div",{children:(0,v.jsxs)(p.ZP,{container:!0,alignItems:"center",children:[(0,v.jsx)(p.ZP,{item:!0,xs:12,sm:8,md:8,children:""!==n&&(0,v.jsxs)(l.Z,{htmlFor:s,className:z.inputLabel,children:[(0,v.jsx)("span",{children:n}),""!==j&&(0,v.jsx)("div",{className:z.tooltipContainer,children:(0,v.jsx)(d.Z,{title:j,placement:"top-start",children:(0,v.jsx)("div",{className:z.tooltip,children:(0,v.jsx)(m.byK,{})})})})]})}),(0,v.jsx)(p.ZP,{item:!0,xs:12,sm:""!==n?4:12,md:""!==n?4:12,textAlign:"right",justifyContent:"end",className:z.switchContainer,children:I}),""!==F&&(0,v.jsx)(p.ZP,{item:!0,xs:12,textAlign:"left",children:(0,v.jsx)(u.Z,{component:"p",className:z.fieldDescription,children:F})})]})})}))},21435:function(e,t,n){"use strict";var r=n(29439),o=n(1413),a=n(72791),i=n(27391),c=n(61889),s=n(30829),l=n(20068),d=n(13400),u=n(20165),p=n(3579),f=n(11135),m=n(72455),h=n(25787),v=n(23814),Z=n(29945),b=n(28182),x=n(80184),g=(0,m.Z)((function(e){return(0,f.Z)((0,o.Z)({},v.gM))}));function k(e){var t=g();return(0,x.jsx)(i.Z,(0,o.Z)({InputProps:{classes:t}},e))}t.Z=(0,h.Z)((function(e){return(0,f.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},v.YI),v.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}}}))}))((function(e){var t=e.label,n=e.onChange,i=e.value,f=e.id,m=e.name,h=e.type,v=void 0===h?"text":h,g=e.autoComplete,w=void 0===g?"off":g,y=e.disabled,C=void 0!==y&&y,j=e.multiline,S=void 0!==j&&j,F=e.tooltip,z=void 0===F?"":F,P=e.index,R=void 0===P?0:P,N=e.error,I=void 0===N?"":N,M=e.required,q=void 0!==M&&M,L=e.placeholder,B=void 0===L?"":L,O=e.min,E=e.max,A=e.overlayId,_=e.overlayIcon,T=void 0===_?null:_,W=e.overlayObject,D=void 0===W?null:W,V=e.extraInputProps,$=void 0===V?{}:V,K=e.overlayAction,Q=e.noLabelMinWidth,H=void 0!==Q&&Q,U=e.pattern,X=void 0===U?"":U,G=e.autoFocus,Y=void 0!==G&&G,J=e.classes,ee=e.className,te=void 0===ee?"":ee,ne=e.onKeyPress,re=e.onFocus,oe=e.onPaste,ae=(0,o.Z)({"data-index":R},$),ie=(0,a.useState)(!1),ce=(0,r.Z)(ie,2),se=ce[0],le=ce[1];"number"===v&&O&&(ae.min=O),"number"===v&&E&&(ae.max=E),""!==X&&(ae.pattern=X);var de=T,ue=v;return"password"===v&&null===T&&(de=se?(0,x.jsx)(u.Z,{}):(0,x.jsx)(p.Z,{}),ue=se?"text":"password"),(0,x.jsx)(a.Fragment,{children:(0,x.jsxs)(c.ZP,{container:!0,className:(0,b.Z)(""!==te?te:"",""!==I?J.errorInField:J.inputBoxContainer),children:[""!==t&&(0,x.jsxs)(s.Z,{htmlFor:f,className:H?J.noMinWidthLabel:J.inputLabel,children:[(0,x.jsxs)("span",{children:[t,q?"*":""]}),""!==z&&(0,x.jsx)("div",{className:J.tooltipContainer,children:(0,x.jsx)(l.Z,{title:z,placement:"top-start",children:(0,x.jsx)("div",{className:J.tooltip,children:(0,x.jsx)(Z.byK,{})})})})]}),(0,x.jsxs)("div",{className:J.textBoxContainer,children:[(0,x.jsx)(k,{id:f,name:m,fullWidth:!0,value:i,autoFocus:Y,disabled:C,onChange:n,type:ue,multiline:S,autoComplete:w,inputProps:ae,error:""!==I,helperText:I,placeholder:B,className:J.inputRebase,onKeyPress:ne,onFocus:re,onPaste:oe}),de&&(0,x.jsx)("div",{className:"".concat(J.overlayAction," ").concat(""!==t?"withLabel":""),children:(0,x.jsx)(d.Z,{onClick:K?function(){K()}:function(){return le(!se)},id:A,size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:de})}),D&&(0,x.jsx)("div",{className:"".concat(J.overlayAction," ").concat(""!==t?"withLabel":""),children:D})]})]})})}))},84741:function(e,t,n){"use strict";var r=n(29439),o=n(72791),a=n(11135),i=n(25787),c=n(71715),s=n(77865),l=n(80184);t.Z=(0,i.Z)((function(e){return(0,a.Z)({buttonTrigger:{border:"#F0F2F2 1px solid",borderRadius:3,color:"#838383",backgroundColor:"#fff",fontSize:12}})}))((function(e){var t=e.classes,n=e.id,a=e.unitSelected,i=e.unitsList,d=e.disabled,u=void 0!==d&&d,p=e.onUnitChange,f=o.useState(null),m=(0,r.Z)(f,2),h=m[0],v=m[1],Z=Boolean(h),b=function(e){v(null),""!==e&&p&&p(e)};return(0,l.jsxs)(o.Fragment,{children:[(0,l.jsx)("button",{id:"".concat(n,"-button"),"aria-controls":"".concat(n,"-menu"),"aria-haspopup":"true","aria-expanded":Z?"true":void 0,onClick:function(e){v(e.currentTarget)},className:t.buttonTrigger,disabled:u,type:"button",children:a}),(0,l.jsx)(c.Z,{id:"".concat(n,"-menu"),"aria-labelledby":"".concat(n,"-button"),anchorEl:h,open:Z,onClose:function(){b("")},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:i.map((function(e){return(0,l.jsx)(s.Z,{onClick:function(){return b(e.value)},children:e.label},"itemUnit-".concat(e.value,"-").concat(e.label))}))})]})}))},3579:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),a=n(80184),i=(0,o.default)((0,a.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"RemoveRedEye");t.Z=i},20165:function(e,t,n){"use strict";var r=n(64836);t.Z=void 0;var o=r(n(45649)),a=n(80184),i=(0,o.default)((0,a.jsx)("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");t.Z=i},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)},93840:function(e,t,n){"use strict";var r=n(72791).createContext(void 0);t.Z=r},76147:function(e,t,n){"use strict";function r(e){var t=e.props,n=e.states,r=e.muiFormControl;return n.reduce((function(e,n){return e[n]=t[n],r&&"undefined"===typeof t[n]&&(e[n]=r[n]),e}),{})}n.d(t,{Z:function(){return r}})},52930:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(72791),o=n(93840);function a(){return r.useContext(o.Z)}},17133:function(e,t,n){"use strict";var r=n(4942),o=n(63366),a=n(87462),i=n(72791),c=n(28182),s=n(94419),l=n(76147),d=n(52930),u=n(14036),p=n(31402),f=n(66934),m=n(10843),h=n(80184),v=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,f.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:function(e,t){var n=e.ownerState;return(0,a.Z)({},t.root,"secondary"===n.color&&t.colorSecondary,n.filled&&t.filled)}})((function(e){var t,n=e.theme,o=e.ownerState;return(0,a.Z)({color:(n.vars||n).palette.text.secondary},n.typography.body1,(t={lineHeight:"1.4375em",padding:0,position:"relative"},(0,r.Z)(t,"&.".concat(m.Z.focused),{color:(n.vars||n).palette[o.color].main}),(0,r.Z)(t,"&.".concat(m.Z.disabled),{color:(n.vars||n).palette.text.disabled}),(0,r.Z)(t,"&.".concat(m.Z.error),{color:(n.vars||n).palette.error.main}),t))})),b=(0,f.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:function(e,t){return t.asterisk}})((function(e){var t=e.theme;return(0,r.Z)({},"&.".concat(m.Z.error),{color:(t.vars||t).palette.error.main})})),x=i.forwardRef((function(e,t){var n=(0,p.Z)({props:e,name:"MuiFormLabel"}),r=n.children,i=n.className,f=n.component,x=void 0===f?"label":f,g=(0,o.Z)(n,v),k=(0,d.Z)(),w=(0,l.Z)({props:n,muiFormControl:k,states:["color","required","focused","disabled","error","filled"]}),y=(0,a.Z)({},n,{color:w.color||"primary",component:x,disabled:w.disabled,error:w.error,filled:w.filled,focused:w.focused,required:w.required}),C=function(e){var t=e.classes,n=e.color,r=e.focused,o=e.disabled,a=e.error,i=e.filled,c=e.required,l={root:["root","color".concat((0,u.Z)(n)),o&&"disabled",a&&"error",i&&"filled",r&&"focused",c&&"required"],asterisk:["asterisk",a&&"error"]};return(0,s.Z)(l,m.M,t)}(y);return(0,h.jsxs)(Z,(0,a.Z)({as:x,ownerState:y,className:(0,c.Z)(C.root,i),ref:t},g,{children:[r,w.required&&(0,h.jsxs)(b,{ownerState:y,"aria-hidden":!0,className:C.asterisk,children:["\u2009","*"]})]}))}));t.Z=x},10843:function(e,t,n){"use strict";n.d(t,{M:function(){return a}});var r=n(75878),o=n(21217);function a(e){return(0,o.Z)("MuiFormLabel",e)}var i=(0,r.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);t.Z=i},30829:function(e,t,n){"use strict";n.d(t,{Z:function(){return k}});var r=n(4942),o=n(63366),a=n(87462),i=n(72791),c=n(94419),s=n(28182),l=n(76147),d=n(52930),u=n(17133),p=n(10843),f=n(31402),m=n(66934),h=n(75878),v=n(21217);function Z(e){return(0,v.Z)("MuiInputLabel",e)}(0,h.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);var b=n(80184),x=["disableAnimation","margin","shrink","variant","className"],g=(0,m.ZP)(u.Z,{shouldForwardProp:function(e){return(0,m.FO)(e)||"classes"===e},name:"MuiInputLabel",slot:"Root",overridesResolver:function(e,t){var n=e.ownerState;return[(0,r.Z)({},"& .".concat(p.Z.asterisk),t.asterisk),t.root,n.formControl&&t.formControl,"small"===n.size&&t.sizeSmall,n.shrink&&t.shrink,!n.disableAnimation&&t.animated,t[n.variant]]}})((function(e){var t=e.theme,n=e.ownerState;return(0,a.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},n.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===n.size&&{transform:"translate(0, 17px) scale(1)"},n.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!n.disableAnimation&&{transition:t.transitions.create(["color","transform","max-width"],{duration:t.transitions.duration.shorter,easing:t.transitions.easing.easeOut})},"filled"===n.variant&&(0,a.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===n.size&&{transform:"translate(12px, 13px) scale(1)"},n.shrink&&(0,a.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===n.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===n.variant&&(0,a.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===n.size&&{transform:"translate(14px, 9px) scale(1)"},n.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"}))})),k=i.forwardRef((function(e,t){var n=(0,f.Z)({name:"MuiInputLabel",props:e}),r=n.disableAnimation,i=void 0!==r&&r,u=n.shrink,p=n.className,m=(0,o.Z)(n,x),h=(0,d.Z)(),v=u;"undefined"===typeof v&&h&&(v=h.filled||h.focused||h.adornedStart);var k=(0,l.Z)({props:n,muiFormControl:h,states:["size","variant","required"]}),w=(0,a.Z)({},n,{disableAnimation:i,formControl:h,shrink:v,size:k.size,variant:k.variant,required:k.required}),y=function(e){var t=e.classes,n=e.formControl,r=e.size,o=e.shrink,i={root:["root",n&&"formControl",!e.disableAnimation&&"animated",o&&"shrink","small"===r&&"sizeSmall",e.variant],asterisk:[e.required&&"asterisk"]},s=(0,c.Z)(i,Z,t);return(0,a.Z)({},t,s)}(w);return(0,b.jsx)(g,(0,a.Z)({"data-shrink":v,ownerState:w,ref:t,className:(0,s.Z)(y.root,p)},m,{classes:y}))}))},9955:function(e,t,n){"use strict";n.d(t,{Z:function(){return C}});var r=n(4942),o=n(63366),a=n(87462),i=n(72791),c=n(28182),s=n(94419),l=n(12065),d=n(14036),u=n(97278),p=n(31402),f=n(66934),m=n(75878),h=n(21217);function v(e){return(0,h.Z)("MuiSwitch",e)}var Z=(0,m.Z)("MuiSwitch",["root","edgeStart","edgeEnd","switchBase","colorPrimary","colorSecondary","sizeSmall","sizeMedium","checked","disabled","input","thumb","track"]),b=n(80184),x=["className","color","edge","size","sx"],g=(0,f.ZP)("span",{name:"MuiSwitch",slot:"Root",overridesResolver:function(e,t){var n=e.ownerState;return[t.root,n.edge&&t["edge".concat((0,d.Z)(n.edge))],t["size".concat((0,d.Z)(n.size))]]}})((function(e){var t,n=e.ownerState;return(0,a.Z)({display:"inline-flex",width:58,height:38,overflow:"hidden",padding:12,boxSizing:"border-box",position:"relative",flexShrink:0,zIndex:0,verticalAlign:"middle","@media print":{colorAdjust:"exact"}},"start"===n.edge&&{marginLeft:-8},"end"===n.edge&&{marginRight:-8},"small"===n.size&&(t={width:40,height:24,padding:7},(0,r.Z)(t,"& .".concat(Z.thumb),{width:16,height:16}),(0,r.Z)(t,"& .".concat(Z.switchBase),(0,r.Z)({padding:4},"&.".concat(Z.checked),{transform:"translateX(16px)"})),t))})),k=(0,f.ZP)(u.Z,{name:"MuiSwitch",slot:"SwitchBase",overridesResolver:function(e,t){var n=e.ownerState;return[t.switchBase,(0,r.Z)({},"& .".concat(Z.input),t.input),"default"!==n.color&&t["color".concat((0,d.Z)(n.color))]]}})((function(e){var t,n=e.theme;return t={position:"absolute",top:0,left:0,zIndex:1,color:n.vars?n.vars.palette.Switch.defaultColor:"".concat("light"===n.palette.mode?n.palette.common.white:n.palette.grey[300]),transition:n.transitions.create(["left","transform"],{duration:n.transitions.duration.shortest})},(0,r.Z)(t,"&.".concat(Z.checked),{transform:"translateX(20px)"}),(0,r.Z)(t,"&.".concat(Z.disabled),{color:n.vars?n.vars.palette.Switch.defaultDisabledColor:"".concat("light"===n.palette.mode?n.palette.grey[100]:n.palette.grey[600])}),(0,r.Z)(t,"&.".concat(Z.checked," + .").concat(Z.track),{opacity:.5}),(0,r.Z)(t,"&.".concat(Z.disabled," + .").concat(Z.track),{opacity:n.vars?n.vars.opacity.switchTrackDisabled:"".concat("light"===n.palette.mode?.12:.2)}),(0,r.Z)(t,"& .".concat(Z.input),{left:"-100%",width:"300%"}),t}),(function(e){var t,n=e.theme,o=e.ownerState;return(0,a.Z)({"&:hover":{backgroundColor:n.vars?"rgba(".concat(n.vars.palette.action.activeChannel," / ").concat(n.vars.palette.action.hoverOpacity,")"):(0,l.Fq)(n.palette.action.active,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==o.color&&(t={},(0,r.Z)(t,"&.".concat(Z.checked),(0,r.Z)({color:(n.vars||n).palette[o.color].main,"&:hover":{backgroundColor:n.vars?"rgba(".concat(n.vars.palette[o.color].mainChannel," / ").concat(n.vars.palette.action.hoverOpacity,")"):(0,l.Fq)(n.palette[o.color].main,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"&.".concat(Z.disabled),{color:n.vars?n.vars.palette.Switch["".concat(o.color,"DisabledColor")]:"".concat("light"===n.palette.mode?(0,l.$n)(n.palette[o.color].main,.62):(0,l._j)(n.palette[o.color].main,.55))})),(0,r.Z)(t,"&.".concat(Z.checked," + .").concat(Z.track),{backgroundColor:(n.vars||n).palette[o.color].main}),t))})),w=(0,f.ZP)("span",{name:"MuiSwitch",slot:"Track",overridesResolver:function(e,t){return t.track}})((function(e){var t=e.theme;return{height:"100%",width:"100%",borderRadius:7,zIndex:-1,transition:t.transitions.create(["opacity","background-color"],{duration:t.transitions.duration.shortest}),backgroundColor:t.vars?t.vars.palette.common.onBackground:"".concat("light"===t.palette.mode?t.palette.common.black:t.palette.common.white),opacity:t.vars?t.vars.opacity.switchTrack:"".concat("light"===t.palette.mode?.38:.3)}})),y=(0,f.ZP)("span",{name:"MuiSwitch",slot:"Thumb",overridesResolver:function(e,t){return t.thumb}})((function(e){var t=e.theme;return{boxShadow:(t.vars||t).shadows[1],backgroundColor:"currentColor",width:20,height:20,borderRadius:"50%"}})),C=i.forwardRef((function(e,t){var n=(0,p.Z)({props:e,name:"MuiSwitch"}),r=n.className,i=n.color,l=void 0===i?"primary":i,u=n.edge,f=void 0!==u&&u,m=n.size,h=void 0===m?"medium":m,Z=n.sx,C=(0,o.Z)(n,x),j=(0,a.Z)({},n,{color:l,edge:f,size:h}),S=function(e){var t=e.classes,n=e.edge,r=e.size,o=e.color,i=e.checked,c=e.disabled,l={root:["root",n&&"edge".concat((0,d.Z)(n)),"size".concat((0,d.Z)(r))],switchBase:["switchBase","color".concat((0,d.Z)(o)),i&&"checked",c&&"disabled"],thumb:["thumb"],track:["track"],input:["input"]},u=(0,s.Z)(l,v,t);return(0,a.Z)({},t,u)}(j),F=(0,b.jsx)(y,{className:S.thumb,ownerState:j});return(0,b.jsxs)(g,{className:(0,c.Z)(S.root,r),sx:Z,ownerState:j,children:[(0,b.jsx)(k,(0,a.Z)({type:"checkbox",icon:F,checkedIcon:F,ref:t,ownerState:j},C,{classes:(0,a.Z)({},S,{root:S.switchBase})})),(0,b.jsx)(w,{className:S.track,ownerState:j})]})}))},97278:function(e,t,n){"use strict";n.d(t,{Z:function(){return k}});var r=n(29439),o=n(63366),a=n(87462),i=n(72791),c=n(28182),s=n(94419),l=n(14036),d=n(66934),u=n(98278),p=n(52930),f=n(95080),m=n(75878),h=n(21217);function v(e){return(0,h.Z)("PrivateSwitchBase",e)}(0,m.Z)("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]);var Z=n(80184),b=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],x=(0,d.ZP)(f.Z)((function(e){var t=e.ownerState;return(0,a.Z)({padding:9,borderRadius:"50%"},"start"===t.edge&&{marginLeft:"small"===t.size?-3:-12},"end"===t.edge&&{marginRight:"small"===t.size?-3:-12})})),g=(0,d.ZP)("input")({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),k=i.forwardRef((function(e,t){var n=e.autoFocus,i=e.checked,d=e.checkedIcon,f=e.className,m=e.defaultChecked,h=e.disabled,k=e.disableFocusRipple,w=void 0!==k&&k,y=e.edge,C=void 0!==y&&y,j=e.icon,S=e.id,F=e.inputProps,z=e.inputRef,P=e.name,R=e.onBlur,N=e.onChange,I=e.onFocus,M=e.readOnly,q=e.required,L=void 0!==q&&q,B=e.tabIndex,O=e.type,E=e.value,A=(0,o.Z)(e,b),_=(0,u.Z)({controlled:i,default:Boolean(m),name:"SwitchBase",state:"checked"}),T=(0,r.Z)(_,2),W=T[0],D=T[1],V=(0,p.Z)(),$=h;V&&"undefined"===typeof $&&($=V.disabled);var K="checkbox"===O||"radio"===O,Q=(0,a.Z)({},e,{checked:W,disabled:$,disableFocusRipple:w,edge:C}),H=function(e){var t=e.classes,n=e.checked,r=e.disabled,o=e.edge,a={root:["root",n&&"checked",r&&"disabled",o&&"edge".concat((0,l.Z)(o))],input:["input"]};return(0,s.Z)(a,v,t)}(Q);return(0,Z.jsxs)(x,(0,a.Z)({component:"span",className:(0,c.Z)(H.root,f),centerRipple:!0,focusRipple:!w,disabled:$,tabIndex:null,role:void 0,onFocus:function(e){I&&I(e),V&&V.onFocus&&V.onFocus(e)},onBlur:function(e){R&&R(e),V&&V.onBlur&&V.onBlur(e)},ownerState:Q,ref:t},A,{children:[(0,Z.jsx)(g,(0,a.Z)({autoFocus:n,checked:i,defaultChecked:m,className:H.input,disabled:$,id:K?S:void 0,name:P,onChange:function(e){if(!e.nativeEvent.defaultPrevented){var t=e.target.checked;D(t),N&&N(e,t)}},readOnly:M,ref:z,required:L,ownerState:Q,tabIndex:B,type:O},"checkbox"===O&&void 0===E?{}:{value:E},F)),W?d:j]}))}))},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 a.Z},createSvgIcon:function(){return i.Z},debounce:function(){return c.Z},deprecatedPropType:function(){return s},isMuiElement:function(){return l.Z},ownerDocument:function(){return d.Z},ownerWindow:function(){return u.Z},requirePropFactory:function(){return p},setRef:function(){return f},unstable_ClassNameGenerator:function(){return k},unstable_useEnhancedEffect:function(){return m.Z},unstable_useId:function(){return h.Z},unsupportedProp:function(){return v},useControlled:function(){return Z.Z},useEventCallback:function(){return b.Z},useForkRef:function(){return x.Z},useIsFocusVisible:function(){return g.Z}});var r=n(55902),o=n(14036),a=n(31260),i=n(76189),c=n(83199);var s=function(e,t){return function(){return null}},l=n(19103),d=n(98301),u=n(17602);n(87462);var p=function(e,t){return function(){return null}},f=n(62971).Z,m=n(40162),h=n(67384);var v=function(e,t,n,r,o){return null},Z=n(98278),b=n(89683),x=n(42071),g=n(23031),k={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.\n\nimport React, { useEffect, useState } from \"react\";\nimport { LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport { BucketQuotaIcon, Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n calculateBytes,\n getBytes,\n k8sScalarUnitsExcluding,\n} from \"../../../../common/utils\";\n\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputUnitMenu from \"../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\n\nimport { setModalErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { BucketQuota } from \"api/consoleApi\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\ninterface IEnableQuotaProps {\n classes: any;\n open: boolean;\n enabled: boolean;\n cfg: BucketQuota | null;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n}\n\nconst EnableQuota = ({\n classes,\n open,\n enabled,\n cfg,\n selectedBucket,\n closeModalAndRefresh,\n}: IEnableQuotaProps) => {\n const dispatch = useAppDispatch();\n const [loading, setLoading] = useState(false);\n const [quotaEnabled, setQuotaEnabled] = useState(false);\n const [quotaSize, setQuotaSize] = useState(\"1\");\n const [quotaUnit, setQuotaUnit] = useState(\"Ti\");\n const [validInput, setValidInput] = useState(false);\n\n useEffect(() => {\n if (enabled) {\n setQuotaEnabled(true);\n if (cfg) {\n const unitCalc = calculateBytes(cfg.quota || 0, true, false, true);\n\n setQuotaSize(unitCalc.total.toString());\n setQuotaUnit(unitCalc.unit);\n setValidInput(true);\n }\n }\n }, [enabled, cfg]);\n\n useEffect(() => {\n const valRegExp = /^\\d*(?:\\.\\d{1,2})?$/;\n\n if (!quotaEnabled) {\n setValidInput(true);\n return;\n }\n\n setValidInput(valRegExp.test(quotaSize));\n }, [quotaEnabled, quotaSize]);\n\n const enableBucketEncryption = () => {\n if (loading || !validInput) {\n return;\n }\n\n api.buckets\n .setBucketQuota(selectedBucket, {\n enabled: quotaEnabled,\n amount: parseInt(getBytes(quotaSize, quotaUnit, true)),\n quota_type: \"hard\",\n })\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Enable Bucket Quota\"\n titleIcon={}\n >\n \n \n );\n};\n\nexport default withStyles(styles)(EnableQuota);\n","// This file is part of MinIO Console Server\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 from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport { HelpIcon } from \"mds\";\nimport clsx from \"clsx\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input/Input\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n checked: boolean;\n switchOnly?: boolean;\n indicatorLabels?: string[];\n extraInputProps?: StandardInputProps[\"inputProps\"];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n indicatorLabelOn: {\n fontWeight: \"bold\",\n color: \"#081C42 !important\",\n },\n indicatorLabel: {\n fontSize: 12,\n color: \"#E2E2E2\",\n margin: \"0 8px 0 10px\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n tooltip: {\n fontSize: 16,\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles((theme) => ({\n root: {\n width: 50,\n height: 24,\n padding: 0,\n margin: 0,\n },\n switchBase: {\n padding: 1,\n \"&$checked\": {\n transform: \"translateX(24px)\",\n color: theme.palette.common.white,\n \"& + $track\": {\n backgroundColor: \"#4CCB92\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n border: \"none\",\n },\n },\n \"&$focusVisible $thumb\": {\n color: \"#4CCB92\",\n border: \"6px solid #fff\",\n },\n },\n thumb: {\n width: 22,\n height: 22,\n backgroundColor: \"#FAFAFA\",\n border: \"2px solid #FFFFFF\",\n marginLeft: 1,\n },\n track: {\n borderRadius: 24 / 2,\n backgroundColor: \"#E2E2E2\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n transition: theme.transitions.create([\"background-color\", \"border\"]),\n },\n checked: {},\n focusVisible: {},\n switchContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n },\n}))(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n classes,\n indicatorLabels,\n extraInputProps = {},\n}: IFormSwitch) => {\n const switchComponent = (\n \n {!switchOnly && (\n \n {indicatorLabels && indicatorLabels.length > 1\n ? indicatorLabels[1]\n : \"OFF\"}\n \n )}\n \n {!switchOnly && (\n \n {indicatorLabels ? indicatorLabels[0] : \"ON\"}\n \n )}\n \n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n \n \n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\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 } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { selectorTypes } from \"../SelectWrapper/SelectWrapper\";\nimport { Menu, MenuItem } from \"@mui/material\";\n\ninterface IInputUnitBox {\n classes: any;\n id: string;\n unitSelected: string;\n unitsList: selectorTypes[];\n disabled?: boolean;\n onUnitChange?: (newValue: string) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonTrigger: {\n border: \"#F0F2F2 1px solid\",\n borderRadius: 3,\n color: \"#838383\",\n backgroundColor: \"#fff\",\n fontSize: 12,\n },\n });\n\nconst InputUnitMenu = ({\n classes,\n id,\n unitSelected,\n unitsList,\n disabled = false,\n onUnitChange,\n}: IInputUnitBox) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = (newUnit: string) => {\n setAnchorEl(null);\n if (newUnit !== \"\" && onUnitChange) {\n onUnitChange(newUnit);\n }\n };\n\n return (\n \n \n {unitSelected}\n \n \n \n );\n};\n\nexport default withStyles(styles)(InputUnitMenu);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n}), 'RemoveRedEye');\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n}), 'VisibilityOff');\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","import { unstable_createChainedFunction as createChainedFunction } from '@mui/utils';\nexport default createChainedFunction;","import { unstable_deprecatedPropType as deprecatedPropType } from '@mui/utils';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => 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}","import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/className';\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}","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":["withStyles","theme","createStyles","_objectSpread","formFieldStyles","modalStyleUtils","_ref","classes","open","enabled","cfg","selectedBucket","closeModalAndRefresh","dispatch","useAppDispatch","_useState","useState","_useState2","_slicedToArray","loading","setLoading","_useState3","_useState4","quotaEnabled","setQuotaEnabled","_useState5","_useState6","quotaSize","setQuotaSize","_useState7","_useState8","quotaUnit","setQuotaUnit","_useState9","_useState10","validInput","setValidInput","useEffect","unitCalc","calculateBytes","quota","total","toString","unit","test","_jsx","ModalWrapper","modalOpen","onClose","title","titleIcon","BucketQuotaIcon","children","noValidate","autoComplete","onSubmit","e","preventDefault","api","buckets","setBucketQuota","amount","parseInt","getBytes","quota_type","then","catch","err","setModalErrorSnackMessage","errorToHandler","error","_jsxs","Grid","container","item","xs","className","formScrollable","formFieldRow","FormSwitchWrapper","value","id","name","checked","onChange","event","target","label","React","InputBoxWrapper","validity","valid","required","min","overlayObject","InputUnitMenu","onUnitChange","newValue","unitSelected","unitsList","k8sScalarUnitsExcluding","disabled","modalButtonBar","Button","type","variant","onClick","LinearProgress","StyledSwitch","root","width","height","padding","margin","switchBase","transform","color","palette","common","white","backgroundColor","boxShadow","opacity","border","thumb","marginLeft","track","borderRadius","transition","transitions","create","focusVisible","switchContainer","display","alignItems","justifyContent","Switch","indicatorLabelOn","fontWeight","indicatorLabel","fontSize","fieldDescription","marginTop","tooltip","actionsTray","fieldBasic","_ref$label","_ref$checked","_ref$disabled","_ref$switchOnly","switchOnly","_ref$tooltip","_ref$description","description","indicatorLabels","_ref$extraInputProps","extraInputProps","switchComponent","clsx","_defineProperty","length","inputProps","disableRipple","disableFocusRipple","disableTouchRipple","sm","md","InputLabel","htmlFor","inputLabel","tooltipContainer","Tooltip","placement","HelpIcon","textAlign","Typography","component","inputStyles","makeStyles","inputFieldStyles","InputField","props","TextField","InputProps","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","_ref$type","_ref$autoComplete","_ref$multiline","multiline","_ref$index","index","_ref$error","_ref$required","_ref$placeholder","placeholder","max","overlayId","_ref$overlayIcon","overlayIcon","_ref$overlayObject","_ref$noLabelMinWidth","noLabelMinWidth","_ref$pattern","pattern","_ref$autoFocus","autoFocus","_ref$className","onKeyPress","onFocus","onPaste","toggleTextInput","setToggleTextInput","inputBoxWrapperIcon","inputBoxWrapperType","VisibilityOffIcon","RemoveRedEyeIcon","errorInField","inputBoxContainer","noMinWidthLabel","fullWidth","helperText","inputRebase","concat","IconButton","size","buttonTrigger","_React$useState","_React$useState2","anchorEl","setAnchorEl","Boolean","handleClose","newUnit","Fragment","undefined","currentTarget","Menu","anchorOrigin","vertical","horizontal","transformOrigin","map","MenuItem","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","Object","defineProperty","enumerable","get","_utils","createSvgIcon","createChainedFunction","validator","reason","componentNameInError","Component","propName","componentName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","element","muiNames","indexOf","muiName","_len","arguments","funcs","Array","_key","reduce","acc","func","_len2","args","_key2","apply","this","module","obj","__esModule"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1690.416d7e98.chunk.js b/portal-ui/build/static/js/1690.416d7e98.chunk.js
new file mode 100644
index 000000000..474823dc6
--- /dev/null
+++ b/portal-ui/build/static/js/1690.416d7e98.chunk.js
@@ -0,0 +1,2 @@
+(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1690],{14917:function(e,n,t){"use strict";t(72791);var r=t(61889),i=t(72455),o=t(80184),s=(0,i.Z)((function(e){return{headerBarIcon:{marginRight:".7rem",color:e.palette.primary.main,"& .min-icon":{width:44,height:44},"@media (max-width: 600px)":{display:"none"}},headerBarSubheader:{color:"grey","@media (max-width: 900px)":{maxWidth:200}},stContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:8,borderBottom:"1px solid #EAEAEA","@media (max-width: 600px)":{flexFlow:"column"}},titleColumn:{height:"auto",justifyContent:"center",display:"flex",flexFlow:"column",alignItems:"flex-start","& h1":{fontSize:19}},leftItems:{display:"flex",alignItems:"center","@media (max-width: 600px)":{flexFlow:"column",width:"100%"}},rightItems:{display:"flex",alignItems:"center","& button":{marginLeft:8},"@media (max-width: 600px)":{width:"100%"}}}}));n.Z=function(e){var n=e.icon,t=e.title,i=e.subTitle,a=e.actions,l=e.className,c=s();return(0,o.jsx)(r.ZP,{container:!0,children:(0,o.jsxs)(r.ZP,{item:!0,xs:12,className:"".concat(c.stContainer," ").concat(l||""),children:[(0,o.jsxs)("div",{className:c.leftItems,children:[n?(0,o.jsx)("div",{className:c.headerBarIcon,children:n}):null,(0,o.jsxs)("div",{className:c.titleColumn,children:[(0,o.jsx)("h1",{style:{margin:0},children:t}),(0,o.jsx)("span",{className:c.headerBarSubheader,children:i})]})]}),(0,o.jsx)("div",{className:c.rightItems,children:a})]})})}},59197:function(e,n,t){"use strict";t.d(n,{Z:function(){return N}});var r=t(1413),i=t(72791),o=t(4942),s=t(63366),a=t(87462),l=t(28182),c=t(82466),u=t(94419),d=t(21217),f=(0,t(44046).ZP)(),p=t(86083),x=t(78519),h=t(85080),m=t(51184),g=t(45682),v=t(80184),y=["component","direction","spacing","divider","children","className","useFlexGap"],j=(0,h.Z)(),b=f("div",{name:"MuiStack",slot:"Root",overridesResolver:function(e,n){return n.root}});function Z(e){return(0,p.Z)({props:e,name:"MuiStack",defaultTheme:j})}function k(e,n){var t=i.Children.toArray(e).filter(Boolean);return t.reduce((function(e,r,o){return e.push(r),o0?l[t[n-1]]:"column";l[e]=r}}));r=(0,c.Z)(r,(0,m.k9)({theme:t},u,(function(e,t){return n.useFlexGap?{gap:(0,g.NA)(i,e)}:{"& > :not(style) + :not(style)":(0,o.Z)({margin:0},"margin".concat((r=t?l[t]:n.direction,{row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"}[r])),(0,g.NA)(i,e))};var r})))}return r=(0,m.dt)(t.breakpoints,r)};var w=t(66934),S=t(31402),D=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.createStyledComponent,t=void 0===n?b:n,r=e.useThemeProps,o=void 0===r?Z:r,c=e.componentName,f=void 0===c?"MuiStack":c,p=t(C),h=i.forwardRef((function(e,n){var t=o(e),r=(0,x.Z)(t),i=r.component,c=void 0===i?"div":i,h=r.direction,m=void 0===h?"column":h,g=r.spacing,j=void 0===g?0:g,b=r.divider,Z=r.children,C=r.className,w=r.useFlexGap,S=void 0!==w&&w,D=(0,s.Z)(r,y),P={direction:m,spacing:j,useFlexGap:S},N=(0,u.Z)({root:["root"]},(function(e){return(0,d.Z)(f,e)}),{});return(0,v.jsx)(p,(0,a.Z)({as:c,ownerState:P,ref:n,className:(0,l.Z)(N.root,C)},D,{children:b?k(Z,b):Z}))}));return h}({createStyledComponent:(0,w.ZP)("div",{name:"MuiStack",slot:"Root",overridesResolver:function(e,n){return n.root}}),useThemeProps:function(e){return(0,S.Z)({props:e,name:"MuiStack"})}}),P=D,N=function(e){var n=e.label,t=void 0===n?null:n,i=e.value,o=void 0===i?"-":i,s=e.orientation,a=void 0===s?"column":s,l=e.stkProps,c=void 0===l?{}:l,u=e.lblProps,d=void 0===u?{}:u,f=e.valProps,p=void 0===f?{}:f;return(0,v.jsxs)(P,(0,r.Z)((0,r.Z)({direction:{xs:"column",sm:a}},c),{},{children:[(0,v.jsx)("label",(0,r.Z)((0,r.Z)({style:{marginRight:5,fontWeight:600}},d),{},{children:t})),(0,v.jsx)("label",(0,r.Z)((0,r.Z)({style:{marginRight:5,fontWeight:500}},p),{},{children:o}))]}))}},90767:function(e,n,t){"use strict";var r=t(29439),i=t(1413),o=t(72791),s=t(40986),a=t(51691),l=t(11135),c=t(25787),u=t(23814),d=t(23508),f=t(29945),p=t(87995),x=t(81551),h=t(31776),m=t(82342),g=t(80184);n.Z=(0,c.Z)((function(e){return(0,l.Z)((0,i.Z)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}},u.Qw))}))((function(e){var n=e.classes,t=e.configurationName,i=e.closeResetModalAndRefresh,l=e.resetOpen,c=(0,x.TL)(),u=(0,o.useState)(!1),v=(0,r.Z)(u,2),y=v[0],j=v[1];(0,o.useEffect)((function(){y&&h.h.configs.resetConfig(t).then((function(){j(!1),i(!0)})).catch((function(e){j(!1),c((0,p.Ih)((0,m.g)(e.error)))}))}),[i,t,y,c]);return(0,g.jsx)(d.Z,{title:"Restore Defaults",confirmText:"Yes, Reset Configuration",isOpen:l,titleIcon:(0,g.jsx)(f.NvT,{}),isLoading:y,onConfirm:function(){j(!0)},onClose:function(){i(!1)},confirmationContent:(0,g.jsxs)(o.Fragment,{children:[y&&(0,g.jsx)(s.Z,{}),(0,g.jsxs)(a.Z,{children:["Are you sure you want to restore these configurations to default values?",(0,g.jsx)("br",{}),(0,g.jsx)("b",{className:n.wrapText,children:"Please note that this may cause your system to not be accessible"})]})]})})}))},37099:function(e,n,t){"use strict";var r=t(72791),i=t(29945),o=t(80184),s=function(e){var n=e.icon,t=e.description;return(0,o.jsxs)(i.xuv,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[n," ",(0,o.jsx)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:t})]})};n.Z=function(e){var n=e.helpText,t=e.docLink,a=e.docText,l=e.contents;return(0,o.jsxs)(i.xuv,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px"},children:[(0,o.jsxs)(i.xuv,{sx:{fontSize:"16px",fontWeight:600,display:"flex",alignItems:"center",marginBottom:"16px",paddingBottom:"20px","& .min-icon":{height:"21px",width:"21px",marginRight:"15px"}},children:[(0,o.jsx)(i.M9A,{}),(0,o.jsx)("div",{children:n})]}),(0,o.jsxs)(i.xuv,{sx:{fontSize:"14px",marginBottom:"15px"},children:[l.map((function(e,n){return(0,o.jsxs)(r.Fragment,{children:[e.icon&&(0,o.jsx)(i.xuv,{sx:{paddingBottom:"20px"},children:(0,o.jsx)(s,{icon:e.icon,description:e.iconDescription})}),(0,o.jsx)(i.xuv,{sx:{paddingBottom:"20px"},children:e.text})]},"feature-item-".concat(n))})),(0,o.jsx)(i.xuv,{sx:{paddingBottom:"20px"},children:(0,o.jsx)("a",{href:t,target:"_blank",rel:"noopener",children:a})})]})]})}},11690:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return I}});var r=t(4942),i=t(1413),o=t(74165),s=t(15861),a=t(29439),l=t(72791),c=t(29945),u=t(31776),d=t(82342),f=t(81551),p=t(87995),x=t(79979),h=t(14917),m=t(59197),g=t(47974),v=t(37099),y=t(93433),j=t(78687),b=t(99779),Z=t(80184),k=function(e){var n=e.name;return(0,Z.jsxs)("h4",{children:[(0,Z.jsx)(c.ZyT,{style:{transform:"rotateZ(90deg)"}}),n]})},C=function(e){var n=e.blockName,t=e.results;return(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsxs)("strong",{children:[n,":"]}),(0,Z.jsx)("ul",{children:t.map((function(e,t){return(0,Z.jsx)("li",{children:e},"policy-".concat(n,"-").concat(t))}))})]})},w=function(e){var n,t,r,i,o,s,a=e.entityName,u=e.results,d=0;switch(a){case"Group":d=(null===(n=u.groups)||void 0===n?void 0:n.length)||0;break;case"Policy":d=(null===(t=u.policies)||void 0===t?void 0:t.length)||0;break;case"User":d=(null===(r=u.users)||void 0===r?void 0:r.length)||0}return(0,Z.jsxs)(c.xuv,{className:"resultElement",sx:{marginTop:50,"&:first-of-type":{marginTop:0}},children:[(0,Z.jsxs)(c.NZf,{separator:!0,sx:{fontSize:12},icon:(0,Z.jsx)(c.anK,{style:{width:17,height:17}}),actions:(0,Z.jsxs)(c.xuv,{sx:{fontSize:14},children:[(0,Z.jsx)("strong",{children:d})," Entit",1===d?"y":"ies"," Found"]}),children:[a," Mappings"]}),(0,Z.jsxs)(c.xuv,{className:"resultsList",sx:{h4:{borderBottom:"#e2e2e2 1px solid",padding:"12px 0",margin:0,marginBottom:15,display:"flex",alignItems:"center","& svg":{marginRight:10,fill:"#3C77A7"}}},children:["Group"===a&&(null===(i=u.groups)||void 0===i?void 0:i.map((function(e,n){return(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(k,{name:e.group||""}),e.policies&&(0,Z.jsx)(C,{blockName:"Policies",results:e.policies})]},"policy-res-".concat(n))}))),"User"===a&&(null===(o=u.users)||void 0===o?void 0:o.map((function(e,n){return(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(k,{name:e.user||""}),e.policies&&(0,Z.jsx)(C,{blockName:"Policies",results:e.policies})]},"users-res-".concat(n))}))),"Policy"===a&&(null===(s=u.policies)||void 0===s?void 0:s.map((function(e,n){return(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(k,{name:e.policy||""}),e.groups&&(0,Z.jsx)(C,{blockName:"Groups",results:e.groups}),e.users&&(0,Z.jsx)(C,{blockName:"Users",results:e.users})]},"policy-map-".concat(n))})))]})]})},S=t(58400),D=function(){var e=(0,f.TL)(),n=(0,l.useState)(!1),t=(0,a.Z)(n,2),r=t[0],i=t[1],o=(0,l.useState)([""]),s=(0,a.Z)(o,2),x=s[0],h=s[1],m=(0,l.useState)([""]),g=(0,a.Z)(m,2),v=g[0],k=g[1],C=(0,l.useState)(null),D=(0,a.Z)(C,2),P=D[0],N=D[1],_=(0,j.v9)((function(e){return e.createUser.selectedPolicies}));return(0,Z.jsxs)(c.xuv,{sx:{marginTop:15,paddingTop:0},children:[(0,Z.jsxs)(c.rjZ,{container:!0,sx:{marginTop:5},children:[(0,Z.jsxs)(c.rjZ,{item:!0,sm:12,md:6,lg:5,sx:{padding:10,paddingTop:0},children:[(0,Z.jsx)(c.NZf,{children:"Query Filters"}),(0,Z.jsxs)(c.xuv,{sx:{padding:"0 10px",display:"flex",flexDirection:"column",gap:40},children:[(0,Z.jsxs)(c.xuv,{sx:{padding:"10px 26px"},withBorders:!0,children:[(0,Z.jsx)(c.xuv,{sx:{display:"flex"},children:(0,Z.jsx)("h4",{style:{margin:0,marginBottom:10,fontSize:14},children:"Users"})}),(0,Z.jsx)(c.xuv,{sx:{overflowY:"auto",minHeight:50,maxHeight:250,"& > div > div":{width:"100%"}},children:x.map((function(e,n){return(0,Z.jsx)(c.Wzg,{id:"search-user-".concat(n),value:e,onChange:function(e){var t=(0,y.Z)(x);t[n]=e.target.value,h(t)},overlayIcon:x.length===n+1?(0,Z.jsx)(c.dtP,{}):(0,Z.jsx)(c.HFL,{}),overlayAction:function(){!function(e,n){if(e){var t=[].concat((0,y.Z)(x),[""]);h(t)}else{var r=x.filter((function(e,t){return t!==n}));h(r)}}(x.length===n+1,n)}},"search-user-".concat(n))}))})]}),(0,Z.jsxs)(c.xuv,{sx:{padding:"10px 26px"},withBorders:!0,children:[(0,Z.jsx)("h4",{style:{margin:0,marginBottom:10,fontSize:14},children:"Groups"}),(0,Z.jsx)(c.xuv,{sx:{overflowY:"auto",minHeight:50,maxHeight:"calc(100vh - 340px)","& > div > div":{width:"100%"}},children:v.map((function(e,n){return(0,Z.jsx)(c.Wzg,{id:"search-group-".concat(n),value:e,onChange:function(e){var t=(0,y.Z)(v);t[n]=e.target.value,k(t)},overlayIcon:v.length===n+1?(0,Z.jsx)(c.dtP,{}):(0,Z.jsx)(c.HFL,{}),overlayAction:function(){!function(e,n){if(e){var t=[].concat((0,y.Z)(v),[""]);k(t)}else{var r=v.filter((function(e,t){return t!==n}));k(r)}}(v.length===n+1,n)}},"search-group-".concat(n))}))})]}),(0,Z.jsxs)(c.xuv,{sx:{padding:"10px 26px"},withBorders:!0,children:[(0,Z.jsx)("h4",{style:{margin:0,marginBottom:10,fontSize:14},children:"Policies"}),(0,Z.jsx)(c.xuv,{sx:{minHeight:265,maxHeight:"calc(100vh - 740px)"},children:(0,Z.jsx)(S.Z,{selectedPolicy:_,noTitle:!0})})]})]})]}),(0,Z.jsx)(c.rjZ,{item:!0,sm:12,md:6,lg:7,sx:{padding:10,paddingTop:0,display:"flex",flexDirection:"column"},children:r?(0,Z.jsx)(c.xuv,{sx:{textAlign:"center"},children:(0,Z.jsx)(c.aNw,{})}):(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(c.NZf,{actions:(0,Z.jsx)(c.xuv,{sx:{display:"flex",flexDirection:"row",alignItems:"center",fontSize:14},children:null!==P&&void 0!==P&&P.timestamp?(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(c.wZd,{style:{width:14,height:14,marginRight:5,fill:"#BEBFBF"}}),b.ou.fromISO(P.timestamp).toFormat("D HH:mm:ss")]}):""}),children:"Query Results"}),P?(0,Z.jsxs)(c.xuv,{sx:{backgroundColor:"#FBFAFA",padding:"8px 22px",flexGrow:1,overflowY:"auto"},children:[!P.groups&&!P.users&&!P.policies&&(0,Z.jsx)(c.xuv,{sx:{textAlign:"center"},children:(0,Z.jsx)("h4",{children:"No Results Available"})}),!!P.groups&&(0,Z.jsx)(w,{results:P,entityName:"Group"}),!!P.users&&(0,Z.jsx)(w,{results:P,entityName:"User"}),!!P.policies&&(0,Z.jsx)(w,{results:P,entityName:"Policy"})]}):(0,Z.jsx)(c.xuv,{sx:{textAlign:"center"},children:"No query results yet"})]})})]}),(0,Z.jsx)(c.rjZ,{container:!0,children:(0,Z.jsx)(c.rjZ,{item:!0,xs:12,sx:{display:"flex",justifyContent:"flex-start",marginTop:45,padding:"0 20px"},children:(0,Z.jsx)(c.zxk,{id:"search-entity",type:"button",variant:"callAction",onClick:function(){i(!0);var n={},t=_.filter((function(e){return""!==e})),r=x.filter((function(e){return""!==e})),o=v.filter((function(e){return""!==e}));t.length>0&&(n.policies=t),r.length>0&&(n.users=r),o.length>0&&(n.groups=o),u.h.ldapEntities.getLdapEntities(n).then((function(e){N(e.data),i(!1)})).catch((function(n){e((0,p.Ih)((0,d.g)(n.error))),i(!1)}))},icon:(0,Z.jsx)(c.W1M,{}),children:"Search"})})})]})},P=t(90767),N=t(99670),_=["server_addr","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter"],I=function(){var e=(0,f.TL)(),n=x.iR,t=(0,l.useState)(!0),y=(0,a.Z)(t,2),j=y[0],b=y[1],k=(0,l.useState)(!1),C=(0,a.Z)(k,2),w=C[0],S=C[1],I=(0,l.useState)(!1),E=(0,a.Z)(I,2),A=E[0],F=E[1],L=(0,l.useState)({}),B=(0,a.Z)(L,2),R=B[0],q=B[1],T=(0,l.useState)(void 0),O=(0,a.Z)(T,2),M=O[0],z=O[1],U=(0,l.useState)(!1),G=(0,a.Z)(U,2),H=G[0],K=G[1],W=(0,l.useState)(!1),Y=(0,a.Z)(W,2),Q=Y[0],V=Y[1],$=(0,l.useState)("configuration"),X=(0,a.Z)($,2),J=X[0],ee=X[1],ne=function(){H&&M&&te(M),K(!H)},te=function(e){var n={};if(e&&e.length>0){var t=e.find((function(e){return"enable"===e.key})),r=0;e.forEach((function(e){n[e.key]=e.value,_.includes(e.key)&&e.value&&""!==e.value&&"off"!==e.value&&r++}));var i=r===_.length;t&&"on"!==t.value||!i?S(!1):S(!0),F(i)}q(n)};(0,l.useEffect)((function(){j&&u.h.configs.configInfo("identity_ldap").then((function(e){e.data.length>0&&(z(e.data[0].key_values),te(e.data[0].key_values||[])),b(!1)})).catch((function(n){b(!1),e((0,p.Ih)((0,d.g)(n.error)))}))}),[e,j]);var re=function(){var n=(0,s.Z)((0,o.Z)().mark((function n(t){return(0,o.Z)().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:V(!1),t&&(e((0,p.cN)(t)),z(void 0),q({}),S(!1),F(!1),K(!1));case 2:case"end":return n.stop()}}),n)})));return function(e){return n.apply(this,arguments)}}();return(0,l.useEffect)((function(){e((0,p.Sc)("LDAP"))}),[]),(0,Z.jsxs)(c.rjZ,{item:!0,xs:12,children:[Q&&(0,Z.jsx)(P.Z,{configurationName:"identity_ldap",closeResetModalAndRefresh:re,resetOpen:Q}),(0,Z.jsx)(g.Z,{label:"LDAP",actions:(0,Z.jsx)(N.Z,{})}),(0,Z.jsx)(c.Xgh,{variant:"constrained",children:(0,Z.jsx)(c.mQc,{horizontal:!0,options:[{tabConfig:{id:"configuration",label:"Configuration"},content:(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(h.Z,{title:H?"Edit Configuration":"",actions:H?null:(0,Z.jsxs)(l.Fragment,{children:[(0,Z.jsx)(c.zxk,{id:"edit",type:"button",variant:"callAction",icon:(0,Z.jsx)(c.dY8,{}),onClick:ne,label:"Edit Configuration",disabled:j}),A&&(0,Z.jsx)(c.zxk,{id:"is-configuration-enabled",onClick:function(){return function(n){var t={key_values:[{key:"enable",value:n?"on":"off"}]};u.h.configs.setConfig("identity_ldap",t).then((function(n){S(!w),e((0,p.cN)(n.data.restart||!1)),n.data.restart||e((0,p.y1)("Configuration saved successfully"))})).catch((function(n){e((0,p.Ih)((0,d.g)(n.error)))}))}(!w)},label:w?"Disable LDAP":"Enable LDAP",variant:w?"secondary":"regular"}),(0,Z.jsx)(c.zxk,{id:"refresh-idp-config",onClick:function(){return b(!0)},label:"Refresh",icon:(0,Z.jsx)(c.DuK,{})})]})}),(0,Z.jsx)("br",{}),j?(0,Z.jsx)(c.xuv,{sx:{display:"flex",justifyContent:"center",marginTop:10},children:(0,Z.jsx)(c.aNw,{})}):(0,Z.jsx)(l.Fragment,{children:H?(0,Z.jsx)(l.Fragment,{children:(0,Z.jsxs)(c.ltY,{helpBox:(0,Z.jsx)(v.Z,{helpText:"Learn more about LDAP Configurations",contents:x.Si,docLink:"https://min.io/docs/minio/linux/operations/external-iam.html?ref=con#minio-external-iam-ad-ldap",docText:"Learn more about LDAP Configurations"}),children:[Object.entries(n).map((function(e){var n=(0,a.Z)(e,2);return function(e,n){return"toggle"===n.type?(0,Z.jsx)(c.rsf,{indicatorLabels:["Enabled","Disabled"],checked:"on"===R[e],value:"is-field-enabled",id:"is-field-enabled",name:"is-field-enabled",label:n.label,tooltip:n.tooltip,onChange:function(n){return q((0,i.Z)((0,i.Z)({},R),{},(0,r.Z)({},e,n.target.checked?"on":"off")))},description:"",disabled:!H},e):(0,Z.jsx)(c.Wzg,{id:e,required:n.required,name:e,label:n.label,tooltip:n.tooltip,error:n.hasError(R[e],H),value:R[e]?R[e]:"",onChange:function(n){return q((0,i.Z)((0,i.Z)({},R),{},(0,r.Z)({},e,n.target.value)))},placeholder:n.placeholder,disabled:!H,type:n.type},e)}(n[0],n[1])})),(0,Z.jsxs)(c.xuv,{sx:{display:"flex",alignItems:"center",justifyContent:"flex-end",marginTop:"20px",gap:"15px"},children:[H&&(0,Z.jsx)(c.zxk,{id:"clear",type:"button",variant:"secondary",onClick:function(){return V(!0)},label:"Reset Configuration"}),H&&(0,Z.jsx)(c.zxk,{id:"cancel",type:"button",variant:"regular",onClick:ne,label:"Cancel"}),H&&(0,Z.jsx)(c.zxk,{id:"save-key",type:"submit",variant:"callAction",color:"primary",disabled:j||!function(){for(var e=0,t=Object.entries(n);e0?(0,h.jsxs)(o.Fragment,{children:[(0,h.jsx)(a.rjZ,{item:!0,xs:12,className:"inputItem",children:(0,h.jsx)(c.Z,{placeholder:"Start typing to search for a Policy",onChange:function(e){P(e)},value:D,label:t?"":"Assign Policies"})}),(0,h.jsx)(a.wQF,{columns:[{label:"Policy",elementKey:"name"}],onSelect:function(e){var n=e.target,t=n.value,i=n.checked,o=(0,r.Z)(N);i?o.push(t):o=o.filter((function(e){return e!==t})),o=o.filter((function(e){return""!==e})),m((0,f.ue)(o))},selectedItems:N,isLoading:k,records:I,entityName:"Policies",idField:"name",customPaperHeight:"200px"})]}):(0,h.jsx)(a.xuv,{sx:{textAlign:"center",padding:"10px 0"},children:"No Policies Available"})]})}},21639:function(e,n,t){"use strict";t.d(n,{KE:function(){return s},LQ:function(){return r},V2:function(){return o},g4:function(){return i}});var r=function(e,n){if(e.accessKey&&n.accessKey){if(e.accessKey>n.accessKey)return 1;if(e.accessKeyn.name?1:e.namen?1:en.policy?1:e.policy.\n\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Theme } from \"@mui/material/styles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\ninterface IScreenTitle {\n icon?: any;\n title?: any;\n subTitle?: any;\n actions?: any;\n className?: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n headerBarIcon: {\n marginRight: \".7rem\",\n color: theme.palette.primary.main,\n \"& .min-icon\": {\n width: 44,\n height: 44,\n },\n \"@media (max-width: 600px)\": {\n display: \"none\",\n },\n },\n headerBarSubheader: {\n color: \"grey\",\n \"@media (max-width: 900px)\": {\n maxWidth: 200,\n },\n },\n stContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: 8,\n\n borderBottom: \"1px solid #EAEAEA\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n titleColumn: {\n height: \"auto\",\n justifyContent: \"center\",\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n \"& h1\": {\n fontSize: 19,\n },\n },\n leftItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n width: \"100%\",\n },\n },\n rightItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"& button\": {\n marginLeft: 8,\n },\n \"@media (max-width: 600px)\": {\n width: \"100%\",\n },\n },\n}));\n\nconst ScreenTitle = ({\n icon,\n title,\n subTitle,\n actions,\n className,\n}: IScreenTitle) => {\n const classes = useStyles();\n return (\n \n \n
\n {icon ?
{icon}
: null}\n
\n
{title}
\n {subTitle}\n
\n
\n\n
{actions}
\n \n \n );\n};\n\nexport default ScreenTitle;\n","import createStyled from './createStyled';\nconst styled = createStyled();\nexport default styled;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"component\", \"direction\", \"spacing\", \"divider\", \"children\", \"className\", \"useFlexGap\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { deepmerge, unstable_composeClasses as composeClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';\nimport systemStyled from '../styled';\nimport useThemePropsSystem from '../useThemeProps';\nimport { extendSxProp } from '../styleFunctionSx';\nimport createTheme from '../createTheme';\nimport { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from '../breakpoints';\nimport { createUnarySpacing, getValue } from '../spacing';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n});\nfunction useThemePropsDefault(props) {\n return useThemePropsSystem({\n props,\n name: 'MuiStack',\n defaultTheme\n });\n}\n\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n if (index < childrenArray.length - 1) {\n output.push( /*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n return output;\n }, []);\n}\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = _extends({\n display: 'flex',\n flexDirection: 'column'\n }, handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n })));\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n const styleFromPropValue = (propValue, breakpoint) => {\n if (ownerState.useFlexGap) {\n return {\n gap: getValue(transformer, propValue)\n };\n }\n return {\n '& > :not(style) + :not(style)': {\n margin: 0,\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nexport default function createStack(options = {}) {\n const {\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent = defaultCreateStyledComponent,\n useThemeProps = useThemePropsDefault,\n componentName = 'MuiStack'\n } = options;\n const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n };\n const StackRoot = createStyledComponent(style);\n const Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps(inProps);\n const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children,\n className,\n useFlexGap = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = {\n direction,\n spacing,\n useFlexGap\n };\n const classes = useUtilityClasses();\n return /*#__PURE__*/_jsx(StackRoot, _extends({\n as: component,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className)\n }, other, {\n children: divider ? joinChildren(children, divider) : children\n }));\n });\n process.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n children: PropTypes.node,\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n divider: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n } : void 0;\n return Stack;\n}","import PropTypes from 'prop-types';\nimport { createStack } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nconst Stack = createStack({\n createStyledComponent: styled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n }),\n useThemeProps: inProps => useThemeProps({\n props: inProps,\n name: 'MuiStack'\n })\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.\n *\n * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),\n * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.\n *\n * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.\n * @default false\n */\n useFlexGap: PropTypes.bool\n} : void 0;\nexport default Stack;","import React from \"react\";\nimport { Stack } from \"@mui/material\";\n\ntype LabelValuePairProps = {\n label?: any;\n value?: any;\n orientation?: any;\n stkProps?: any;\n lblProps?: any;\n valProps?: any;\n};\n\nconst LabelValuePair = ({\n label = null,\n value = \"-\",\n orientation = \"column\",\n stkProps = {},\n lblProps = {},\n valProps = {},\n}: LabelValuePairProps) => {\n return (\n \n \n \n \n );\n};\n\nexport default LabelValuePair;\n","// This file is part of MinIO Console Server\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, { useEffect, useState } from \"react\";\n\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { deleteDialogStyles } from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...deleteDialogStyles,\n });\n\ninterface IResetConfiguration {\n classes: any;\n configurationName: string;\n closeResetModalAndRefresh: (reloadConfiguration: boolean) => void;\n\n resetOpen: boolean;\n}\n\nconst ResetConfigurationModal = ({\n classes,\n configurationName,\n closeResetModalAndRefresh,\n resetOpen,\n}: IResetConfiguration) => {\n const dispatch = useAppDispatch();\n const [resetLoading, setResetLoading] = useState(false);\n\n useEffect(() => {\n if (resetLoading) {\n api.configs\n .resetConfig(configurationName)\n .then(() => {\n setResetLoading(false);\n closeResetModalAndRefresh(true);\n })\n .catch((err) => {\n setResetLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n }\n }, [closeResetModalAndRefresh, configurationName, resetLoading, dispatch]);\n\n const resetConfiguration = () => {\n setResetLoading(true);\n };\n\n return (\n }\n isLoading={resetLoading}\n onConfirm={resetConfiguration}\n onClose={() => {\n closeResetModalAndRefresh(false);\n }}\n confirmationContent={\n \n {resetLoading && }\n \n Are you sure you want to restore these configurations to default\n values?\n \n \n Please note that this may cause your system to not be accessible\n \n \n \n }\n />\n );\n};\n\nexport default withStyles(styles)(ResetConfigurationModal);\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 } from \"react\";\nimport { HelpIconFilled, Box } from \"mds\";\n\ninterface IContent {\n icon: React.ReactNode;\n text: string;\n iconDescription: string;\n}\n\ninterface IAddIDPConfigurationHelpBoxProps {\n helpText: string;\n docLink: string;\n docText: string;\n contents: IContent[];\n}\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n \n \n {contents.map((content, index) => (\n \n {content.icon && (\n \n \n \n )}\n {content.text}\n \n ))}\n \n \n {docText}\n \n \n \n \n );\n};\n\nexport default AddIDPConfigurationHelpBox;\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 } from \"react\";\nimport { Box, CollapseCaret, GroupsMenuIcon, SectionTitle } from \"mds\";\nimport { LdapEntities } from \"api/consoleApi\";\n\ninterface IResultBlock {\n entityName: \"Group\" | \"User\" | \"Policy\";\n results: LdapEntities;\n}\n\ninterface IEntityResultName {\n name: string;\n}\n\ninterface IEntityResultItem {\n blockName: \"Policies\" | \"Groups\" | \"Users\";\n results: string[];\n}\n\nconst EntityResultTitle = ({ name }: IEntityResultName) => {\n return (\n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\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 from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { Theme } from \"@mui/material/styles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\ninterface IScreenTitle {\n icon?: any;\n title?: any;\n subTitle?: any;\n actions?: any;\n className?: any;\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n headerBarIcon: {\n marginRight: \".7rem\",\n color: theme.palette.primary.main,\n \"& .min-icon\": {\n width: 44,\n height: 44,\n },\n \"@media (max-width: 600px)\": {\n display: \"none\",\n },\n },\n headerBarSubheader: {\n color: \"grey\",\n \"@media (max-width: 900px)\": {\n maxWidth: 200,\n },\n },\n stContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: 8,\n\n borderBottom: \"1px solid #EAEAEA\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n titleColumn: {\n height: \"auto\",\n justifyContent: \"center\",\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n \"& h1\": {\n fontSize: 19,\n },\n },\n leftItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n width: \"100%\",\n },\n },\n rightItems: {\n display: \"flex\",\n alignItems: \"center\",\n \"& button\": {\n marginLeft: 8,\n },\n \"@media (max-width: 600px)\": {\n width: \"100%\",\n },\n },\n}));\n\nconst ScreenTitle = ({\n icon,\n title,\n subTitle,\n actions,\n className,\n}: IScreenTitle) => {\n const classes = useStyles();\n return (\n \n \n
\n {icon ?
{icon}
: null}\n
\n
{title}
\n {subTitle}\n
\n
\n\n
{actions}
\n \n \n );\n};\n\nexport default ScreenTitle;\n","// This file is part of MinIO Console Server\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 } from \"react\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport { ITabOption } from \"./types\";\n\ninterface ITabSelector {\n selectedTab: number;\n onChange: (newValue: number) => void;\n tabOptions: ITabOption[];\n}\n\nconst tabSubStyles = makeStyles({\n tabRoot: {\n height: \"40px\",\n borderBottom: \"1px solid #eaeaea\",\n },\n root: {\n width: \"120px\",\n backgroundColor: \"transparent\",\n paddingTop: 0,\n paddingBottom: 0,\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#07193E\",\n height: \"40px\",\n },\n selected: {\n \"&.MuiTab-selected\": {\n backgroundColor: \"#F6F7F7 !important\",\n },\n \"&.MuiTab-wrapper\": {\n color: \"#07193E\",\n fontWeight: 600,\n },\n },\n indicator: {\n background:\n \"transparent linear-gradient(90deg, #072B4E 0%, #081C42 100%) 0% 0% no-repeat padding-box;\",\n height: 2,\n },\n scroller: {\n maxWidth: 1185,\n position: \"relative\",\n \"&::after\": {\n content: '\" \"',\n backgroundColor: \"#EEF1F4\",\n height: 2,\n width: \"100%\",\n display: \"block\",\n },\n },\n});\n\nconst TabSelector = ({ selectedTab, onChange, tabOptions }: ITabSelector) => {\n const subStyles = tabSubStyles();\n\n return (\n \n , newValue: number) => {\n onChange(newValue);\n }}\n classes={{\n root: subStyles.tabRoot,\n indicator: subStyles.indicator,\n scroller: subStyles.scroller,\n }}\n >\n {tabOptions.map((option, index) => {\n let tabOptions: ITabOption = {\n label: option.label,\n };\n\n if (option.value) {\n tabOptions = { ...tabOptions, value: option.value };\n }\n\n if (option.disabled) {\n tabOptions = { ...tabOptions, disabled: option.disabled };\n }\n\n return (\n \n );\n })}\n \n \n );\n};\n\nexport default TabSelector;\n","import createStyled from './createStyled';\nconst styled = createStyled();\nexport default styled;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"component\", \"direction\", \"spacing\", \"divider\", \"children\", \"className\", \"useFlexGap\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { deepmerge, unstable_composeClasses as composeClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';\nimport systemStyled from '../styled';\nimport useThemePropsSystem from '../useThemeProps';\nimport { extendSxProp } from '../styleFunctionSx';\nimport createTheme from '../createTheme';\nimport { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from '../breakpoints';\nimport { createUnarySpacing, getValue } from '../spacing';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n});\nfunction useThemePropsDefault(props) {\n return useThemePropsSystem({\n props,\n name: 'MuiStack',\n defaultTheme\n });\n}\n\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n if (index < childrenArray.length - 1) {\n output.push( /*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n return output;\n }, []);\n}\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = _extends({\n display: 'flex',\n flexDirection: 'column'\n }, handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n })));\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n const styleFromPropValue = (propValue, breakpoint) => {\n if (ownerState.useFlexGap) {\n return {\n gap: getValue(transformer, propValue)\n };\n }\n return {\n '& > :not(style) + :not(style)': {\n margin: 0,\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nexport default function createStack(options = {}) {\n const {\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent = defaultCreateStyledComponent,\n useThemeProps = useThemePropsDefault,\n componentName = 'MuiStack'\n } = options;\n const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n };\n const StackRoot = createStyledComponent(style);\n const Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps(inProps);\n const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children,\n className,\n useFlexGap = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const ownerState = {\n direction,\n spacing,\n useFlexGap\n };\n const classes = useUtilityClasses();\n return /*#__PURE__*/_jsx(StackRoot, _extends({\n as: component,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className)\n }, other, {\n children: divider ? joinChildren(children, divider) : children\n }));\n });\n process.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n children: PropTypes.node,\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n divider: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n } : void 0;\n return Stack;\n}","import PropTypes from 'prop-types';\nimport { createStack } from '@mui/system';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nconst Stack = createStack({\n createStyledComponent: styled('div', {\n name: 'MuiStack',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n }),\n useThemeProps: inProps => useThemeProps({\n props: inProps,\n name: 'MuiStack'\n })\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.\n *\n * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),\n * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.\n *\n * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.\n * @default false\n */\n useFlexGap: PropTypes.bool\n} : void 0;\nexport default Stack;","import React from \"react\";\nimport { Stack } from \"@mui/material\";\n\ntype LabelValuePairProps = {\n label?: any;\n value?: any;\n orientation?: any;\n stkProps?: any;\n lblProps?: any;\n valProps?: any;\n};\n\nconst LabelValuePair = ({\n label = null,\n value = \"-\",\n orientation = \"column\",\n stkProps = {},\n lblProps = {},\n valProps = {},\n}: LabelValuePairProps) => {\n return (\n \n \n \n \n );\n};\n\nexport default LabelValuePair;\n","// This file is part of MinIO Console Server\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, { useEffect, useState } from \"react\";\n\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { deleteDialogStyles } from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"mds\";\nimport { setErrorSnackMessage } from \"../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../store\";\nimport { api } from \"api\";\nimport { errorToHandler } from \"api/errors\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...deleteDialogStyles,\n });\n\ninterface IResetConfiguration {\n classes: any;\n configurationName: string;\n closeResetModalAndRefresh: (reloadConfiguration: boolean) => void;\n\n resetOpen: boolean;\n}\n\nconst ResetConfigurationModal = ({\n classes,\n configurationName,\n closeResetModalAndRefresh,\n resetOpen,\n}: IResetConfiguration) => {\n const dispatch = useAppDispatch();\n const [resetLoading, setResetLoading] = useState(false);\n\n useEffect(() => {\n if (resetLoading) {\n api.configs\n .resetConfig(configurationName)\n .then(() => {\n setResetLoading(false);\n closeResetModalAndRefresh(true);\n })\n .catch((err) => {\n setResetLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n }\n }, [closeResetModalAndRefresh, configurationName, resetLoading, dispatch]);\n\n const resetConfiguration = () => {\n setResetLoading(true);\n };\n\n return (\n }\n isLoading={resetLoading}\n onConfirm={resetConfiguration}\n onClose={() => {\n closeResetModalAndRefresh(false);\n }}\n confirmationContent={\n \n {resetLoading && }\n \n Are you sure you want to restore these configurations to default\n values?\n \n \n Please note that this may cause your system to not be accessible\n \n \n \n }\n />\n );\n};\n\nexport default withStyles(styles)(ResetConfigurationModal);\n","import React, { Fragment } from \"react\";\n\nimport { Box } from \"@mui/material\";\nimport { HelpIconFilled } from \"mds\";\n\ninterface IContent {\n icon: React.ReactNode;\n text: string;\n iconDescription: string;\n}\n\ninterface IAddIDPConfigurationHelpBoxProps {\n helpText: string;\n docLink: string;\n docText: string;\n contents: IContent[];\n}\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n \n \n {contents.map((content, index) => (\n \n {content.icon && (\n \n \n \n )}\n {content.text}\n \n ))}\n \n \n {docText}\n \n \n \n \n );\n};\n\nexport default AddIDPConfigurationHelpBox;\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 } from \"react\";\nimport { Box, CollapseCaret, GroupsMenuIcon, SectionTitle } from \"mds\";\nimport { LdapEntities } from \"api/consoleApi\";\n\ninterface IResultBlock {\n entityName: \"Group\" | \"User\" | \"Policy\";\n results: LdapEntities;\n}\n\ninterface IEntityResultName {\n name: string;\n}\n\ninterface IEntityResultItem {\n blockName: \"Policies\" | \"Groups\" | \"Users\";\n results: string[];\n}\n\nconst EntityResultTitle = ({ name }: IEntityResultName) => {\n return (\n
\n \n )}\n {!!results.groups && (\n \n )}\n {!!results.users && (\n \n )}\n {!!results.policies && (\n \n )}\n \n ) : (\n No query results yet\n )}\n \n )}\n \n \n \n \n }\n >\n Search\n \n \n \n \n );\n};\n\nexport default LDAPEntitiesQuery;\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, useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n EditIcon,\n FormLayout,\n Grid,\n InputBox,\n Loader,\n PageLayout,\n RefreshIcon,\n} from \"mds\";\nimport { useAppDispatch } from \"../../../../store\";\nimport {\n setErrorSnackMessage,\n setHelpName,\n setServerNeedsRestart,\n setSnackBarMessage,\n} from \"../../../../systemSlice\";\nimport ScreenTitle from \"../../Common/ScreenTitle/ScreenTitle\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport LabelValuePair from \"../../Common/UsageBarWrapper/LabelValuePair\";\nimport PageHeaderWrapper from \"../../Common/PageHeaderWrapper/PageHeaderWrapper\";\nimport { ldapFormFields, ldapHelpBoxContents } from \"../utils\";\nimport AddIDPConfigurationHelpBox from \"../AddIDPConfigurationHelpbox\";\nimport LDAPEntitiesQuery from \"./LDAPEntitiesQuery\";\nimport ResetConfigurationModal from \"../../EventDestinations/CustomForms/ResetConfigurationModal\";\nimport { TabPanel } from \"../../../shared/tabs\";\nimport TabSelector from \"../../Common/TabSelector/TabSelector\";\nimport HelpMenu from \"../../HelpMenu\";\nimport { api } from \"api\";\nimport { ConfigurationKV } from \"api/consoleApi\";\nimport { errorToHandler } from \"api/errors\";\n\nconst enabledConfigLDAP = [\n \"server_addr\",\n \"lookup_bind_dn\",\n \"lookup_bind_password\",\n \"user_dn_search_base_dn\",\n \"user_dn_search_filter\",\n];\n\nconst IDPLDAPConfigurationDetails = () => {\n const dispatch = useAppDispatch();\n\n const formFields = ldapFormFields;\n\n const [loading, setLoading] = useState(true);\n const [isEnabled, setIsEnabled] = useState(false);\n const [hasConfiguration, setHasConfiguration] = useState(false);\n const [fields, setFields] = useState({});\n const [record, setRecord] = useState(\n undefined\n );\n const [editMode, setEditMode] = useState(false);\n const [resetOpen, setResetOpen] = useState(false);\n const [curTab, setCurTab] = useState(0);\n\n const toggleEditMode = () => {\n if (editMode && record) {\n parseFields(record);\n }\n setEditMode(!editMode);\n };\n\n const parseFields = (record: ConfigurationKV[]) => {\n let fields: any = {};\n if (record && record.length > 0) {\n const enabled = record.find((item: any) => item.key === \"enable\");\n\n let totalCoincidences = 0;\n\n record.forEach((item: any) => {\n fields[item.key] = item.value;\n\n if (\n enabledConfigLDAP.includes(item.key) &&\n item.value &&\n item.value !== \"\" &&\n item.value !== \"off\"\n ) {\n totalCoincidences++;\n }\n });\n\n const hasConfig = totalCoincidences === enabledConfigLDAP.length;\n\n if ((!enabled || enabled.value === \"on\") && hasConfig) {\n setIsEnabled(true);\n } else {\n setIsEnabled(false);\n }\n\n setHasConfiguration(hasConfig);\n }\n setFields(fields);\n };\n\n useEffect(() => {\n const loadRecord = () => {\n api.configs\n .configInfo(\"identity_ldap\")\n .then((res) => {\n if (res.data.length > 0) {\n setRecord(res.data[0].key_values);\n parseFields(res.data[0].key_values || []);\n }\n setLoading(false);\n })\n .catch((err) => {\n setLoading(false);\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n if (loading) {\n loadRecord();\n }\n }, [dispatch, loading]);\n\n const validSave = () => {\n for (const [key, value] of Object.entries(formFields)) {\n if (\n value.required &&\n !(\n fields[key] !== undefined &&\n fields[key] !== null &&\n fields[key] !== \"\"\n )\n ) {\n return false;\n }\n }\n return true;\n };\n\n const saveRecord = () => {\n const keyVals = Object.keys(formFields).map((key) => {\n return {\n key,\n value: fields[key],\n };\n });\n\n api.configs\n .setConfig(\"identity_ldap\", {\n key_values: keyVals,\n })\n .then((res) => {\n setEditMode(false);\n setRecord(keyVals);\n parseFields(keyVals);\n dispatch(setServerNeedsRestart(res.data.restart || false));\n\n if (!res.data.restart) {\n dispatch(setSnackBarMessage(\"Configuration saved successfully\"));\n }\n })\n .catch((err) => {\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n const closeDeleteModalAndRefresh = async (refresh: boolean) => {\n setResetOpen(false);\n\n if (refresh) {\n dispatch(setServerNeedsRestart(refresh));\n setRecord(undefined);\n setFields({});\n setIsEnabled(false);\n setHasConfiguration(false);\n setEditMode(false);\n }\n };\n\n const toggleConfiguration = (value: boolean) => {\n const payload = {\n key_values: [\n {\n key: \"enable\",\n value: value ? \"on\" : \"off\",\n },\n ],\n };\n\n api.configs\n .setConfig(\"identity_ldap\", payload)\n .then((res) => {\n setIsEnabled(!isEnabled);\n dispatch(setServerNeedsRestart(res.data.restart || false));\n if (!res.data.restart) {\n dispatch(setSnackBarMessage(\"Configuration saved successfully\"));\n }\n })\n .catch((err) => {\n dispatch(setErrorSnackMessage(errorToHandler(err.error)));\n });\n };\n\n const renderFormField = (key: string, value: any) => {\n switch (value.type) {\n case \"toggle\":\n return (\n \n \n setFields({ ...fields, [key]: e.target.checked ? \"on\" : \"off\" })\n }\n description=\"\"\n disabled={!editMode}\n />\n \n );\n default:\n return (\n ) =>\n setFields({ ...fields, [key]: e.target.value })\n }\n placeholder={value.placeholder}\n disabled={!editMode}\n type={value.type}\n />\n );\n }\n };\n\n useEffect(() => {\n dispatch(setHelpName(\"LDAP\"));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {resetOpen && (\n \n )}\n } />\n \n {\n setCurTab(newValue);\n setEditMode(false);\n }}\n tabOptions={[\n { label: \"Configuration\" },\n {\n label: \"Entities\",\n disabled: !hasConfiguration || !isEnabled,\n },\n ]}\n />\n \n \n }\n onClick={toggleEditMode}\n label={\"Edit Configuration\"}\n disabled={loading}\n />\n {hasConfiguration && (\n toggleConfiguration(!isEnabled)}\n label={isEnabled ? \"Disable LDAP\" : \"Enable LDAP\"}\n variant={isEnabled ? \"secondary\" : \"regular\"}\n />\n )}\n setLoading(true)}\n label={\"Refresh\"}\n icon={}\n />\n \n ) : null\n }\n />\n \n {loading ? (\n \n \n \n ) : (\n \n {editMode ? (\n \n \n }\n >\n {Object.entries(formFields).map(([key, value]) =>\n renderFormField(key, value)\n )}\n \n {editMode && (\n setResetOpen(true)}\n label={\"Reset Configuration\"}\n />\n )}\n {editMode && (\n \n )}\n {editMode && (\n \n )}\n \n \n \n ) : (\n \n \n \n {hasConfiguration && (\n \n {Object.entries(formFields).map(([key, value]) => (\n \n ))}\n \n )}\n \n \n )}\n \n )}\n \n \n {hasConfiguration && (\n \n \n \n )}\n \n \n \n );\n};\n\nexport default IDPLDAPConfigurationDetails;\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 LoginIcon from \"@mui/icons-material/Login\";\nimport { LockIcon } from \"mds\";\n\nexport const ldapHelpBoxContents = [\n {\n text: \"MinIO supports using an Active Directory or LDAP (AD/LDAP) service for external management of user identities. Configuring an external IDentity Provider (IDP) enables Single-Sign On (SSO) workflows, where applications authenticate against the external IDP before accessing MinIO.\",\n icon: ,\n iconDescription: \"Create Configurations\",\n },\n {\n text: \"MinIO queries the configured Active Directory / LDAP server to verify the credentials specified by the application and optionally return a list of groups in which the user has membership. MinIO supports two modes (Lookup-Bind Mode and Username-Bind Mode) for performing these queries\",\n icon: null,\n iconDescription: \"\",\n },\n {\n text: \"MinIO recommends using Lookup-Bind mode as the preferred method for verifying AD/LDAP credentials. Username-Bind mode is a legacy method retained for backwards compatibility only.\",\n icon: null,\n iconDescription: \"\",\n },\n];\n\nexport const openIDHelpBoxContents = [\n {\n text: \"MinIO supports using an OpenID Connect (OIDC) compatible IDentity Provider (IDP) such as Okta, KeyCloak, Dex, Google, or Facebook for external management of user identities.\",\n icon: ,\n iconDescription: \"Create Configurations\",\n },\n {\n text: \"Configuring an external IDP enables Single-Sign On workflows, where applications authenticate against the external IDP before accessing MinIO.\",\n icon: null,\n iconDescription: \"\",\n },\n];\n\nexport const openIDFormFields = {\n config_url: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Config URL is required\" : \"\";\n },\n label: \"Config URL\",\n tooltip: \"Config URL for identity provider configuration\",\n placeholder:\n \"https://identity-provider-url/.well-known/openid-configuration\",\n type: \"text\",\n },\n client_id: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Client ID is required\" : \"\";\n },\n label: \"Client ID\",\n tooltip: \"Identity provider Client ID\",\n placeholder: \"Enter Client ID\",\n type: \"text\",\n },\n client_secret: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Client Secret is required\" : \"\";\n },\n label: \"Client Secret\",\n tooltip: \"Identity provider Client Secret\",\n placeholder: \"Enter Client Secret\",\n type: \"password\",\n },\n claim_name: {\n required: false,\n label: \"Claim Name\",\n tooltip: \"Claim from which MinIO will read the policy or role to use\",\n placeholder: \"Enter Claim Name\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n display_name: {\n required: false,\n label: \"Display Name\",\n tooltip: \"\",\n placeholder: \"Enter Display Name\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n claim_prefix: {\n required: false,\n label: \"Claim Prefix\",\n tooltip: \"\",\n placeholder: \"Enter Claim Prefix\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n scopes: {\n required: false,\n label: \"Scopes\",\n tooltip: \"\",\n placeholder: \"openid,profile,email\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n redirect_uri: {\n required: false,\n label: \"Redirect URI\",\n tooltip: \"\",\n placeholder: \"https://console-endpoint-url/oauth_callback\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n role_policy: {\n required: false,\n label: \"Role Policy\",\n tooltip: \"\",\n placeholder: \"readonly\",\n type: \"text\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n claim_userinfo: {\n required: false,\n label: \"Claim User Info\",\n tooltip: \"\",\n placeholder: \"Claim User Info\",\n type: \"toggle\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n redirect_uri_dynamic: {\n required: false,\n label: \"Redirect URI Dynamic\",\n tooltip: \"\",\n placeholder: \"Redirect URI Dynamic\",\n type: \"toggle\",\n hasError: (s: string, editMode: boolean) => \"\",\n },\n};\n\nexport const ldapFormFields = {\n server_insecure: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Server Address is required\" : \"\";\n },\n label: \"Server Insecure\",\n tooltip: \"Disable SSL certificate verification \",\n placeholder: \"myldapserver.com:636\",\n type: \"toggle\",\n },\n server_addr: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Server Address is required\" : \"\";\n },\n label: \"Server Address\",\n tooltip: 'AD/LDAP server address e.g. \"myldapserver.com:636\"',\n placeholder: \"myldapserver.com:636\",\n type: \"text\",\n },\n lookup_bind_dn: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Lookup Bind DN is required\" : \"\";\n },\n label: \"Lookup Bind DN\",\n tooltip:\n \"DN (Distinguished Name) for LDAP read-only service account used to perform DN and group lookups\",\n placeholder: \"cn=admin,dc=min,dc=io\",\n type: \"text\",\n },\n lookup_bind_password: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"Lookup Bind Password is required\" : \"\";\n },\n label: \"Lookup Bind Password\",\n tooltip:\n \"Password for LDAP read-only service account used to perform DN and group lookups\",\n placeholder: \"admin\",\n type: \"password\",\n },\n user_dn_search_base_dn: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"User DN Search Base DN is required\" : \"\";\n },\n label: \"User DN Search Base\",\n tooltip: \"\",\n placeholder: \"DC=example,DC=net\",\n type: \"text\",\n },\n user_dn_search_filter: {\n required: true,\n hasError: (s: string, editMode: boolean) => {\n return !s && editMode ? \"User DN Search Filter is required\" : \"\";\n },\n label: \"User DN Search Filter\",\n tooltip: \"\",\n placeholder: \"(sAMAcountName=%s)\",\n type: \"text\",\n },\n group_search_base_dn: {\n required: false,\n hasError: (s: string, editMode: boolean) => \"\",\n label: \"Group Search Base DN\",\n tooltip: \"\",\n placeholder: \"ou=swengg,dc=min,dc=io\",\n type: \"text\",\n },\n group_search_filter: {\n required: false,\n hasError: (s: string, editMode: boolean) => \"\",\n label: \"Group Search Filter\",\n tooltip: \"\",\n placeholder: \"(&(objectclass=groupofnames)(member=%d))\",\n type: \"text\",\n },\n};\n","// This file is part of MinIO Console Server\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, useCallback, useEffect, useState } from \"react\";\nimport { LinearProgress } from \"@mui/material\";\nimport { DataTable, Grid, Box } from \"mds\";\nimport { policySort } from \"../../../utils/sortFunctions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport SearchBox from \"../Common/SearchBox\";\nimport { setModalErrorSnackMessage } from \"../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../store\";\nimport { setSelectedPolicies } from \"../Users/AddUsersSlice\";\nimport { useSelector } from \"react-redux\";\nimport { api } from \"../../../api\";\nimport {\n Error,\n HttpResponse,\n ListPoliciesResponse,\n} from \"../../../api/consoleApi\";\n\ninterface ISelectPolicyProps {\n selectedPolicy?: string[];\n noTitle?: boolean;\n}\n\nconst PolicySelectors = ({ noTitle = false }: ISelectPolicyProps) => {\n const dispatch = useAppDispatch();\n // Local State\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const currentPolicies = useSelector(\n (state: AppState) => state.createUser.selectedPolicies\n );\n\n const fetchPolicies = useCallback(() => {\n isLoading(true);\n\n api.policies\n .listPolicies()\n .then((res: HttpResponse) => {\n const policies = res.data.policies ?? [];\n isLoading(false);\n setRecords(policies.sort(policySort));\n })\n .catch((err: ErrorResponseHandler) => {\n isLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n });\n }, [dispatch]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchPolicies();\n }\n }, [loading, fetchPolicies]);\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...currentPolicies]; // We clone the checkedUsers array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedUsersList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n // remove empty values\n elements = elements.filter((element) => element !== \"\");\n\n dispatch(setSelectedPolicies(elements));\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.name.includes(filter)\n );\n\n return (\n \n {loading && }\n {records.length > 0 ? (\n \n \n {\n setFilter(value);\n }}\n value={filter}\n label={!noTitle ? \"Assign Policies\" : \"\"}\n />\n \n\n \n \n ) : (\n \n No Policies Available\n \n )}\n \n );\n};\n\nexport default PolicySelectors;\n","// This file is part of MinIO Console Server\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 { Policy, User } from \"api/consoleApi\";\n\ninterface policyDetailsInterface {\n policy: string;\n}\n\nexport const usersSort = (a: User, b: User) => {\n if (a.accessKey && b.accessKey) {\n if (a.accessKey > b.accessKey) {\n return 1;\n }\n if (a.accessKey < b.accessKey) {\n return -1;\n }\n }\n // a must be equal to b\n return 0;\n};\n\nexport const policySort = (a: Policy, b: Policy) => {\n if (a.name! > b.name!) {\n return 1;\n }\n if (a.name! < b.name!) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const stringSort = (a: string, b: string) => {\n if (a > b) {\n return 1;\n }\n if (a < b) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const policyDetailsSort = (\n a: policyDetailsInterface,\n b: policyDetailsInterface\n) => {\n if (a.policy > b.policy) {\n return 1;\n }\n if (a.policy < b.policy) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5-5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8v14z\"\n}), 'Login');\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","import { unstable_createChainedFunction as createChainedFunction } from '@mui/utils';\nexport default createChainedFunction;","import { unstable_deprecatedPropType as deprecatedPropType } from '@mui/utils';\nexport default deprecatedPropType;","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => 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}","import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/base/className';\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}","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":["StyledSwitch","withStyles","theme","root","width","height","padding","margin","switchBase","transform","color","palette","common","white","backgroundColor","boxShadow","opacity","border","thumb","marginLeft","track","borderRadius","transition","transitions","create","checked","focusVisible","switchContainer","display","alignItems","justifyContent","Switch","createStyles","_objectSpread","indicatorLabelOn","fontWeight","indicatorLabel","fontSize","fieldDescription","marginTop","tooltip","actionsTray","fieldBasic","_ref","_ref$label","label","onChange","value","id","name","_ref$checked","_ref$disabled","disabled","_ref$switchOnly","switchOnly","_ref$tooltip","_ref$description","description","classes","indicatorLabels","_ref$extraInputProps","extraInputProps","switchComponent","_jsxs","React","children","_jsx","className","clsx","_defineProperty","length","inputProps","disableRipple","disableFocusRipple","disableTouchRipple","Grid","container","item","xs","sm","md","InputLabel","htmlFor","inputLabel","tooltipContainer","Tooltip","title","placement","HelpIcon","textAlign","Typography","component","useStyles","makeStyles","headerBarIcon","marginRight","primary","main","headerBarSubheader","maxWidth","stContainer","borderBottom","flexFlow","titleColumn","leftItems","rightItems","icon","subTitle","actions","concat","style","tabSubStyles","tabRoot","paddingTop","paddingBottom","selected","indicator","background","scroller","position","content","selectedTab","tabOptions","subStyles","Fragment","Tabs","indicatorColor","textColor","variant","scrollButtons","e","newValue","map","option","index","_createElement","Tab","key","createStyled","_excluded","defaultTheme","createTheme","defaultCreateStyledComponent","systemStyled","slot","overridesResolver","props","styles","useThemePropsDefault","useThemePropsSystem","joinChildren","separator","childrenArray","toArray","filter","Boolean","reduce","output","child","push","ownerState","_extends","flexDirection","handleBreakpoints","resolveBreakpointValues","values","direction","breakpoints","propValue","spacing","transformer","createUnarySpacing","base","Object","keys","acc","breakpoint","directionValues","spacingValues","forEach","previousDirectionValue","deepmerge","useFlexGap","gap","getValue","row","column","mergeBreakpointsInOrder","Stack","options","arguments","undefined","_options$createStyled","createStyledComponent","_options$useThemeProp","useThemeProps","_options$componentNam","componentName","StackRoot","inProps","ref","themeProps","extendSxProp","_props$component","_props$direction","_props$spacing","divider","_props$useFlexGap","other","_objectWithoutPropertiesLoose","composeClasses","generateUtilityClass","as","createStack","styled","_ref$value","_ref$orientation","orientation","_ref$stkProps","stkProps","_ref$lblProps","lblProps","_ref$valProps","valProps","wrapText","whiteSpace","wordWrap","deleteDialogStyles","configurationName","closeResetModalAndRefresh","resetOpen","dispatch","useAppDispatch","_useState","useState","_useState2","_slicedToArray","resetLoading","setResetLoading","useEffect","api","configs","resetConfig","then","catch","err","setErrorSnackMessage","errorToHandler","error","ConfirmDialog","confirmText","isOpen","titleIcon","ConfirmDeleteIcon","isLoading","onConfirm","onClose","confirmationContent","LinearProgress","DialogContentText","FeatureItem","Box","sx","marginBottom","fontStyle","_ref2","helpText","docLink","docText","contents","flex","HelpIconFilled","iconDescription","text","href","target","rel","EntityResultTitle","CollapseCaret","EntityResultItems","blockName","results","res","_ref3","_results$groups","_results$policies","_results$users","_results$groups2","_results$users2","_results$policies2","entityName","entityLength","groups","policies","users","SectionTitle","GroupsMenuIcon","h4","fill","groupData","group","user","policy","loading","setLoading","_useState3","_useState4","setUsers","_useState5","_useState6","setGroups","_useState7","_useState8","setResults","selectedPolicies","useSelector","state","createUser","lg","withBorders","overflowY","minHeight","maxHeight","userDat","InputBox","usersElements","_toConsumableArray","overlayIcon","AddIcon","RemoveIcon","overlayAction","addItem","alterUsers","filteredUsers","_","indx","alterUsersList","groupDat","groupsElements","alterGroups","filteredGroups","alterGroupsList","PolicySelectors","selectedPolicy","noTitle","Loader","timestamp","TimeIcon","DateTime","fromISO","toFormat","flexGrow","LDAPResultsBlock","Button","type","onClick","data","cleanPolicies","pol","cleanUsers","usr","cleanGroups","grp","ldapEntities","getLdapEntities","result","SearchIcon","enabledConfigLDAP","formFields","ldapFormFields","isEnabled","setIsEnabled","hasConfiguration","setHasConfiguration","fields","setFields","_useState9","_useState10","record","setRecord","_useState11","_useState12","editMode","setEditMode","_useState13","_useState14","setResetOpen","_useState15","_useState16","curTab","setCurTab","toggleEditMode","parseFields","enabled","find","totalCoincidences","includes","hasConfig","configInfo","key_values","closeDeleteModalAndRefresh","_asyncToGenerator","_regeneratorRuntime","mark","_callee","refresh","wrap","_context","prev","next","setServerNeedsRestart","stop","_x","apply","setHelpName","ResetConfigurationModal","PageHeaderWrapper","HelpMenu","PageLayout","TabSelector","TabPanel","ScreenTitle","EditIcon","payload","setConfig","restart","setSnackBarMessage","toggleConfiguration","RefreshIcon","FormLayout","helpBox","AddIDPConfigurationHelpBox","ldapHelpBoxContents","entries","FormSwitchWrapper","required","hasError","placeholder","renderFormField","_i","_Object$entries","_Object$entries$_i","validSave","keyVals","gridTemplateColumns","gridAutoFlow","LabelValuePair","_ref5","_ref6","LDAPEntitiesQuery","LoginIcon","openIDHelpBoxContents","LockIcon","openIDFormFields","config_url","s","client_id","client_secret","claim_name","display_name","claim_prefix","scopes","redirect_uri","role_policy","claim_userinfo","redirect_uri_dynamic","server_insecure","server_addr","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","group_search_base_dn","group_search_filter","_ref$noTitle","records","setRecords","setFilter","currentPolicies","fetchPolicies","useCallback","listPolicies","_res$data$policies","sort","policySort","setModalErrorSnackMessage","filteredRecords","elementItem","SearchBox","DataTable","columns","elementKey","onSelect","targetD","elements","element","setSelectedPolicies","selectedItems","idField","customPaperHeight","usersSort","a","b","accessKey","stringSort","policyDetailsSort","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","defineProperty","enumerable","get","_utils","createSvgIcon","createChainedFunction","validator","reason","componentNameInError","Component","propName","location","propFullName","unstable_ClassNameGenerator","configure","generator","ClassNameGenerator","muiNames","indexOf","muiName","_len","funcs","Array","_key","func","_len2","args","_key2","this","module","obj","__esModule"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1705.0632aaa2.chunk.js.map b/portal-ui/build/static/js/1705.0632aaa2.chunk.js.map
deleted file mode 100644
index 3953b3486..000000000
--- a/portal-ui/build/static/js/1705.0632aaa2.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/1705.0632aaa2.chunk.js","mappings":"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","sources":["screens/Console/Buckets/BucketDetails/SummaryItems/BucketTags.tsx","../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/icons-material/Close.js","../node_modules/@mui/icons-material/utils/createSvgIcon.js","../node_modules/@mui/material/utils/createChainedFunction.js","../node_modules/@mui/material/utils/deprecatedPropType.js","../node_modules/@mui/utils/esm/deprecatedPropType.js","../node_modules/@mui/material/utils/requirePropFactory.js","../node_modules/@mui/utils/esm/requirePropFactory.js","../node_modules/@mui/material/utils/setRef.js","../node_modules/@mui/material/utils/unsupportedProp.js","../node_modules/@mui/utils/esm/unsupportedProp.js","../node_modules/@mui/material/utils/index.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js"],"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 .\nimport React, { useEffect, useState } from \"react\";\nimport { Bucket } from \"../../../Watch/types\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport useApi from \"../../../Common/Hooks/useApi\";\nimport { Box } from \"@mui/material\";\nimport { IAM_SCOPES } from \"../../../../../common/SecureComponent/permissions\";\nimport { SecureComponent } from \"../../../../../common/SecureComponent\";\nimport get from \"lodash/get\";\nimport Chip from \"@mui/material/Chip\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport withSuspense from \"../../../Common/Components/withSuspense\";\nimport { Loader } from \"mds\";\n\nimport { setErrorSnackMessage } from \"../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../store\";\n\nconst AddBucketTagModal = withSuspense(\n React.lazy(() => import(\"../AddBucketTagModal\"))\n);\nconst DeleteBucketTagModal = withSuspense(\n React.lazy(() => import(\"../DeleteBucketTagModal\"))\n);\n\ntype BucketTagProps = {\n bucketName: string;\n};\n\nconst BucketTags = ({ bucketName }: BucketTagProps) => {\n const dispatch = useAppDispatch();\n\n const [tags, setTags] = useState(null);\n const [tagModalOpen, setTagModalOpen] = useState(false);\n const [tagKeys, setTagKeys] = useState([]);\n const [selectedTag, setSelectedTag] = useState([\"\", \"\"]);\n const [deleteTagModalOpen, setDeleteTagModalOpen] = useState(false);\n\n const closeAddTagModal = (refresh: boolean) => {\n setTagModalOpen(false);\n if (refresh) {\n fetchTags();\n }\n };\n\n const deleteTag = (tagKey: string, tagLabel: string) => {\n setSelectedTag([tagKey, tagLabel]);\n setDeleteTagModalOpen(true);\n };\n\n const closeDeleteTagModal = (refresh: boolean) => {\n setDeleteTagModalOpen(false);\n\n if (refresh) {\n fetchTags();\n }\n };\n\n const onTagLoaded = (res: Bucket) => {\n if (res != null && res?.details != null && \"tags\" in res?.details) {\n setTags(res?.details?.tags);\n setTagKeys(Object.keys(res?.details?.tags));\n }\n };\n\n const onTagLoadFailed = (err: ErrorResponseHandler) => {\n dispatch(setErrorSnackMessage(err));\n };\n\n const [isLoading, invokeTagsApi] = useApi(onTagLoaded, onTagLoadFailed);\n\n const fetchTags = () => {\n invokeTagsApi(\"GET\", `/api/v1/buckets/${bucketName}`);\n };\n\n useEffect(() => {\n fetchTags();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [bucketName]);\n\n return (\n \n {isLoading ? : null}\n \n \n