diff --git a/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx b/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx index df3ce6c10..2bceac454 100644 --- a/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx +++ b/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx @@ -44,7 +44,6 @@ import { CreateIcon } from "../../../../icons"; import { niceBytes } from "../../../../common/utils"; import { containerForHeader } from "../../Common/FormComponents/common/styleLibrary"; import { setErrorSnackMessage } from "../../../../actions"; -import SetAccessPolicy from "./SetAccessPolicy"; import SetRetentionConfig from "./SetRetentionConfig"; import AddEvent from "./AddEvent"; import DeleteEvent from "./DeleteEvent"; @@ -56,6 +55,9 @@ import PencilIcon from "../../Common/TableWrapper/TableActionIcons/PencilIcon"; import EnableVersioningModal from "./EnableVersioningModal"; import Typography from "@material-ui/core/Typography"; import UsageIcon from "../../../../icons/UsageIcon"; +import AddPolicy from "../../Policies/AddPolicy"; +import SetAccessPolicy from "./SetAccessPolicy"; +import { Policy } from "../../Policies/types"; const styles = (theme: Theme) => createStyles({ @@ -67,7 +69,6 @@ const styles = (theme: Theme) => overflow: "auto", flexDirection: "column", }, - addSideBar: { width: "320px", padding: "20px", @@ -219,6 +220,8 @@ const ViewBucket = ({ const [replicationRules, setReplicationRules] = useState< BucketReplicationRule[] >([]); + const [bucketPolicy, setBucketPolicy] = useState([]); + const [loadingPolicy, setLoadingPolicy] = useState(true); const [loadingBucket, setLoadingBucket] = useState(true); const [loadingEvents, setLoadingEvents] = useState(true); const [loadingVersioning, setLoadingVersioning] = useState(true); @@ -231,6 +234,7 @@ const ViewBucket = ({ ); const [curTab, setCurTab] = useState(0); const [addScreenOpen, setAddScreenOpen] = useState(false); + const [policyScreenOpen, setPolicyScreenOpen] = useState(false); const [ enableEncryptionScreenOpen, setEnableEncryptionScreenOpen, @@ -245,6 +249,7 @@ const ViewBucket = ({ const [retentionConfigOpen, setRetentionConfigOpen] = useState( false ); + const [policyEdit, setPolicyEdit] = useState(null); const [enableVersioningOpen, setEnableVersioningOpen] = useState( false ); @@ -369,6 +374,21 @@ const ViewBucket = ({ } }, [loadingReplication, setErrorSnackMessage, bucketName]); + useEffect(() => { + if (loadingPolicy) { + api + .invoke("GET", `/api/v1/bucket-policy/${bucketName}`) + .then((res: any) => { + setBucketPolicy(res.policies); + setLoadingPolicy(false); + }) + .catch((err: any) => { + setErrorSnackMessage(err); + setLoadingPolicy(false); + }); + } + }, [loadingPolicy, setErrorSnackMessage, bucketName]); + useEffect(() => { if (loadingSize) { api @@ -436,6 +456,18 @@ const ViewBucket = ({ setLoadingEncryption(true); }; + const closeAddModalAndRefresh = (refresh: boolean) => { + setPolicyScreenOpen(false); + + if (refresh) { + fetchPolicies(); + } + }; + + const fetchPolicies = () => { + setLoadingPolicy(true); + }; + const closeAddEventAndRefresh = () => { setAddScreenOpen(false); loadAllBucketData(); @@ -520,6 +552,14 @@ const ViewBucket = ({ }; const tableActions = [{ type: "delete", onClick: confirmDeleteEvent }]; + const viewAction = (row: any) => { + setPolicyScreenOpen(true); + setPolicyEdit(row); + }; + + const PolicyActions = [ + { type: "view", onClick: viewAction }, + ]; return ( @@ -545,6 +585,13 @@ const ViewBucket = ({ closeModalAndRefresh={closeSetAccessPolicy} /> )} + {policyScreenOpen && ( + + )} {retentionConfigOpen && ( )} + @@ -811,6 +859,16 @@ const ViewBucket = ({ /> )} + + +