diff --git a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/DesignConfigurations.jsx b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/DesignConfigurations.jsx index 9bc35f595c1..548522b64e8 100644 --- a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/DesignConfigurations.jsx +++ b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/DesignConfigurations.jsx @@ -603,13 +603,6 @@ export default function DesignConfigurations() { categories={api.categories} /> - - - )} + { settings && settings.orgAccessControlEnabled && ( + + + + )} { settings && !settings.portalConfigurationOnlyModeEnabled && ( diff --git a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/components/SharedOrganizations.jsx b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/components/SharedOrganizations.jsx index fa588b55576..f327ddc581a 100644 --- a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/components/SharedOrganizations.jsx +++ b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Configuration/components/SharedOrganizations.jsx @@ -19,16 +19,22 @@ import React, { useState, useEffect } from 'react'; import { styled } from '@mui/material/styles'; import PropTypes from 'prop-types'; -import TextField from '@mui/material/TextField'; import { FormattedMessage } from 'react-intl'; import Autocomplete from '@mui/material/Autocomplete'; import CheckBoxIcon from '@mui/icons-material/CheckBox'; import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank'; -import Checkbox from '@mui/material/Checkbox'; -import Box from '@mui/material/Box'; -import Tooltip from '@mui/material/Tooltip'; import HelpOutline from '@mui/icons-material/HelpOutline'; import API from 'AppData/api'; +import { + RadioGroup, + FormControlLabel, + FormLabel, + Radio, + TextField, + Checkbox, + Tooltip, + Box, +} from "@mui/material"; const PREFIX = 'SharedOrganizations'; @@ -39,9 +45,8 @@ const classes = { const StyledBox = styled(Box)(({ theme }) => ({ [`& .${classes.tooltip}`]: { - position: 'absolute', - right: theme.spacing(-4), top: theme.spacing(1), + marginLeft: theme.spacing(1), }, [`& .${classes.listItemText}`]: { @@ -62,90 +67,114 @@ const checkedIcon = ; function SharedOrganizations(props) { const [organizations, setOrganizations] = useState({}); const { api, configDispatcher } = props; + const [selectionMode, setSelectionMode] = useState("all"); useEffect(() => { API.getOrganizations().then((response) => setOrganizations(response.body)); + if (api.visibleOrganizations.includes("all")) { + setSelectionMode("all"); + } else if (api.visibleOrganizations.length === 0) { + setSelectionMode("none"); + } else { + setSelectionMode("select"); + } }, []); if (organizations && !organizations.list) { return null; } else if (organizations && organizations.list) { - const allOption = { organizationId: "all", displayName: "All Organizations" }; - const optionsList = [allOption, ...organizations.list]; - const handleChange = (event, newValue) => { - if (newValue.some((org) => org.organizationId === "all")) { + const optionsList = organizations.list; + const handleRadioChange = (event) => { + const { value } = event.target; + setSelectionMode(value); + if (value === "all") { configDispatcher({ action: "visibleOrganizations", value: ["all"] }); - } else if (newValue.length === 0) { + } else if (value === "none") { configDispatcher({ action: "visibleOrganizations", value: [] }); - } else { - configDispatcher({ - action: "visibleOrganizations", - value: newValue.map((org) => org.organizationId), - }); } }; + const handleDropdownChange = (event, newValue) => { + configDispatcher({ + action: "visibleOrganizations", + value: newValue.map((org) => org.organizationId), + }); + }; + return ( - - option.displayName} - isOptionEqualToValue={(option, value) => option.organizationId === value.organizationId} - value={ - api.visibleOrganizations.includes("all") - ? [allOption] - : organizations.list.filter((org) => api.visibleOrganizations.includes(org.organizationId)) - } - onChange={handleChange} - renderOption={(optionProps, option, { selected }) => ( -
  • - - {option.displayName} -
  • - )} - renderInput={(params) => ( - + + + - )} - /> - -

    - + +

    + +

    + + )} + aria-label='Shared Organizations' + placement='right-end' + interactive + className={classes.tooltip} + > + +
    +
    + + } label='All' /> + } label='None' /> + } label='Select' /> + + {selectionMode === "select" && ( + option.displayName} + isOptionEqualToValue={(option, value) => option.organizationId === value.organizationId} + value={organizations.list.filter((org) => + api.visibleOrganizations.includes(org.organizationId) + )} + onChange={handleDropdownChange} + renderOption={(optionProps, option, { selected }) => ( +
  • + -

    - - )} - aria-label='Shared Organizations' - placement='right-end' - interactive - className={classes.tooltip} - > - - + {option.displayName} +
  • + )} + renderInput={(params) => ( + + )} + /> + )}
    ); } diff --git a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/OrganizationSubscriptionPoliciesManage.jsx b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/OrganizationSubscriptionPoliciesManage.jsx index d6e84238c1d..1f563793280 100644 --- a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/OrganizationSubscriptionPoliciesManage.jsx +++ b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/OrganizationSubscriptionPoliciesManage.jsx @@ -38,7 +38,7 @@ import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank'; const PREFIX = 'OrganizationSubscriptionPoliciesManage'; const classes = { - subscriptionPoliciesPaper: `${PREFIX}-subscriptionPoliciesPaper`, + heading: `${PREFIX}-heading`, grid: `${PREFIX}-grid`, gridLabel: `${PREFIX}-gridLabel`, mainTitle: `${PREFIX}-mainTitle` @@ -49,9 +49,9 @@ const Root = styled('div')(( theme } ) => ({ - [`& .${classes.subscriptionPoliciesPaper}`]: { - marginTop: theme.spacing(2), - padding: theme.spacing(2), + [`& .${classes.heading}`]: { + marginTop: theme.spacing(3), + marginBottom: theme.spacing(2), }, [`& .${classes.grid}`]: { @@ -160,7 +160,9 @@ function OrganizationSubscriptionPoliciesManage(props) { return ( - Organization Specific Business Plans +
    + Organization Specific Business Plans +
    @@ -178,6 +180,7 @@ function OrganizationSubscriptionPoliciesManage(props) { option?.displayName ? diff --git a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/Subscriptions.jsx b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/Subscriptions.jsx index 4a0b5caebc5..1931cd1435a 100644 --- a/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/Subscriptions.jsx +++ b/portals/publisher/src/main/webapp/source/src/app/components/Apis/Details/Subscriptions/Subscriptions.jsx @@ -131,10 +131,12 @@ function Subscriptions(props) { .then((result) => { setSubscriptions(result.body.count); }); - restApi.organizations() - .then((result) => { - setOrganizations(result.body.list); - }) + if (settings && settings.orgAccessControlEnabled ) { + restApi.organizations() + .then((result) => { + setOrganizations(result.body.list); + }) + } setPolices([...api.policies]); setOriginalPolicies([...api.policies]); setOrganizationPolicies(api.organizationPolicies ? [...api.organizationPolicies] : []);