\ No newline at end of file
diff --git a/portal-ui/build/static/js/106.72d23b2d.chunk.js b/portal-ui/build/static/js/106.72d23b2d.chunk.js
deleted file mode 100644
index d8d9dcf37..000000000
--- a/portal-ui/build/static/js/106.72d23b2d.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[106,2112],{59114:function(e,t,n){"use strict";var a=n(4942),o=n(1413),r=(n(72791),n(63466)),c=n(74900),i=n(27391),s=n(25787),l=n(11135),u=n(23814),d=n(80184);t.Z=(0,s.Z)((function(e){return(0,l.Z)({searchField:(0,o.Z)({},u.qg.searchField),adornment:{}})}))((function(e){var t=e.placeholder,n=void 0===t?"":t,o=e.classes,s=e.onChange,l=e.adornmentPosition,u=void 0===l?"end":l,p=e.overrideClass,m=e.value,v=(0,a.Z)({disableUnderline:!0},"".concat(u,"Adornment"),(0,d.jsx)(r.Z,{position:u,className:o.adornment,children:(0,d.jsx)(c.Z,{})}));return(0,d.jsx)(i.Z,{placeholder:n,className:p||o.searchField,id:"search-resource",label:"",InputProps:v,onChange:function(e){s(e.target.value)},variant:"standard",value:m})}))},27454:function(e,t,n){"use strict";var a=n(1413),o=n(72791),r=n(20068),c=n(80184);t.Z=function(e){var t=e.tooltip,n=e.children,i=e.errorProps,s=void 0===i?null:i;return(0,c.jsx)(r.Z,{title:t,children:(0,c.jsx)("span",{children:s?(0,o.cloneElement)(n,(0,a.Z)({},s)):n})})}},54120:function(e,t,n){"use strict";n.r(t);var a=n(29439),o=n(1413),r=n(72791),c=n(26181),i=n.n(c),s=n(61889),l=n(11135),u=n(25787),d=n(23814),p=n(25469),m=n(87995),v=n(81207),h=n(92983),f=n(32112),Z=n(32291),x=n(74794),C=n(59114),b=n(80184);t.default=(0,u.Z)((function(e){return(0,l.Z)((0,o.Z)((0,o.Z)((0,o.Z)({tableWrapper:{height:"calc(100vh - 150px)"}},d.OR),d.qg),(0,d.Bz)(e.spacing(4))))}))((function(e){var t=e.classes,n=(0,p.TL)(),c=(0,r.useState)([]),l=(0,a.Z)(c,2),u=l[0],d=l[1],j=(0,r.useState)(""),g=(0,a.Z)(j,2),k=g[0],P=g[1],y=(0,r.useState)(!0),z=(0,a.Z)(y,2),S=z[0],V=z[1],w=(0,r.useState)(null),I=(0,a.Z)(w,2),M=I[0],F=I[1],E=(0,r.useState)(!1),H=(0,a.Z)(E,2),L=H[0],O=H[1];(0,r.useEffect)((function(){S&&v.Z.invoke("GET","/api/v1/list-pvcs").then((function(e){var t=i()(e,"pvcs",[]);d(t||[]),V(!1)})).catch((function(e){V(!1),n((0,m.Ih)(e))}))}),[S,n]);var D=u.filter((function(e){return e.name.toLowerCase().includes(k.toLowerCase())})),T=[{type:"delete",onClick:function(e){var t=(0,o.Z)((0,o.Z)({},e),{},{tenant:e.tenant,namespace:e.namespace});F(t),O(!0)}}];return(0,b.jsxs)(r.Fragment,{children:[L&&(0,b.jsx)(f.default,{deleteOpen:L,selectedPVC:M,closeDeleteModalAndRefresh:function(e){O(!1),V(!0)}}),(0,b.jsx)(Z.Z,{label:"Persistent Volumes Claims",middleComponent:(0,b.jsx)(C.Z,{placeholder:"Search Volumes (PVCs)",onChange:function(e){P(e)},value:k})}),(0,b.jsx)(x.Z,{children:(0,b.jsx)(s.ZP,{item:!0,xs:12,children:(0,b.jsx)(h.Z,{itemActions:T,columns:[{label:"Name",elementKey:"name"},{label:"Namespace",elementKey:"namespace",width:90},{label:"Status",elementKey:"status",width:120},{label:"Tenant",renderFullObject:!0,renderFunction:function(e){return"".concat(e.namespace,"/").concat(e.tenant)}},{label:"Capacity",elementKey:"capacity",width:90},{label:"Storage Class",elementKey:"storageClass"}],isLoading:S,records:D,entityName:"PVCs",idField:"name",customPaperHeight:t.tableWrapper})})})]})}))},32112:function(e,t,n){"use strict";n.r(t);var a=n(29439),o=n(72791),r=n(51691),c=n(21435),i=n(61889),s=n(9505),l=n(23508),u=n(38588),d=n(87995),p=n(25469),m=n(80184);t.default=function(e){var t=e.deleteOpen,n=e.selectedPVC,v=e.closeDeleteModalAndRefresh,h=(0,p.TL)(),f=(0,o.useState)(""),Z=(0,a.Z)(f,2),x=Z[0],C=Z[1],b=(0,s.Z)((function(){return v(!0)}),(function(e){return h((0,d.Ih)(e))})),j=(0,a.Z)(b,2),g=j[0],k=j[1];return(0,m.jsx)(l.Z,{title:"Delete PVC",confirmText:"Delete",isOpen:t,titleIcon:(0,m.jsx)(u.NvT,{}),isLoading:g,onConfirm:function(){x===n.name?k("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.tenant,"/pvc/").concat(n.name)):h((0,d.Ih)({errorMessage:"PVC name is incorrect",detailedError:""}))},onClose:function(){return v(!1)},confirmButtonProps:{disabled:x!==n.name||g},confirmationContent:(0,m.jsxs)(r.Z,{children:["To continue please type ",(0,m.jsx)("b",{children:n.name})," in the box.",(0,m.jsx)(i.ZP,{item:!0,xs:12,children:(0,m.jsx)(c.Z,{id:"retype-PVC",name:"retype-PVC",onChange:function(e){C(e.target.value)},label:"",value:x})})]})})}},26759:function(e,t,n){"use strict";var a=n(64836);t.Z=void 0;var o=a(n(45649)),r=n(80184),c=(0,o.default)((0,r.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");t.Z=c},70366:function(e,t,n){"use strict";var a=n(64836);t.Z=void 0;var o=a(n(45649)),r=n(80184),c=(0,o.default)((0,r.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");t.Z=c},97911:function(e,t,n){"use strict";var a=n(64836);t.Z=void 0;var o=a(n(45649)),r=n(80184),c=(0,o.default)((0,r.jsx)("path",{d:"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z"}),"ViewColumn");t.Z=c},94454:function(e,t,n){"use strict";n.d(t,{Z:function(){return z}});var a=n(4942),o=n(63366),r=n(87462),c=n(72791),i=n(94419),s=n(12065),l=n(97278),u=n(76189),d=n(80184),p=(0,u.Z)((0,d.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),m=(0,u.Z)((0,d.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),v=(0,u.Z)((0,d.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox"),h=n(14036),f=n(31402),Z=n(66934),x=n(21217);function C(e){return(0,x.Z)("MuiCheckbox",e)}var b=(0,n(75878).Z)("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary"]),j=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size"],g=(0,Z.ZP)(l.Z,{shouldForwardProp:function(e){return(0,Z.FO)(e)||"classes"===e},name:"MuiCheckbox",slot:"Root",overridesResolver:function(e,t){var n=e.ownerState;return[t.root,n.indeterminate&&t.indeterminate,"default"!==n.color&&t["color".concat((0,h.Z)(n.color))]]}})((function(e){var t,n=e.theme,o=e.ownerState;return(0,r.Z)({color:(n.vars||n).palette.text.secondary},!o.disableRipple&&{"&:hover":{backgroundColor:n.vars?"rgba(".concat("default"===o.color?n.vars.palette.action.activeChannel:n.vars.palette.primary.mainChannel," / ").concat(n.vars.palette.action.hoverOpacity,")"):(0,s.Fq)("default"===o.color?n.palette.action.active:n.palette[o.color].main,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==o.color&&(t={},(0,a.Z)(t,"&.".concat(b.checked,", &.").concat(b.indeterminate),{color:(n.vars||n).palette[o.color].main}),(0,a.Z)(t,"&.".concat(b.disabled),{color:(n.vars||n).palette.action.disabled}),t))})),k=(0,d.jsx)(m,{}),P=(0,d.jsx)(p,{}),y=(0,d.jsx)(v,{}),z=c.forwardRef((function(e,t){var n,a,s=(0,f.Z)({props:e,name:"MuiCheckbox"}),l=s.checkedIcon,u=void 0===l?k:l,p=s.color,m=void 0===p?"primary":p,v=s.icon,Z=void 0===v?P:v,x=s.indeterminate,b=void 0!==x&&x,z=s.indeterminateIcon,S=void 0===z?y:z,V=s.inputProps,w=s.size,I=void 0===w?"medium":w,M=(0,o.Z)(s,j),F=b?S:Z,E=b?S:u,H=(0,r.Z)({},s,{color:m,indeterminate:b,size:I}),L=function(e){var t=e.classes,n=e.indeterminate,a=e.color,o={root:["root",n&&"indeterminate","color".concat((0,h.Z)(a))]},c=(0,i.Z)(o,C,t);return(0,r.Z)({},t,c)}(H);return(0,d.jsx)(g,(0,r.Z)({type:"checkbox",inputProps:(0,r.Z)({"data-indeterminate":b},V),icon:c.cloneElement(F,{fontSize:null!=(n=F.props.fontSize)?n:I}),checkedIcon:c.cloneElement(E,{fontSize:null!=(a=E.props.fontSize)?a:I}),ownerState:H,ref:t},M,{classes:L}))}))},26769:function(e,t,n){var a=n(39066),o=n(93629),r=n(43141);e.exports=function(e){return"string"==typeof e||!o(e)&&r(e)&&"[object String]"==a(e)}}}]);
-//# sourceMappingURL=106.72d23b2d.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1199.0f0e2d2b.chunk.js.map b/portal-ui/build/static/js/1199.0f0e2d2b.chunk.js.map
deleted file mode 100644
index b2d530956..000000000
--- a/portal-ui/build/static/js/1199.0f0e2d2b.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/1199.0f0e2d2b.chunk.js","mappings":"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","sources":["screens/Console/Account/AddServiceAccountHelpBox.tsx","screens/Console/Account/AddServiceAccountScreen.tsx","screens/Console/Common/CredentialsPrompt/CredentialItem.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx","screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/PanelTitle/PanelTitle.tsx","screens/Console/Common/TooltipWrapper/TooltipWrapper.tsx","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.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 from \"react\";\nimport { Box } from \"@mui/material\";\nimport {\n HelpIconFilled,\n IAMPoliciesIcon,\n PasswordKeyIcon,\n ServiceAccountIcon,\n} from \"../../../icons\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n \n \n \n }\n description={`Create Access Keys`}\n />\n \n Access Keys inherit the policies explicitly attached to the parent\n user, and the policies attached to each group in which the parent\n user has membership.\n \n \n \n }\n description={`Assign Custom Credentials`}\n />\n \n Randomized access credentials are recommended, and provided by\n default. You may use your own custom Access Key and Secret Key by\n replacing the default values. After creation of any Access Key, you\n will be given the opportunity to view and download the account\n credentials.\n \n \n Access Keys support programmatic access by applications. You cannot\n use a Access Key to log into the MinIO Console.\n \n \n \n }\n description={`Assign Access Policies`}\n />\n \n You can specify an optional JSON-formatted IAM policy to further\n restrict Access Key access to a subset of the actions and resources\n explicitly allowed for the parent user. Additional access beyond\n that of the parent user cannot be implemented through these\n policies.\n \n \n You cannot modify the optional Access Key IAM policy after saving.\n \n \n \n \n \n );\n};\n\nexport default AddServiceAccountHelpBox;\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 { useNavigate } from \"react-router-dom\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box } from \"@mui/material\";\nimport {\n IAMPoliciesIcon,\n PasswordKeyIcon,\n ServiceAccountCredentialsIcon,\n} from \"../../../icons\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport PageLayout from \"../Common/Layout/PageLayout\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport AddServiceAccountHelpBox from \"./AddServiceAccountHelpBox\";\nimport BackLink from \"../../../common/BackLink\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nimport { ErrorResponseHandler } from \"../../../../src/common/types\";\nimport api from \"../../../../src/common/api\";\nimport CredentialsPrompt from \"../Common/CredentialsPrompt/CredentialsPrompt\";\n\nimport SectionTitle from \"../Common/SectionTitle\";\nimport { getRandomString } from \"../../../screens/Console/Tenants/utils\";\nimport PanelTitle from \"../Common/PanelTitle/PanelTitle\";\n\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\n\ninterface IAddServiceAccountProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n bottomContainer: {\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n margin: \"auto\",\n justifyContent: \"center\",\n \"& div\": {\n width: 150,\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n },\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\nconst AddServiceAccount = ({ classes }: IAddServiceAccountProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [addSending, setAddSending] = useState(false);\n const [accessKey, setAccessKey] = useState(getRandomString(16));\n const [secretKey, setSecretKey] = useState(getRandomString(32));\n const [isRestrictedByPolicy, setIsRestrictedByPolicy] =\n useState(false);\n const [newServiceAccount, setNewServiceAccount] =\n useState(null);\n const [showPassword, setShowPassword] = useState(false);\n const [policyJSON, setPolicyJSON] = useState(\"\");\n\n useEffect(() => {\n if (addSending) {\n api\n .invoke(\"POST\", `/api/v1/service-account-credentials`, {\n policy: policyJSON,\n accessKey: accessKey,\n secretKey: secretKey,\n })\n .then((res) => {\n setAddSending(false);\n setNewServiceAccount({\n accessKey: res.accessKey || \"\",\n secretKey: res.secretKey || \"\",\n url: res.url || \"\",\n });\n })\n\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [addSending, setAddSending, dispatch, policyJSON, accessKey, secretKey]);\n\n useEffect(() => {\n if (isRestrictedByPolicy) {\n api.invoke(\"GET\", `/api/v1/user/policy`).then((res: string) => {\n setPolicyJSON(JSON.stringify(JSON.parse(res), null, 4));\n });\n }\n }, [isRestrictedByPolicy]);\n\n const addServiceAccount = (e: React.FormEvent) => {\n e.preventDefault();\n setAddSending(true);\n };\n\n const resetForm = () => {\n setPolicyJSON(\"\");\n setNewServiceAccount(null);\n setAccessKey(\"\");\n setSecretKey(\"\");\n setShowPassword(false);\n };\n\n const closeCredentialsModal = () => {\n setNewServiceAccount(null);\n navigate(`${IAM_PAGES.ACCOUNT}`);\n };\n\n return (\n \n {newServiceAccount !== null && (\n {\n closeCredentialsModal();\n }}\n entity=\"Access Key\"\n />\n )}\n \n }\n />\n \n \n \n }>\n Create Access Key\n \n\n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(AddServiceAccount);\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 { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\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 get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\"href\", \"data:text/plain;charset=utf-8,\" + text);\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n const downloadImport = () => {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n url: consoleCreds.url,\n accessKey: consoleCreds.accessKey,\n secretKey: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n consoleExtras = cCreds[0];\n }\n } else {\n consoleExtras = {\n url: newServiceAccount.url,\n accessKey: newServiceAccount.accessKey,\n secretKey: newServiceAccount.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n };\n\n const downloaddAllCredentials = () => {\n let allCredentials = {};\n if (\n consoleCreds &&\n Array.isArray(consoleCreds) &&\n consoleCreds.length > 1\n ) {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n };\n });\n allCredentials = cCreds;\n }\n download(\n \"all_credentials.json\",\n JSON.stringify({\n ...allCredentials,\n })\n );\n };\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n \n \n {!idp && (\n <>\n \n }\n variant=\"callAction\"\n />\n \n\n {Array.isArray(consoleCreds) && consoleCreds.length > 1 && (\n \n }\n variant=\"callAction\"\n color=\"primary\"\n />\n \n )}\n >\n )}\n \n \n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\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 { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport MainError from \"../MainError/MainError\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n noContentPadding?: boolean;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n noContentPadding,\n titleIcon = null,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n );\n};\n\nexport default withStyles(styles)(ModalWrapper);\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 { IconButtonProps } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n padding: 0,\n margin: 0,\n fontSize: \".9rem\",\n },\n });\n\ninterface IPanelTitle extends IconButtonProps {\n classes: any;\n children: any;\n}\n\nconst PanelTitle = ({ classes, children }: IPanelTitle) => {\n return
{children}
;\n};\n\nexport default withStyles(styles)(PanelTitle);\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, { cloneElement } from \"react\";\nimport { Tooltip } from \"@mui/material\";\n\ninterface ITooltipWrapperProps {\n tooltip: string;\n children: any;\n errorProps?: any;\n}\n\nconst TooltipWrapper = ({\n tooltip,\n children,\n errorProps = null,\n}: ITooltipWrapperProps) => {\n return (\n \n \n {errorProps ? cloneElement(children, { ...errorProps }) : children}\n \n \n );\n};\n\nexport default TooltipWrapper;\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}"],"names":["FeatureItem","icon","description","Box","sx","display","marginRight","height","width","marginBottom","style","fontSize","fontStyle","color","flex","border","borderRadius","flexFlow","padding","marginTop","xs","fontWeight","alignItems","paddingBottom","paddingTop","withStyles","theme","createStyles","bottomContainer","flexGrow","margin","justifyContent","formFieldStyles","modalStyleUtils","classes","dispatch","useAppDispatch","navigate","useNavigate","useState","addSending","setAddSending","getRandomString","accessKey","setAccessKey","secretKey","setSecretKey","isRestrictedByPolicy","setIsRestrictedByPolicy","newServiceAccount","setNewServiceAccount","showPassword","setShowPassword","policyJSON","setPolicyJSON","useEffect","api","policy","then","res","url","catch","err","setErrorSnackMessage","JSON","stringify","parse","Fragment","CredentialsPrompt","open","closeModal","IAM_PAGES","entity","Grid","item","PageHeader","label","BackLink","to","PageLayout","gap","gridTemplateColumns","md","SectionTitle","noValidate","autoComplete","onSubmit","e","preventDefault","addServiceAccount","container","spacing","className","stackedInputs","InputBoxWrapper","value","id","name","placeholder","onChange","target","type","overlayIcon","VisibilityOff","RemoveRedEye","overlayAction","FormSwitchWrapper","checked","event","tooltip","codeMirrorContainer","PanelTitle","formScrollable","CodeMirrorWrapper","onBeforeChange","editor","data","editorHeight","modalButtonBar","variant","onClick","inputWithCopy","background","inputLabel","fieldBasic","OutlinedInput","readOnly","endAdornment","InputAdornment","position","TooltipWrapper","text","onMouseDown","download","filename","element","document","createElement","setAttribute","body","appendChild","click","removeChild","warningBlock","credentialTitle","buttonContainer","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Array","isArray","map","credentialsPair","index","undefined","WarnIcon","consoleExtras","itemMap","path","length","allCredentials","mode","tooltipContainer","placement","overflow","language","evn","backgroundColor","fontFamily","minHeight","borderTop","paddingRight","marginLeft","deleteDialogStyles","content","customDialogSize","maxWidth","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","modalSnackMessage","useSelector","state","system","modalSnackBar","setModalSnackMessage","message","customSize","paper","fullWidth","detailedErrorMsg","scroll","reason","root","titleText","closeContainer","closeButton","disableRipple","size","isModal","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","errorProps","cloneElement","_getPrototypeOf","o","Object","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","defineProperty","_possibleConstructorReturn","self","call"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1199.0f0e2d2b.chunk.js b/portal-ui/build/static/js/1199.cd08cdfd.chunk.js
similarity index 92%
rename from portal-ui/build/static/js/1199.0f0e2d2b.chunk.js
rename to portal-ui/build/static/js/1199.cd08cdfd.chunk.js
index 0b0483b6a..d5801f1e2 100644
--- a/portal-ui/build/static/js/1199.0f0e2d2b.chunk.js
+++ b/portal-ui/build/static/js/1199.cd08cdfd.chunk.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1199],{65935:function(e,t,n){n.r(t),n.d(t,{default:function(){return T}});var i=n(29439),s=n(1413),r=n(72791),o=n(16871),a=n(75952),c=n(11135),l=n(25787),d=n(23814),u=n(61889),p=n(64554),x=n(38588),h=n(92217),m=n(32291),f=n(74794),y=n(21435),j=n(37516),g=n(80184),Z=function(e){var t=e.icon,n=e.description;return(0,g.jsxs)(p.Z,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,g.jsx)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:n})]})},v=function(){return(0,g.jsxs)(p.Z,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",marginTop:{xs:"0px"}},children:[(0,g.jsxs)(p.Z,{sx:{fontSize:"16px",fontWeight:600,display:"flex",alignItems:"center",marginBottom:"16px",paddingBottom:"20px","& .min-icon":{height:"21px",width:"21px",marginRight:"15px"}},children:[(0,g.jsx)(x.M9A,{}),(0,g.jsx)("div",{children:"Learn more about Access Keys"})]}),(0,g.jsxs)(p.Z,{sx:{fontSize:"14px",marginBottom:"15px"},children:[(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.nO6,{}),description:"Create Access Keys"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"20px"},children:"Access Keys inherit the policies explicitly attached to the parent user, and the policies attached to each group in which the parent user has membership."})]}),(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.tvm,{}),description:"Assign Custom Credentials"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"Randomized access credentials are recommended, and provided by default. You may use your own custom Access Key and Secret Key by replacing the default values. After creation of any Access Key, you will be given the opportunity to view and download the account credentials."}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"Access Keys support programmatic access by applications. You cannot use a Access Key to log into the MinIO Console."})]}),(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.v42,{}),description:"Assign Access Policies"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"You can specify an optional JSON-formatted IAM policy to further restrict Access Key access to a subset of the actions and resources explicitly allowed for the parent user. Additional access beyond that of the parent user cannot be implemented through these policies."}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"You cannot modify the optional Access Key IAM policy after saving."})]})]}),(0,g.jsx)(p.Z,{sx:{display:"flex",flexFlow:"column"}})]})},b=n(84669),A=n(3579),K=n(20165),w=n(56087),C=n(81207),S=n(37798),N=n(50896),P=n(84741),O=n(60680),k=n(87995),B=n(25469),T=(0,l.Z)((function(e){return(0,c.Z)((0,s.Z)((0,s.Z)({bottomContainer:{display:"flex",flexGrow:1,alignItems:"center",margin:"auto",justifyContent:"center","& div":{width:150,"@media (max-width: 900px)":{flexFlow:"column"}}}},d.DF),d.ID))}))((function(e){var t=e.classes,n=(0,B.TL)(),s=(0,o.s0)(),c=(0,r.useState)(!1),l=(0,i.Z)(c,2),d=l[0],Z=l[1],T=(0,r.useState)((0,P.zO)(16)),I=(0,i.Z)(T,2),M=I[0],z=I[1],E=(0,r.useState)((0,P.zO)(32)),F=(0,i.Z)(E,2),D=F[0],L=F[1],R=(0,r.useState)(!1),Y=(0,i.Z)(R,2),_=Y[0],J=Y[1],W=(0,r.useState)(null),H=(0,i.Z)(W,2),U=H[0],V=H[1],G=(0,r.useState)(!1),Q=(0,i.Z)(G,2),q=Q[0],X=Q[1],$=(0,r.useState)(""),ee=(0,i.Z)($,2),te=ee[0],ne=ee[1];(0,r.useEffect)((function(){d&&C.Z.invoke("POST","/api/v1/service-account-credentials",{policy:te,accessKey:M,secretKey:D}).then((function(e){Z(!1),V({accessKey:e.accessKey||"",secretKey:e.secretKey||"",url:e.url||""})})).catch((function(e){Z(!1),n((0,k.Ih)(e))}))}),[d,Z,n,te,M,D]),(0,r.useEffect)((function(){_&&C.Z.invoke("GET","/api/v1/user/policy").then((function(e){ne(JSON.stringify(JSON.parse(e),null,4))}))}),[_]);return(0,g.jsxs)(r.Fragment,{children:[null!==U&&(0,g.jsx)(S.default,{newServiceAccount:U,open:null!==U,closeModal:function(){V(null),s("".concat(w.gA.ACCOUNT))},entity:"Access Key"}),(0,g.jsxs)(u.ZP,{item:!0,xs:12,children:[(0,g.jsx)(m.Z,{label:(0,g.jsx)(b.Z,{to:w.gA.ACCOUNT,label:"Access Keys"})}),(0,g.jsx)(f.Z,{children:(0,g.jsxs)(p.Z,{sx:{display:"grid",padding:"25px",gap:"25px",gridTemplateColumns:{md:"2fr 1.2fr",xs:"1fr"},border:"1px solid #eaeaea"},children:[(0,g.jsxs)(p.Z,{children:[(0,g.jsx)(N.Z,{icon:(0,g.jsx)(x.tVY,{}),children:"Create Access Key"}),(0,g.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),Z(!0)}(e)},children:(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",sx:{marginTop:1},children:[(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsx)(u.ZP,{container:!0,item:!0,spacing:"20",children:(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsx)(u.ZP,{item:!0,xs:1,children:(0,g.jsx)(x.tvm,{})}),(0,g.jsx)(u.ZP,{item:!0,children:(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,children:[" ",(0,g.jsx)("div",{className:t.stackedInputs,children:(0,g.jsx)(y.Z,{value:M,label:"Access Key",id:"accessKey",name:"accessKey",placeholder:"Enter Access Key",onChange:function(e){z(e.target.value)}})})]}),(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsx)("div",{className:t.stackedInputs,children:(0,g.jsx)(y.Z,{value:D,label:"Secret Key",id:"secretKey",name:"secretKey",type:q?"text":"password",placeholder:"Enter Secret Key",onChange:function(e){L(e.target.value)},overlayIcon:q?(0,g.jsx)(K.Z,{}):(0,g.jsx)(A.Z,{}),overlayAction:function(){return X(!q)}})})})]})})]})})})}),(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",children:[(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsx)(u.ZP,{item:!0,xs:1,children:(0,g.jsx)(x.v42,{})}),(0,g.jsx)(u.ZP,{item:!0,xs:11,children:(0,g.jsx)(j.Z,{value:"serviceAccountPolicy",id:"serviceAccountPolicy",name:"serviceAccountPolicy",checked:_,onChange:function(e){J(e.target.checked)},label:"Restrict beyond user policy",tooltip:"You can specify an optional JSON-formatted IAM policy to further restrict Access Key access to a subset of the actions and resources explicitly allowed for the parent user. Additional access beyond that of the parent user cannot be implemented through these policies."})})]})}),_&&(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.codeMirrorContainer,children:[(0,g.jsx)("div",{children:(0,g.jsx)(O.Z,{children:"Current User Policy - edit the JSON to remove permissions for this Access Key"})}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:t.formScrollable,children:(0,g.jsx)(h.Z,{value:te,onBeforeChange:function(e,t,n){ne(n)},editorHeight:"350px"})})]})]}),(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.modalButtonBar,children:[(0,g.jsx)(a.zx,{id:"clear",type:"button",variant:"regular",onClick:function(){ne(""),V(null),z(""),L(""),X(!1)},label:"Clear"}),(0,g.jsx)(a.zx,{id:"create-sa",type:"submit",variant:"callAction",color:"primary",label:"Create"})]})]})})]}),(0,g.jsx)(v,{})]})})]})]})}))},37798:function(e,t,n){n.r(t),n.d(t,{default:function(){return A}});var i=n(1413),s=n(72791),r=n(26181),o=n.n(r),a=n(75952),c=n(11135),l=n(25787),d=n(56028),u=n(61889),p=n(77196),x=n(63466),h=n(78029),m=n.n(h),f=n(38588),y=n(23814),j=n(27454),g=n(80184),Z=(0,l.Z)((function(e){return(0,c.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},y.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var t=e.label,n=void 0===t?"":t,i=e.value,s=void 0===i?"":i,r=e.classes,o=void 0===r?{}:r;return(0,g.jsxs)("div",{className:o.container,children:[(0,g.jsxs)("div",{className:o.inputLabel,children:[n,":"]}),(0,g.jsx)("div",{className:o.inputWithCopy,children:(0,g.jsx)(p.Z,{value:s,readOnly:!0,endAdornment:(0,g.jsx)(x.Z,{position:"end",children:(0,g.jsx)(j.Z,{tooltip:"Copy",children:(0,g.jsx)(m(),{text:s,children:(0,g.jsx)(a.zx,{id:"copy-clipboard","aria-label":"copy",onClick:function(){},onMouseDown:function(){},style:{width:"28px",height:"28px",padding:"0px"},icon:(0,g.jsx)(f.TIy,{})})})})})})})]})})),v=n(89357),b=function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+t),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)},A=(0,l.Z)((function(e){return(0,c.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{display:"flex",justifyContent:"flex-end",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,r=e.open,c=e.closeModal,l=e.entity;if(!n)return null;var p=o()(n,"console",null),x=o()(n,"idp",!1);return(0,g.jsx)(d.Z,{modalOpen:r,onClose:function(){c()},title:(0,g.jsx)("div",{className:t.promptTitle,children:(0,g.jsxs)("div",{children:["New ",l," Created"]})}),titleIcon:(0,g.jsx)(f.tVY,{}),children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.formScrollable,children:["A new ",l," has been created with the following details:",!x&&p&&(0,g.jsx)(s.Fragment,{children:(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.credentialsPanel,children:[(0,g.jsx)("div",{className:t.credentialTitle,children:"Console Credentials"}),Array.isArray(p)&&p.map((function(e,t){return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:e.accessKey}),(0,g.jsx)(Z,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(p)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:p.accessKey}),(0,g.jsx)(Z,{label:"Secret Key",value:p.secretKey})]})]})}),(null===p||void 0===p)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:n.accessKey||""}),(0,g.jsx)(Z,{label:"Secret Key",value:n.secretKey||""})]}),x?(0,g.jsx)("div",{className:t.warningBlock,children:"Please Login via the configured external identity provider."}):(0,g.jsxs)("div",{className:t.warningBlock,children:[(0,g.jsx)(v.Z,{}),(0,g.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:t.buttonContainer,children:!x&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(j.Z,{tooltip:"Download credentials in a JSON file formatted for import using mc alias import. This will only include the default login credentials.",children:(0,g.jsx)(a.zx,{id:"download-button",label:"Download for import",className:t.buttonSpacer,onClick:function(){var e={};p?e=Array.isArray(p)?p.map((function(e){return{url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"}}))[0]:{url:p.url,accessKey:p.accessKey,secretKey:p.secretKey,api:"s3v4",path:"auto"}:e={url:n.url,accessKey:n.accessKey,secretKey:n.secretKey,api:"s3v4",path:"auto"};b("credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(f._8t,{}),variant:"callAction"})}),Array.isArray(p)&&p.length>1&&(0,g.jsx)(j.Z,{tooltip:"Download all access credentials to a JSON file. NOTE: This file is not formatted for import using mc alias import. If you plan to import this alias from the file, please use the Download for Import button. ",children:(0,g.jsx)(a.zx,{id:"download-all-button",label:"Download all access credentials",className:t.buttonSpacer,onClick:function(){var e={};p&&Array.isArray(p)&&p.length>1&&(e=p.map((function(e){return{accessKey:e.accessKey,secretKey:e.secretKey}})));b("all_credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(f._8t,{}),variant:"callAction",color:"primary"})})]})})]})})}))},92217:function(e,t,n){var i=n(1413),s=n(72791),r=n(61889),o=n(30829),a=n(20068),c=n(64554),l=n(11135),d=n(25787),u=n(84570),p=n(23814),x=n(38588),h=n(75952),m=n(78029),f=n.n(m),y=n(90932),j=n(27454),g=n(80184);t.Z=(0,d.Z)((function(e){return(0,l.Z)((0,i.Z)({},p.YI))}))((function(e){var t=e.value,n=e.label,i=void 0===n?"":n,l=e.tooltip,d=void 0===l?"":l,p=e.mode,m=void 0===p?"json":p,Z=e.classes,v=e.onBeforeChange,b=(e.readOnly,e.editorHeight),A=void 0===b?"250px":b;return(0,g.jsxs)(s.Fragment,{children:[(0,g.jsx)(r.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,g.jsxs)(o.Z,{className:Z.inputLabel,children:[(0,g.jsx)("span",{children:i}),""!==d&&(0,g.jsx)("div",{className:Z.tooltipContainer,children:(0,g.jsx)(a.Z,{title:d,placement:"top-start",children:(0,g.jsx)("div",{className:Z.tooltip,children:(0,g.jsx)(u.Z,{})})})})]})}),(0,g.jsx)(r.ZP,{item:!0,xs:12,style:{maxHeight:A,overflow:"auto",border:"1px solid #eaeaea"},children:(0,g.jsx)(y.Z,{value:t,language:m,onChange:function(e){v(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:A||"initial",color:"#000000"}})}),(0,g.jsx)(r.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,g.jsx)(c.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,g.jsx)(j.Z,{tooltip:"Copy to Clipboard",children:(0,g.jsx)(f(),{text:t,children:(0,g.jsx)(h.zx,{type:"button",id:"copy-code-mirror",icon:(0,g.jsx)(x.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},56028:function(e,t,n){var i=n(29439),s=n(1413),r=n(72791),o=n(60364),a=n(13400),c=n(55646),l=n(5574),d=n(65661),u=n(39157),p=n(11135),x=n(25787),h=n(23814),m=n(25469),f=n(29823),y=n(28057),j=n(87995),g=n(80184);t.Z=(0,x.Z)((function(e){return(0,p.Z)((0,s.Z)((0,s.Z)({},h.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},h.sN))}))((function(e){var t=e.onClose,n=e.modalOpen,p=e.title,x=e.children,h=e.classes,Z=e.wideLimit,v=void 0===Z||Z,b=e.noContentPadding,A=e.titleIcon,K=void 0===A?null:A,w=(0,m.TL)(),C=(0,r.useState)(!1),S=(0,i.Z)(C,2),N=S[0],P=S[1],O=(0,o.v9)((function(e){return e.system.modalSnackBar}));(0,r.useEffect)((function(){w((0,j.MK)(""))}),[w]),(0,r.useEffect)((function(){if(O){if(""===O.message)return void P(!1);"error"!==O.type&&P(!0)}}),[O]);var k=v?{classes:{paper:h.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},B="";return O&&(B=O.detailedErrorMsg,(""===O.detailedErrorMsg||O.detailedErrorMsg.length<5)&&(B=O.message)),(0,g.jsxs)(l.Z,(0,s.Z)((0,s.Z)({open:n,classes:h},k),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&t()},className:h.root,children:[(0,g.jsxs)(d.Z,{className:h.title,children:[(0,g.jsxs)("div",{className:h.titleText,children:[K," ",p]}),(0,g.jsx)("div",{className:h.closeContainer,children:(0,g.jsx)(a.Z,{"aria-label":"close",id:"close",className:h.closeButton,onClick:t,disableRipple:!0,size:"small",children:(0,g.jsx)(f.Z,{})})})]}),(0,g.jsx)(y.Z,{isModal:!0}),(0,g.jsx)(c.Z,{open:N,className:h.snackBarModal,onClose:function(){P(!1),w((0,j.MK)(""))},message:B,ContentProps:{className:"".concat(h.snackBar," ").concat(O&&"error"===O.type?h.errorSnackBar:"")},autoHideDuration:O&&"error"===O.type?1e4:5e3}),(0,g.jsx)(u.Z,{className:b?"":h.content,children:x})]}))}))},60680:function(e,t,n){n(72791);var i=n(11135),s=n(25787),r=n(80184);t.Z=(0,s.Z)((function(e){return(0,i.Z)({root:{padding:0,margin:0,fontSize:".9rem"}})}))((function(e){var t=e.classes,n=e.children;return(0,r.jsx)("h1",{className:t.root,children:n})}))},27454:function(e,t,n){var i=n(1413),s=n(72791),r=n(20068),o=n(80184);t.Z=function(e){var t=e.tooltip,n=e.children,a=e.errorProps,c=void 0===a?null:a;return(0,o.jsx)(r.Z,{title:t,children:(0,o.jsx)("span",{children:c?(0,s.cloneElement)(n,(0,i.Z)({},c)):n})})}},61120:function(e,t,n){function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}n.d(t,{Z:function(){return i}})},60136:function(e,t,n){n.d(t,{Z:function(){return s}});var i=n(89611);function s(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,i.Z)(e,t)}},82963:function(e,t,n){n.d(t,{Z:function(){return r}});var i=n(71002),s=n(97326);function r(e,t){if(t&&("object"===(0,i.Z)(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return(0,s.Z)(e)}}}]);
-//# sourceMappingURL=1199.0f0e2d2b.chunk.js.map
\ No newline at end of file
+"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1199],{65935:function(e,t,n){n.r(t),n.d(t,{default:function(){return T}});var i=n(29439),s=n(1413),r=n(72791),o=n(16871),a=n(75952),c=n(11135),l=n(25787),d=n(23814),u=n(61889),p=n(64554),x=n(56096),h=n(92217),m=n(32291),f=n(74794),y=n(21435),j=n(37516),g=n(80184),Z=function(e){var t=e.icon,n=e.description;return(0,g.jsxs)(p.Z,{sx:{display:"flex","& .min-icon":{marginRight:"10px",height:"23px",width:"23px",marginBottom:"10px"}},children:[t," ",(0,g.jsx)("div",{style:{fontSize:"14px",fontStyle:"italic",color:"#5E5E5E"},children:n})]})},v=function(){return(0,g.jsxs)(p.Z,{sx:{flex:1,border:"1px solid #eaeaea",borderRadius:"2px",display:"flex",flexFlow:"column",padding:"20px",marginTop:{xs:"0px"}},children:[(0,g.jsxs)(p.Z,{sx:{fontSize:"16px",fontWeight:600,display:"flex",alignItems:"center",marginBottom:"16px",paddingBottom:"20px","& .min-icon":{height:"21px",width:"21px",marginRight:"15px"}},children:[(0,g.jsx)(x.M9A,{}),(0,g.jsx)("div",{children:"Learn more about Access Keys"})]}),(0,g.jsxs)(p.Z,{sx:{fontSize:"14px",marginBottom:"15px"},children:[(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.nO6,{}),description:"Create Access Keys"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"20px"},children:"Access Keys inherit the policies explicitly attached to the parent user, and the policies attached to each group in which the parent user has membership."})]}),(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.tvm,{}),description:"Assign Custom Credentials"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"Randomized access credentials are recommended, and provided by default. You may use your own custom Access Key and Secret Key by replacing the default values. After creation of any Access Key, you will be given the opportunity to view and download the account credentials."}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"Access Keys support programmatic access by applications. You cannot use a Access Key to log into the MinIO Console."})]}),(0,g.jsxs)(p.Z,{sx:{paddingBottom:"20px"},children:[(0,g.jsx)(Z,{icon:(0,g.jsx)(x.v42,{}),description:"Assign Access Policies"}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"You can specify an optional JSON-formatted IAM policy to further restrict Access Key access to a subset of the actions and resources explicitly allowed for the parent user. Additional access beyond that of the parent user cannot be implemented through these policies."}),(0,g.jsx)(p.Z,{sx:{paddingTop:"10px"},children:"You cannot modify the optional Access Key IAM policy after saving."})]})]}),(0,g.jsx)(p.Z,{sx:{display:"flex",flexFlow:"column"}})]})},b=n(84669),A=n(3579),K=n(20165),w=n(56087),C=n(81207),S=n(37798),N=n(50896),P=n(84741),O=n(60680),k=n(87995),B=n(25469),T=(0,l.Z)((function(e){return(0,c.Z)((0,s.Z)((0,s.Z)({bottomContainer:{display:"flex",flexGrow:1,alignItems:"center",margin:"auto",justifyContent:"center","& div":{width:150,"@media (max-width: 900px)":{flexFlow:"column"}}}},d.DF),d.ID))}))((function(e){var t=e.classes,n=(0,B.TL)(),s=(0,o.s0)(),c=(0,r.useState)(!1),l=(0,i.Z)(c,2),d=l[0],Z=l[1],T=(0,r.useState)((0,P.zO)(16)),I=(0,i.Z)(T,2),M=I[0],z=I[1],E=(0,r.useState)((0,P.zO)(32)),F=(0,i.Z)(E,2),D=F[0],L=F[1],R=(0,r.useState)(!1),Y=(0,i.Z)(R,2),_=Y[0],J=Y[1],W=(0,r.useState)(null),H=(0,i.Z)(W,2),U=H[0],V=H[1],G=(0,r.useState)(!1),Q=(0,i.Z)(G,2),q=Q[0],X=Q[1],$=(0,r.useState)(""),ee=(0,i.Z)($,2),te=ee[0],ne=ee[1];(0,r.useEffect)((function(){d&&C.Z.invoke("POST","/api/v1/service-account-credentials",{policy:te,accessKey:M,secretKey:D}).then((function(e){Z(!1),V({accessKey:e.accessKey||"",secretKey:e.secretKey||"",url:e.url||""})})).catch((function(e){Z(!1),n((0,k.Ih)(e))}))}),[d,Z,n,te,M,D]),(0,r.useEffect)((function(){_&&C.Z.invoke("GET","/api/v1/user/policy").then((function(e){ne(JSON.stringify(JSON.parse(e),null,4))}))}),[_]);return(0,g.jsxs)(r.Fragment,{children:[null!==U&&(0,g.jsx)(S.default,{newServiceAccount:U,open:null!==U,closeModal:function(){V(null),s("".concat(w.gA.ACCOUNT))},entity:"Access Key"}),(0,g.jsxs)(u.ZP,{item:!0,xs:12,children:[(0,g.jsx)(m.Z,{label:(0,g.jsx)(b.Z,{to:w.gA.ACCOUNT,label:"Access Keys"})}),(0,g.jsx)(f.Z,{children:(0,g.jsxs)(p.Z,{sx:{display:"grid",padding:"25px",gap:"25px",gridTemplateColumns:{md:"2fr 1.2fr",xs:"1fr"},border:"1px solid #eaeaea"},children:[(0,g.jsxs)(p.Z,{children:[(0,g.jsx)(N.Z,{icon:(0,g.jsx)(x.tVY,{}),children:"Create Access Key"}),(0,g.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),Z(!0)}(e)},children:(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",sx:{marginTop:1},children:[(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsx)(u.ZP,{container:!0,item:!0,spacing:"20",children:(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsx)(u.ZP,{item:!0,xs:1,children:(0,g.jsx)(x.tvm,{})}),(0,g.jsx)(u.ZP,{item:!0,children:(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,children:[" ",(0,g.jsx)("div",{className:t.stackedInputs,children:(0,g.jsx)(y.Z,{value:M,label:"Access Key",id:"accessKey",name:"accessKey",placeholder:"Enter Access Key",onChange:function(e){z(e.target.value)}})})]}),(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsx)("div",{className:t.stackedInputs,children:(0,g.jsx)(y.Z,{value:D,label:"Secret Key",id:"secretKey",name:"secretKey",type:q?"text":"password",placeholder:"Enter Secret Key",onChange:function(e){L(e.target.value)},overlayIcon:q?(0,g.jsx)(K.Z,{}):(0,g.jsx)(A.Z,{}),overlayAction:function(){return X(!q)}})})})]})})]})})})}),(0,g.jsxs)(u.ZP,{container:!0,item:!0,spacing:"20",children:[(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsx)(u.ZP,{item:!0,xs:1,children:(0,g.jsx)(x.v42,{})}),(0,g.jsx)(u.ZP,{item:!0,xs:11,children:(0,g.jsx)(j.Z,{value:"serviceAccountPolicy",id:"serviceAccountPolicy",name:"serviceAccountPolicy",checked:_,onChange:function(e){J(e.target.checked)},label:"Restrict beyond user policy",tooltip:"You can specify an optional JSON-formatted IAM policy to further restrict Access Key access to a subset of the actions and resources explicitly allowed for the parent user. Additional access beyond that of the parent user cannot be implemented through these policies."})})]})}),_&&(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.codeMirrorContainer,children:[(0,g.jsx)("div",{children:(0,g.jsx)(O.Z,{children:"Current User Policy - edit the JSON to remove permissions for this Access Key"})}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:t.formScrollable,children:(0,g.jsx)(h.Z,{value:te,onBeforeChange:function(e,t,n){ne(n)},editorHeight:"350px"})})]})]}),(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.modalButtonBar,children:[(0,g.jsx)(a.zx,{id:"clear",type:"button",variant:"regular",onClick:function(){ne(""),V(null),z(""),L(""),X(!1)},label:"Clear"}),(0,g.jsx)(a.zx,{id:"create-sa",type:"submit",variant:"callAction",color:"primary",label:"Create"})]})]})})]}),(0,g.jsx)(v,{})]})})]})]})}))},37798:function(e,t,n){n.r(t),n.d(t,{default:function(){return A}});var i=n(1413),s=n(72791),r=n(26181),o=n.n(r),a=n(75952),c=n(11135),l=n(25787),d=n(56028),u=n(61889),p=n(77196),x=n(63466),h=n(78029),m=n.n(h),f=n(56096),y=n(23814),j=n(27454),g=n(80184),Z=(0,l.Z)((function(e){return(0,c.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},y.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var t=e.label,n=void 0===t?"":t,i=e.value,s=void 0===i?"":i,r=e.classes,o=void 0===r?{}:r;return(0,g.jsxs)("div",{className:o.container,children:[(0,g.jsxs)("div",{className:o.inputLabel,children:[n,":"]}),(0,g.jsx)("div",{className:o.inputWithCopy,children:(0,g.jsx)(p.Z,{value:s,readOnly:!0,endAdornment:(0,g.jsx)(x.Z,{position:"end",children:(0,g.jsx)(j.Z,{tooltip:"Copy",children:(0,g.jsx)(m(),{text:s,children:(0,g.jsx)(a.zx,{id:"copy-clipboard","aria-label":"copy",onClick:function(){},onMouseDown:function(){},style:{width:"28px",height:"28px",padding:"0px"},icon:(0,g.jsx)(f.TIy,{})})})})})})})]})})),v=n(89357),b=function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+t),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)},A=(0,l.Z)((function(e){return(0,c.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{display:"flex",justifyContent:"flex-end",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,r=e.open,c=e.closeModal,l=e.entity;if(!n)return null;var p=o()(n,"console",null),x=o()(n,"idp",!1);return(0,g.jsx)(d.Z,{modalOpen:r,onClose:function(){c()},title:(0,g.jsx)("div",{className:t.promptTitle,children:(0,g.jsxs)("div",{children:["New ",l," Created"]})}),titleIcon:(0,g.jsx)(f.tVY,{}),children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.formScrollable,children:["A new ",l," has been created with the following details:",!x&&p&&(0,g.jsx)(s.Fragment,{children:(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:t.credentialsPanel,children:[(0,g.jsx)("div",{className:t.credentialTitle,children:"Console Credentials"}),Array.isArray(p)&&p.map((function(e,t){return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:e.accessKey}),(0,g.jsx)(Z,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(p)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:p.accessKey}),(0,g.jsx)(Z,{label:"Secret Key",value:p.secretKey})]})]})}),(null===p||void 0===p)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(Z,{label:"Access Key",value:n.accessKey||""}),(0,g.jsx)(Z,{label:"Secret Key",value:n.secretKey||""})]}),x?(0,g.jsx)("div",{className:t.warningBlock,children:"Please Login via the configured external identity provider."}):(0,g.jsxs)("div",{className:t.warningBlock,children:[(0,g.jsx)(v.Z,{}),(0,g.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:t.buttonContainer,children:!x&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(j.Z,{tooltip:"Download credentials in a JSON file formatted for import using mc alias import. This will only include the default login credentials.",children:(0,g.jsx)(a.zx,{id:"download-button",label:"Download for import",className:t.buttonSpacer,onClick:function(){var e={};p?e=Array.isArray(p)?p.map((function(e){return{url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"}}))[0]:{url:p.url,accessKey:p.accessKey,secretKey:p.secretKey,api:"s3v4",path:"auto"}:e={url:n.url,accessKey:n.accessKey,secretKey:n.secretKey,api:"s3v4",path:"auto"};b("credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(f._8t,{}),variant:"callAction"})}),Array.isArray(p)&&p.length>1&&(0,g.jsx)(j.Z,{tooltip:"Download all access credentials to a JSON file. NOTE: This file is not formatted for import using mc alias import. If you plan to import this alias from the file, please use the Download for Import button. ",children:(0,g.jsx)(a.zx,{id:"download-all-button",label:"Download all access credentials",className:t.buttonSpacer,onClick:function(){var e={};p&&Array.isArray(p)&&p.length>1&&(e=p.map((function(e){return{accessKey:e.accessKey,secretKey:e.secretKey}})));b("all_credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(f._8t,{}),variant:"callAction",color:"primary"})})]})})]})})}))},92217:function(e,t,n){var i=n(1413),s=n(72791),r=n(61889),o=n(30829),a=n(20068),c=n(64554),l=n(11135),d=n(25787),u=n(84570),p=n(23814),x=n(56096),h=n(75952),m=n(78029),f=n.n(m),y=n(90932),j=n(27454),g=n(80184);t.Z=(0,d.Z)((function(e){return(0,l.Z)((0,i.Z)({},p.YI))}))((function(e){var t=e.value,n=e.label,i=void 0===n?"":n,l=e.tooltip,d=void 0===l?"":l,p=e.mode,m=void 0===p?"json":p,Z=e.classes,v=e.onBeforeChange,b=(e.readOnly,e.editorHeight),A=void 0===b?"250px":b;return(0,g.jsxs)(s.Fragment,{children:[(0,g.jsx)(r.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,g.jsxs)(o.Z,{className:Z.inputLabel,children:[(0,g.jsx)("span",{children:i}),""!==d&&(0,g.jsx)("div",{className:Z.tooltipContainer,children:(0,g.jsx)(a.Z,{title:d,placement:"top-start",children:(0,g.jsx)("div",{className:Z.tooltip,children:(0,g.jsx)(u.Z,{})})})})]})}),(0,g.jsx)(r.ZP,{item:!0,xs:12,style:{maxHeight:A,overflow:"auto",border:"1px solid #eaeaea"},children:(0,g.jsx)(y.Z,{value:t,language:m,onChange:function(e){v(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:A||"initial",color:"#000000"}})}),(0,g.jsx)(r.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,g.jsx)(c.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,g.jsx)(j.Z,{tooltip:"Copy to Clipboard",children:(0,g.jsx)(f(),{text:t,children:(0,g.jsx)(h.zx,{type:"button",id:"copy-code-mirror",icon:(0,g.jsx)(x.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},56028:function(e,t,n){var i=n(29439),s=n(1413),r=n(72791),o=n(60364),a=n(13400),c=n(55646),l=n(5574),d=n(65661),u=n(39157),p=n(11135),x=n(25787),h=n(23814),m=n(25469),f=n(29823),y=n(28057),j=n(87995),g=n(80184);t.Z=(0,x.Z)((function(e){return(0,p.Z)((0,s.Z)((0,s.Z)({},h.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},h.sN))}))((function(e){var t=e.onClose,n=e.modalOpen,p=e.title,x=e.children,h=e.classes,Z=e.wideLimit,v=void 0===Z||Z,b=e.noContentPadding,A=e.titleIcon,K=void 0===A?null:A,w=(0,m.TL)(),C=(0,r.useState)(!1),S=(0,i.Z)(C,2),N=S[0],P=S[1],O=(0,o.v9)((function(e){return e.system.modalSnackBar}));(0,r.useEffect)((function(){w((0,j.MK)(""))}),[w]),(0,r.useEffect)((function(){if(O){if(""===O.message)return void P(!1);"error"!==O.type&&P(!0)}}),[O]);var k=v?{classes:{paper:h.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},B="";return O&&(B=O.detailedErrorMsg,(""===O.detailedErrorMsg||O.detailedErrorMsg.length<5)&&(B=O.message)),(0,g.jsxs)(l.Z,(0,s.Z)((0,s.Z)({open:n,classes:h},k),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&t()},className:h.root,children:[(0,g.jsxs)(d.Z,{className:h.title,children:[(0,g.jsxs)("div",{className:h.titleText,children:[K," ",p]}),(0,g.jsx)("div",{className:h.closeContainer,children:(0,g.jsx)(a.Z,{"aria-label":"close",id:"close",className:h.closeButton,onClick:t,disableRipple:!0,size:"small",children:(0,g.jsx)(f.Z,{})})})]}),(0,g.jsx)(y.Z,{isModal:!0}),(0,g.jsx)(c.Z,{open:N,className:h.snackBarModal,onClose:function(){P(!1),w((0,j.MK)(""))},message:B,ContentProps:{className:"".concat(h.snackBar," ").concat(O&&"error"===O.type?h.errorSnackBar:"")},autoHideDuration:O&&"error"===O.type?1e4:5e3}),(0,g.jsx)(u.Z,{className:b?"":h.content,children:x})]}))}))},60680:function(e,t,n){n(72791);var i=n(11135),s=n(25787),r=n(80184);t.Z=(0,s.Z)((function(e){return(0,i.Z)({root:{padding:0,margin:0,fontSize:".9rem"}})}))((function(e){var t=e.classes,n=e.children;return(0,r.jsx)("h1",{className:t.root,children:n})}))},61120:function(e,t,n){function i(e){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},i(e)}n.d(t,{Z:function(){return i}})},60136:function(e,t,n){n.d(t,{Z:function(){return s}});var i=n(89611);function s(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,i.Z)(e,t)}},82963:function(e,t,n){n.d(t,{Z:function(){return r}});var i=n(71002),s=n(97326);function r(e,t){if(t&&("object"===(0,i.Z)(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return(0,s.Z)(e)}}}]);
+//# sourceMappingURL=1199.cd08cdfd.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1199.cd08cdfd.chunk.js.map b/portal-ui/build/static/js/1199.cd08cdfd.chunk.js.map
new file mode 100644
index 000000000..461d1fe07
--- /dev/null
+++ b/portal-ui/build/static/js/1199.cd08cdfd.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/1199.cd08cdfd.chunk.js","mappings":"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","sources":["screens/Console/Account/AddServiceAccountHelpBox.tsx","screens/Console/Account/AddServiceAccountScreen.tsx","screens/Console/Common/CredentialsPrompt/CredentialItem.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx","screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/PanelTitle/PanelTitle.tsx","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.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 from \"react\";\nimport { Box } from \"@mui/material\";\nimport {\n HelpIconFilled,\n IAMPoliciesIcon,\n PasswordKeyIcon,\n ServiceAccountIcon,\n} from \"../../../icons\";\n\nconst FeatureItem = ({\n icon,\n description,\n}: {\n icon: any;\n description: string;\n}) => {\n return (\n \n {icon}{\" \"}\n
\n \n \n \n }\n description={`Create Access Keys`}\n />\n \n Access Keys inherit the policies explicitly attached to the parent\n user, and the policies attached to each group in which the parent\n user has membership.\n \n \n \n }\n description={`Assign Custom Credentials`}\n />\n \n Randomized access credentials are recommended, and provided by\n default. You may use your own custom Access Key and Secret Key by\n replacing the default values. After creation of any Access Key, you\n will be given the opportunity to view and download the account\n credentials.\n \n \n Access Keys support programmatic access by applications. You cannot\n use a Access Key to log into the MinIO Console.\n \n \n \n }\n description={`Assign Access Policies`}\n />\n \n You can specify an optional JSON-formatted IAM policy to further\n restrict Access Key access to a subset of the actions and resources\n explicitly allowed for the parent user. Additional access beyond\n that of the parent user cannot be implemented through these\n policies.\n \n \n You cannot modify the optional Access Key IAM policy after saving.\n \n \n \n \n \n );\n};\n\nexport default AddServiceAccountHelpBox;\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 { useNavigate } from \"react-router-dom\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box } from \"@mui/material\";\nimport {\n IAMPoliciesIcon,\n PasswordKeyIcon,\n ServiceAccountCredentialsIcon,\n} from \"../../../icons\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport PageLayout from \"../Common/Layout/PageLayout\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport AddServiceAccountHelpBox from \"./AddServiceAccountHelpBox\";\nimport BackLink from \"../../../common/BackLink\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport RemoveRedEyeIcon from \"@mui/icons-material/RemoveRedEye\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nimport { ErrorResponseHandler } from \"../../../../src/common/types\";\nimport api from \"../../../../src/common/api\";\nimport CredentialsPrompt from \"../Common/CredentialsPrompt/CredentialsPrompt\";\n\nimport SectionTitle from \"../Common/SectionTitle\";\nimport { getRandomString } from \"../../../screens/Console/Tenants/utils\";\nimport PanelTitle from \"../Common/PanelTitle/PanelTitle\";\n\nimport { setErrorSnackMessage } from \"../../../systemSlice\";\nimport { useAppDispatch } from \"../../../store\";\n\ninterface IAddServiceAccountProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n bottomContainer: {\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n margin: \"auto\",\n justifyContent: \"center\",\n \"& div\": {\n width: 150,\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n },\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\nconst AddServiceAccount = ({ classes }: IAddServiceAccountProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const [addSending, setAddSending] = useState(false);\n const [accessKey, setAccessKey] = useState(getRandomString(16));\n const [secretKey, setSecretKey] = useState(getRandomString(32));\n const [isRestrictedByPolicy, setIsRestrictedByPolicy] =\n useState(false);\n const [newServiceAccount, setNewServiceAccount] =\n useState(null);\n const [showPassword, setShowPassword] = useState(false);\n const [policyJSON, setPolicyJSON] = useState(\"\");\n\n useEffect(() => {\n if (addSending) {\n api\n .invoke(\"POST\", `/api/v1/service-account-credentials`, {\n policy: policyJSON,\n accessKey: accessKey,\n secretKey: secretKey,\n })\n .then((res) => {\n setAddSending(false);\n setNewServiceAccount({\n accessKey: res.accessKey || \"\",\n secretKey: res.secretKey || \"\",\n url: res.url || \"\",\n });\n })\n\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n dispatch(setErrorSnackMessage(err));\n });\n }\n }, [addSending, setAddSending, dispatch, policyJSON, accessKey, secretKey]);\n\n useEffect(() => {\n if (isRestrictedByPolicy) {\n api.invoke(\"GET\", `/api/v1/user/policy`).then((res: string) => {\n setPolicyJSON(JSON.stringify(JSON.parse(res), null, 4));\n });\n }\n }, [isRestrictedByPolicy]);\n\n const addServiceAccount = (e: React.FormEvent) => {\n e.preventDefault();\n setAddSending(true);\n };\n\n const resetForm = () => {\n setPolicyJSON(\"\");\n setNewServiceAccount(null);\n setAccessKey(\"\");\n setSecretKey(\"\");\n setShowPassword(false);\n };\n\n const closeCredentialsModal = () => {\n setNewServiceAccount(null);\n navigate(`${IAM_PAGES.ACCOUNT}`);\n };\n\n return (\n \n {newServiceAccount !== null && (\n {\n closeCredentialsModal();\n }}\n entity=\"Access Key\"\n />\n )}\n \n }\n />\n \n \n \n }>\n Create Access Key\n \n\n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(AddServiceAccount);\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 { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\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 get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\nimport TooltipWrapper from \"../TooltipWrapper/TooltipWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\"href\", \"data:text/plain;charset=utf-8,\" + text);\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n const downloadImport = () => {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n url: consoleCreds.url,\n accessKey: consoleCreds.accessKey,\n secretKey: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n consoleExtras = cCreds[0];\n }\n } else {\n consoleExtras = {\n url: newServiceAccount.url,\n accessKey: newServiceAccount.accessKey,\n secretKey: newServiceAccount.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n };\n\n const downloaddAllCredentials = () => {\n let allCredentials = {};\n if (\n consoleCreds &&\n Array.isArray(consoleCreds) &&\n consoleCreds.length > 1\n ) {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n accessKey: itemMap.accessKey,\n secretKey: itemMap.secretKey,\n };\n });\n allCredentials = cCreds;\n }\n download(\n \"all_credentials.json\",\n JSON.stringify({\n ...allCredentials,\n })\n );\n };\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n \n \n {!idp && (\n <>\n \n }\n variant=\"callAction\"\n />\n \n\n {Array.isArray(consoleCreds) && consoleCreds.length > 1 && (\n \n }\n variant=\"callAction\"\n color=\"primary\"\n />\n \n )}\n >\n )}\n \n \n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\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 { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport MainError from \"../MainError/MainError\";\nimport { setModalSnackMessage } from \"../../../../systemSlice\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n noContentPadding?: boolean;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n noContentPadding,\n titleIcon = null,\n}: IModalProps) => {\n const dispatch = useAppDispatch();\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const modalSnackMessage = useSelector(\n (state: AppState) => state.system.modalSnackBar\n );\n\n useEffect(() => {\n dispatch(setModalSnackMessage(\"\"));\n }, [dispatch]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n dispatch(setModalSnackMessage(\"\"));\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n );\n};\n\nexport default withStyles(styles)(ModalWrapper);\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 { IconButtonProps } from \"@mui/material\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n padding: 0,\n margin: 0,\n fontSize: \".9rem\",\n },\n });\n\ninterface IPanelTitle extends IconButtonProps {\n classes: any;\n children: any;\n}\n\nconst PanelTitle = ({ classes, children }: IPanelTitle) => {\n return
{children}
;\n};\n\nexport default withStyles(styles)(PanelTitle);\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}"],"names":["FeatureItem","icon","description","Box","sx","display","marginRight","height","width","marginBottom","style","fontSize","fontStyle","color","flex","border","borderRadius","flexFlow","padding","marginTop","xs","fontWeight","alignItems","paddingBottom","paddingTop","withStyles","theme","createStyles","bottomContainer","flexGrow","margin","justifyContent","formFieldStyles","modalStyleUtils","classes","dispatch","useAppDispatch","navigate","useNavigate","useState","addSending","setAddSending","getRandomString","accessKey","setAccessKey","secretKey","setSecretKey","isRestrictedByPolicy","setIsRestrictedByPolicy","newServiceAccount","setNewServiceAccount","showPassword","setShowPassword","policyJSON","setPolicyJSON","useEffect","api","policy","then","res","url","catch","err","setErrorSnackMessage","JSON","stringify","parse","Fragment","CredentialsPrompt","open","closeModal","IAM_PAGES","entity","Grid","item","PageHeader","label","BackLink","to","PageLayout","gap","gridTemplateColumns","md","SectionTitle","noValidate","autoComplete","onSubmit","e","preventDefault","addServiceAccount","container","spacing","className","stackedInputs","InputBoxWrapper","value","id","name","placeholder","onChange","target","type","overlayIcon","VisibilityOff","RemoveRedEye","overlayAction","FormSwitchWrapper","checked","event","tooltip","codeMirrorContainer","PanelTitle","formScrollable","CodeMirrorWrapper","onBeforeChange","editor","data","editorHeight","modalButtonBar","variant","onClick","inputWithCopy","background","inputLabel","fieldBasic","OutlinedInput","readOnly","endAdornment","InputAdornment","position","TooltipWrapper","text","onMouseDown","download","filename","element","document","createElement","setAttribute","body","appendChild","click","removeChild","warningBlock","credentialTitle","buttonContainer","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Array","isArray","map","credentialsPair","index","undefined","WarnIcon","consoleExtras","itemMap","path","length","allCredentials","mode","tooltipContainer","placement","overflow","language","evn","backgroundColor","fontFamily","minHeight","borderTop","paddingRight","marginLeft","deleteDialogStyles","content","customDialogSize","maxWidth","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","modalSnackMessage","useSelector","state","system","modalSnackBar","setModalSnackMessage","message","customSize","paper","fullWidth","detailedErrorMsg","scroll","reason","root","titleText","closeContainer","closeButton","disableRipple","size","isModal","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","_getPrototypeOf","o","Object","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","defineProperty","_possibleConstructorReturn","self","call"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/4455.cdf95486.chunk.js b/portal-ui/build/static/js/1267.ee70805c.chunk.js
similarity index 99%
rename from portal-ui/build/static/js/4455.cdf95486.chunk.js
rename to portal-ui/build/static/js/1267.ee70805c.chunk.js
index 74d3abca4..7669736d2 100644
--- a/portal-ui/build/static/js/4455.cdf95486.chunk.js
+++ b/portal-ui/build/static/js/1267.ee70805c.chunk.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[4455],{79762:function(e,t,n){var r=n(72791);var o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,i=n.minimumBatchSize,l=void 0===i?10:i,s=n.threshold,a=void 0===s?15:s,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,i=e.stopIndex,l=[],s=null,a=null,c=o;c<=i;c++)t(c)?null!==a&&(l.push(s,a),s=a=null):(a=c,null===s&&(s=c));if(null!==a){for(var u=Math.min(Math.max(a,s+r-1),n-1),d=a+1;d<=u&&!t(d);d++)a=d;l.push(s,a)}if(l.length)for(;l[1]-l[0]+10;){var f=l[0]-1;if(t(f))break;l[0]=f}return l}({isItemLoaded:r,itemCount:o,minimumBatchSize:l,startIndex:Math.max(0,e-a),stopIndex:Math.min(o-1,t+a)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],i=e[r+1],l=n(o,i);null!=l&&l.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var h=null;function p(e){if(void 0===e&&(e=!1),null===h||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?h="positive-descending":(t.scrollLeft=1,h=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),h}return h}var m=function(e,t){return e};function v(e){var t,n=e.getItemOffset,l=e.getEstimatedTotalSize,s=e.getItemSize,u=e.getOffsetForIndexAndAlignment,h=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,S=e.initInstanceProps,_=e.shouldResetStyleCacheOnItemSizeChange,I=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=S(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"===typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=a((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=a((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,i=o.direction,l=o.itemSize,a=o.layout,c=r._getItemStyleCache(_&&l,_&&a,_&&i);if(c.hasOwnProperty(e))t=c[e];else{var u=n(r.props,e,r._instanceProps),d=s(r.props,e,r._instanceProps),f="horizontal"===i||"horizontal"===a,h="rtl"===i,p=f?u:0;c[e]=t={position:"absolute",left:h?void 0:p,right:h?p:void 0,top:f?0:u,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=a((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,i=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,l=o;if("rtl"===t)switch(p()){case"negative":l=-o;break;case"positive-descending":l=i-n-o}return l=Math.max(0,Math.min(l,i-n)),{isScrolling:!0,scrollDirection:e.scrollOffset0)for(var M=O;M<=z;M++)C.push((0,c.createElement)(t,{data:f,key:p(M,f),index:M,isScrolling:I?R:void 0,style:this._getItemStyle(M)}));var T=l(this.props,this._instanceProps);return(0,c.createElement)(g||S||"div",{className:n,onScroll:b,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,c.createElement)(a||u||"div",{children:C,ref:s,style:{height:x?"100%":T,pointerEvents:R?"none":void 0,width:x?T:"100%"}}))},y._callPropsCallbacks=function(){if("function"===typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"===typeof this.props.onScroll){var i=this.state,l=i.scrollDirection,s=i.scrollOffset,a=i.scrollUpdateWasRequested;this._callOnScroll(l,s,a)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,i=r.scrollDirection,l=r.scrollOffset;if(0===t)return[0,0,0,0];var s=h(this.props,l,this._instanceProps),a=v(this.props,s,l,this._instanceProps),c=o&&"backward"!==i?1:Math.max(1,n),u=o&&"forward"!==i?1:Math.max(1,n);return[Math.max(0,s-c),Math.max(0,Math.min(t-1,a+u)),s,a]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var g=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},S=v({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r){var o=e.direction,i=e.height,l=e.itemCount,s=e.itemSize,a=e.layout,c=e.width,u="horizontal"===o||"horizontal"===a?c:i,d=Math.max(0,l*s-u),f=Math.min(d,t*s),h=Math.max(0,t*s-u+s);switch("smart"===n&&(n=r>=h-u&&r<=f+u?"auto":"center"),n){case"start":return f;case"end":return h;case"center":var p=Math.round(h+(f-h)/2);return pd+Math.floor(u/2)?d:p;default:return r>=h&&r<=f?r:r0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,i=n.minimumBatchSize,l=void 0===i?10:i,s=n.threshold,a=void 0===s?15:s,c=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,i=e.stopIndex,l=[],s=null,a=null,c=o;c<=i;c++)t(c)?null!==a&&(l.push(s,a),s=a=null):(a=c,null===s&&(s=c));if(null!==a){for(var u=Math.min(Math.max(a,s+r-1),n-1),d=a+1;d<=u&&!t(d);d++)a=d;l.push(s,a)}if(l.length)for(;l[1]-l[0]+10;){var f=l[0]-1;if(t(f))break;l[0]=f}return l}({isItemLoaded:r,itemCount:o,minimumBatchSize:l,startIndex:Math.max(0,e-a),stopIndex:Math.min(o-1,t+a)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],i=e[r+1],l=n(o,i);null!=l&&l.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var h=null;function p(e){if(void 0===e&&(e=!1),null===h||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?h="positive-descending":(t.scrollLeft=1,h=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),h}return h}var m=function(e,t){return e};function v(e){var t,n=e.getItemOffset,l=e.getEstimatedTotalSize,s=e.getItemSize,u=e.getOffsetForIndexAndAlignment,h=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,S=e.initInstanceProps,_=e.shouldResetStyleCacheOnItemSizeChange,I=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=S(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"===typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=a((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=a((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,i=o.direction,l=o.itemSize,a=o.layout,c=r._getItemStyleCache(_&&l,_&&a,_&&i);if(c.hasOwnProperty(e))t=c[e];else{var u=n(r.props,e,r._instanceProps),d=s(r.props,e,r._instanceProps),f="horizontal"===i||"horizontal"===a,h="rtl"===i,p=f?u:0;c[e]=t={position:"absolute",left:h?void 0:p,right:h?p:void 0,top:f?0:u,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=a((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,i=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,l=o;if("rtl"===t)switch(p()){case"negative":l=-o;break;case"positive-descending":l=i-n-o}return l=Math.max(0,Math.min(l,i-n)),{isScrolling:!0,scrollDirection:e.scrollOffset0)for(var M=O;M<=z;M++)C.push((0,c.createElement)(t,{data:f,key:p(M,f),index:M,isScrolling:I?R:void 0,style:this._getItemStyle(M)}));var T=l(this.props,this._instanceProps);return(0,c.createElement)(g||S||"div",{className:n,onScroll:b,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,c.createElement)(a||u||"div",{children:C,ref:s,style:{height:x?"100%":T,pointerEvents:R?"none":void 0,width:x?T:"100%"}}))},y._callPropsCallbacks=function(){if("function"===typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"===typeof this.props.onScroll){var i=this.state,l=i.scrollDirection,s=i.scrollOffset,a=i.scrollUpdateWasRequested;this._callOnScroll(l,s,a)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,i=r.scrollDirection,l=r.scrollOffset;if(0===t)return[0,0,0,0];var s=h(this.props,l,this._instanceProps),a=v(this.props,s,l,this._instanceProps),c=o&&"backward"!==i?1:Math.max(1,n),u=o&&"forward"!==i?1:Math.max(1,n);return[Math.max(0,s-c),Math.max(0,Math.min(t-1,a+u)),s,a]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var g=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},S=v({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r){var o=e.direction,i=e.height,l=e.itemCount,s=e.itemSize,a=e.layout,c=e.width,u="horizontal"===o||"horizontal"===a?c:i,d=Math.max(0,l*s-u),f=Math.min(d,t*s),h=Math.max(0,t*s-u+s);switch("smart"===n&&(n=r>=h-u&&r<=f+u?"auto":"center"),n){case"start":return f;case"end":return h;case"center":var p=Math.round(h+(f-h)/2);return pd+Math.floor(u/2)?d:p;default:return r>=h&&r<=f?r:r lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n\nfunction scanForUnloadedRanges(_ref) {\n var isItemLoaded = _ref.isItemLoaded,\n itemCount = _ref.itemCount,\n minimumBatchSize = _ref.minimumBatchSize,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n var unloadedRanges = [];\n\n var rangeStartIndex = null;\n var rangeStopIndex = null;\n\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n var loaded = isItemLoaded(_index);\n\n if (!loaded) {\n rangeStopIndex = _index;\n if (rangeStartIndex === null) {\n rangeStartIndex = _index;\n }\n } else if (rangeStopIndex !== null) {\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n\n rangeStartIndex = rangeStopIndex = null;\n }\n }\n\n // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n // Scan forward to try filling our :minimumBatchSize.\n if (rangeStopIndex !== null) {\n var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), itemCount - 1);\n\n for (var _index2 = rangeStopIndex + 1; _index2 <= potentialStopIndex; _index2++) {\n if (!isItemLoaded(_index2)) {\n rangeStopIndex = _index2;\n } else {\n break;\n }\n }\n\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n }\n\n // Check to see if our first range ended prematurely.\n // In this case we should scan backwards to try filling our :minimumBatchSize.\n if (unloadedRanges.length) {\n while (unloadedRanges[1] - unloadedRanges[0] + 1 < minimumBatchSize && unloadedRanges[0] > 0) {\n var _index3 = unloadedRanges[0] - 1;\n\n if (!isItemLoaded(_index3)) {\n unloadedRanges[0] = _index3;\n } else {\n break;\n }\n }\n }\n\n return unloadedRanges;\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar InfiniteLoader = function (_PureComponent) {\n inherits(InfiniteLoader, _PureComponent);\n\n function InfiniteLoader() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, InfiniteLoader);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = InfiniteLoader.__proto__ || Object.getPrototypeOf(InfiniteLoader)).call.apply(_ref, [this].concat(args))), _this), _this._lastRenderedStartIndex = -1, _this._lastRenderedStopIndex = -1, _this._memoizedUnloadedRanges = [], _this._onItemsRendered = function (_ref2) {\n var visibleStartIndex = _ref2.visibleStartIndex,\n visibleStopIndex = _ref2.visibleStopIndex;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isInteger(visibleStartIndex) || !isInteger(visibleStopIndex)) {\n console.warn('Invalid onItemsRendered signature; please refer to InfiniteLoader documentation.');\n }\n\n if (typeof _this.props.loadMoreRows === 'function') {\n console.warn('InfiniteLoader \"loadMoreRows\" prop has been renamed to \"loadMoreItems\".');\n }\n }\n\n _this._lastRenderedStartIndex = visibleStartIndex;\n _this._lastRenderedStopIndex = visibleStopIndex;\n\n _this._ensureRowsLoaded(visibleStartIndex, visibleStopIndex);\n }, _this._setRef = function (listRef) {\n _this._listRef = listRef;\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n createClass(InfiniteLoader, [{\n key: 'resetloadMoreItemsCache',\n value: function resetloadMoreItemsCache() {\n var autoReload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this._memoizedUnloadedRanges = [];\n\n if (autoReload) {\n this._ensureRowsLoaded(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (process.env.NODE_ENV !== 'production') {\n if (this._listRef == null) {\n console.warn('Invalid list ref; please refer to InfiniteLoader documentation.');\n }\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var children = this.props.children;\n\n\n return children({\n onItemsRendered: this._onItemsRendered,\n ref: this._setRef\n });\n }\n }, {\n key: '_ensureRowsLoaded',\n value: function _ensureRowsLoaded(startIndex, stopIndex) {\n var _props = this.props,\n isItemLoaded = _props.isItemLoaded,\n itemCount = _props.itemCount,\n _props$minimumBatchSi = _props.minimumBatchSize,\n minimumBatchSize = _props$minimumBatchSi === undefined ? 10 : _props$minimumBatchSi,\n _props$threshold = _props.threshold,\n threshold = _props$threshold === undefined ? 15 : _props$threshold;\n\n\n var unloadedRanges = scanForUnloadedRanges({\n isItemLoaded: isItemLoaded,\n itemCount: itemCount,\n minimumBatchSize: minimumBatchSize,\n startIndex: Math.max(0, startIndex - threshold),\n stopIndex: Math.min(itemCount - 1, stopIndex + threshold)\n });\n\n // Avoid calling load-rows unless range has changed.\n // This shouldn't be strictly necessary, but is maybe nice to do.\n if (this._memoizedUnloadedRanges.length !== unloadedRanges.length || this._memoizedUnloadedRanges.some(function (startOrStop, index) {\n return unloadedRanges[index] !== startOrStop;\n })) {\n this._memoizedUnloadedRanges = unloadedRanges;\n this._loadUnloadedRanges(unloadedRanges);\n }\n }\n }, {\n key: '_loadUnloadedRanges',\n value: function _loadUnloadedRanges(unloadedRanges) {\n var _this2 = this;\n\n // loadMoreRows was renamed to loadMoreItems in v1.0.3; will be removed in v2.0\n var loadMoreItems = this.props.loadMoreItems || this.props.loadMoreRows;\n\n var _loop = function _loop(i) {\n var startIndex = unloadedRanges[i];\n var stopIndex = unloadedRanges[i + 1];\n var promise = loadMoreItems(startIndex, stopIndex);\n if (promise != null) {\n promise.then(function () {\n // Refresh the visible rows if any of them have just been loaded.\n // Otherwise they will remain in their unloaded visual state.\n if (isRangeVisible({\n lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n startIndex: startIndex,\n stopIndex: stopIndex\n })) {\n // Handle an unmount while promises are still in flight.\n if (_this2._listRef == null) {\n return;\n }\n\n // Resize cached row sizes for VariableSizeList,\n // otherwise just re-render the list.\n if (typeof _this2._listRef.resetAfterIndex === 'function') {\n _this2._listRef.resetAfterIndex(startIndex, true);\n } else {\n // HACK reset temporarily cached item styles to force PureComponent to re-render.\n // This is pretty gross, but I'm okay with it for now.\n // Don't judge me.\n if (typeof _this2._listRef._getItemStyleCache === 'function') {\n _this2._listRef._getItemStyleCache(-1);\n }\n _this2._listRef.forceUpdate();\n }\n }\n });\n }\n };\n\n for (var i = 0; i < unloadedRanges.length; i += 2) {\n _loop(i);\n }\n }\n }]);\n return InfiniteLoader;\n}(PureComponent);\n\nexport default InfiniteLoader;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) - size + ((itemSize: any): number)\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","possibleConstructorReturn","self","call","ReferenceError","InfiniteLoader","_PureComponent","_ref","_temp","_this","this","_len","arguments","args","Array","_key","__proto__","getPrototypeOf","apply","concat","_lastRenderedStartIndex","_lastRenderedStopIndex","_memoizedUnloadedRanges","_onItemsRendered","_ref2","visibleStartIndex","visibleStopIndex","_ensureRowsLoaded","_setRef","listRef","_listRef","subClass","superClass","create","constructor","value","setPrototypeOf","inherits","autoReload","undefined","process","children","onItemsRendered","ref","startIndex","stopIndex","_props","isItemLoaded","itemCount","_props$minimumBatchSi","minimumBatchSize","_props$threshold","threshold","unloadedRanges","rangeStartIndex","rangeStopIndex","_index","push","potentialStopIndex","Math","min","max","_index2","_index3","scanForUnloadedRanges","some","startOrStop","index","_loadUnloadedRanges","_this2","loadMoreItems","loadMoreRows","_loop","promise","then","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","resetAfterIndex","_getItemStyleCache","forceUpdate","PureComponent","safeIsNaN","Number","isNaN","areInputsEqual","newInputs","lastInputs","first","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","requestTimeout","callback","delay","start","requestAnimationFrame","tick","cachedRTLResult","getRTLOffsetType","recalculate","outerDiv","document","createElement","outerStyle","style","width","height","overflow","direction","innerDiv","innerStyle","appendChild","body","scrollLeft","removeChild","defaultItemKey","data","createListComponent","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","state","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","memoizeOne","overscanStartIndex","overscanStopIndex","_callOnScroll","onScroll","_getItemStyle","itemSize","layout","itemStyleCache","hasOwnProperty","offset","size","isHorizontal","isRtl","offsetHorizontal","position","left","right","top","_","__","___","_onScrollHorizontal","event","currentTarget","clientWidth","scrollWidth","setState","prevState","_resetIsScrollingDebounced","_onScrollVertical","clientHeight","scrollHeight","scrollTop","_outerRefSetter","outerRef","current","_resetIsScrolling","_inheritsLoose","List","getDerivedStateFromProps","nextProps","validateSharedProps","_proto","scrollTo","scrollToItem","align","componentDidMount","_callPropsCallbacks","componentDidUpdate","componentWillUnmount","render","className","innerRef","innerElementType","innerTagName","itemData","itemKey","outerElementType","outerTagName","useIsScrolling","_getRangeToRender","items","estimatedTotalSize","WebkitOverflowScrolling","willChange","pointerEvents","overscanCount","overscanBackward","overscanForward","defaultProps","FixedSizeList","lastItemOffset","maxOffset","minOffset","middleOffset","round","ceil","floor","numVisibleItems"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"static/js/1267.ee70805c.chunk.js","mappings":"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","sources":["../node_modules/react-window-infinite-loader/dist/index.esm.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-window/src/timer.js","../node_modules/react-window/src/domHelpers.js","../node_modules/react-window/src/createGridComponent.js","../node_modules/react-window/src/createListComponent.js","../node_modules/react-window/src/FixedSizeList.js"],"sourcesContent":["import { PureComponent } from 'react';\n\nfunction isInteger(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n\nfunction isRangeVisible(_ref) {\n var lastRenderedStartIndex = _ref.lastRenderedStartIndex,\n lastRenderedStopIndex = _ref.lastRenderedStopIndex,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n return !(startIndex > lastRenderedStopIndex || stopIndex < lastRenderedStartIndex);\n}\n\nfunction scanForUnloadedRanges(_ref) {\n var isItemLoaded = _ref.isItemLoaded,\n itemCount = _ref.itemCount,\n minimumBatchSize = _ref.minimumBatchSize,\n startIndex = _ref.startIndex,\n stopIndex = _ref.stopIndex;\n\n var unloadedRanges = [];\n\n var rangeStartIndex = null;\n var rangeStopIndex = null;\n\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n var loaded = isItemLoaded(_index);\n\n if (!loaded) {\n rangeStopIndex = _index;\n if (rangeStartIndex === null) {\n rangeStartIndex = _index;\n }\n } else if (rangeStopIndex !== null) {\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n\n rangeStartIndex = rangeStopIndex = null;\n }\n }\n\n // If :rangeStopIndex is not null it means we haven't ran out of unloaded rows.\n // Scan forward to try filling our :minimumBatchSize.\n if (rangeStopIndex !== null) {\n var potentialStopIndex = Math.min(Math.max(rangeStopIndex, rangeStartIndex + minimumBatchSize - 1), itemCount - 1);\n\n for (var _index2 = rangeStopIndex + 1; _index2 <= potentialStopIndex; _index2++) {\n if (!isItemLoaded(_index2)) {\n rangeStopIndex = _index2;\n } else {\n break;\n }\n }\n\n unloadedRanges.push(rangeStartIndex, rangeStopIndex);\n }\n\n // Check to see if our first range ended prematurely.\n // In this case we should scan backwards to try filling our :minimumBatchSize.\n if (unloadedRanges.length) {\n while (unloadedRanges[1] - unloadedRanges[0] + 1 < minimumBatchSize && unloadedRanges[0] > 0) {\n var _index3 = unloadedRanges[0] - 1;\n\n if (!isItemLoaded(_index3)) {\n unloadedRanges[0] = _index3;\n } else {\n break;\n }\n }\n }\n\n return unloadedRanges;\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar InfiniteLoader = function (_PureComponent) {\n inherits(InfiniteLoader, _PureComponent);\n\n function InfiniteLoader() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, InfiniteLoader);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = InfiniteLoader.__proto__ || Object.getPrototypeOf(InfiniteLoader)).call.apply(_ref, [this].concat(args))), _this), _this._lastRenderedStartIndex = -1, _this._lastRenderedStopIndex = -1, _this._memoizedUnloadedRanges = [], _this._onItemsRendered = function (_ref2) {\n var visibleStartIndex = _ref2.visibleStartIndex,\n visibleStopIndex = _ref2.visibleStopIndex;\n\n if (process.env.NODE_ENV !== 'production') {\n if (!isInteger(visibleStartIndex) || !isInteger(visibleStopIndex)) {\n console.warn('Invalid onItemsRendered signature; please refer to InfiniteLoader documentation.');\n }\n\n if (typeof _this.props.loadMoreRows === 'function') {\n console.warn('InfiniteLoader \"loadMoreRows\" prop has been renamed to \"loadMoreItems\".');\n }\n }\n\n _this._lastRenderedStartIndex = visibleStartIndex;\n _this._lastRenderedStopIndex = visibleStopIndex;\n\n _this._ensureRowsLoaded(visibleStartIndex, visibleStopIndex);\n }, _this._setRef = function (listRef) {\n _this._listRef = listRef;\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n\n createClass(InfiniteLoader, [{\n key: 'resetloadMoreItemsCache',\n value: function resetloadMoreItemsCache() {\n var autoReload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n this._memoizedUnloadedRanges = [];\n\n if (autoReload) {\n this._ensureRowsLoaded(this._lastRenderedStartIndex, this._lastRenderedStopIndex);\n }\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (process.env.NODE_ENV !== 'production') {\n if (this._listRef == null) {\n console.warn('Invalid list ref; please refer to InfiniteLoader documentation.');\n }\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var children = this.props.children;\n\n\n return children({\n onItemsRendered: this._onItemsRendered,\n ref: this._setRef\n });\n }\n }, {\n key: '_ensureRowsLoaded',\n value: function _ensureRowsLoaded(startIndex, stopIndex) {\n var _props = this.props,\n isItemLoaded = _props.isItemLoaded,\n itemCount = _props.itemCount,\n _props$minimumBatchSi = _props.minimumBatchSize,\n minimumBatchSize = _props$minimumBatchSi === undefined ? 10 : _props$minimumBatchSi,\n _props$threshold = _props.threshold,\n threshold = _props$threshold === undefined ? 15 : _props$threshold;\n\n\n var unloadedRanges = scanForUnloadedRanges({\n isItemLoaded: isItemLoaded,\n itemCount: itemCount,\n minimumBatchSize: minimumBatchSize,\n startIndex: Math.max(0, startIndex - threshold),\n stopIndex: Math.min(itemCount - 1, stopIndex + threshold)\n });\n\n // Avoid calling load-rows unless range has changed.\n // This shouldn't be strictly necessary, but is maybe nice to do.\n if (this._memoizedUnloadedRanges.length !== unloadedRanges.length || this._memoizedUnloadedRanges.some(function (startOrStop, index) {\n return unloadedRanges[index] !== startOrStop;\n })) {\n this._memoizedUnloadedRanges = unloadedRanges;\n this._loadUnloadedRanges(unloadedRanges);\n }\n }\n }, {\n key: '_loadUnloadedRanges',\n value: function _loadUnloadedRanges(unloadedRanges) {\n var _this2 = this;\n\n // loadMoreRows was renamed to loadMoreItems in v1.0.3; will be removed in v2.0\n var loadMoreItems = this.props.loadMoreItems || this.props.loadMoreRows;\n\n var _loop = function _loop(i) {\n var startIndex = unloadedRanges[i];\n var stopIndex = unloadedRanges[i + 1];\n var promise = loadMoreItems(startIndex, stopIndex);\n if (promise != null) {\n promise.then(function () {\n // Refresh the visible rows if any of them have just been loaded.\n // Otherwise they will remain in their unloaded visual state.\n if (isRangeVisible({\n lastRenderedStartIndex: _this2._lastRenderedStartIndex,\n lastRenderedStopIndex: _this2._lastRenderedStopIndex,\n startIndex: startIndex,\n stopIndex: stopIndex\n })) {\n // Handle an unmount while promises are still in flight.\n if (_this2._listRef == null) {\n return;\n }\n\n // Resize cached row sizes for VariableSizeList,\n // otherwise just re-render the list.\n if (typeof _this2._listRef.resetAfterIndex === 'function') {\n _this2._listRef.resetAfterIndex(startIndex, true);\n } else {\n // HACK reset temporarily cached item styles to force PureComponent to re-render.\n // This is pretty gross, but I'm okay with it for now.\n // Don't judge me.\n if (typeof _this2._listRef._getItemStyleCache === 'function') {\n _this2._listRef._getItemStyleCache(-1);\n }\n _this2._listRef.forceUpdate();\n }\n }\n });\n }\n };\n\n for (var i = 0; i < unloadedRanges.length; i += 2) {\n _loop(i);\n }\n }\n }]);\n return InfiniteLoader;\n}(PureComponent);\n\nexport default InfiniteLoader;\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) - size + ((itemSize: any): number)\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n"],"names":["classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","possibleConstructorReturn","self","call","ReferenceError","InfiniteLoader","_PureComponent","_ref","_temp","_this","this","_len","arguments","args","Array","_key","__proto__","getPrototypeOf","apply","concat","_lastRenderedStartIndex","_lastRenderedStopIndex","_memoizedUnloadedRanges","_onItemsRendered","_ref2","visibleStartIndex","visibleStopIndex","_ensureRowsLoaded","_setRef","listRef","_listRef","subClass","superClass","create","constructor","value","setPrototypeOf","inherits","autoReload","undefined","process","children","onItemsRendered","ref","startIndex","stopIndex","_props","isItemLoaded","itemCount","_props$minimumBatchSi","minimumBatchSize","_props$threshold","threshold","unloadedRanges","rangeStartIndex","rangeStopIndex","_index","push","potentialStopIndex","Math","min","max","_index2","_index3","scanForUnloadedRanges","some","startOrStop","index","_loadUnloadedRanges","_this2","loadMoreItems","loadMoreRows","_loop","promise","then","lastRenderedStartIndex","lastRenderedStopIndex","isRangeVisible","resetAfterIndex","_getItemStyleCache","forceUpdate","PureComponent","safeIsNaN","Number","isNaN","areInputsEqual","newInputs","lastInputs","first","second","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","requestTimeout","callback","delay","start","requestAnimationFrame","tick","cachedRTLResult","getRTLOffsetType","recalculate","outerDiv","document","createElement","outerStyle","style","width","height","overflow","direction","innerDiv","innerStyle","appendChild","body","scrollLeft","removeChild","defaultItemKey","data","createListComponent","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","state","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","memoizeOne","overscanStartIndex","overscanStopIndex","_callOnScroll","onScroll","_getItemStyle","itemSize","layout","itemStyleCache","hasOwnProperty","offset","size","isHorizontal","isRtl","offsetHorizontal","position","left","right","top","_","__","___","_onScrollHorizontal","event","currentTarget","clientWidth","scrollWidth","setState","prevState","_resetIsScrollingDebounced","_onScrollVertical","clientHeight","scrollHeight","scrollTop","_outerRefSetter","outerRef","current","_resetIsScrolling","_inheritsLoose","List","getDerivedStateFromProps","nextProps","validateSharedProps","_proto","scrollTo","scrollToItem","align","componentDidMount","_callPropsCallbacks","componentDidUpdate","componentWillUnmount","render","className","innerRef","innerElementType","innerTagName","itemData","itemKey","outerElementType","outerTagName","useIsScrolling","_getRangeToRender","items","estimatedTotalSize","WebkitOverflowScrolling","willChange","pointerEvents","overscanCount","overscanBackward","overscanForward","defaultProps","FixedSizeList","lastItemOffset","maxOffset","minOffset","middleOffset","round","ceil","floor","numVisibleItems"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1268.408b6da9.chunk.js b/portal-ui/build/static/js/1268.31853f4b.chunk.js
similarity index 97%
rename from portal-ui/build/static/js/1268.408b6da9.chunk.js
rename to portal-ui/build/static/js/1268.31853f4b.chunk.js
index 37f3b8670..73dd77a22 100644
--- a/portal-ui/build/static/js/1268.408b6da9.chunk.js
+++ b/portal-ui/build/static/js/1268.31853f4b.chunk.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1268],{92217:function(e,n,t){var o=t(1413),r=t(72791),i=t(61889),a=t(30829),c=t(20068),s=t(64554),l=t(11135),u=t(25787),d=t(84570),f=t(23814),p=t(38588),x=t(75952),m=t(78029),h=t.n(m),y=t(90932),b=t(27454),j=t(80184);n.Z=(0,u.Z)((function(e){return(0,l.Z)((0,o.Z)({},f.YI))}))((function(e){var n=e.value,t=e.label,o=void 0===t?"":t,l=e.tooltip,u=void 0===l?"":l,f=e.mode,m=void 0===f?"json":f,Z=e.classes,g=e.onBeforeChange,v=(e.readOnly,e.editorHeight),C=void 0===v?"250px":v;return(0,j.jsxs)(r.Fragment,{children:[(0,j.jsx)(i.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,j.jsxs)(a.Z,{className:Z.inputLabel,children:[(0,j.jsx)("span",{children:o}),""!==u&&(0,j.jsx)("div",{className:Z.tooltipContainer,children:(0,j.jsx)(c.Z,{title:u,placement:"top-start",children:(0,j.jsx)("div",{className:Z.tooltip,children:(0,j.jsx)(d.Z,{})})})})]})}),(0,j.jsx)(i.ZP,{item:!0,xs:12,style:{maxHeight:C,overflow:"auto",border:"1px solid #eaeaea"},children:(0,j.jsx)(y.Z,{value:n,language:m,onChange:function(e){g(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:C||"initial",color:"#000000"}})}),(0,j.jsx)(i.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,j.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,j.jsx)(b.Z,{tooltip:"Copy to Clipboard",children:(0,j.jsx)(h(),{text:n,children:(0,j.jsx)(x.zx,{type:"button",id:"copy-code-mirror",icon:(0,j.jsx)(p.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},82859:function(e,n,t){t.r(n);var o=t(29439),r=t(1413),i=t(72791),a=t(60364),c=t(16871),s=t(40986),l=t(75952),u=t(61889),d=t(11135),f=t(25787),p=t(81207),x=t(23814),m=t(92217),h=t(87995),y=t(25469),b=t(82295),j=t(50896),Z=t(80184);n.default=(0,f.Z)((function(e){return(0,d.Z)((0,r.Z)((0,r.Z)({errorState:{color:"#b53b4b",fontSize:14,fontWeight:"bold"},codeMirrorContainer:{marginBottom:20,paddingLeft:15,"& label":{marginBottom:".5rem"},"& label + div":{display:"none"}}},x.ID),x.YI))}))((function(e){var n=e.classes,t=(0,y.TL)(),r=(0,c.s0)(),d=(0,a.v9)((function(e){return e.tenants.currentTenant})),f=(0,a.v9)((function(e){return e.tenants.currentNamespace})),x=(0,i.useState)(!1),g=(0,o.Z)(x,2),v=g[0],C=g[1],S=(0,i.useState)(!1),P=(0,o.Z)(S,2),w=P[0],T=P[1],k=(0,i.useState)(""),O=(0,o.Z)(k,2),_=O[0],z=O[1],L=(0,i.useState)(""),M=(0,o.Z)(L,2),B=M[0],E=M[1];(0,i.useEffect)((function(){p.Z.invoke("GET","/api/v1/namespaces/".concat(f,"/tenants/").concat(d,"/yaml")).then((function(e){T(!1),z(e.yaml)})).catch((function(e){T(!1),t((0,h.zb)(e))}))}),[d,f,t]),(0,i.useEffect)((function(){}),[]);var F=""!==_.trim();return(0,Z.jsxs)(i.Fragment,{children:[v||w&&(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(s.Z,{})}),""!==B&&(0,Z.jsx)("div",{className:n.errorState,children:B}),!w&&(0,Z.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),v||(C(!0),E(""),p.Z.invoke("PUT","/api/v1/namespaces/".concat(f,"/tenants/").concat(d,"/yaml"),{yaml:_}).then((function(e){C(!1),t((0,b.v)()),E(""),r("/namespaces/".concat(f,"/tenants/").concat(d,"/summary"))})).catch((function(e){C(!1),E(e.errorMessage)})))},children:(0,Z.jsxs)(u.ZP,{container:!0,children:[(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(j.Z,{children:"Tenant Specification"})}),(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(m.Z,{value:_,mode:"yaml",onBeforeChange:function(e,n,t){z(t)},editorHeight:"550px"})}),(0,Z.jsxs)(u.ZP,{item:!0,xs:12,style:{display:"flex",justifyContent:"flex-end",paddingTop:16},children:[(0,Z.jsx)(l.zx,{id:"cancel-tenant-yaml",type:"button",variant:"regular",disabled:v,onClick:function(){r("/namespaces/".concat(f,"/tenants/").concat(d,"/summary"))},label:"Cancel"}),(0,Z.jsx)(l.zx,{id:"save-tenant-yaml",type:"submit",variant:"callAction",disabled:v||!F,style:{marginLeft:8},label:"Save"})]})]})})]})}))},61120:function(e,n,t){function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}t.d(n,{Z:function(){return o}})},60136:function(e,n,t){t.d(n,{Z:function(){return r}});var o=t(89611);function r(e,n){if("function"!==typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),n&&(0,o.Z)(e,n)}},82963:function(e,n,t){t.d(n,{Z:function(){return i}});var o=t(71002),r=t(97326);function i(e,n){if(n&&("object"===(0,o.Z)(n)||"function"===typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return(0,r.Z)(e)}}}]);
-//# sourceMappingURL=1268.408b6da9.chunk.js.map
\ No newline at end of file
+"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1268],{92217:function(e,n,t){var o=t(1413),r=t(72791),i=t(61889),a=t(30829),c=t(20068),s=t(64554),l=t(11135),u=t(25787),d=t(84570),f=t(23814),p=t(56096),x=t(75952),m=t(78029),h=t.n(m),y=t(90932),b=t(27454),j=t(80184);n.Z=(0,u.Z)((function(e){return(0,l.Z)((0,o.Z)({},f.YI))}))((function(e){var n=e.value,t=e.label,o=void 0===t?"":t,l=e.tooltip,u=void 0===l?"":l,f=e.mode,m=void 0===f?"json":f,Z=e.classes,g=e.onBeforeChange,v=(e.readOnly,e.editorHeight),C=void 0===v?"250px":v;return(0,j.jsxs)(r.Fragment,{children:[(0,j.jsx)(i.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,j.jsxs)(a.Z,{className:Z.inputLabel,children:[(0,j.jsx)("span",{children:o}),""!==u&&(0,j.jsx)("div",{className:Z.tooltipContainer,children:(0,j.jsx)(c.Z,{title:u,placement:"top-start",children:(0,j.jsx)("div",{className:Z.tooltip,children:(0,j.jsx)(d.Z,{})})})})]})}),(0,j.jsx)(i.ZP,{item:!0,xs:12,style:{maxHeight:C,overflow:"auto",border:"1px solid #eaeaea"},children:(0,j.jsx)(y.Z,{value:n,language:m,onChange:function(e){g(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:C||"initial",color:"#000000"}})}),(0,j.jsx)(i.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,j.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,j.jsx)(b.Z,{tooltip:"Copy to Clipboard",children:(0,j.jsx)(h(),{text:n,children:(0,j.jsx)(x.zx,{type:"button",id:"copy-code-mirror",icon:(0,j.jsx)(p.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},82859:function(e,n,t){t.r(n);var o=t(29439),r=t(1413),i=t(72791),a=t(60364),c=t(16871),s=t(40986),l=t(75952),u=t(61889),d=t(11135),f=t(25787),p=t(81207),x=t(23814),m=t(92217),h=t(87995),y=t(25469),b=t(82295),j=t(50896),Z=t(80184);n.default=(0,f.Z)((function(e){return(0,d.Z)((0,r.Z)((0,r.Z)({errorState:{color:"#b53b4b",fontSize:14,fontWeight:"bold"},codeMirrorContainer:{marginBottom:20,paddingLeft:15,"& label":{marginBottom:".5rem"},"& label + div":{display:"none"}}},x.ID),x.YI))}))((function(e){var n=e.classes,t=(0,y.TL)(),r=(0,c.s0)(),d=(0,a.v9)((function(e){return e.tenants.currentTenant})),f=(0,a.v9)((function(e){return e.tenants.currentNamespace})),x=(0,i.useState)(!1),g=(0,o.Z)(x,2),v=g[0],C=g[1],S=(0,i.useState)(!1),P=(0,o.Z)(S,2),w=P[0],T=P[1],k=(0,i.useState)(""),O=(0,o.Z)(k,2),_=O[0],z=O[1],L=(0,i.useState)(""),M=(0,o.Z)(L,2),B=M[0],E=M[1];(0,i.useEffect)((function(){p.Z.invoke("GET","/api/v1/namespaces/".concat(f,"/tenants/").concat(d,"/yaml")).then((function(e){T(!1),z(e.yaml)})).catch((function(e){T(!1),t((0,h.zb)(e))}))}),[d,f,t]),(0,i.useEffect)((function(){}),[]);var F=""!==_.trim();return(0,Z.jsxs)(i.Fragment,{children:[v||w&&(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(s.Z,{})}),""!==B&&(0,Z.jsx)("div",{className:n.errorState,children:B}),!w&&(0,Z.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),v||(C(!0),E(""),p.Z.invoke("PUT","/api/v1/namespaces/".concat(f,"/tenants/").concat(d,"/yaml"),{yaml:_}).then((function(e){C(!1),t((0,b.v)()),E(""),r("/namespaces/".concat(f,"/tenants/").concat(d,"/summary"))})).catch((function(e){C(!1),E(e.errorMessage)})))},children:(0,Z.jsxs)(u.ZP,{container:!0,children:[(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(j.Z,{children:"Tenant Specification"})}),(0,Z.jsx)(u.ZP,{item:!0,xs:12,children:(0,Z.jsx)(m.Z,{value:_,mode:"yaml",onBeforeChange:function(e,n,t){z(t)},editorHeight:"550px"})}),(0,Z.jsxs)(u.ZP,{item:!0,xs:12,style:{display:"flex",justifyContent:"flex-end",paddingTop:16},children:[(0,Z.jsx)(l.zx,{id:"cancel-tenant-yaml",type:"button",variant:"regular",disabled:v,onClick:function(){r("/namespaces/".concat(f,"/tenants/").concat(d,"/summary"))},label:"Cancel"}),(0,Z.jsx)(l.zx,{id:"save-tenant-yaml",type:"submit",variant:"callAction",disabled:v||!F,style:{marginLeft:8},label:"Save"})]})]})})]})}))},61120:function(e,n,t){function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}t.d(n,{Z:function(){return o}})},60136:function(e,n,t){t.d(n,{Z:function(){return r}});var o=t(89611);function r(e,n){if("function"!==typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),n&&(0,o.Z)(e,n)}},82963:function(e,n,t){t.d(n,{Z:function(){return i}});var o=t(71002),r=t(97326);function i(e,n){if(n&&("object"===(0,o.Z)(n)||"function"===typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return(0,r.Z)(e)}}}]);
+//# sourceMappingURL=1268.31853f4b.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1268.408b6da9.chunk.js.map b/portal-ui/build/static/js/1268.31853f4b.chunk.js.map
similarity index 99%
rename from portal-ui/build/static/js/1268.408b6da9.chunk.js.map
rename to portal-ui/build/static/js/1268.31853f4b.chunk.js.map
index daf9f3614..b34eaa84a 100644
--- a/portal-ui/build/static/js/1268.408b6da9.chunk.js.map
+++ b/portal-ui/build/static/js/1268.31853f4b.chunk.js.map
@@ -1 +1 @@
-{"version":3,"file":"static/js/1268.408b6da9.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Tenants/TenantDetails/TenantYAML.tsx","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"],"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 from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport Grid from \"@mui/material/Grid\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport api from \"../../../../common/api\";\nimport {\n fieldBasic,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport CodeMirrorWrapper from \"../../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport SectionTitle from \"../../Common/SectionTitle\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n codeMirrorContainer: {\n marginBottom: 20,\n paddingLeft: 15,\n \"& label\": {\n marginBottom: \".5rem\",\n },\n \"& label + div\": {\n display: \"none\",\n },\n },\n ...modalStyleUtils,\n ...fieldBasic,\n });\n\ninterface ITenantYAML {\n yaml: string;\n}\n\ninterface ITenantYAMLProps {\n classes: any;\n}\n\nconst TenantYAML = ({ classes }: ITenantYAMLProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.currentTenant);\n const namespace = useSelector(\n (state: AppState) => state.tenants.currentNamespace\n );\n\n const [addLoading, setAddLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [tenantYaml, setTenantYaml] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const updateTenant = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n setErrorMessage(\"\");\n api\n .invoke(\"PUT\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`, {\n yaml: tenantYaml,\n })\n .then((res) => {\n setAddLoading(false);\n dispatch(getTenantAsync());\n setErrorMessage(\"\");\n navigate(`/namespaces/${namespace}/tenants/${tenant}/summary`);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setErrorMessage(err.errorMessage);\n });\n };\n\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`)\n .then((res: ITenantYAML) => {\n setLoading(false);\n setTenantYaml(res.yaml);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n });\n }, [tenant, namespace, dispatch]);\n\n useEffect(() => {}, []);\n\n const validSave = tenantYaml.trim() !== \"\";\n\n return (\n \n {addLoading ||\n (loading && (\n \n \n \n ))}\n {errorMessage !== \"\" && (\n
{errorMessage}
\n )}\n\n {!loading && (\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(TenantYAML);\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}"],"names":["withStyles","theme","createStyles","fieldBasic","value","label","tooltip","mode","classes","onBeforeChange","readOnly","editorHeight","item","xs","sx","marginBottom","className","inputLabel","tooltipContainer","title","placement","style","maxHeight","overflow","border","language","onChange","evn","target","id","padding","fontSize","backgroundColor","fontFamily","minHeight","color","background","borderTop","display","alignItems","paddingRight","justifyContent","height","width","marginLeft","text","type","icon","variant","errorState","fontWeight","codeMirrorContainer","paddingLeft","modalStyleUtils","dispatch","useAppDispatch","navigate","useNavigate","tenant","useSelector","state","tenants","currentTenant","namespace","currentNamespace","useState","addLoading","setAddLoading","loading","setLoading","tenantYaml","setTenantYaml","errorMessage","setErrorMessage","useEffect","api","then","res","yaml","catch","err","setModalErrorSnackMessage","validSave","trim","Fragment","noValidate","autoComplete","onSubmit","e","preventDefault","getTenantAsync","container","editor","data","paddingTop","disabled","onClick","_getPrototypeOf","o","Object","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","defineProperty","_possibleConstructorReturn","self","call"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"static/js/1268.31853f4b.chunk.js","mappings":"ySAgJA,KAAeA,EAAAA,EAAAA,IAtGA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,UACRC,EAAAA,IAFQ,GAsGf,EAjG0B,SAAC,GASN,IARnBC,EAQkB,EARlBA,MAQkB,IAPlBC,MAAAA,OAOkB,MAPV,GAOU,MANlBC,QAAAA,OAMkB,MANR,GAMQ,MALlBC,KAAAA,OAKkB,MALX,OAKW,EAJlBC,EAIkB,EAJlBA,QACAC,EAGkB,EAHlBA,eAGkB,KAFlBC,SAEkB,EADlBC,cAAAA,OACkB,MADH,QACG,EAClB,OACE,UAAC,WAAD,YACE,SAAC,KAAD,CAAMC,MAAI,EAACC,GAAI,GAAIC,GAAI,CAAEC,aAAc,QAAvC,UACE,UAAC,IAAD,CAAYC,UAAWR,EAAQS,WAA/B,WACE,0BAAOZ,IACM,KAAZC,IACC,gBAAKU,UAAWR,EAAQU,iBAAxB,UACE,SAAC,IAAD,CAASC,MAAOb,EAASc,UAAU,YAAnC,UACE,gBAAKJ,UAAWR,EAAQF,QAAxB,UACE,SAAC,IAAD,gBAQZ,SAAC,KAAD,CACEM,MAAI,EACJC,GAAI,GACJQ,MAAO,CACLC,UAAWX,EACXY,SAAU,OACVC,OAAQ,qBANZ,UASE,SAAC,IAAD,CACEpB,MAAOA,EACPqB,SAAUlB,EACVmB,SAAU,SAACC,GACTlB,EAAe,KAAM,KAAMkB,EAAIC,OAAOxB,MACvC,EACDyB,GAAI,eACJC,QAAS,GACTT,MAAO,CACLU,SAAU,GACVC,gBAAiB,UACjBC,WACE,+EACFC,UAAWvB,GAAgB,UAC3BwB,MAAO,gBAIb,SAAC,KAAD,CACEvB,MAAI,EACJC,GAAI,GACJC,GAAI,CACFsB,WAAY,UACZZ,OAAQ,oBACRa,UAAW,GANf,UASE,SAAC,IAAD,CACEvB,GAAI,CACFwB,QAAS,OACTC,WAAY,SACZT,QAAS,MACTU,aAAc,MACdC,eAAgB,WAChB,WAAY,CACVC,OAAQ,OACRC,MAAO,OACPb,QAAS,MACT,aAAc,CACZc,WAAY,OAZpB,UAiBE,SAAC,IAAD,CAAgBtC,QAAS,oBAAzB,UACE,SAAC,IAAD,CAAiBuC,KAAMzC,EAAvB,UACE,SAAC,KAAD,CACE0C,KAAM,SACNjB,GAAI,mBACJkB,MAAM,SAAC,MAAD,IACNZ,MAAO,UACPa,QAAS,sBAQxB,G,wOCiDD,WAAehD,EAAAA,EAAAA,IA1JA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,gBACX+C,WAAY,CACVd,MAAO,UACPJ,SAAU,GACVmB,WAAY,QAEdC,oBAAqB,CACnBpC,aAAc,GACdqC,YAAa,GACb,UAAW,CACTrC,aAAc,SAEhB,gBAAiB,CACfuB,QAAS,UAGVe,EAAAA,IACAlD,EAAAA,IAlBQ,GA0Jf,EA7HmB,SAAC,GAAmC,IAAjCK,EAAgC,EAAhCA,QACd8C,GAAWC,EAAAA,EAAAA,MACXC,GAAWC,EAAAA,EAAAA,MAEXC,GAASC,EAAAA,EAAAA,KAAY,SAACC,GAAD,OAAqBA,EAAMC,QAAQC,aAAnC,IACrBC,GAAYJ,EAAAA,EAAAA,KAChB,SAACC,GAAD,OAAqBA,EAAMC,QAAQG,gBAAnC,IAGF,GAAoCC,EAAAA,EAAAA,WAAkB,GAAtD,eAAOC,EAAP,KAAmBC,EAAnB,KACA,GAA8BF,EAAAA,EAAAA,WAAkB,GAAhD,eAAOG,EAAP,KAAgBC,EAAhB,KACA,GAAoCJ,EAAAA,EAAAA,UAAiB,IAArD,eAAOK,EAAP,KAAmBC,EAAnB,KACA,GAAwCN,EAAAA,EAAAA,UAAiB,IAAzD,eAAOO,EAAP,KAAqBC,EAArB,MAyBAC,EAAAA,EAAAA,YAAU,WACRC,EAAAA,EAAAA,OACU,MADV,6BACuCZ,EADvC,oBAC4DL,EAD5D,UAEGkB,MAAK,SAACC,GACLR,GAAW,GACXE,EAAcM,EAAIC,KACnB,IACAC,OAAM,SAACC,GACNX,GAAW,GACXf,GAAS2B,EAAAA,EAAAA,IAA0BD,GACpC,GACJ,GAAE,CAACtB,EAAQK,EAAWT,KAEvBoB,EAAAA,EAAAA,YAAU,WAAQ,GAAE,IAEpB,IAAMQ,EAAkC,KAAtBZ,EAAWa,OAE7B,OACE,UAAC,EAAAC,SAAD,WACGlB,GACEE,IACC,SAAC,KAAD,CAAMxD,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,MAGY,KAAjB2D,IACC,gBAAKxD,UAAWR,EAAQyC,WAAxB,SAAqCuB,KAGrCJ,IACA,iBACEiB,YAAU,EACVC,aAAa,MACbC,SAAU,SAACC,GACIA,EAxDfC,iBACFvB,IAGJC,GAAc,GACdM,EAAgB,IAChBE,EAAAA,EAAAA,OACU,MADV,6BACuCZ,EADvC,oBAC4DL,EAD5D,SAC2E,CACvEoB,KAAMR,IAEPM,MAAK,SAACC,GACLV,GAAc,GACdb,GAASoC,EAAAA,EAAAA,MACTjB,EAAgB,IAChBjB,EAAS,eAAD,OAAgBO,EAAhB,oBAAqCL,EAArC,YACT,IACAqB,OAAM,SAACC,GACNb,GAAc,GACdM,EAAgBO,EAAIR,aACrB,IAsCI,EALH,UAOE,UAAC,KAAD,CAAMmB,WAAS,EAAf,WACE,SAAC,KAAD,CAAM/E,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,sCAEF,SAAC,KAAD,CAAMD,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,CACET,MAAOkE,EACP/D,KAAM,OACNE,eAAgB,SAACmF,EAAQC,EAAMzF,GAC7BmE,EAAcnE,EACf,EACDO,aAAc,aAGlB,UAAC,KAAD,CACEC,MAAI,EACJC,GAAI,GACJQ,MAAO,CACLiB,QAAS,OACTG,eAAgB,WAChBqD,WAAY,IANhB,WASE,SAAC,KAAD,CACEjE,GAAI,qBACJiB,KAAK,SACLE,QAAQ,UACR+C,SAAU7B,EACV8B,QAAS,WACPxC,EAAS,eAAD,OACSO,EADT,oBAC8BL,EAD9B,YAGT,EACDrD,MAAO,YAET,SAAC,KAAD,CACEwB,GAAI,mBACJiB,KAAK,SACLE,QAAQ,aACR+C,SAAU7B,IAAegB,EACzB7D,MAAO,CAAEuB,WAAY,GACrBvC,MAAO,mBAQtB,G,wBC7Lc,SAAS4F,EAAgBC,GAItC,OAHAD,EAAkBE,OAAOC,eAAiBD,OAAOE,eAAeC,OAAS,SAAyBJ,GAChG,OAAOA,EAAEK,WAAaJ,OAAOE,eAAeH,EAC9C,EACOD,EAAgBC,EACzB,C,sGCJe,SAASM,EAAUC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAIC,UAAU,sDAGtBF,EAASG,UAAYT,OAAOU,OAAOH,GAAcA,EAAWE,UAAW,CACrEE,YAAa,CACX1G,MAAOqG,EACPM,UAAU,EACVC,cAAc,KAGlBb,OAAOc,eAAeR,EAAU,YAAa,CAC3CM,UAAU,IAERL,IAAY,OAAeD,EAAUC,EAC3C,C,kFCfe,SAASQ,EAA2BC,EAAMC,GACvD,GAAIA,IAA2B,YAAlB,OAAQA,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIT,UAAU,4DAGtB,OAAO,OAAsBQ,EAC/B,C","sources":["screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Tenants/TenantDetails/TenantYAML.tsx","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js"],"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 from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Button } from \"mds\";\nimport Grid from \"@mui/material/Grid\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport api from \"../../../../common/api\";\nimport {\n fieldBasic,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport CodeMirrorWrapper from \"../../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../../systemSlice\";\nimport { AppState, useAppDispatch } from \"../../../../store\";\nimport { getTenantAsync } from \"../thunks/tenantDetailsAsync\";\nimport SectionTitle from \"../../Common/SectionTitle\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n codeMirrorContainer: {\n marginBottom: 20,\n paddingLeft: 15,\n \"& label\": {\n marginBottom: \".5rem\",\n },\n \"& label + div\": {\n display: \"none\",\n },\n },\n ...modalStyleUtils,\n ...fieldBasic,\n });\n\ninterface ITenantYAML {\n yaml: string;\n}\n\ninterface ITenantYAMLProps {\n classes: any;\n}\n\nconst TenantYAML = ({ classes }: ITenantYAMLProps) => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n\n const tenant = useSelector((state: AppState) => state.tenants.currentTenant);\n const namespace = useSelector(\n (state: AppState) => state.tenants.currentNamespace\n );\n\n const [addLoading, setAddLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [tenantYaml, setTenantYaml] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const updateTenant = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n setErrorMessage(\"\");\n api\n .invoke(\"PUT\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`, {\n yaml: tenantYaml,\n })\n .then((res) => {\n setAddLoading(false);\n dispatch(getTenantAsync());\n setErrorMessage(\"\");\n navigate(`/namespaces/${namespace}/tenants/${tenant}/summary`);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setErrorMessage(err.errorMessage);\n });\n };\n\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`)\n .then((res: ITenantYAML) => {\n setLoading(false);\n setTenantYaml(res.yaml);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n dispatch(setModalErrorSnackMessage(err));\n });\n }, [tenant, namespace, dispatch]);\n\n useEffect(() => {}, []);\n\n const validSave = tenantYaml.trim() !== \"\";\n\n return (\n \n {addLoading ||\n (loading && (\n \n \n \n ))}\n {errorMessage !== \"\" && (\n
{errorMessage}
\n )}\n\n {!loading && (\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(TenantYAML);\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}"],"names":["withStyles","theme","createStyles","fieldBasic","value","label","tooltip","mode","classes","onBeforeChange","readOnly","editorHeight","item","xs","sx","marginBottom","className","inputLabel","tooltipContainer","title","placement","style","maxHeight","overflow","border","language","onChange","evn","target","id","padding","fontSize","backgroundColor","fontFamily","minHeight","color","background","borderTop","display","alignItems","paddingRight","justifyContent","height","width","marginLeft","text","type","icon","variant","errorState","fontWeight","codeMirrorContainer","paddingLeft","modalStyleUtils","dispatch","useAppDispatch","navigate","useNavigate","tenant","useSelector","state","tenants","currentTenant","namespace","currentNamespace","useState","addLoading","setAddLoading","loading","setLoading","tenantYaml","setTenantYaml","errorMessage","setErrorMessage","useEffect","api","then","res","yaml","catch","err","setModalErrorSnackMessage","validSave","trim","Fragment","noValidate","autoComplete","onSubmit","e","preventDefault","getTenantAsync","container","editor","data","paddingTop","disabled","onClick","_getPrototypeOf","o","Object","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","defineProperty","_possibleConstructorReturn","self","call"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1367.00454bc0.chunk.js b/portal-ui/build/static/js/1367.00454bc0.chunk.js
deleted file mode 100644
index d83d8e027..000000000
--- a/portal-ui/build/static/js/1367.00454bc0.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1367,2691],{92217:function(e,n,t){"use strict";var i=t(1413),r=t(72791),o=t(61889),a=t(30829),c=t(20068),s=t(64554),l=t(11135),d=t(25787),u=t(84570),p=t(23814),h=t(38588),f=t(75952),x=t(78029),m=t.n(x),v=t(90932),Z=t(27454),b=t(80184);n.Z=(0,d.Z)((function(e){return(0,l.Z)((0,i.Z)({},p.YI))}))((function(e){var n=e.value,t=e.label,i=void 0===t?"":t,l=e.tooltip,d=void 0===l?"":l,p=e.mode,x=void 0===p?"json":p,j=e.classes,g=e.onBeforeChange,C=(e.readOnly,e.editorHeight),y=void 0===C?"250px":C;return(0,b.jsxs)(r.Fragment,{children:[(0,b.jsx)(o.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,b.jsxs)(a.Z,{className:j.inputLabel,children:[(0,b.jsx)("span",{children:i}),""!==d&&(0,b.jsx)("div",{className:j.tooltipContainer,children:(0,b.jsx)(c.Z,{title:d,placement:"top-start",children:(0,b.jsx)("div",{className:j.tooltip,children:(0,b.jsx)(u.Z,{})})})})]})}),(0,b.jsx)(o.ZP,{item:!0,xs:12,style:{maxHeight:y,overflow:"auto",border:"1px solid #eaeaea"},children:(0,b.jsx)(v.Z,{value:n,language:x,onChange:function(e){g(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:y||"initial",color:"#000000"}})}),(0,b.jsx)(o.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,b.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,b.jsx)(Z.Z,{tooltip:"Copy to Clipboard",children:(0,b.jsx)(m(),{text:n,children:(0,b.jsx)(f.zx,{type:"button",id:"copy-code-mirror",icon:(0,b.jsx)(h.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},59114:function(e,n,t){"use strict";var i=t(4942),r=t(1413),o=(t(72791),t(63466)),a=t(74900),c=t(27391),s=t(25787),l=t(11135),d=t(23814),u=t(80184);n.Z=(0,s.Z)((function(e){return(0,l.Z)({searchField:(0,r.Z)({},d.qg.searchField),adornment:{}})}))((function(e){var n=e.placeholder,t=void 0===n?"":n,r=e.classes,s=e.onChange,l=e.adornmentPosition,d=void 0===l?"end":l,p=e.overrideClass,h=e.value,f=(0,i.Z)({disableUnderline:!0},"".concat(d,"Adornment"),(0,u.jsx)(o.Z,{position:d,className:r.adornment,children:(0,u.jsx)(a.Z,{})}));return(0,u.jsx)(c.Z,{placeholder:t,className:p||r.searchField,id:"search-resource",label:"",InputProps:f,onChange:function(e){s(e.target.value)},variant:"standard",value:h})}))},27454:function(e,n,t){"use strict";var i=t(1413),r=t(72791),o=t(20068),a=t(80184);n.Z=function(e){var n=e.tooltip,t=e.children,c=e.errorProps,s=void 0===c?null:c;return(0,a.jsx)(o.Z,{title:n,children:(0,a.jsx)("span",{children:s?(0,r.cloneElement)(t,(0,i.Z)({},s)):t})})}},50276:function(e,n,t){"use strict";var i=t(1413),r=t(29439),o=t(72791),a=t(64554),c=t(43896),s=t(83449),l=t(47283),d=t(82851),u=t(25787),p=t(13967),h=t(11135),f=t(95193),x=t(16871),m=t(80184),v={minHeight:60};n.Z=(0,u.Z)((function(e){return(0,h.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,h=void 0===u?"0":u,Z=e.routes,b=e.isRouteTabs,j=(0,p.Z)(),g=(0,x.TH)().pathname,C=void 0===g?"":g,y=(0,f.Z)(j.breakpoints.down("md")),E=(0,o.useState)(h),P=(0,r.Z)(E,2),w=P[0],S=P[1],M=[],N=[];if((0,o.useEffect)((function(){if(b){var e=n.find((function(e){return e.tabConfig.to===C}));e&&S(e.tabConfig.value)}}),[b,n,C]),!n)return null;n.forEach((function(e){M.push(e.tabConfig),N.push(e.content)}));return(0,m.jsx)(s.ZP,{value:"".concat(w),children:(0,m.jsxs)(a.Z,{className:t.tabsContainer,children:[(0,m.jsx)(a.Z,{className:t.tabsHeaderContainer,children:(0,m.jsx)(l.Z,{onChange:function(e,n){S(n)},orientation:y?"horizontal":"vertical",variant:y?"scrollable":"standard",scrollButtons:"auto",className:t.tabList,children:M.map((function(e,n){return e?(0,m.jsx)(c.Z,(0,i.Z)((0,i.Z)({className:t.tabHeader,value:"".concat(n),style:v},e),{},{disableRipple:!0,disableTouchRipple:!0,focusRipple:!0}),"v-tab-".concat(n)):null}))})}),(0,m.jsxs)(a.Z,{className:t.tabContentContainer,children:[b?null:N.map((function(e,n){return(0,m.jsx)(d.Z,{classes:(0,i.Z)({},t.tabPanel),value:"".concat(n),children:e||null},"v-tab-p-".concat(n))})),b?(0,m.jsx)("div",{className:t.tabPanel,children:Z}):null]})]})})}))},879:function(e,n,t){"use strict";t.d(n,{D_:function(){return a},Et:function(){return r},GJ:function(){return o},yh:function(){return i}});var i={RED:"#C83B51",GREEN:"#4CCB92",YELLOW:"#E7A219"},r=function(e,n){return e<=n/2?i.RED:2!==n&&e===n/2+1?i.YELLOW:e===n?i.GREEN:void 0},o=function(e){switch(e){case"offline":return i.RED;case"online":return i.GREEN;default:return i.YELLOW}},a=function(e,n){return e<=n/2?i.RED:e===n/2+1?i.YELLOW:e===n?i.GREEN:void 0}},1191:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return W}});var i=t(29439),r=t(1413),o=t(72791),a=t(60364),c=t(16871),s=t(75952),l=t(11135),d=t(25787),u=t(23814),p=t(10703),h=t(61889),f=t(40986),x=t(92983),m=t(81207),v=t(32291),Z=t(92217),b=t(63466),j=t(27391),g=t(14917),C=t(64244),y=t(28789),E=t(74900),P=t(54599),w=t(74794),S=t(50276),M=t(84669),N=t(56087),R=t(38442),T=t(75578),F=t(64554),k=t(59114),A=t(38588),L=t(879),I=t(80184),z={display:"grid",gridTemplateColumns:"60px 1fr",gap:"15px"},O=function(e){var n=e.search,t=void 0===n?"":n,i=e.children,r=void 0===i?"":i,o=new RegExp("(".concat(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}(t),")"),"i"),a=String(r).split(o);return t?a.map((function(e,n){return o.test(e)?(0,I.jsx)("mark",{children:e},n):e})):r},B=(0,d.Z)((function(e){return(0,l.Z)({searchField:(0,r.Z)((0,r.Z)({},u.qg.searchField),{},{maxWidth:380})})}))((function(e){var n=e.policyStatements,t=e.classes,r=void 0===t?{}:t,a=(0,o.useState)(""),c=(0,i.Z)(a,2),s=c[0],l=c[1];return(0,I.jsxs)(h.ZP,{container:!0,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsxs)(F.Z,{sx:{display:"grid",gridTemplateColumns:{sm:"1fr 1fr",xs:"1fr"},alignItems:"center",justifyContent:"space-between",gap:"15px"},children:[(0,I.jsx)(F.Z,{children:"Statements"}),(0,I.jsx)(k.Z,{placeholder:"Search",onChange:l,overrideClass:r.searchField,value:s})]})}),(0,I.jsx)(h.ZP,{item:!0,xs:12,sx:{"& .policy-row":{borderBottom:"1px solid #eaeaea"},"& .policy-row:first-child":{borderTop:"1px solid #eaeaea"},"& .policy-row:last-child":{borderBottom:"0px"},paddingTop:"15px","& mark":{color:"#000000",fontWeight:500}},children:n.map((function(e,n){var t=e.Effect,i="Allow"===t;return(0,I.jsxs)(F.Z,{className:"policy-row",sx:{display:"grid",gridTemplateColumns:"1fr",gap:"15px",fontSize:"14px",padding:"10px 0 10px 0","& .label":{fontWeight:600}},children:[(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Effect:"}),(0,I.jsxs)(F.Z,{sx:{display:"flex",alignItems:"center","& .min-icon":{marginRight:"5px",fill:i?L.yh.GREEN:L.yh.RED,height:"14px",width:"14px"}},children:[i?(0,I.jsx)(A.E31,{}):(0,I.jsx)(A.dRf,{}),t]})]}),(0,I.jsxs)(F.Z,{sx:{display:"grid",gridTemplateColumns:{sm:"1fr 1fr",xs:"1fr"},gap:"15px"},children:[(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Actions:"}),(0,I.jsx)(F.Z,{children:e.Action&&e.Action.map((function(e,t){return(0,I.jsx)("div",{children:(0,I.jsx)(O,{search:s,children:e})},"".concat(n,"-r-").concat(t))}))})]}),(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Resources:"}),(0,I.jsx)(F.Z,{children:e.Resource&&e.Resource.map((function(e,t){return(0,I.jsxs)("div",{children:[" ",(0,I.jsx)(O,{search:s,children:e})]},"".concat(n,"-r-").concat(t))}))})]})]})]},"".concat(n))}))})]})})),D=t(45248),H=t(87995),G=t(46078),U=t(25469),_=t(27454),V=(0,T.Z)(o.lazy((function(){return t.e(312).then(t.bind(t,312))}))),W=(0,d.Z)((function(e){return(0,l.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({buttonContainer:{display:"flex",justifyContent:"flex-end",paddingTop:16,"& button":{marginLeft:8}},pageContainer:{border:"1px solid #EAEAEA",height:"100%"},paperContainer:{padding:"15px 15px 15px 50px",minHeight:"450px"},statement:{border:"1px solid #DADADA",padding:8,marginBottom:8,borderRadius:4},labelCol:{fontWeight:"bold"}},u.OR),u.qg),u.oO),(0,u.Bz)(e.spacing(4))))}))((function(e){var n=e.classes,t=(0,U.TL)(),r=(0,c.s0)(),l=(0,c.UO)(),d=(0,a.v9)(G.$4),u=(0,o.useState)(null),T=(0,i.Z)(u,2),F=T[0],k=T[1],A=(0,o.useState)([]),L=(0,i.Z)(A,2),z=L[0],O=L[1],W=(0,o.useState)([]),Y=(0,i.Z)(W,2),K=Y[0],q=Y[1],J=(0,o.useState)([]),Q=(0,i.Z)(J,2),$=Q[0],X=Q[1],ee=(0,o.useState)(!1),ne=(0,i.Z)(ee,2),te=ne[0],ie=ne[1],re=(0,D.IO)(l.policyName||""),oe=(0,o.useState)(""),ae=(0,i.Z)(oe,2),ce=ae[0],se=ae[1],le=(0,o.useState)(!0),de=(0,i.Z)(le,2),ue=de[0],pe=de[1],he=(0,o.useState)(""),fe=(0,i.Z)(he,2),xe=fe[0],me=fe[1],ve=(0,o.useState)(!0),Ze=(0,i.Z)(ve,2),be=Ze[0],je=Ze[1],ge=(0,o.useState)(""),Ce=(0,i.Z)(ge,2),ye=Ce[0],Ee=Ce[1],Pe=(0,o.useState)(!0),we=(0,i.Z)(Pe,2),Se=we[0],Me=we[1],Ne=(0,o.useState)(!1),Re=(0,i.Z)(Ne,2),Te=Re[0],Fe=Re[1],ke=d&&d.includes("ldap-idp")||!1,Ae=(0,R.F)(N.C3,N.K6,!0),Le=(0,R.F)(N.C3,N.k_,!0),Ie=(0,R.F)(N.C3,N.Rs,!0),ze=(0,R.F)(N.C3,N.iw,!0),Oe=(0,R.F)(N.C3,N.GD,!0),Be=(0,R.F)(N.C3,N.bE,!0),De=(0,R.F)(N.C3,N.XM,!0);(0,o.useEffect)((function(){ue&&(ue&&(Oe?m.Z.invoke("GET","/api/v1/policy/".concat((0,D.LL)(re))).then((function(e){if(e){k(e),se(e?JSON.stringify(JSON.parse(e.policy),null,4):"");var n=JSON.parse(e.policy);O(n.Statement)}pe(!1)})).catch((function(e){t((0,H.Ih)(e)),pe(!1)})):pe(!1)),be&&(Ie&&!ke?m.Z.invoke("GET","/api/v1/policies/".concat((0,D.LL)(re),"/users")).then((function(e){q(e),je(!1)})).catch((function(e){t((0,H.Ih)(e)),je(!1)})):je(!1)),Se&&(Ae&&!ke?m.Z.invoke("GET","/api/v1/policies/".concat((0,D.LL)(re),"/groups")).then((function(e){X(e),Me(!1)})).catch((function(e){t((0,H.Ih)(e)),Me(!1)})):Me(!1)))}),[re,ue,be,Se,q,X,se,k,je,Me,Ie,Ae,Oe,ke,t]);var He=""!==re.trim(),Ge=[{type:"view",onClick:function(e){r("".concat(N.gA.USERS,"/").concat((0,D.LL)(e)))},disableButtonFunction:function(){return!ze}}],Ue=K.filter((function(e){return e.includes(xe)})),_e=[{type:"view",onClick:function(e){r("".concat(N.gA.GROUPS,"/").concat((0,D.LL)(e)))},disableButtonFunction:function(){return!Le}}],Ve=$.filter((function(e){return e.includes(ye)})),We=function(){je(!0),Me(!0),pe(!0)};return(0,I.jsxs)(o.Fragment,{children:[Te&&(0,I.jsx)(V,{deleteOpen:Te,selectedPolicy:re,closeDeleteModalAndRefresh:function(e){Fe(!1),r(N.gA.POLICIES)}}),(0,I.jsx)(v.Z,{label:(0,I.jsx)(o.Fragment,{children:(0,I.jsx)(M.Z,{to:N.gA.POLICIES,label:"Policy"})})}),(0,I.jsxs)(w.Z,{className:n.pageContainer,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(g.Z,{icon:(0,I.jsx)(o.Fragment,{children:(0,I.jsx)(C.Z,{width:40})}),title:re,subTitle:(0,I.jsx)(o.Fragment,{children:"IAM Policy"}),actions:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)(R.s,{scopes:[N.Ft.ADMIN_DELETE_POLICY],resource:N.C3,errorProps:{disabled:!0},children:(0,I.jsx)(_.Z,{tooltip:Be?"":(0,N.MK)(N.bE,"delete Policies"),children:(0,I.jsx)(s.zx,{id:"delete-policy",label:"Delete Policy",variant:"secondary",icon:(0,I.jsx)(P.Z,{}),onClick:function(){Fe(!0)},disabled:!Be})})}),(0,I.jsx)(_.Z,{tooltip:"Refresh",children:(0,I.jsx)(s.zx,{id:"refresh-policy",label:"Refresh",variant:"regular",icon:(0,I.jsx)(y.default,{}),onClick:function(){We()}})})]})})}),(0,I.jsxs)(S.Z,{children:[{tabConfig:{label:"Summary",disabled:!Oe},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Policy Summary"}),(0,I.jsx)(p.Z,{className:n.paperContainer,children:(0,I.jsx)(B,{policyStatements:z})})]})},{tabConfig:{label:"Users",disabled:!Ie||ke},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Users"}),(0,I.jsxs)(h.ZP,{container:!0,children:[K.length>0&&(0,I.jsx)(h.ZP,{item:!0,xs:12,className:n.actionsTray,children:(0,I.jsx)(j.Z,{placeholder:"Search Users",className:n.searchField,id:"search-resource",label:"",onChange:function(e){me(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:(0,I.jsx)(b.Z,{position:"start",children:(0,I.jsx)(E.Z,{})})},variant:"standard"})}),(0,I.jsx)(x.Z,{itemActions:Ge,columns:[{label:"Name",elementKey:"name"}],isLoading:be,records:Ue,entityName:"Users with this Policy associated",idField:"name"})]})]})},{tabConfig:{label:"Groups",disabled:!Ae||ke},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Groups"}),(0,I.jsxs)(h.ZP,{container:!0,children:[$.length>0&&(0,I.jsx)(h.ZP,{item:!0,xs:12,className:n.actionsTray,children:(0,I.jsx)(j.Z,{placeholder:"Search Groups",className:n.searchField,id:"search-resource",label:"",onChange:function(e){Ee(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:(0,I.jsx)(b.Z,{position:"start",children:(0,I.jsx)(E.Z,{})})},variant:"standard"})}),(0,I.jsx)(x.Z,{itemActions:_e,columns:[{label:"Name",elementKey:"name"}],isLoading:Se,records:Ve,entityName:"Groups with this Policy associated",idField:"name"})]})]})},{tabConfig:{label:"Raw Policy",disabled:!Oe},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Raw Policy"}),(0,I.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),te||(ie(!0),De?m.Z.invoke("POST","/api/v1/policies",{name:re,policy:ce}).then((function(e){ie(!1),t((0,H.y1)("Policy successfully updated")),We()})).catch((function(e){ie(!1),t((0,H.Ih)(e))})):ie(!1))},children:(0,I.jsxs)(h.ZP,{container:!0,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{readOnly:!De,value:ce,onBeforeChange:function(e,n,t){se(t)},editorHeight:"350px"})}),(0,I.jsxs)(h.ZP,{item:!0,xs:12,className:n.buttonContainer,children:[!F&&(0,I.jsx)("button",{type:"button",color:"primary",className:n.clearButton,onClick:function(){se("{}")},children:"Clear"}),(0,I.jsx)(R.s,{scopes:[N.Ft.ADMIN_CREATE_POLICY],resource:N.C3,errorProps:{disabled:!0},children:(0,I.jsx)(_.Z,{tooltip:De?"":(0,N.MK)(N.XM,"edit a Policy"),children:(0,I.jsx)(s.zx,{id:"save",type:"submit",variant:"callAction",color:"primary",disabled:te||!He||!De,label:"Save"})})})]}),te&&(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(f.Z,{})})]})})]})}]})]})]})}))},26759:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");n.Z=a},70366:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");n.Z=a},97911:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z"}),"ViewColumn");n.Z=a},83449:function(e,n,t){"use strict";t.d(n,{ZP:function(){return c},_i:function(){return s},pQ:function(){return d},uU:function(){return l}});var i=t(29439),r=t(72791),o=t(80184),a=r.createContext(null);function c(e){var n=e.children,t=e.value,c=function(){var e=r.useState(null),n=(0,i.Z)(e,2),t=n[0],o=n[1];return r.useEffect((function(){o("mui-p-".concat(Math.round(1e5*Math.random())))}),[]),t}(),s=r.useMemo((function(){return{idPrefix:c,value:t}}),[c,t]);return(0,o.jsx)(a.Provider,{value:s,children:n})}function s(){return r.useContext(a)}function l(e,n){return null===e.idPrefix?null:"".concat(e.idPrefix,"-P-").concat(n)}function d(e,n){return null===e.idPrefix?null:"".concat(e.idPrefix,"-T-").concat(n)}},47283:function(e,n,t){"use strict";var i=t(87462),r=t(63366),o=t(72791),a=t(18073),c=t(83449),s=t(80184),l=["children"],d=o.forwardRef((function(e,n){var t=e.children,d=(0,r.Z)(e,l),u=(0,c._i)();if(null===u)throw new TypeError("No TabContext provided");var p=o.Children.map(t,(function(e){return o.isValidElement(e)?o.cloneElement(e,{"aria-controls":(0,c.uU)(u,e.props.value),id:(0,c.pQ)(u,e.props.value)}):null}));return(0,s.jsx)(a.Z,(0,i.Z)({},d,{ref:n,value:u.value,children:p}))}));n.Z=d},82851:function(e,n,t){"use strict";t.d(n,{Z:function(){return m}});var i=t(87462),r=t(63366),o=t(72791),a=t(28182),c=t(66934),s=t(31402),l=t(94419),d=t(21217);function u(e){return(0,d.Z)("MuiTabPanel",e)}(0,t(75878).Z)("MuiTabPanel",["root"]);var p=t(83449),h=t(80184),f=["children","className","value"],x=(0,c.ZP)("div",{name:"MuiTabPanel",slot:"Root",overridesResolver:function(e,n){return n.root}})((function(e){return{padding:e.theme.spacing(3)}})),m=o.forwardRef((function(e,n){var t=(0,s.Z)({props:e,name:"MuiTabPanel"}),o=t.children,c=t.className,d=t.value,m=(0,r.Z)(t,f),v=(0,i.Z)({},t),Z=function(e){var n=e.classes;return(0,l.Z)({root:["root"]},u,n)}(v),b=(0,p._i)();if(null===b)throw new TypeError("No TabContext provided");var j=(0,p.uU)(b,d),g=(0,p.pQ)(b,d);return(0,h.jsx)(x,(0,i.Z)({"aria-labelledby":g,className:(0,a.Z)(Z.root,c),hidden:d!==b.value,id:j,ref:n,role:"tabpanel",ownerState:v},m,{children:d===b.value&&o}))}))},94454:function(e,n,t){"use strict";t.d(n,{Z:function(){return w}});var i=t(4942),r=t(63366),o=t(87462),a=t(72791),c=t(94419),s=t(12065),l=t(97278),d=t(76189),u=t(80184),p=(0,d.Z)((0,u.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),h=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),f=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox"),x=t(14036),m=t(31402),v=t(66934),Z=t(21217);function b(e){return(0,Z.Z)("MuiCheckbox",e)}var j=(0,t(75878).Z)("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary"]),g=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size"],C=(0,v.ZP)(l.Z,{shouldForwardProp:function(e){return(0,v.FO)(e)||"classes"===e},name:"MuiCheckbox",slot:"Root",overridesResolver:function(e,n){var t=e.ownerState;return[n.root,t.indeterminate&&n.indeterminate,"default"!==t.color&&n["color".concat((0,x.Z)(t.color))]]}})((function(e){var n,t=e.theme,r=e.ownerState;return(0,o.Z)({color:(t.vars||t).palette.text.secondary},!r.disableRipple&&{"&:hover":{backgroundColor:t.vars?"rgba(".concat("default"===r.color?t.vars.palette.action.activeChannel:t.vars.palette.primary.mainChannel," / ").concat(t.vars.palette.action.hoverOpacity,")"):(0,s.Fq)("default"===r.color?t.palette.action.active:t.palette[r.color].main,t.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==r.color&&(n={},(0,i.Z)(n,"&.".concat(j.checked,", &.").concat(j.indeterminate),{color:(t.vars||t).palette[r.color].main}),(0,i.Z)(n,"&.".concat(j.disabled),{color:(t.vars||t).palette.action.disabled}),n))})),y=(0,u.jsx)(h,{}),E=(0,u.jsx)(p,{}),P=(0,u.jsx)(f,{}),w=a.forwardRef((function(e,n){var t,i,s=(0,m.Z)({props:e,name:"MuiCheckbox"}),l=s.checkedIcon,d=void 0===l?y:l,p=s.color,h=void 0===p?"primary":p,f=s.icon,v=void 0===f?E:f,Z=s.indeterminate,j=void 0!==Z&&Z,w=s.indeterminateIcon,S=void 0===w?P:w,M=s.inputProps,N=s.size,R=void 0===N?"medium":N,T=(0,r.Z)(s,g),F=j?S:v,k=j?S:d,A=(0,o.Z)({},s,{color:h,indeterminate:j,size:R}),L=function(e){var n=e.classes,t=e.indeterminate,i=e.color,r={root:["root",t&&"indeterminate","color".concat((0,x.Z)(i))]},a=(0,c.Z)(r,b,n);return(0,o.Z)({},n,a)}(A);return(0,u.jsx)(C,(0,o.Z)({type:"checkbox",inputProps:(0,o.Z)({"data-indeterminate":j},M),icon:a.cloneElement(F,{fontSize:null!=(t=F.props.fontSize)?t:R}),checkedIcon:a.cloneElement(k,{fontSize:null!=(i=k.props.fontSize)?i:R}),ownerState:A,ref:n},T,{classes:L}))}))},95193:function(e,n,t){"use strict";var i;t.d(n,{Z:function(){return p}});var r=t(29439),o=t(72791),a=t(69120),c=t(33073),s=t(40162);function l(e,n,t,i,a){var c="undefined"!==typeof window&&"undefined"!==typeof window.matchMedia,l=o.useState((function(){return a&&c?t(e).matches:i?i(e).matches:n})),d=(0,r.Z)(l,2),u=d[0],p=d[1];return(0,s.Z)((function(){var n=!0;if(c){var i=t(e),r=function(){n&&p(i.matches)};return r(),i.addListener(r),function(){n=!1,i.removeListener(r)}}}),[e,t,c]),u}var d=(i||(i=t.t(o,2))).useSyncExternalStore;function u(e,n,t,i){var a=o.useCallback((function(){return n}),[n]),c=o.useMemo((function(){if(null!==i){var n=i(e).matches;return function(){return n}}return a}),[a,e,i]),s=o.useMemo((function(){if(null===t)return[a,function(){return function(){}}];var n=t(e);return[function(){return n.matches},function(e){return n.addListener(e),function(){n.removeListener(e)}}]}),[a,t,e]),l=(0,r.Z)(s,2),u=l[0],p=l[1];return d(p,u,c)}function p(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=(0,a.Z)(),i="undefined"!==typeof window&&"undefined"!==typeof window.matchMedia,r=(0,c.Z)({name:"MuiUseMediaQuery",props:n,theme:t}),o=r.defaultMatches,s=void 0!==o&&o,p=r.matchMedia,h=void 0===p?i?window.matchMedia:null:p,f=r.ssrMatchMedia,x=void 0===f?null:f,m=r.noSsr;var v="function"===typeof e?e(t):e;v=v.replace(/^@media( ?)/m,"");var Z=void 0!==d?u:l,b=Z(v,s,h,x,m);return b}},26769:function(e,n,t){var i=t(39066),r=t(93629),o=t(43141);e.exports=function(e){return"string"==typeof e||!r(e)&&o(e)&&"[object String]"==i(e)}}}]);
-//# sourceMappingURL=1367.00454bc0.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1367.00454bc0.chunk.js.map b/portal-ui/build/static/js/1367.00454bc0.chunk.js.map
deleted file mode 100644
index 4254bfe85..000000000
--- a/portal-ui/build/static/js/1367.00454bc0.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/1367.00454bc0.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Common/TooltipWrapper/TooltipWrapper.tsx","screens/Console/Common/VerticalTabs/VerticalTabs.tsx","screens/Console/Dashboard/BasicDashboard/Utils.tsx","screens/Console/Policies/PolicyView.tsx","screens/Console/Policies/PolicyDetails.tsx","../node_modules/@mui/icons-material/ArrowDropDown.js","../node_modules/@mui/icons-material/ArrowDropUp.js","../node_modules/@mui/icons-material/ViewColumn.js","../node_modules/@mui/lab/TabContext/TabContext.js","../node_modules/@mui/lab/TabList/TabList.js","../node_modules/@mui/lab/TabPanel/tabPanelClasses.js","../node_modules/@mui/lab/TabPanel/TabPanel.js","../node_modules/@mui/material/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@mui/material/internal/svg-icons/CheckBox.js","../node_modules/@mui/material/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@mui/material/Checkbox/checkboxClasses.js","../node_modules/@mui/material/Checkbox/Checkbox.js","../node_modules/@mui/material/useMediaQuery/useMediaQuery.js","../node_modules/lodash/isString.js"],"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 from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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 InputAdornment from \"@mui/material/InputAdornment\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\nimport TextField from \"@mui/material/TextField\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { searchField } from \"./FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n },\n adornment: {},\n });\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n classes: any;\n onChange: (value: string) => void;\n adornmentPosition?: \"start\" | \"end\";\n overrideClass?: any;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n classes,\n onChange,\n adornmentPosition = \"end\",\n overrideClass,\n value,\n}: SearchBoxProps) => {\n const inputProps = {\n disableUnderline: true,\n [`${adornmentPosition}Adornment`]: (\n \n \n \n ),\n };\n return (\n {\n onChange(e.target.value);\n }}\n variant=\"standard\"\n value={value}\n />\n );\n};\n\nexport default withStyles(styles)(SearchBox);\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, { cloneElement } from \"react\";\nimport { Tooltip } from \"@mui/material\";\n\ninterface ITooltipWrapperProps {\n tooltip: string;\n children: any;\n errorProps?: any;\n}\n\nconst TooltipWrapper = ({\n tooltip,\n children,\n errorProps = null,\n}: ITooltipWrapperProps) => {\n return (\n \n \n {errorProps ? cloneElement(children, { ...errorProps }) : children}\n \n \n );\n};\n\nexport default TooltipWrapper;\n","import React, { useState, useEffect } from \"react\";\nimport { Box, Tab, TabProps } from \"@mui/material\";\nimport { TabContext, TabList, TabPanel } from \"@mui/lab\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme, useTheme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\nimport { useLocation } from \"react-router-dom\";\n\nexport type TabItemProps = {\n tabConfig: TabProps | any;\n content?: JSX.Element | JSX.Element[];\n};\n\ntype VerticalTabsProps = {\n classes: any;\n children: TabItemProps[];\n selectedTab?: string;\n routes?: any;\n isRouteTabs?: boolean;\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n tabsContainer: {\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n },\n tabsHeaderContainer: {\n width: \"300px\",\n background: \"#F8F8F8\",\n borderRight: \"1px solid #EAEAEA\",\n \"& .MuiTabs-root\": {\n \"& .MuiTabs-indicator\": {\n display: \"none\",\n },\n \"& .MuiTab-root\": {\n display: \"flex\",\n flexFlow: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"& .MuiSvgIcon-root\": {\n marginRight: 8,\n marginBottom: 0,\n },\n \"&.Mui-selected\": {\n background: \"#E5E5E5\",\n fontWeight: 600,\n },\n },\n\n \"&. MuiTabs-scroller\": {\n display: \"none\",\n },\n },\n },\n tabContentContainer: {\n width: \"100%\",\n \"& .MuiTabPanel-root\": {\n height: \"100%\",\n },\n },\n tabPanel: {\n height: \"100%\",\n },\n /*Below md breakpoint make it horizontal and style it for scrolling tabs*/\n \"@media (max-width: 900px)\": {\n tabsContainer: {\n flexFlow: \"column\",\n flexDirection: \"column\",\n },\n tabsHeaderContainer: {\n width: \"100%\",\n borderBottom: \" 1px solid #EAEAEA\",\n \"& .MuiTabs-root .MuiTabs-scroller .MuiButtonBase-root\": {\n borderBottom: \" 0px\",\n },\n },\n },\n });\n\nconst tabStripStyle = {\n minHeight: 60,\n};\n\nconst VerticalTabs = ({\n children,\n classes,\n selectedTab = \"0\",\n routes,\n isRouteTabs,\n}: VerticalTabsProps) => {\n const theme = useTheme();\n const { pathname = \"\" } = useLocation();\n\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"md\"));\n\n const [value, setValue] = useState(selectedTab);\n\n const headerList: TabProps[] = [];\n const contentList: React.ReactNode[] = [];\n\n useEffect(() => {\n if (isRouteTabs) {\n const tabConfigElement = children.find(\n (item) => item.tabConfig.to === pathname\n );\n\n if (tabConfigElement) {\n setValue(tabConfigElement.tabConfig.value);\n }\n }\n }, [isRouteTabs, children, pathname]);\n\n if (!children) return null;\n\n children.forEach((child) => {\n headerList.push(child.tabConfig);\n contentList.push(child.content);\n });\n\n const handleChange = (event: React.SyntheticEvent, newValue: string) => {\n setValue(newValue);\n };\n\n return (\n \n \n \n \n {headerList.map((item, index) => {\n if (item) {\n return (\n \n );\n }\n return null;\n })}\n \n \n\n \n {!isRouteTabs\n ? contentList.map((item, index) => {\n return (\n \n {item ? item : null}\n \n );\n })\n : null}\n {isRouteTabs ? (\n
{routes}
\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) 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\nexport const STATUS_COLORS = {\n RED: \"#C83B51\",\n GREEN: \"#4CCB92\",\n YELLOW: \"#E7A219\",\n};\n\nexport const getDriveStatusColor = (\n activeDisks: number,\n totalDrives: number\n) => {\n if (activeDisks <= totalDrives / 2) {\n return STATUS_COLORS.RED;\n }\n if (totalDrives !== 2 && activeDisks === totalDrives / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeDisks === totalDrives) {\n return STATUS_COLORS.GREEN;\n }\n};\n\nexport const serverStatusColor = (health_status: string) => {\n switch (health_status) {\n case \"offline\":\n return STATUS_COLORS.RED;\n case \"online\":\n return STATUS_COLORS.GREEN;\n default:\n return STATUS_COLORS.YELLOW;\n }\n};\nexport const getNetworkStatusColor = (\n activeNetwork: number,\n networkTotal: number\n) => {\n if (activeNetwork <= networkTotal / 2) {\n return STATUS_COLORS.RED;\n }\n if (activeNetwork === networkTotal / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeNetwork === networkTotal) {\n return STATUS_COLORS.GREEN;\n }\n};\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, { useState } from \"react\";\nimport { IAMStatement } from \"./types\";\nimport { Box } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport SearchBox from \"../Common/SearchBox\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { searchField } from \"../Common/FormComponents/common/styleLibrary\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { DisabledIcon, EnabledIcon } from \"../../../icons\";\nimport { STATUS_COLORS } from \"../Dashboard/BasicDashboard/Utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n maxWidth: 380,\n },\n });\n\nconst rowGridStyle = {\n display: \"grid\",\n gridTemplateColumns: \"60px 1fr\",\n gap: \"15px\",\n};\n\nconst escapeRegExp = (str = \"\") =>\n str.replace(/([.?*+^$[\\]\\\\(){}|-])/g, \"\\\\$1\");\n\nconst Highlight = ({ search = \"\", children = \"\" }): any => {\n const txtParts = new RegExp(`(${escapeRegExp(search)})`, \"i\");\n const parts = String(children).split(txtParts);\n\n if (search) {\n return parts.map((part, index) =>\n txtParts.test(part) ? {part} : part\n );\n } else {\n return children;\n }\n};\n\nconst PolicyView = ({\n policyStatements,\n classes = {},\n}: {\n policyStatements: IAMStatement[];\n classes?: any;\n}) => {\n const [filter, setFilter] = useState(\"\");\n\n return (\n \n \n \n Statements\n \n \n \n \n {policyStatements.map((stmt, i) => {\n const effect = stmt.Effect;\n const isAllow = effect === \"Allow\";\n return (\n \n \n Effect:\n \n {isAllow ? : }\n {effect}\n \n \n\n \n \n Actions:\n \n {stmt.Action &&\n stmt.Action.map((act, actIndex) => (\n
\n \n \n ),\n }}\n \n \n \n );\n};\n\nexport default withStyles(styles)(PolicyDetails);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m7 10 5 5 5-5z\"\n}), 'ArrowDropDown');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"m7 14 5-5 5 5z\"\n}), 'ArrowDropUp');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z\"\n}), 'ViewColumn');\n\nexports.default = _default;","import * as React from 'react';\nimport PropTypes from 'prop-types';\n/**\n * @type {React.Context<{ idPrefix: string; value: string } | null>}\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Context = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n Context.displayName = 'TabContext';\n}\n\nfunction useUniquePrefix() {\n const [id, setId] = React.useState(null);\n React.useEffect(() => {\n setId(`mui-p-${Math.round(Math.random() * 1e5)}`);\n }, []);\n return id;\n}\n\nexport default function TabContext(props) {\n const {\n children,\n value\n } = props;\n const idPrefix = useUniquePrefix();\n const context = React.useMemo(() => {\n return {\n idPrefix,\n value\n };\n }, [idPrefix, value]);\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: context,\n children: children\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? TabContext.propTypes\n/* remove-proptypes */\n= {\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 /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * The value of the currently selected `Tab`.\n */\n value: PropTypes.string.isRequired\n} : void 0;\n/**\n * @returns {unknown}\n */\n\nexport function useTabContext() {\n return React.useContext(Context);\n}\nexport function getPanelId(context, value) {\n const {\n idPrefix\n } = context;\n\n if (idPrefix === null) {\n return null;\n }\n\n return `${context.idPrefix}-P-${value}`;\n}\nexport function getTabId(context, value) {\n const {\n idPrefix\n } = context;\n\n if (idPrefix === null) {\n return null;\n }\n\n return `${context.idPrefix}-T-${value}`;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@mui/material/Tabs';\nimport { useTabContext, getTabId, getPanelId } from '../TabContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst TabList = /*#__PURE__*/React.forwardRef(function TabList(props, ref) {\n const {\n children: childrenProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const context = useTabContext();\n\n if (context === null) {\n throw new TypeError('No TabContext provided');\n }\n\n const children = React.Children.map(childrenProp, child => {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n return null;\n }\n\n return /*#__PURE__*/React.cloneElement(child, {\n // SOMEDAY: `Tabs` will set those themselves\n 'aria-controls': getPanelId(context, child.props.value),\n id: getTabId(context, child.props.value)\n });\n });\n return /*#__PURE__*/_jsx(Tabs, _extends({}, other, {\n ref: ref,\n value: context.value,\n children: children\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabList.propTypes\n/* remove-proptypes */\n= {\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 /**\n * A list of `` elements.\n */\n children: PropTypes.node\n} : void 0;\nexport default TabList;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getTabPanelUtilityClass(slot) {\n return generateUtilityClass('MuiTabPanel', slot);\n}\nconst tabPanelClasses = generateUtilityClasses('MuiTabPanel', ['root']);\nexport default tabPanelClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"value\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { styled, useThemeProps } from '@mui/material/styles';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { getTabPanelUtilityClass } from './tabPanelClasses';\nimport { getPanelId, getTabId, useTabContext } from '../TabContext';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getTabPanelUtilityClass, classes);\n};\n\nconst TabPanelRoot = styled('div', {\n name: 'MuiTabPanel',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})(({\n theme\n}) => ({\n padding: theme.spacing(3)\n}));\nconst TabPanel = /*#__PURE__*/React.forwardRef(function TabPanel(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTabPanel'\n });\n\n const {\n children,\n className,\n value\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props);\n\n const classes = useUtilityClasses(ownerState);\n const context = useTabContext();\n\n if (context === null) {\n throw new TypeError('No TabContext provided');\n }\n\n const id = getPanelId(context, value);\n const tabId = getTabId(context, value);\n return /*#__PURE__*/_jsx(TabPanelRoot, _extends({\n \"aria-labelledby\": tabId,\n className: clsx(classes.root, className),\n hidden: value !== context.value,\n id: id,\n ref: ref,\n role: \"tabpanel\",\n ownerState: ownerState\n }, other, {\n children: value === context.value && children\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TabPanel.propTypes\n/* remove-proptypes */\n= {\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 /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\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 /**\n * The `value` of the corresponding `Tab`. Must use the index of the `Tab` when\n * no `value` was passed to `Tab`.\n */\n value: PropTypes.string.isRequired\n} : void 0;\nexport default TabPanel;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getCheckboxUtilityClass(slot) {\n return generateUtilityClass('MuiCheckbox', slot);\n}\nconst checkboxClasses = generateUtilityClasses('MuiCheckbox', ['root', 'checked', 'disabled', 'indeterminate', 'colorPrimary', 'colorSecondary']);\nexport default checkboxClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"checkedIcon\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport SwitchBase from '../internal/SwitchBase';\nimport CheckBoxOutlineBlankIcon from '../internal/svg-icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '../internal/svg-icons/CheckBox';\nimport IndeterminateCheckBoxIcon from '../internal/svg-icons/IndeterminateCheckBox';\nimport capitalize from '../utils/capitalize';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport checkboxClasses, { getCheckboxUtilityClass } from './checkboxClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n indeterminate,\n color\n } = ownerState;\n const slots = {\n root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`]\n };\n const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst CheckboxRoot = styled(SwitchBase, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiCheckbox',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.indeterminate && styles.indeterminate, ownerState.color !== 'default' && 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.primary.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 [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n color: (theme.vars || theme).palette[ownerState.color].main\n },\n [`&.${checkboxClasses.disabled}`]: {\n color: (theme.vars || theme).palette.action.disabled\n }\n}));\n\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\n\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\n\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\n\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n var _icon$props$fontSize, _indeterminateIcon$pr;\n\n const props = useThemeProps({\n props: inProps,\n name: 'MuiCheckbox'\n });\n\n const {\n checkedIcon = defaultCheckedIcon,\n color = 'primary',\n icon: iconProp = defaultIcon,\n indeterminate = false,\n indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n inputProps,\n size = 'medium'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const icon = indeterminate ? indeterminateIconProp : iconProp;\n const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n\n const ownerState = _extends({}, props, {\n color,\n indeterminate,\n size\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(CheckboxRoot, _extends({\n type: \"checkbox\",\n inputProps: _extends({\n 'data-indeterminate': indeterminate\n }, inputProps),\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: (_icon$props$fontSize = icon.props.fontSize) != null ? _icon$props$fontSize : size\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n fontSize: (_indeterminateIcon$pr = indeterminateIcon.props.fontSize) != null ? _indeterminateIcon$pr : size\n }),\n ownerState: ownerState,\n ref: ref\n }, other, {\n classes: classes\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes\n/* remove-proptypes */\n= {\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 /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n * @default \n */\n checkedIcon: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\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\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * The icon to display when the component is unchecked.\n * @default \n */\n icon: PropTypes.node,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the `input`.\n * @default false\n */\n indeterminate: PropTypes.bool,\n\n /**\n * The icon to display when the component is indeterminate.\n * @default \n */\n indeterminateIcon: PropTypes.node,\n\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 /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\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 checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n\n /**\n * The size of the component.\n * `small` is equivalent to the dense checkbox styling.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\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 /**\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 Checkbox;","import * as React from 'react';\nimport { getThemeProps, useThemeWithoutDefault as useTheme } from '@mui/system';\nimport useEnhancedEffect from '../utils/useEnhancedEffect';\n/**\n * @deprecated Not used internally. Use `MediaQueryListEvent` from lib.dom.d.ts instead.\n */\n\nfunction useMediaQueryOld(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr) {\n const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n const [match, setMatch] = React.useState(() => {\n if (noSsr && supportMatchMedia) {\n return matchMedia(query).matches;\n }\n\n if (ssrMatchMedia) {\n return ssrMatchMedia(query).matches;\n } // Once the component is mounted, we rely on the\n // event listeners to return the correct matches value.\n\n\n return defaultMatches;\n });\n useEnhancedEffect(() => {\n let active = true;\n\n if (!supportMatchMedia) {\n return undefined;\n }\n\n const queryList = matchMedia(query);\n\n const updateMatch = () => {\n // Workaround Safari wrong implementation of matchMedia\n // TODO can we remove it?\n // https://github.com/mui/material-ui/pull/17315#issuecomment-528286677\n if (active) {\n setMatch(queryList.matches);\n }\n };\n\n updateMatch(); // TODO: Use `addEventListener` once support for Safari < 14 is dropped\n\n queryList.addListener(updateMatch);\n return () => {\n active = false;\n queryList.removeListener(updateMatch);\n };\n }, [query, matchMedia, supportMatchMedia]);\n return match;\n} // eslint-disable-next-line no-useless-concat -- Workaround for https://github.com/webpack/webpack/issues/14814\n\n\nconst maybeReactUseSyncExternalStore = React['useSyncExternalStore' + ''];\n\nfunction useMediaQueryNew(query, defaultMatches, matchMedia, ssrMatchMedia) {\n const getDefaultSnapshot = React.useCallback(() => defaultMatches, [defaultMatches]);\n const getServerSnapshot = React.useMemo(() => {\n if (ssrMatchMedia !== null) {\n const {\n matches\n } = ssrMatchMedia(query);\n return () => matches;\n }\n\n return getDefaultSnapshot;\n }, [getDefaultSnapshot, query, ssrMatchMedia]);\n const [getSnapshot, subscribe] = React.useMemo(() => {\n if (matchMedia === null) {\n return [getDefaultSnapshot, () => () => {}];\n }\n\n const mediaQueryList = matchMedia(query);\n return [() => mediaQueryList.matches, notify => {\n // TODO: Use `addEventListener` once support for Safari < 14 is dropped\n mediaQueryList.addListener(notify);\n return () => {\n mediaQueryList.removeListener(notify);\n };\n }];\n }, [getDefaultSnapshot, matchMedia, query]);\n const match = maybeReactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n return match;\n}\n\nexport default function useMediaQuery(queryInput, options = {}) {\n const theme = useTheme(); // Wait for jsdom to support the match media feature.\n // All the browsers MUI support have this built-in.\n // This defensive check is here for simplicity.\n // Most of the time, the match media logic isn't central to people tests.\n\n const supportMatchMedia = typeof window !== 'undefined' && typeof window.matchMedia !== 'undefined';\n const {\n defaultMatches = false,\n matchMedia = supportMatchMedia ? window.matchMedia : null,\n ssrMatchMedia = null,\n noSsr\n } = getThemeProps({\n name: 'MuiUseMediaQuery',\n props: options,\n theme\n });\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof queryInput === 'function' && theme === null) {\n console.error(['MUI: The `query` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n }\n }\n\n let query = typeof queryInput === 'function' ? queryInput(theme) : queryInput;\n query = query.replace(/^@media( ?)/m, ''); // TODO: Drop `useMediaQueryOld` and use `use-sync-external-store` shim in `useMediaQueryNew` once the package is stable\n\n const useMediaQueryImplementation = maybeReactUseSyncExternalStore !== undefined ? useMediaQueryNew : useMediaQueryOld;\n const match = useMediaQueryImplementation(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr);\n\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useDebugValue({\n query,\n match\n });\n }\n\n return match;\n}","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n"],"names":["withStyles","theme","createStyles","fieldBasic","value","label","tooltip","mode","classes","onBeforeChange","readOnly","editorHeight","item","xs","sx","marginBottom","className","inputLabel","tooltipContainer","title","placement","style","maxHeight","overflow","border","language","onChange","evn","target","id","padding","fontSize","backgroundColor","fontFamily","minHeight","color","background","borderTop","display","alignItems","paddingRight","justifyContent","height","width","marginLeft","text","type","icon","variant","searchField","adornment","placeholder","adornmentPosition","overrideClass","inputProps","disableUnderline","position","InputProps","e","children","errorProps","cloneElement","tabStripStyle","tabsContainer","tabsHeaderContainer","borderRight","flexFlow","borderBottom","marginRight","fontWeight","tabContentContainer","tabPanel","flexDirection","selectedTab","routes","isRouteTabs","useTheme","useLocation","pathname","isSmallScreen","useMediaQuery","breakpoints","down","useState","setValue","headerList","contentList","useEffect","tabConfigElement","find","tabConfig","to","forEach","child","push","content","event","newValue","orientation","scrollButtons","tabList","map","index","tabHeader","disableRipple","disableTouchRipple","focusRipple","STATUS_COLORS","RED","GREEN","YELLOW","getDriveStatusColor","activeDisks","totalDrives","serverStatusColor","health_status","getNetworkStatusColor","activeNetwork","networkTotal","rowGridStyle","gridTemplateColumns","gap","Highlight","search","txtParts","RegExp","replace","escapeRegExp","parts","String","split","part","test","maxWidth","policyStatements","filter","setFilter","Grid","container","Box","sm","SearchBox","paddingTop","stmt","i","effect","Effect","isAllow","fill","Action","act","actIndex","Resource","res","resIndex","DeletePolicy","withSuspense","React","buttonContainer","pageContainer","paperContainer","statement","borderRadius","labelCol","actionsTray","modalBasic","containerForHeader","spacing","dispatch","useAppDispatch","navigate","useNavigate","params","useParams","features","useSelector","selFeatures","policy","setPolicy","setPolicyStatements","userList","setUserList","groupList","setGroupList","addLoading","setAddLoading","policyName","decodeURLString","policyDefinition","setPolicyDefinition","loadingPolicy","setLoadingPolicy","filterUsers","setFilterUsers","loadingUsers","setLoadingUsers","filterGroups","setFilterGroups","loadingGroups","setLoadingGroups","deleteOpen","setDeleteOpen","ldapIsEnabled","includes","displayGroups","hasPermission","CONSOLE_UI_RESOURCE","listGroupPermissions","viewGroup","getGroupPermissions","displayUsers","listUsersPermissions","viewUser","viewUserPermissions","displayPolicy","viewPolicyPermissions","canDeletePolicy","deletePolicyPermissions","canEditPolicy","createPolicyPermissions","api","encodeURLString","then","result","JSON","stringify","parse","pol","Statement","catch","err","setErrorSnackMessage","validSave","trim","userTableActions","onClick","user","IAM_PAGES","disableButtonFunction","filteredUsers","elementItem","groupTableActions","group","filteredGroups","refreshPolicyDetails","Fragment","selectedPolicy","closeDeleteModalAndRefresh","refresh","PageHeader","BackLink","PageLayout","ScreenTitle","IAMPoliciesIcon","subTitle","actions","SecureComponent","scopes","IAM_SCOPES","resource","disabled","TooltipWrapper","permissionTooltipHelper","TrashIcon","RefreshIcon","VerticalTabs","sectionTitle","Paper","length","TextField","val","startAdornment","InputAdornment","SearchIcon","TableWrapper","itemActions","columns","elementKey","isLoading","records","entityName","idField","noValidate","autoComplete","onSubmit","preventDefault","name","_","setSnackBarMessage","CodeMirrorWrapper","editor","data","clearButton","LinearProgress","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","Context","TabContext","props","idPrefix","setId","Math","round","random","useUniquePrefix","context","_jsx","Provider","useTabContext","getPanelId","getTabId","_excluded","TabList","ref","childrenProp","other","_objectWithoutPropertiesLoose","TypeError","Tabs","_extends","getTabPanelUtilityClass","slot","generateUtilityClass","generateUtilityClasses","TabPanelRoot","styled","overridesResolver","styles","root","inProps","useThemeProps","ownerState","composeClasses","useUtilityClasses","tabId","clsx","hidden","role","createSvgIcon","getCheckboxUtilityClass","CheckboxRoot","SwitchBase","shouldForwardProp","prop","rootShouldForwardProp","indeterminate","capitalize","vars","palette","secondary","action","activeChannel","primary","mainChannel","hoverOpacity","alpha","active","main","checkboxClasses","defaultCheckedIcon","CheckBoxIcon","defaultIcon","CheckBoxOutlineBlankIcon","defaultIndeterminateIcon","IndeterminateCheckBoxIcon","_icon$props$fontSize","_indeterminateIcon$pr","checkedIcon","iconProp","indeterminateIcon","indeterminateIconProp","size","slots","composedClasses","useMediaQueryOld","query","defaultMatches","matchMedia","ssrMatchMedia","noSsr","supportMatchMedia","window","matches","match","setMatch","useEnhancedEffect","queryList","updateMatch","addListener","removeListener","maybeReactUseSyncExternalStore","useMediaQueryNew","getDefaultSnapshot","getServerSnapshot","mediaQueryList","notify","getSnapshot","subscribe","queryInput","options","getThemeProps","useMediaQueryImplementation","undefined","baseGetTag","isArray","isObjectLike","module"],"sourceRoot":""}
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1367.eb3c7186.chunk.js b/portal-ui/build/static/js/1367.eb3c7186.chunk.js
new file mode 100644
index 000000000..f2bc1663c
--- /dev/null
+++ b/portal-ui/build/static/js/1367.eb3c7186.chunk.js
@@ -0,0 +1,2 @@
+(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1367,2691],{92217:function(e,n,t){"use strict";var i=t(1413),r=t(72791),o=t(61889),a=t(30829),c=t(20068),s=t(64554),l=t(11135),d=t(25787),u=t(84570),p=t(23814),h=t(56096),f=t(75952),x=t(78029),m=t.n(x),v=t(90932),Z=t(27454),b=t(80184);n.Z=(0,d.Z)((function(e){return(0,l.Z)((0,i.Z)({},p.YI))}))((function(e){var n=e.value,t=e.label,i=void 0===t?"":t,l=e.tooltip,d=void 0===l?"":l,p=e.mode,x=void 0===p?"json":p,j=e.classes,g=e.onBeforeChange,C=(e.readOnly,e.editorHeight),y=void 0===C?"250px":C;return(0,b.jsxs)(r.Fragment,{children:[(0,b.jsx)(o.ZP,{item:!0,xs:12,sx:{marginBottom:"10px"},children:(0,b.jsxs)(a.Z,{className:j.inputLabel,children:[(0,b.jsx)("span",{children:i}),""!==d&&(0,b.jsx)("div",{className:j.tooltipContainer,children:(0,b.jsx)(c.Z,{title:d,placement:"top-start",children:(0,b.jsx)("div",{className:j.tooltip,children:(0,b.jsx)(u.Z,{})})})})]})}),(0,b.jsx)(o.ZP,{item:!0,xs:12,style:{maxHeight:y,overflow:"auto",border:"1px solid #eaeaea"},children:(0,b.jsx)(v.Z,{value:n,language:x,onChange:function(e){g(null,null,e.target.value)},id:"code_wrapper",padding:15,style:{fontSize:12,backgroundColor:"#fefefe",fontFamily:"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",minHeight:y||"initial",color:"#000000"}})}),(0,b.jsx)(o.ZP,{item:!0,xs:12,sx:{background:"#f7f7f7",border:"1px solid #eaeaea",borderTop:0},children:(0,b.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",padding:"2px",paddingRight:"5px",justifyContent:"flex-end","& button":{height:"26px",width:"26px",padding:"2px"," .min-icon":{marginLeft:"0"}}},children:(0,b.jsx)(Z.Z,{tooltip:"Copy to Clipboard",children:(0,b.jsx)(m(),{text:n,children:(0,b.jsx)(f.zx,{type:"button",id:"copy-code-mirror",icon:(0,b.jsx)(h.TIy,{}),color:"primary",variant:"regular"})})})})})]})}))},59114:function(e,n,t){"use strict";var i=t(4942),r=t(1413),o=(t(72791),t(63466)),a=t(74900),c=t(27391),s=t(25787),l=t(11135),d=t(23814),u=t(80184);n.Z=(0,s.Z)((function(e){return(0,l.Z)({searchField:(0,r.Z)({},d.qg.searchField),adornment:{}})}))((function(e){var n=e.placeholder,t=void 0===n?"":n,r=e.classes,s=e.onChange,l=e.adornmentPosition,d=void 0===l?"end":l,p=e.overrideClass,h=e.value,f=(0,i.Z)({disableUnderline:!0},"".concat(d,"Adornment"),(0,u.jsx)(o.Z,{position:d,className:r.adornment,children:(0,u.jsx)(a.Z,{})}));return(0,u.jsx)(c.Z,{placeholder:t,className:p||r.searchField,id:"search-resource",label:"",InputProps:f,onChange:function(e){s(e.target.value)},variant:"standard",value:h})}))},50276:function(e,n,t){"use strict";var i=t(1413),r=t(29439),o=t(72791),a=t(64554),c=t(43896),s=t(83449),l=t(47283),d=t(82851),u=t(25787),p=t(13967),h=t(11135),f=t(95193),x=t(16871),m=t(80184),v={minHeight:60};n.Z=(0,u.Z)((function(e){return(0,h.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,h=void 0===u?"0":u,Z=e.routes,b=e.isRouteTabs,j=(0,p.Z)(),g=(0,x.TH)().pathname,C=void 0===g?"":g,y=(0,f.Z)(j.breakpoints.down("md")),E=(0,o.useState)(h),P=(0,r.Z)(E,2),w=P[0],S=P[1],M=[],N=[];if((0,o.useEffect)((function(){if(b){var e=n.find((function(e){return e.tabConfig.to===C}));e&&S(e.tabConfig.value)}}),[b,n,C]),!n)return null;n.forEach((function(e){M.push(e.tabConfig),N.push(e.content)}));return(0,m.jsx)(s.ZP,{value:"".concat(w),children:(0,m.jsxs)(a.Z,{className:t.tabsContainer,children:[(0,m.jsx)(a.Z,{className:t.tabsHeaderContainer,children:(0,m.jsx)(l.Z,{onChange:function(e,n){S(n)},orientation:y?"horizontal":"vertical",variant:y?"scrollable":"standard",scrollButtons:"auto",className:t.tabList,children:M.map((function(e,n){return e?(0,m.jsx)(c.Z,(0,i.Z)((0,i.Z)({className:t.tabHeader,value:"".concat(n),style:v},e),{},{disableRipple:!0,disableTouchRipple:!0,focusRipple:!0}),"v-tab-".concat(n)):null}))})}),(0,m.jsxs)(a.Z,{className:t.tabContentContainer,children:[b?null:N.map((function(e,n){return(0,m.jsx)(d.Z,{classes:(0,i.Z)({},t.tabPanel),value:"".concat(n),children:e||null},"v-tab-p-".concat(n))})),b?(0,m.jsx)("div",{className:t.tabPanel,children:Z}):null]})]})})}))},879:function(e,n,t){"use strict";t.d(n,{D_:function(){return a},Et:function(){return r},GJ:function(){return o},yh:function(){return i}});var i={RED:"#C83B51",GREEN:"#4CCB92",YELLOW:"#E7A219"},r=function(e,n){return e<=n/2?i.RED:2!==n&&e===n/2+1?i.YELLOW:e===n?i.GREEN:void 0},o=function(e){switch(e){case"offline":return i.RED;case"online":return i.GREEN;default:return i.YELLOW}},a=function(e,n){return e<=n/2?i.RED:e===n/2+1?i.YELLOW:e===n?i.GREEN:void 0}},1191:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return W}});var i=t(29439),r=t(1413),o=t(72791),a=t(60364),c=t(16871),s=t(75952),l=t(11135),d=t(25787),u=t(23814),p=t(10703),h=t(61889),f=t(40986),x=t(92983),m=t(81207),v=t(32291),Z=t(92217),b=t(63466),j=t(27391),g=t(14917),C=t(64244),y=t(28789),E=t(74900),P=t(54599),w=t(74794),S=t(50276),M=t(84669),N=t(56087),R=t(38442),T=t(75578),F=t(64554),k=t(59114),A=t(56096),L=t(879),I=t(80184),z={display:"grid",gridTemplateColumns:"60px 1fr",gap:"15px"},O=function(e){var n=e.search,t=void 0===n?"":n,i=e.children,r=void 0===i?"":i,o=new RegExp("(".concat(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}(t),")"),"i"),a=String(r).split(o);return t?a.map((function(e,n){return o.test(e)?(0,I.jsx)("mark",{children:e},n):e})):r},B=(0,d.Z)((function(e){return(0,l.Z)({searchField:(0,r.Z)((0,r.Z)({},u.qg.searchField),{},{maxWidth:380})})}))((function(e){var n=e.policyStatements,t=e.classes,r=void 0===t?{}:t,a=(0,o.useState)(""),c=(0,i.Z)(a,2),s=c[0],l=c[1];return(0,I.jsxs)(h.ZP,{container:!0,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsxs)(F.Z,{sx:{display:"grid",gridTemplateColumns:{sm:"1fr 1fr",xs:"1fr"},alignItems:"center",justifyContent:"space-between",gap:"15px"},children:[(0,I.jsx)(F.Z,{children:"Statements"}),(0,I.jsx)(k.Z,{placeholder:"Search",onChange:l,overrideClass:r.searchField,value:s})]})}),(0,I.jsx)(h.ZP,{item:!0,xs:12,sx:{"& .policy-row":{borderBottom:"1px solid #eaeaea"},"& .policy-row:first-child":{borderTop:"1px solid #eaeaea"},"& .policy-row:last-child":{borderBottom:"0px"},paddingTop:"15px","& mark":{color:"#000000",fontWeight:500}},children:n.map((function(e,n){var t=e.Effect,i="Allow"===t;return(0,I.jsxs)(F.Z,{className:"policy-row",sx:{display:"grid",gridTemplateColumns:"1fr",gap:"15px",fontSize:"14px",padding:"10px 0 10px 0","& .label":{fontWeight:600}},children:[(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Effect:"}),(0,I.jsxs)(F.Z,{sx:{display:"flex",alignItems:"center","& .min-icon":{marginRight:"5px",fill:i?L.yh.GREEN:L.yh.RED,height:"14px",width:"14px"}},children:[i?(0,I.jsx)(A.E31,{}):(0,I.jsx)(A.dRf,{}),t]})]}),(0,I.jsxs)(F.Z,{sx:{display:"grid",gridTemplateColumns:{sm:"1fr 1fr",xs:"1fr"},gap:"15px"},children:[(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Actions:"}),(0,I.jsx)(F.Z,{children:e.Action&&e.Action.map((function(e,t){return(0,I.jsx)("div",{children:(0,I.jsx)(O,{search:s,children:e})},"".concat(n,"-r-").concat(t))}))})]}),(0,I.jsxs)(F.Z,{sx:z,children:[(0,I.jsx)(F.Z,{className:"label",children:"Resources:"}),(0,I.jsx)(F.Z,{children:e.Resource&&e.Resource.map((function(e,t){return(0,I.jsxs)("div",{children:[" ",(0,I.jsx)(O,{search:s,children:e})]},"".concat(n,"-r-").concat(t))}))})]})]})]},"".concat(n))}))})]})})),D=t(45248),H=t(87995),G=t(46078),U=t(25469),_=t(27454),V=(0,T.Z)(o.lazy((function(){return t.e(312).then(t.bind(t,312))}))),W=(0,d.Z)((function(e){return(0,l.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({buttonContainer:{display:"flex",justifyContent:"flex-end",paddingTop:16,"& button":{marginLeft:8}},pageContainer:{border:"1px solid #EAEAEA",height:"100%"},paperContainer:{padding:"15px 15px 15px 50px",minHeight:"450px"},statement:{border:"1px solid #DADADA",padding:8,marginBottom:8,borderRadius:4},labelCol:{fontWeight:"bold"}},u.OR),u.qg),u.oO),(0,u.Bz)(e.spacing(4))))}))((function(e){var n=e.classes,t=(0,U.TL)(),r=(0,c.s0)(),l=(0,c.UO)(),d=(0,a.v9)(G.$4),u=(0,o.useState)(null),T=(0,i.Z)(u,2),F=T[0],k=T[1],A=(0,o.useState)([]),L=(0,i.Z)(A,2),z=L[0],O=L[1],W=(0,o.useState)([]),Y=(0,i.Z)(W,2),K=Y[0],q=Y[1],J=(0,o.useState)([]),Q=(0,i.Z)(J,2),$=Q[0],X=Q[1],ee=(0,o.useState)(!1),ne=(0,i.Z)(ee,2),te=ne[0],ie=ne[1],re=(0,D.IO)(l.policyName||""),oe=(0,o.useState)(""),ae=(0,i.Z)(oe,2),ce=ae[0],se=ae[1],le=(0,o.useState)(!0),de=(0,i.Z)(le,2),ue=de[0],pe=de[1],he=(0,o.useState)(""),fe=(0,i.Z)(he,2),xe=fe[0],me=fe[1],ve=(0,o.useState)(!0),Ze=(0,i.Z)(ve,2),be=Ze[0],je=Ze[1],ge=(0,o.useState)(""),Ce=(0,i.Z)(ge,2),ye=Ce[0],Ee=Ce[1],Pe=(0,o.useState)(!0),we=(0,i.Z)(Pe,2),Se=we[0],Me=we[1],Ne=(0,o.useState)(!1),Re=(0,i.Z)(Ne,2),Te=Re[0],Fe=Re[1],ke=d&&d.includes("ldap-idp")||!1,Ae=(0,R.F)(N.C3,N.K6,!0),Le=(0,R.F)(N.C3,N.k_,!0),Ie=(0,R.F)(N.C3,N.Rs,!0),ze=(0,R.F)(N.C3,N.iw,!0),Oe=(0,R.F)(N.C3,N.GD,!0),Be=(0,R.F)(N.C3,N.bE,!0),De=(0,R.F)(N.C3,N.XM,!0);(0,o.useEffect)((function(){ue&&(ue&&(Oe?m.Z.invoke("GET","/api/v1/policy/".concat((0,D.LL)(re))).then((function(e){if(e){k(e),se(e?JSON.stringify(JSON.parse(e.policy),null,4):"");var n=JSON.parse(e.policy);O(n.Statement)}pe(!1)})).catch((function(e){t((0,H.Ih)(e)),pe(!1)})):pe(!1)),be&&(Ie&&!ke?m.Z.invoke("GET","/api/v1/policies/".concat((0,D.LL)(re),"/users")).then((function(e){q(e),je(!1)})).catch((function(e){t((0,H.Ih)(e)),je(!1)})):je(!1)),Se&&(Ae&&!ke?m.Z.invoke("GET","/api/v1/policies/".concat((0,D.LL)(re),"/groups")).then((function(e){X(e),Me(!1)})).catch((function(e){t((0,H.Ih)(e)),Me(!1)})):Me(!1)))}),[re,ue,be,Se,q,X,se,k,je,Me,Ie,Ae,Oe,ke,t]);var He=""!==re.trim(),Ge=[{type:"view",onClick:function(e){r("".concat(N.gA.USERS,"/").concat((0,D.LL)(e)))},disableButtonFunction:function(){return!ze}}],Ue=K.filter((function(e){return e.includes(xe)})),_e=[{type:"view",onClick:function(e){r("".concat(N.gA.GROUPS,"/").concat((0,D.LL)(e)))},disableButtonFunction:function(){return!Le}}],Ve=$.filter((function(e){return e.includes(ye)})),We=function(){je(!0),Me(!0),pe(!0)};return(0,I.jsxs)(o.Fragment,{children:[Te&&(0,I.jsx)(V,{deleteOpen:Te,selectedPolicy:re,closeDeleteModalAndRefresh:function(e){Fe(!1),r(N.gA.POLICIES)}}),(0,I.jsx)(v.Z,{label:(0,I.jsx)(o.Fragment,{children:(0,I.jsx)(M.Z,{to:N.gA.POLICIES,label:"Policy"})})}),(0,I.jsxs)(w.Z,{className:n.pageContainer,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(g.Z,{icon:(0,I.jsx)(o.Fragment,{children:(0,I.jsx)(C.Z,{width:40})}),title:re,subTitle:(0,I.jsx)(o.Fragment,{children:"IAM Policy"}),actions:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)(R.s,{scopes:[N.Ft.ADMIN_DELETE_POLICY],resource:N.C3,errorProps:{disabled:!0},children:(0,I.jsx)(_.Z,{tooltip:Be?"":(0,N.MK)(N.bE,"delete Policies"),children:(0,I.jsx)(s.zx,{id:"delete-policy",label:"Delete Policy",variant:"secondary",icon:(0,I.jsx)(P.Z,{}),onClick:function(){Fe(!0)},disabled:!Be})})}),(0,I.jsx)(_.Z,{tooltip:"Refresh",children:(0,I.jsx)(s.zx,{id:"refresh-policy",label:"Refresh",variant:"regular",icon:(0,I.jsx)(y.default,{}),onClick:function(){We()}})})]})})}),(0,I.jsxs)(S.Z,{children:[{tabConfig:{label:"Summary",disabled:!Oe},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Policy Summary"}),(0,I.jsx)(p.Z,{className:n.paperContainer,children:(0,I.jsx)(B,{policyStatements:z})})]})},{tabConfig:{label:"Users",disabled:!Ie||ke},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Users"}),(0,I.jsxs)(h.ZP,{container:!0,children:[K.length>0&&(0,I.jsx)(h.ZP,{item:!0,xs:12,className:n.actionsTray,children:(0,I.jsx)(j.Z,{placeholder:"Search Users",className:n.searchField,id:"search-resource",label:"",onChange:function(e){me(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:(0,I.jsx)(b.Z,{position:"start",children:(0,I.jsx)(E.Z,{})})},variant:"standard"})}),(0,I.jsx)(x.Z,{itemActions:Ge,columns:[{label:"Name",elementKey:"name"}],isLoading:be,records:Ue,entityName:"Users with this Policy associated",idField:"name"})]})]})},{tabConfig:{label:"Groups",disabled:!Ae||ke},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Groups"}),(0,I.jsxs)(h.ZP,{container:!0,children:[$.length>0&&(0,I.jsx)(h.ZP,{item:!0,xs:12,className:n.actionsTray,children:(0,I.jsx)(j.Z,{placeholder:"Search Groups",className:n.searchField,id:"search-resource",label:"",onChange:function(e){Ee(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:(0,I.jsx)(b.Z,{position:"start",children:(0,I.jsx)(E.Z,{})})},variant:"standard"})}),(0,I.jsx)(x.Z,{itemActions:_e,columns:[{label:"Name",elementKey:"name"}],isLoading:Se,records:Ve,entityName:"Groups with this Policy associated",idField:"name"})]})]})},{tabConfig:{label:"Raw Policy",disabled:!Oe},content:(0,I.jsxs)(o.Fragment,{children:[(0,I.jsx)("div",{className:n.sectionTitle,children:"Raw Policy"}),(0,I.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),te||(ie(!0),De?m.Z.invoke("POST","/api/v1/policies",{name:re,policy:ce}).then((function(e){ie(!1),t((0,H.y1)("Policy successfully updated")),We()})).catch((function(e){ie(!1),t((0,H.Ih)(e))})):ie(!1))},children:(0,I.jsxs)(h.ZP,{container:!0,children:[(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(Z.Z,{readOnly:!De,value:ce,onBeforeChange:function(e,n,t){se(t)},editorHeight:"350px"})}),(0,I.jsxs)(h.ZP,{item:!0,xs:12,className:n.buttonContainer,children:[!F&&(0,I.jsx)("button",{type:"button",color:"primary",className:n.clearButton,onClick:function(){se("{}")},children:"Clear"}),(0,I.jsx)(R.s,{scopes:[N.Ft.ADMIN_CREATE_POLICY],resource:N.C3,errorProps:{disabled:!0},children:(0,I.jsx)(_.Z,{tooltip:De?"":(0,N.MK)(N.XM,"edit a Policy"),children:(0,I.jsx)(s.zx,{id:"save",type:"submit",variant:"callAction",color:"primary",disabled:te||!He||!De,label:"Save"})})})]}),te&&(0,I.jsx)(h.ZP,{item:!0,xs:12,children:(0,I.jsx)(f.Z,{})})]})})]})}]})]})]})}))},26759:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");n.Z=a},70366:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");n.Z=a},97911:function(e,n,t){"use strict";var i=t(64836);n.Z=void 0;var r=i(t(45649)),o=t(80184),a=(0,r.default)((0,o.jsx)("path",{d:"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z"}),"ViewColumn");n.Z=a},83449:function(e,n,t){"use strict";t.d(n,{ZP:function(){return c},_i:function(){return s},pQ:function(){return d},uU:function(){return l}});var i=t(29439),r=t(72791),o=t(80184),a=r.createContext(null);function c(e){var n=e.children,t=e.value,c=function(){var e=r.useState(null),n=(0,i.Z)(e,2),t=n[0],o=n[1];return r.useEffect((function(){o("mui-p-".concat(Math.round(1e5*Math.random())))}),[]),t}(),s=r.useMemo((function(){return{idPrefix:c,value:t}}),[c,t]);return(0,o.jsx)(a.Provider,{value:s,children:n})}function s(){return r.useContext(a)}function l(e,n){return null===e.idPrefix?null:"".concat(e.idPrefix,"-P-").concat(n)}function d(e,n){return null===e.idPrefix?null:"".concat(e.idPrefix,"-T-").concat(n)}},47283:function(e,n,t){"use strict";var i=t(87462),r=t(63366),o=t(72791),a=t(18073),c=t(83449),s=t(80184),l=["children"],d=o.forwardRef((function(e,n){var t=e.children,d=(0,r.Z)(e,l),u=(0,c._i)();if(null===u)throw new TypeError("No TabContext provided");var p=o.Children.map(t,(function(e){return o.isValidElement(e)?o.cloneElement(e,{"aria-controls":(0,c.uU)(u,e.props.value),id:(0,c.pQ)(u,e.props.value)}):null}));return(0,s.jsx)(a.Z,(0,i.Z)({},d,{ref:n,value:u.value,children:p}))}));n.Z=d},82851:function(e,n,t){"use strict";t.d(n,{Z:function(){return m}});var i=t(87462),r=t(63366),o=t(72791),a=t(28182),c=t(66934),s=t(31402),l=t(94419),d=t(21217);function u(e){return(0,d.Z)("MuiTabPanel",e)}(0,t(75878).Z)("MuiTabPanel",["root"]);var p=t(83449),h=t(80184),f=["children","className","value"],x=(0,c.ZP)("div",{name:"MuiTabPanel",slot:"Root",overridesResolver:function(e,n){return n.root}})((function(e){return{padding:e.theme.spacing(3)}})),m=o.forwardRef((function(e,n){var t=(0,s.Z)({props:e,name:"MuiTabPanel"}),o=t.children,c=t.className,d=t.value,m=(0,r.Z)(t,f),v=(0,i.Z)({},t),Z=function(e){var n=e.classes;return(0,l.Z)({root:["root"]},u,n)}(v),b=(0,p._i)();if(null===b)throw new TypeError("No TabContext provided");var j=(0,p.uU)(b,d),g=(0,p.pQ)(b,d);return(0,h.jsx)(x,(0,i.Z)({"aria-labelledby":g,className:(0,a.Z)(Z.root,c),hidden:d!==b.value,id:j,ref:n,role:"tabpanel",ownerState:v},m,{children:d===b.value&&o}))}))},94454:function(e,n,t){"use strict";t.d(n,{Z:function(){return w}});var i=t(4942),r=t(63366),o=t(87462),a=t(72791),c=t(94419),s=t(12065),l=t(97278),d=t(76189),u=t(80184),p=(0,d.Z)((0,u.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),h=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),f=(0,d.Z)((0,u.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox"),x=t(14036),m=t(31402),v=t(66934),Z=t(21217);function b(e){return(0,Z.Z)("MuiCheckbox",e)}var j=(0,t(75878).Z)("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary"]),g=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size"],C=(0,v.ZP)(l.Z,{shouldForwardProp:function(e){return(0,v.FO)(e)||"classes"===e},name:"MuiCheckbox",slot:"Root",overridesResolver:function(e,n){var t=e.ownerState;return[n.root,t.indeterminate&&n.indeterminate,"default"!==t.color&&n["color".concat((0,x.Z)(t.color))]]}})((function(e){var n,t=e.theme,r=e.ownerState;return(0,o.Z)({color:(t.vars||t).palette.text.secondary},!r.disableRipple&&{"&:hover":{backgroundColor:t.vars?"rgba(".concat("default"===r.color?t.vars.palette.action.activeChannel:t.vars.palette.primary.mainChannel," / ").concat(t.vars.palette.action.hoverOpacity,")"):(0,s.Fq)("default"===r.color?t.palette.action.active:t.palette[r.color].main,t.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==r.color&&(n={},(0,i.Z)(n,"&.".concat(j.checked,", &.").concat(j.indeterminate),{color:(t.vars||t).palette[r.color].main}),(0,i.Z)(n,"&.".concat(j.disabled),{color:(t.vars||t).palette.action.disabled}),n))})),y=(0,u.jsx)(h,{}),E=(0,u.jsx)(p,{}),P=(0,u.jsx)(f,{}),w=a.forwardRef((function(e,n){var t,i,s=(0,m.Z)({props:e,name:"MuiCheckbox"}),l=s.checkedIcon,d=void 0===l?y:l,p=s.color,h=void 0===p?"primary":p,f=s.icon,v=void 0===f?E:f,Z=s.indeterminate,j=void 0!==Z&&Z,w=s.indeterminateIcon,S=void 0===w?P:w,M=s.inputProps,N=s.size,R=void 0===N?"medium":N,T=(0,r.Z)(s,g),F=j?S:v,k=j?S:d,A=(0,o.Z)({},s,{color:h,indeterminate:j,size:R}),L=function(e){var n=e.classes,t=e.indeterminate,i=e.color,r={root:["root",t&&"indeterminate","color".concat((0,x.Z)(i))]},a=(0,c.Z)(r,b,n);return(0,o.Z)({},n,a)}(A);return(0,u.jsx)(C,(0,o.Z)({type:"checkbox",inputProps:(0,o.Z)({"data-indeterminate":j},M),icon:a.cloneElement(F,{fontSize:null!=(t=F.props.fontSize)?t:R}),checkedIcon:a.cloneElement(k,{fontSize:null!=(i=k.props.fontSize)?i:R}),ownerState:A,ref:n},T,{classes:L}))}))},95193:function(e,n,t){"use strict";var i;t.d(n,{Z:function(){return p}});var r=t(29439),o=t(72791),a=t(69120),c=t(33073),s=t(40162);function l(e,n,t,i,a){var c="undefined"!==typeof window&&"undefined"!==typeof window.matchMedia,l=o.useState((function(){return a&&c?t(e).matches:i?i(e).matches:n})),d=(0,r.Z)(l,2),u=d[0],p=d[1];return(0,s.Z)((function(){var n=!0;if(c){var i=t(e),r=function(){n&&p(i.matches)};return r(),i.addListener(r),function(){n=!1,i.removeListener(r)}}}),[e,t,c]),u}var d=(i||(i=t.t(o,2))).useSyncExternalStore;function u(e,n,t,i){var a=o.useCallback((function(){return n}),[n]),c=o.useMemo((function(){if(null!==i){var n=i(e).matches;return function(){return n}}return a}),[a,e,i]),s=o.useMemo((function(){if(null===t)return[a,function(){return function(){}}];var n=t(e);return[function(){return n.matches},function(e){return n.addListener(e),function(){n.removeListener(e)}}]}),[a,t,e]),l=(0,r.Z)(s,2),u=l[0],p=l[1];return d(p,u,c)}function p(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=(0,a.Z)(),i="undefined"!==typeof window&&"undefined"!==typeof window.matchMedia,r=(0,c.Z)({name:"MuiUseMediaQuery",props:n,theme:t}),o=r.defaultMatches,s=void 0!==o&&o,p=r.matchMedia,h=void 0===p?i?window.matchMedia:null:p,f=r.ssrMatchMedia,x=void 0===f?null:f,m=r.noSsr;var v="function"===typeof e?e(t):e;v=v.replace(/^@media( ?)/m,"");var Z=void 0!==d?u:l,b=Z(v,s,h,x,m);return b}},26769:function(e,n,t){var i=t(39066),r=t(93629),o=t(43141);e.exports=function(e){return"string"==typeof e||!r(e)&&o(e)&&"[object String]"==i(e)}}}]);
+//# sourceMappingURL=1367.eb3c7186.chunk.js.map
\ No newline at end of file
diff --git a/portal-ui/build/static/js/1367.eb3c7186.chunk.js.map b/portal-ui/build/static/js/1367.eb3c7186.chunk.js.map
new file mode 100644
index 000000000..c74382679
--- /dev/null
+++ b/portal-ui/build/static/js/1367.eb3c7186.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/js/1367.eb3c7186.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Common/SearchBox.tsx","screens/Console/Common/VerticalTabs/VerticalTabs.tsx","screens/Console/Dashboard/BasicDashboard/Utils.tsx","screens/Console/Policies/PolicyView.tsx","screens/Console/Policies/PolicyDetails.tsx","../node_modules/@mui/icons-material/ArrowDropDown.js","../node_modules/@mui/icons-material/ArrowDropUp.js","../node_modules/@mui/icons-material/ViewColumn.js","../node_modules/@mui/lab/TabContext/TabContext.js","../node_modules/@mui/lab/TabList/TabList.js","../node_modules/@mui/lab/TabPanel/tabPanelClasses.js","../node_modules/@mui/lab/TabPanel/TabPanel.js","../node_modules/@mui/material/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@mui/material/internal/svg-icons/CheckBox.js","../node_modules/@mui/material/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@mui/material/Checkbox/checkboxClasses.js","../node_modules/@mui/material/Checkbox/Checkbox.js","../node_modules/@mui/material/useMediaQuery/useMediaQuery.js","../node_modules/lodash/isString.js"],"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 from \"@mui/material/Grid\";\nimport { Box, InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../icons\";\nimport { Button } from \"mds\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport CodeEditor from \"@uiw/react-textarea-code-editor\";\nimport TooltipWrapper from \"../../TooltipWrapper/TooltipWrapper\";\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n mode?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n editorHeight?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n mode = \"json\",\n classes,\n onBeforeChange,\n readOnly = false,\n editorHeight = \"250px\",\n}: ICodeWrapper) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n \n
\n )}\n \n \n\n \n {\n onBeforeChange(null, null, evn.target.value);\n }}\n id={\"code_wrapper\"}\n padding={15}\n style={{\n fontSize: 12,\n backgroundColor: \"#fefefe\",\n fontFamily:\n \"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace\",\n minHeight: editorHeight || \"initial\",\n color: \"#000000\",\n }}\n />\n \n \n \n \n \n }\n color={\"primary\"}\n variant={\"regular\"}\n />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\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 InputAdornment from \"@mui/material/InputAdornment\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\nimport TextField from \"@mui/material/TextField\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { searchField } from \"./FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n },\n adornment: {},\n });\n\ntype SearchBoxProps = {\n placeholder?: string;\n value: string;\n classes: any;\n onChange: (value: string) => void;\n adornmentPosition?: \"start\" | \"end\";\n overrideClass?: any;\n};\n\nconst SearchBox = ({\n placeholder = \"\",\n classes,\n onChange,\n adornmentPosition = \"end\",\n overrideClass,\n value,\n}: SearchBoxProps) => {\n const inputProps = {\n disableUnderline: true,\n [`${adornmentPosition}Adornment`]: (\n \n \n \n ),\n };\n return (\n {\n onChange(e.target.value);\n }}\n variant=\"standard\"\n value={value}\n />\n );\n};\n\nexport default withStyles(styles)(SearchBox);\n","import React, { useState, useEffect } from \"react\";\nimport { Box, Tab, TabProps } from \"@mui/material\";\nimport { TabContext, TabList, TabPanel } from \"@mui/lab\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme, useTheme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\nimport { useLocation } from \"react-router-dom\";\n\nexport type TabItemProps = {\n tabConfig: TabProps | any;\n content?: JSX.Element | JSX.Element[];\n};\n\ntype VerticalTabsProps = {\n classes: any;\n children: TabItemProps[];\n selectedTab?: string;\n routes?: any;\n isRouteTabs?: boolean;\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n tabsContainer: {\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n },\n tabsHeaderContainer: {\n width: \"300px\",\n background: \"#F8F8F8\",\n borderRight: \"1px solid #EAEAEA\",\n \"& .MuiTabs-root\": {\n \"& .MuiTabs-indicator\": {\n display: \"none\",\n },\n \"& .MuiTab-root\": {\n display: \"flex\",\n flexFlow: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"& .MuiSvgIcon-root\": {\n marginRight: 8,\n marginBottom: 0,\n },\n \"&.Mui-selected\": {\n background: \"#E5E5E5\",\n fontWeight: 600,\n },\n },\n\n \"&. MuiTabs-scroller\": {\n display: \"none\",\n },\n },\n },\n tabContentContainer: {\n width: \"100%\",\n \"& .MuiTabPanel-root\": {\n height: \"100%\",\n },\n },\n tabPanel: {\n height: \"100%\",\n },\n /*Below md breakpoint make it horizontal and style it for scrolling tabs*/\n \"@media (max-width: 900px)\": {\n tabsContainer: {\n flexFlow: \"column\",\n flexDirection: \"column\",\n },\n tabsHeaderContainer: {\n width: \"100%\",\n borderBottom: \" 1px solid #EAEAEA\",\n \"& .MuiTabs-root .MuiTabs-scroller .MuiButtonBase-root\": {\n borderBottom: \" 0px\",\n },\n },\n },\n });\n\nconst tabStripStyle = {\n minHeight: 60,\n};\n\nconst VerticalTabs = ({\n children,\n classes,\n selectedTab = \"0\",\n routes,\n isRouteTabs,\n}: VerticalTabsProps) => {\n const theme = useTheme();\n const { pathname = \"\" } = useLocation();\n\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"md\"));\n\n const [value, setValue] = useState(selectedTab);\n\n const headerList: TabProps[] = [];\n const contentList: React.ReactNode[] = [];\n\n useEffect(() => {\n if (isRouteTabs) {\n const tabConfigElement = children.find(\n (item) => item.tabConfig.to === pathname\n );\n\n if (tabConfigElement) {\n setValue(tabConfigElement.tabConfig.value);\n }\n }\n }, [isRouteTabs, children, pathname]);\n\n if (!children) return null;\n\n children.forEach((child) => {\n headerList.push(child.tabConfig);\n contentList.push(child.content);\n });\n\n const handleChange = (event: React.SyntheticEvent, newValue: string) => {\n setValue(newValue);\n };\n\n return (\n \n \n \n \n {headerList.map((item, index) => {\n if (item) {\n return (\n \n );\n }\n return null;\n })}\n \n \n\n \n {!isRouteTabs\n ? contentList.map((item, index) => {\n return (\n \n {item ? item : null}\n \n );\n })\n : null}\n {isRouteTabs ? (\n
{routes}
\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) 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\nexport const STATUS_COLORS = {\n RED: \"#C83B51\",\n GREEN: \"#4CCB92\",\n YELLOW: \"#E7A219\",\n};\n\nexport const getDriveStatusColor = (\n activeDisks: number,\n totalDrives: number\n) => {\n if (activeDisks <= totalDrives / 2) {\n return STATUS_COLORS.RED;\n }\n if (totalDrives !== 2 && activeDisks === totalDrives / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeDisks === totalDrives) {\n return STATUS_COLORS.GREEN;\n }\n};\n\nexport const serverStatusColor = (health_status: string) => {\n switch (health_status) {\n case \"offline\":\n return STATUS_COLORS.RED;\n case \"online\":\n return STATUS_COLORS.GREEN;\n default:\n return STATUS_COLORS.YELLOW;\n }\n};\nexport const getNetworkStatusColor = (\n activeNetwork: number,\n networkTotal: number\n) => {\n if (activeNetwork <= networkTotal / 2) {\n return STATUS_COLORS.RED;\n }\n if (activeNetwork === networkTotal / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeNetwork === networkTotal) {\n return STATUS_COLORS.GREEN;\n }\n};\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, { useState } from \"react\";\nimport { IAMStatement } from \"./types\";\nimport { Box } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport SearchBox from \"../Common/SearchBox\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { searchField } from \"../Common/FormComponents/common/styleLibrary\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { DisabledIcon, EnabledIcon } from \"../../../icons\";\nimport { STATUS_COLORS } from \"../Dashboard/BasicDashboard/Utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n maxWidth: 380,\n },\n });\n\nconst rowGridStyle = {\n display: \"grid\",\n gridTemplateColumns: \"60px 1fr\",\n gap: \"15px\",\n};\n\nconst escapeRegExp = (str = \"\") =>\n str.replace(/([.?*+^$[\\]\\\\(){}|-])/g, \"\\\\$1\");\n\nconst Highlight = ({ search = \"\", children = \"\" }): any => {\n const txtParts = new RegExp(`(${escapeRegExp(search)})`, \"i\");\n const parts = String(children).split(txtParts);\n\n if (search) {\n return parts.map((part, index) =>\n txtParts.test(part) ? {part} : part\n );\n } else {\n return children;\n }\n};\n\nconst PolicyView = ({\n policyStatements,\n classes = {},\n}: {\n policyStatements: IAMStatement[];\n classes?: any;\n}) => {\n const [filter, setFilter] = useState(\"\");\n\n return (\n \n \n \n Statements\n \n \n \n \n {policyStatements.map((stmt, i) => {\n const effect = stmt.Effect;\n const isAllow = effect === \"Allow\";\n return (\n \n \n Effect:\n \n {isAllow ? : }\n {effect}\n \n \n\n \n \n Actions:\n \n {stmt.Action &&\n stmt.Action.map((act, actIndex) => (\n
\n \n );\n};\n\nexport default withStyles(styles)(BrowserBreadcrumbs);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Menu, MenuItem } from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport { UploadFolderIcon, UploadIcon } from \"../../../../icons\";\nimport {\n IAM_SCOPES,\n permissionTooltipHelper,\n} from \"../../../../common/SecureComponent/permissions\";\nimport { hasPermission } from \"../../../../common/SecureComponent\";\nimport { Button } from \"mds\";\nimport TooltipWrapper from \"../../Common/TooltipWrapper/TooltipWrapper\";\n\ninterface IUploadFilesButton {\n uploadPath: string;\n bucketName: string;\n forceDisable?: boolean;\n uploadFileFunction: (closeFunction: () => void) => void;\n uploadFolderFunction: (closeFunction: () => void) => void;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n listUploadIcons: {\n height: 20,\n \"& .min-icon\": {\n width: 18,\n fill: \"rgba(0,0,0,0.87)\",\n },\n },\n });\n\nconst UploadFilesButton = ({\n uploadPath,\n bucketName,\n forceDisable = false,\n uploadFileFunction,\n uploadFolderFunction,\n classes,\n}: IUploadFilesButton) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const openUploadMenu = Boolean(anchorEl);\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const handleCloseUpload = () => {\n setAnchorEl(null);\n };\n\n const uploadObjectAllowed = hasPermission(uploadPath, [\n IAM_SCOPES.S3_PUT_OBJECT,\n ]);\n const uploadFolderAllowed = hasPermission(\n bucketName,\n [IAM_SCOPES.S3_PUT_OBJECT],\n false,\n true\n );\n\n const uploadEnabled: boolean = uploadObjectAllowed || uploadFolderAllowed;\n\n return (\n \n \n }\n variant={\"callAction\"}\n disabled={forceDisable || !uploadEnabled}\n />\n \n \n \n );\n};\n\nexport default withStyles(styles)(UploadFilesButton);\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 { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { Grid, IconButton } from \"@mui/material\";\nimport { ClosePanelIcon } from \"../../../../../../icons\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\ninterface IDetailsListPanel {\n open: boolean;\n className?: string;\n closePanel: () => void;\n children: React.ReactNode;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n detailsList: {\n borderColor: \"#EAEDEE\",\n borderWidth: 0,\n borderStyle: \"solid\",\n borderRadius: 3,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n width: 0,\n transitionDuration: \"0.3s\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n position: \"relative\",\n opacity: 0,\n marginLeft: -1,\n \"&.open\": {\n width: 300,\n minWidth: 300,\n borderLeftWidth: 1,\n opacity: 1,\n },\n \"@media (max-width: 799px)\": {\n \"&.open\": {\n width: \"100%\",\n minWidth: \"100%\",\n borderLeftWidth: 0,\n },\n },\n },\n closePanel: {\n position: \"absolute\",\n right: 0,\n top: 8,\n \"& .min-icon\": {\n width: 14,\n },\n },\n })\n);\n\nconst DetailsListPanel = ({\n open,\n closePanel,\n className = \"\",\n children,\n}: IDetailsListPanel) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n {children}\n \n );\n};\n\nexport default DetailsListPanel;\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\nexport const months = [\n { value: \"01\", label: \"January\" },\n { value: \"02\", label: \"February\" },\n { value: \"03\", label: \"March\" },\n { value: \"04\", label: \"April\" },\n { value: \"05\", label: \"May\" },\n { value: \"06\", label: \"June\" },\n { value: \"07\", label: \"July\" },\n { value: \"08\", label: \"August\" },\n { value: \"09\", label: \"September\" },\n { value: \"10\", label: \"October\" },\n { value: \"11\", label: \"November\" },\n { value: \"12\", label: \"December\" },\n];\n\nexport const days = Array.from(Array(31), (_, num) => num + 1);\n\nconst currentYear = new Date().getFullYear();\n\nexport const years = Array.from(\n Array(25),\n (_, numYear) => numYear + currentYear\n);\n\nexport const validDate = (year: string, month: string, day: string): any[] => {\n const currentDate = Date.parse(`${year}-${month}-${day}`);\n\n if (isNaN(currentDate)) {\n return [false, \"\"];\n }\n\n const parsedMonth = parseInt(month);\n const parsedDay = parseInt(day);\n\n const monthForString = parsedMonth < 10 ? `0${parsedMonth}` : parsedMonth;\n const dayForString = parsedDay < 10 ? `0${parsedDay}` : parsedDay;\n\n const parsedDate = new Date(currentDate).toISOString().split(\"T\")[0];\n const dateString = `${year}-${monthForString}-${dayForString}`;\n\n return [parsedDate === dateString, dateString];\n};\n\n// twoDigitDate gets a two digit string number used for months or days\n// returns \"NaN\" if number is NaN\nexport const twoDigitDate = (num: number): string => {\n return num < 10 ? `0${num}` : `${num}`;\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, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n} from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@mui/material/Grid\";\nimport { SelectChangeEvent } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport InputLabel from \"@mui/material/InputLabel\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport FormControl from \"@mui/material/FormControl\";\nimport Select from \"@mui/material/Select\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport InputBase from \"@mui/material/InputBase\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport FormSwitchWrapper from \"../FormSwitchWrapper/FormSwitchWrapper\";\nimport { days, months, validDate, years } from \"./utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n dateInput: {\n \"&:not(:last-child)\": {\n marginRight: 22,\n },\n },\n ...fieldBasic,\n ...tooltipHelper,\n labelContainer: {\n flex: 1,\n },\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingBottom: 10,\n marginTop: 11,\n marginBottom: 6,\n },\n fieldContainerBorder: {\n borderBottom: \"#9c9c9c 1px solid\",\n marginBottom: 20,\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n \"& .MuiSelect-icon\": {\n color: \"#000\",\n \"&.Mui-disabled\": {\n color: \"#9c9c9c\",\n },\n },\n },\n input: {\n borderBottom: 0,\n fontSize: 12,\n },\n })\n)(InputBase);\n\ninterface IDateSelectorProps {\n classes: any;\n id: string;\n label: string;\n disableOptions?: boolean;\n addSwitch?: boolean;\n tooltip?: string;\n borderBottom?: boolean;\n value?: string;\n onDateChange: (date: string, isValid: boolean) => any;\n}\n\nconst DateSelector = forwardRef(\n (\n {\n classes,\n id,\n label,\n disableOptions = false,\n addSwitch = false,\n tooltip = \"\",\n borderBottom = false,\n onDateChange,\n value = \"\",\n }: IDateSelectorProps,\n ref: any\n ) => {\n useImperativeHandle(ref, () => ({ resetDate }));\n\n const [dateEnabled, setDateEnabled] = useState(false);\n const [month, setMonth] = useState(\"\");\n const [day, setDay] = useState(\"\");\n const [year, setYear] = useState(\"\");\n\n useEffect(() => {\n // verify if there is a current value\n // assume is in the format \"2021-12-30\"\n if (value !== \"\") {\n const valueSplit = value.split(\"-\");\n setYear(valueSplit[0]);\n setMonth(valueSplit[1]);\n // Turn to single digit to be displayed on dropdown buttons\n setDay(`${parseInt(valueSplit[2])}`);\n }\n }, [value]);\n\n useEffect(() => {\n const [isValid, dateString] = validDate(year, month, day);\n onDateChange(dateString, isValid);\n }, [month, day, year, onDateChange]);\n\n const resetDate = () => {\n setMonth(\"\");\n setDay(\"\");\n setYear(\"\");\n };\n\n const isDateDisabled = () => {\n if (disableOptions) {\n return disableOptions;\n } else if (addSwitch) {\n return !dateEnabled;\n } else {\n return false;\n }\n };\n\n const onMonthChange = (e: SelectChangeEvent) => {\n setMonth(e.target.value as string);\n };\n\n const onDayChange = (e: SelectChangeEvent) => {\n setDay(e.target.value as string);\n };\n\n const onYearChange = (e: SelectChangeEvent) => {\n setYear(e.target.value as string);\n };\n\n return (\n \n
\n \n );\n }\n);\n\nexport default withStyles(styles)(DateSelector);\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, useRef, useState } from \"react\";\n\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport { Button } from \"mds\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"./types\";\n\nimport { twoDigitDate } from \"../../../../Common/FormComponents/DateSelector/utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport RadioGroupSelector from \"../../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport DateSelector from \"../../../../Common/FormComponents/DateSelector/DateSelector\";\nimport api from \"../../../../../../common/api\";\nimport { encodeURLString } from \"../../../../../../common/utils\";\nimport { setModalErrorSnackMessage } from \"../../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../../store\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n ...spacingUtils,\n dateSelector: {\n \"& div\": {\n borderBottom: 0,\n marginBottom: 0,\n\n \"& div:nth-child(2)\": {\n border: \"1px solid #EAEAEA\",\n paddingLeft: 5,\n\n \"& div\": {\n border: 0,\n },\n },\n },\n },\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (updateInfo: boolean) => void;\n objectName: string;\n bucketName: string;\n objectInfo: IFileInfo;\n}\n\ninterface IRefObject {\n resetDate: () => void;\n}\n\nconst SetRetention = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n objectInfo,\n bucketName,\n}: ISetRetentionProps) => {\n const dispatch = useAppDispatch();\n const [statusEnabled, setStatusEnabled] = useState(true);\n const [type, setType] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [isDateValid, setIsDateValid] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [alreadyConfigured, setAlreadyConfigured] = useState(false);\n\n useEffect(() => {\n if (objectInfo.retention_mode) {\n setType(objectInfo.retention_mode.toLowerCase());\n setAlreadyConfigured(true);\n }\n // get retention_until_date if defined\n if (objectInfo.retention_until_date) {\n const valueDate = new Date(objectInfo.retention_until_date);\n if (valueDate.toString() !== \"Invalid Date\") {\n const year = valueDate.getFullYear();\n const month = twoDigitDate(valueDate.getMonth() + 1);\n const day = valueDate.getDate();\n if (!isNaN(day) && month !== \"NaN\" && !isNaN(year)) {\n setDate(`${year}-${month}-${day}`);\n }\n }\n setAlreadyConfigured(true);\n }\n }, [objectInfo]);\n\n const dateElement = useRef(null);\n\n const dateFieldDisabled = () => {\n return !(statusEnabled && (type === \"governance\" || type === \"compliance\"));\n };\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n };\n\n const resetForm = () => {\n setStatusEnabled(false);\n setType(\"\");\n if (dateElement.current) {\n dateElement.current.resetDate();\n }\n };\n\n const addRetention = (\n selectedObject: string,\n versionId: string | null,\n expireDate: string\n ) => {\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${encodeURLString(\n selectedObject\n )}&version_id=${versionId}`,\n {\n expires: expireDate,\n mode: type,\n }\n )\n .then((res: any) => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSaving(false);\n });\n };\n\n const disableRetention = (\n selectedObject: string,\n versionId: string | null\n ) => {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${encodeURLString(\n selectedObject\n )}&version_id=${versionId}`\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSaving(false);\n });\n };\n\n const saveNewRetentionPolicy = () => {\n setIsSaving(true);\n const selectedObject = objectInfo.name;\n const versionId = objectInfo.version_id;\n\n const expireDate =\n !statusEnabled && type === \"governance\" ? \"\" : `${date}T23:59:59Z`;\n\n if (!statusEnabled && type === \"governance\") {\n disableRetention(selectedObject, versionId);\n\n return;\n }\n\n addRetention(selectedObject, versionId, expireDate);\n };\n\n const showSwitcher =\n alreadyConfigured && (type === \"governance\" || type === \"\");\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n
\n Selected Object: {objectName}\n
\n \n \n );\n};\n\nexport default withStyles(styles)(SetRetention);\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, useState } from \"react\";\nimport { DialogContentText } from \"@mui/material\";\n\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport { decodeURLString } from \"../../../../../../common/utils\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport useApi from \"../../../../Common/Hooks/useApi\";\nimport { ConfirmDeleteIcon } from \"../../../../../../icons\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\nimport { setErrorSnackMessage } from \"../../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../../store\";\n\ninterface IDeleteObjectProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedObject: string;\n selectedBucket: string;\n\n versioning: boolean;\n selectedVersion?: string;\n}\n\nconst DeleteObject = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n selectedObject,\n\n versioning,\n selectedVersion = \"\",\n}: IDeleteObjectProps) => {\n const dispatch = useAppDispatch();\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) =>\n dispatch(setErrorSnackMessage(err));\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n const [deleteVersions, setDeleteVersions] = useState(false);\n\n if (!selectedObject) {\n return null;\n }\n const onConfirmDelete = () => {\n const decodedSelectedObject = decodeURLString(selectedObject);\n const recursive = decodedSelectedObject.endsWith(\"/\");\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/buckets/${selectedBucket}/objects?path=${selectedObject}${\n selectedVersion !== \"\"\n ? `&version_id=${selectedVersion}`\n : `&recursive=${recursive}&all_versions=${deleteVersions}`\n }`\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmationContent={\n \n Are you sure you want to delete: \n {decodeURLString(selectedObject)}{\" \"}\n {selectedVersion !== \"\" ? (\n \n \n \n Version ID:\n \n {selectedVersion}\n \n ) : (\n \"\"\n )}\n ? \n \n {versioning && selectedVersion === \"\" && (\n {\n setDeleteVersions(!deleteVersions);\n }}\n description=\"\"\n />\n )}\n \n }\n />\n );\n};\n\nexport default DeleteObject;\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\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport Grid from \"@mui/material/Grid\";\nimport { Button } from \"mds\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nimport { IFileInfo } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../../common/api\";\nimport { encodeURLString } from \"../../../../../../common/utils\";\n\nimport { setModalErrorSnackMessage } from \"../../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../../store\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n ...spacingUtils,\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (reload: boolean) => void;\n objectName: string;\n bucketName: string;\n actualInfo: IFileInfo;\n}\n\nconst SetLegalHoldModal = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n bucketName,\n actualInfo,\n}: ISetRetentionProps) => {\n const dispatch = useAppDispatch();\n const [legalHoldEnabled, setLegalHoldEnabled] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const versionId = actualInfo.version_id;\n\n useEffect(() => {\n const status = get(actualInfo, \"legal_hold_status\", \"OFF\");\n setLegalHoldEnabled(status === \"ON\");\n }, [actualInfo]);\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setIsSaving(true);\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/legalhold?prefix=${encodeURLString(\n objectName\n )}&version_id=${versionId}`,\n { status: legalHoldEnabled ? \"enabled\" : \"disabled\" }\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error: ErrorResponseHandler) => {\n dispatch(setModalErrorSnackMessage(error));\n setIsSaving(false);\n });\n };\n\n const resetForm = () => {\n setLegalHoldEnabled(false);\n };\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n \n Object: {bucketName}\n \n\n \n \n );\n};\n\nexport default withStyles(styles)(SetLegalHoldModal);\n","import React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport useApi from \"../../../../Common/Hooks/useApi\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport { MetadataResponse } from \"./types\";\nimport get from \"lodash/get\";\nimport Grid from \"@mui/material/Grid\";\nimport { Box, Table, TableBody, TableCell, TableRow } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n detailsPanel,\n spacingUtils,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { withStyles } from \"@mui/styles\";\n\ninterface IObjectMetadata {\n bucketName: string;\n internalPaths: string;\n classes?: any;\n actualInfo: any;\n linear?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n propertiesIcon: {\n marginLeft: 5,\n \"& .min-icon\": {\n height: 12,\n },\n },\n\n capitalizeFirst: {\n textTransform: \"capitalize\",\n \"& .min-icon\": {\n width: 16,\n height: 16,\n },\n },\n titleItem: {\n width: \"35%\",\n },\n ...spacingUtils,\n ...detailsPanel,\n });\n\nconst ObjectMetaData = ({\n bucketName,\n internalPaths,\n classes,\n actualInfo,\n linear = false,\n}: IObjectMetadata) => {\n const [metaData, setMetaData] = useState({});\n\n const onMetaDataSuccess = (res: MetadataResponse) => {\n let metadata = get(res, \"objectMetadata\", {});\n\n setMetaData(metadata);\n };\n const onMetaDataError = (err: ErrorResponseHandler) => false;\n\n const [, invokeMetaDataApi] = useApi(onMetaDataSuccess, onMetaDataError);\n\n const metaKeys = Object.keys(metaData);\n const loadMetaData = useCallback(() => {\n invokeMetaDataApi(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects/metadata?prefix=${internalPaths}`\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [bucketName, internalPaths, actualInfo]);\n\n useEffect(() => {\n if (actualInfo) {\n loadMetaData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [actualInfo, loadMetaData]);\n\n if (linear) {\n return (\n \n {metaKeys.map((element: string, index: number) => {\n const renderItem = Array.isArray(metaData[element])\n ? metaData[element].map(decodeURIComponent).join(\", \")\n : decodeURIComponent(metaData[element]);\n\n return (\n \n {element}\n \n {renderItem}\n \n );\n })}\n \n );\n }\n\n return (\n \n \n
\n \n \n );\n};\n\nexport default withStyles(styles)(ObjectMetaData);\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 { Button } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport clsx from \"clsx\";\n\ntype ObjectActionButtonProps = {\n disabled?: boolean;\n onClick: () => void | any;\n icon: React.ReactNode;\n label: string;\n [x: string]: any;\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n padding: \"0 15px\",\n height: 22,\n margin: 0,\n color: \"#5E5E5E\",\n fontWeight: \"normal\",\n fontSize: 14,\n whiteSpace: \"nowrap\",\n width: \"100%\",\n justifyContent: \"flex-start\",\n \"&:hover\": {\n backgroundColor: \"transparent\",\n color: \"#000\",\n },\n \"& .min-icon\": {\n width: 11,\n },\n \"&:disabled\": {\n color: \"#EBEBEB\",\n borderColor: \"#EBEBEB\",\n },\n },\n });\n\n// TODO: Create an mds version of this.\nconst ObjectActionButton = ({\n disabled,\n onClick,\n icon,\n label,\n classes,\n ...restProps\n}: ObjectActionButtonProps) => {\n return (\n \n );\n};\n\nexport default withStyles(styles)(ObjectActionButton);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport ObjectActionButton from \"./ObjectActionButton\";\nimport { withStyles } from \"@mui/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { detailsPanel } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport TooltipWrapper from \"../../../../Common/TooltipWrapper/TooltipWrapper\";\n\nconst styles = () =>\n createStyles({\n ...detailsPanel,\n });\n\nexport interface MultiSelectionItem {\n action: () => void;\n label: string;\n disabled: boolean;\n icon: React.ReactNode;\n tooltip: string;\n}\n\ninterface IActionsListSectionProps {\n items: MultiSelectionItem[];\n title: string | React.ReactNode;\n classes: any;\n}\n\nconst ActionsListSection = ({\n items,\n classes,\n title,\n}: IActionsListSectionProps) => {\n return (\n \n
\n Current Tags:\n \n {currTagKeys.length === 0 ? (\n \n There are no tags for this object\n \n ) : (\n \n )}\n \n {currTagKeys.map((tagKey: string, index: number) => {\n const tag = get(currentTags, `${tagKey}`, \"\");\n if (tag !== \"\") {\n return (\n \n }\n onDelete={() => {\n onDeleteTag(tagKey, tag);\n }}\n />\n \n );\n }\n return null;\n })}\n \n
\n \n \n \n \n \n Add New Tag\n \n \n {\n setNewKey(e.target.value);\n }}\n />\n \n \n {\n setNewLabel(e.target.value);\n }}\n />\n \n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default withStyles(styles)(AddTagModal);\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, { useState } from \"react\";\nimport { Button } from \"mds\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n decodeURLString,\n deleteCookie,\n encodeURLString,\n getCookieValue,\n performDownload,\n} from \"../../../../../../common/utils\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport { InspectMenuIcon } from \"../../../../../../icons/SidebarMenus\";\nimport Grid from \"@mui/material/Grid\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { PasswordKeyIcon } from \"../../../../../../icons\";\nimport { Box, DialogContentText } from \"@mui/material\";\nimport KeyRevealer from \"../../../../Tools/KeyRevealer\";\nimport { setErrorSnackMessage } from \"../../../../../../systemSlice\";\nimport { useAppDispatch } from \"../../../../../../store\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n ...spacingUtils,\n });\n\ninterface IInspectObjectProps {\n classes: any;\n closeInspectModalAndRefresh: (refresh: boolean) => void;\n inspectOpen: boolean;\n inspectPath: string;\n volumeName: string;\n}\n\nconst InspectObject = ({\n classes,\n closeInspectModalAndRefresh,\n inspectOpen,\n inspectPath,\n volumeName,\n}: IInspectObjectProps) => {\n const dispatch = useAppDispatch();\n const onClose = () => closeInspectModalAndRefresh(false);\n const [isEncrypt, setIsEncrypt] = useState(true);\n const [decryptionKey, setDecryptionKey] = useState(\"\");\n const [insFileName, setInsFileName] = useState(\"\");\n\n if (!inspectPath) {\n return null;\n }\n const makeRequest = async (url: string) => {\n return await fetch(url, { method: \"GET\" });\n };\n\n const performInspect = async () => {\n const file = encodeURLString(inspectPath + \"/xl.meta\");\n const volume = encodeURLString(volumeName);\n\n const urlOfInspectApi = `/api/v1/admin/inspect?volume=${volume}&file=${file}&encrypt=${isEncrypt}`;\n\n makeRequest(urlOfInspectApi)\n .then(async (res) => {\n if (!res.ok) {\n const resErr: any = await res.json();\n\n dispatch(\n setErrorSnackMessage({\n errorMessage: resErr.message,\n detailedError: resErr.code,\n })\n );\n }\n const blob: Blob = await res.blob();\n\n //@ts-ignore\n const filename = res.headers.get(\"content-disposition\").split('\"')[1];\n const decryptKey = getCookieValue(filename) || \"\";\n\n performDownload(blob, filename);\n setInsFileName(filename);\n if (decryptKey === \"\") {\n onClose();\n return;\n }\n setDecryptionKey(decryptKey);\n })\n .catch((err) => {\n dispatch(setErrorSnackMessage(err));\n });\n };\n\n const onCloseDecKeyModal = () => {\n deleteCookie(insFileName);\n onClose();\n setDecryptionKey(\"\");\n };\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n };\n\n return (\n \n {!decryptionKey && (\n }\n title={`Inspect Object`}\n onClose={onClose}\n >\n \n \n )}\n {decryptionKey ? (\n }\n >\n \n \n This will be displayed only once. It cannot be recovered.\n \n Use secure medium to share this key.\n \n \n \n \n \n \n ) : null}\n \n );\n};\n\nexport default withStyles(styles)(InspectObject);\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, { useState } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport { Button } from \"mds\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { EditIcon } from \"../../../icons\";\nimport {\n containerForHeader,\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"../Buckets/ListBuckets/Objects/ObjectDetails/types\";\nimport { encodeURLString } from \"../../../common/utils\";\nimport { download } from \"../Buckets/ListBuckets/Objects/utils\";\nimport {\n cancelObjectInList,\n completeObject,\n failObject,\n setNewObject,\n updateProgress,\n} from \"./objectBrowserSlice\";\nimport { makeid, storeCallForObjectWithID } from \"./transferManager\";\nimport { useAppDispatch } from \"../../../store\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IRenameLongFilename {\n open: boolean;\n bucketName: string;\n internalPaths: string;\n currentItem: string;\n actualInfo: IFileInfo;\n closeModal: () => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...modalStyleUtils,\n ...formFieldStyles,\n ...spacingUtils,\n ...containerForHeader(theme.spacing(4)),\n })\n);\n\nconst RenameLongFileName = ({\n open,\n closeModal,\n currentItem,\n internalPaths,\n actualInfo,\n bucketName,\n}: IRenameLongFilename) => {\n const classes = useStyles();\n const dispatch = useAppDispatch();\n\n const [newFileName, setNewFileName] = useState(currentItem);\n const [acceptLongName, setAcceptLongName] = useState(false);\n\n const doDownload = (e: React.FormEvent) => {\n e.preventDefault();\n\n const identityDownload = encodeURLString(\n `${bucketName}-${\n actualInfo.name\n }-${new Date().getTime()}-${Math.random()}`\n );\n\n const ID = makeid(8);\n\n const downloadCall = download(\n bucketName,\n internalPaths,\n actualInfo.version_id,\n parseInt(actualInfo.size || \"0\"),\n newFileName,\n ID,\n (progress) => {\n dispatch(\n updateProgress({\n instanceID: identityDownload,\n progress: progress,\n })\n );\n },\n () => {\n dispatch(completeObject(identityDownload));\n },\n (msg: string) => {\n dispatch(failObject({ instanceID: identityDownload, msg }));\n },\n () => {\n dispatch(cancelObjectInList(identityDownload));\n }\n );\n\n storeCallForObjectWithID(ID, downloadCall);\n dispatch(\n setNewObject({\n ID,\n bucketName,\n done: false,\n instanceID: identityDownload,\n percentage: 0,\n prefix: newFileName,\n type: \"download\",\n waitingForFile: true,\n failed: false,\n cancelled: false,\n errorMessage: \"\",\n })\n );\n closeModal();\n };\n\n return (\n }\n >\n
\n The file you are trying to download has a long name.\n \n This can cause issues on Windows Systems by trimming the file name after\n download.\n \n We recommend to rename the file download\n
\n \n \n );\n};\n\nexport default RenameLongFileName;\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 { useSelector } from \"react-redux\";\nimport { Box } from \"@mui/material\";\nimport { withStyles } from \"@mui/styles\";\nimport { Button } from \"mds\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport get from \"lodash/get\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n actionsTray,\n buttonsStyles,\n detailsPanel,\n spacingUtils,\n textStyleUtils,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"../ObjectDetails/types\";\nimport { download, extensionPreview } from \"../utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\n\nimport {\n decodeURLString,\n encodeURLString,\n getClientOS,\n niceBytes,\n niceBytesInt,\n niceDaysInt,\n} from \"../../../../../../common/utils\";\nimport {\n IAM_SCOPES,\n permissionTooltipHelper,\n} from \"../../../../../../common/SecureComponent/permissions\";\nimport { AppState, useAppDispatch } from \"../../../../../../store\";\nimport {\n DeleteIcon,\n DownloadIcon,\n LegalHoldIcon,\n MetadataIcon,\n ObjectInfoIcon,\n PreviewIcon,\n RetentionIcon,\n ShareIcon,\n TagsIcon,\n VersionsIcon,\n} from \"../../../../../../icons\";\nimport { InspectMenuIcon } from \"../../../../../../icons/SidebarMenus\";\nimport api from \"../../../../../../common/api\";\nimport ShareFile from \"../ObjectDetails/ShareFile\";\nimport SetRetention from \"../ObjectDetails/SetRetention\";\nimport DeleteObject from \"../ListObjects/DeleteObject\";\nimport SetLegalHoldModal from \"../ObjectDetails/SetLegalHoldModal\";\nimport {\n hasPermission,\n SecureComponent,\n} from \"../../../../../../common/SecureComponent\";\nimport PreviewFileModal from \"../Preview/PreviewFileModal\";\nimport ObjectMetaData from \"../ObjectDetails/ObjectMetaData\";\nimport ActionsListSection from \"./ActionsListSection\";\nimport { displayFileIconName } from \"./utils\";\nimport TagsModal from \"../ObjectDetails/TagsModal\";\nimport InspectObject from \"./InspectObject\";\nimport Loader from \"../../../../Common/Loader/Loader\";\nimport { selDistSet } from \"../../../../../../systemSlice\";\nimport {\n makeid,\n storeCallForObjectWithID,\n} from \"../../../../ObjectBrowser/transferManager\";\nimport {\n cancelObjectInList,\n completeObject,\n failObject,\n setLoadingObjectInfo,\n setLoadingVersions,\n setNewObject,\n setSelectedVersion,\n setVersionsModeEnabled,\n updateProgress,\n} from \"../../../../ObjectBrowser/objectBrowserSlice\";\nimport RenameLongFileName from \"../../../../ObjectBrowser/RenameLongFilename\";\nimport TooltipWrapper from \"../../../../Common/TooltipWrapper/TooltipWrapper\";\n\nconst styles = () =>\n createStyles({\n ObjectDetailsTitle: {\n display: \"flex\",\n alignItems: \"center\",\n \"& .min-icon\": {\n width: 26,\n height: 26,\n minWidth: 26,\n minHeight: 26,\n },\n },\n objectNameContainer: {\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n alignItems: \"center\",\n marginLeft: 10,\n },\n headerForSection: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n paddingBottom: 15,\n borderBottom: \"#E2E2E2 2px solid\",\n fontWeight: \"bold\",\n fontSize: 18,\n color: \"#000\",\n margin: \"20px 22px\",\n },\n capitalizeFirst: {\n textTransform: \"capitalize\",\n },\n ...buttonsStyles,\n ...actionsTray,\n ...spacingUtils,\n ...textStyleUtils,\n ...detailsPanel,\n });\n\nconst emptyFile: IFileInfo = {\n is_latest: true,\n last_modified: \"\",\n legal_hold_status: \"\",\n name: \"\",\n retention_mode: \"\",\n retention_until_date: \"\",\n size: \"0\",\n tags: {},\n version_id: null,\n};\n\ninterface IObjectDetailPanelProps {\n classes: any;\n internalPaths: string;\n bucketName: string;\n versioning: boolean;\n locking: boolean;\n onClosePanel: (hardRefresh: boolean) => void;\n}\n\nconst ObjectDetailPanel = ({\n classes,\n internalPaths,\n bucketName,\n versioning,\n locking,\n onClosePanel,\n}: IObjectDetailPanelProps) => {\n const dispatch = useAppDispatch();\n\n const distributedSetup = useSelector(selDistSet);\n const versionsMode = useSelector(\n (state: AppState) => state.objectBrowser.versionsMode\n );\n const selectedVersion = useSelector(\n (state: AppState) => state.objectBrowser.selectedVersion\n );\n const loadingObjectInfo = useSelector(\n (state: AppState) => state.objectBrowser.loadingObjectInfo\n );\n\n const [shareFileModalOpen, setShareFileModalOpen] = useState(false);\n const [retentionModalOpen, setRetentionModalOpen] = useState(false);\n const [tagModalOpen, setTagModalOpen] = useState(false);\n const [legalholdOpen, setLegalholdOpen] = useState(false);\n const [inspectModalOpen, setInspectModalOpen] = useState(false);\n const [actualInfo, setActualInfo] = useState(null);\n const [allInfoElements, setAllInfoElements] = useState([]);\n const [objectToShare, setObjectToShare] = useState(null);\n const [versions, setVersions] = useState([]);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [previewOpen, setPreviewOpen] = useState(false);\n const [totalVersionsSize, setTotalVersionsSize] = useState(0);\n const [longFileOpen, setLongFileOpen] = useState(false);\n\n const internalPathsDecoded = decodeURLString(internalPaths) || \"\";\n const allPathData = internalPathsDecoded.split(\"/\");\n const currentItem = allPathData.pop() || \"\";\n\n // calculate object name to display\n let objectNameArray: string[] = [];\n if (actualInfo) {\n objectNameArray = actualInfo.name.split(\"/\");\n }\n\n useEffect(() => {\n if (distributedSetup && allInfoElements && allInfoElements.length >= 1) {\n let infoElement =\n allInfoElements.find((el: IFileInfo) => el.is_latest) || emptyFile;\n\n if (selectedVersion !== \"\") {\n infoElement =\n allInfoElements.find(\n (el: IFileInfo) => el.version_id === selectedVersion\n ) || emptyFile;\n }\n\n setActualInfo(infoElement);\n }\n }, [selectedVersion, distributedSetup, allInfoElements]);\n\n useEffect(() => {\n if (loadingObjectInfo && internalPaths !== \"\") {\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${internalPaths}${\n distributedSetup ? \"&with_versions=true\" : \"\"\n }`\n )\n .then((res: IFileInfo[]) => {\n const result = get(res, \"objects\", []);\n if (distributedSetup) {\n setAllInfoElements(result);\n setVersions(result);\n const tVersionSize = result.reduce(\n (acc: number, currValue: IFileInfo) => {\n if (currValue?.size) {\n return acc + currValue.size;\n }\n return acc;\n },\n 0\n );\n\n setTotalVersionsSize(tVersionSize);\n } else {\n setActualInfo(result[0]);\n setVersions([]);\n }\n\n dispatch(setLoadingObjectInfo(false));\n })\n .catch((error: ErrorResponseHandler) => {\n console.error(\"Error loading object details\", error);\n dispatch(setLoadingObjectInfo(false));\n });\n }\n }, [\n loadingObjectInfo,\n bucketName,\n internalPaths,\n dispatch,\n distributedSetup,\n selectedVersion,\n ]);\n\n let tagKeys: string[] = [];\n\n if (actualInfo && actualInfo.tags) {\n tagKeys = Object.keys(actualInfo.tags);\n }\n\n const openRetentionModal = () => {\n setRetentionModalOpen(true);\n };\n\n const closeRetentionModal = (updateInfo: boolean) => {\n setRetentionModalOpen(false);\n if (updateInfo) {\n dispatch(setLoadingObjectInfo(true));\n }\n };\n\n const shareObject = () => {\n setShareFileModalOpen(true);\n };\n\n const closeShareModal = () => {\n setObjectToShare(null);\n setShareFileModalOpen(false);\n };\n\n const closeFileOpen = () => {\n setLongFileOpen(false);\n };\n\n const downloadObject = (object: IFileInfo) => {\n const identityDownload = encodeURLString(\n `${bucketName}-${object.name}-${new Date().getTime()}-${Math.random()}`\n );\n\n if (\n object.name.length > 200 &&\n getClientOS().toLowerCase().includes(\"win\")\n ) {\n setLongFileOpen(true);\n return;\n }\n\n const ID = makeid(8);\n\n const downloadCall = download(\n bucketName,\n internalPaths,\n object.version_id,\n parseInt(object.size || \"0\"),\n null,\n ID,\n (progress) => {\n dispatch(\n updateProgress({\n instanceID: identityDownload,\n progress: progress,\n })\n );\n },\n () => {\n dispatch(completeObject(identityDownload));\n },\n (msg: string) => {\n dispatch(failObject({ instanceID: identityDownload, msg }));\n },\n () => {\n dispatch(cancelObjectInList(identityDownload));\n }\n );\n\n storeCallForObjectWithID(ID, downloadCall);\n dispatch(\n setNewObject({\n ID,\n bucketName,\n done: false,\n instanceID: identityDownload,\n percentage: 0,\n prefix: object.name,\n type: \"download\",\n waitingForFile: true,\n failed: false,\n cancelled: false,\n errorMessage: \"\",\n })\n );\n };\n\n const closeDeleteModal = (closeAndReload: boolean) => {\n setDeleteOpen(false);\n\n if (closeAndReload && selectedVersion === \"\") {\n onClosePanel(true);\n } else {\n dispatch(setLoadingVersions(true));\n dispatch(setSelectedVersion(\"\"));\n dispatch(setLoadingObjectInfo(true));\n }\n };\n\n const closeAddTagModal = (reloadObjectData: boolean) => {\n setTagModalOpen(false);\n if (reloadObjectData) {\n dispatch(setLoadingObjectInfo(true));\n }\n };\n\n const closeInspectModal = (reloadObjectData: boolean) => {\n setInspectModalOpen(false);\n if (reloadObjectData) {\n dispatch(setLoadingObjectInfo(true));\n }\n };\n\n const closeLegalholdModal = (reload: boolean) => {\n setLegalholdOpen(false);\n if (reload) {\n dispatch(setLoadingObjectInfo(true));\n }\n };\n\n const loaderForContainer = (\n