Skip to content
This repository was archived by the owner on Feb 20, 2024. It is now read-only.

Commit 239aeb3

Browse files
Merge pull request #50 from solace-iot-team/ep2
Ep2
2 parents f98d17a + fb37f21 commit 239aeb3

File tree

188 files changed

+8379
-1293
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

188 files changed

+8379
-1293
lines changed

ReleaseNotes.md

+21
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,27 @@
22

33
Solace Async API Management.
44

5+
## Version 0.4.0
6+
7+
* [API-M Admin & Developer Portal](https://github.com/solace-iot-team/async-apim/tree/main/apim-portal): 0.4.0
8+
* [API-M Server OpenAPI](https://github.com/solace-iot-team/async-apim/blob/main/apim-server/server/common/api.yml): 0.4.0
9+
* [API-M Server](https://github.com/solace-iot-team/async-apim/tree/main/apim-server): 0.4.0
10+
* [API-M Connector OpenAPI](https://github.com/solace-iot-team/platform-api): 0.13.1
11+
12+
**New Features:**
13+
- **Organization Settings**
14+
- added Event Portal Import configurations
15+
- **Organization Jobs**
16+
- added Job lists & viewer
17+
18+
**Enhancements:**
19+
- **API Products: Management**
20+
- added paging to list of api products
21+
22+
**Quickstart:**
23+
- **Event Portal**
24+
- added Event Portal 2 configuration as default
25+
526
## Version 0.3.6
627
* [API-M Admin & Developer Portal](https://github.com/solace-iot-team/async-apim/tree/main/apim-portal): 0.3.6
728
* [API-M Server OpenAPI](https://github.com/solace-iot-team/async-apim/blob/main/apim-server/server/common/api.yml): 0.3.2

apim-portal/package-lock.json

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apim-portal/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "async-apim-portal",
3-
"version": "0.3.6",
3+
"version": "0.4.0",
44
"description": "Solace Async API Management Portal",
55
"repository": {
66
"type": "git",
@@ -24,7 +24,7 @@
2424
},
2525
"dependencies": {
2626
"@asyncapi/react-component": "1.0.0-next.33",
27-
"@solace-iot-team/apim-connector-openapi-browser": "^0.11.1",
27+
"@solace-iot-team/apim-connector-openapi-browser": "^0.13.1",
2828
"async-mutex": "^0.3.2",
2929
"base-64": "^1.0.0",
3030
"dompurify": "^2.3.8",

apim-portal/src/App.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useHistory, Route, Switch } from 'react-router-dom';
33

44
import { Config } from "./Config";
55
import { UserContext } from './components/APContextProviders/APUserContextProvider';
6-
import { AuthContext } from "./components/AuthContextProvider/AuthContextProvider";
6+
import { AuthContext } from "./components/APContextProviders/AuthContextProvider";
77

88
// * Admin Portal *
99
import { AdminPortalHomePage } from "./admin-portal/pages/AdminPortalHomePage";

apim-portal/src/admin-portal/AdminPortalAppRoutes.tsx

+3-18
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,22 @@ import { ManageSystemSettingsPage } from "./pages/ManageSystemSettingsPage";
1010
import { MonitorSystemHealthPage } from "./pages/MonitorSystemHealthPage";
1111

1212
import { ManageAppsPage } from "./pages/ManageAppsPage";
13-
// import { ManageApisPage } from "./pages/ManageApisPage";
14-
1513
import { AdminPortalHealthCheckViewPage } from "./pages/AdminPortalHealthCheckViewPage";
1614
import { ManageOrgUsersPage } from "./pages/ManageOrgUsersPage";
1715
import { ManageOrgEnvironmentsPage } from "./pages/ManageOrgEnvironmentsPage";
1816
import { ManageOrgAssetMaintenanceApiProductsPage } from "./pages/ManageOrgAssetMaintenanceApiProductsPage";
1917
import { ManageOrgAssetMaintenanceApisPage } from "./pages/ManageOrgAssetMaintenanceApisPage";
2018
import { ManageOrgIntegrationExternalSystemsPage } from "./pages/ManageOrgIntegrationExternalSystemsPage";
2119
import { ManageOrgBusinessGroupsPage } from "./pages/ManageOrgBusinessGroupsPage";
22-
import { MonitorOrganizationStatusPage } from "./pages/MonitorOrganizationStatusPage";
2320
import { ManageOrganizationSettingsPage } from "./pages/ManageOrganizationSettingsPage";
21+
import { MonitorOrganizationStatusPage } from "./pages/MonitorOrganizationStatusPage";
22+
import { MonitorOrganizationJobsPage } from "./pages/MonitorOrganizationJobsPage";
2423

2524
import { ManageSystemUsersPage } from "./pages/ManageSystemUsersPage";
2625
import { ManageSystemOrganizationsPage } from "./pages/ManageSystemOrganizationsPage";
2726
import { ManageApisPage } from "./pages/ManageApisPage";
2827
import { ManageApiProductsPage } from "./pages/ManageApiProductsPage";
2928

30-
// DELETEME
31-
// import { ManageAppsPage as deleteme_ManageAppsPage} from './pages/deleteme.ManageAppsPage';
32-
// import { ManageApisPage as deleteme_ManageApisPage} from "./pages/deleteme_ManageApisPage";
33-
34-
35-
3629
export const AdminPortalAppRoutes = (): Array<JSX.Element> => {
3730
// const componentName = 'AdminPortalAppRoutes';
3831
return (
@@ -49,6 +42,7 @@ export const AdminPortalAppRoutes = (): Array<JSX.Element> => {
4942
/* Organization */
5043
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationSettings} component={ManageOrganizationSettingsPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationSettings} />,
5144
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.MonitorOrganizationStatus} component={MonitorOrganizationStatusPage} exact key={EUIAdminPortalResourcePaths.MonitorOrganizationStatus} />,
45+
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.MonitorOrganizationJobs} component={MonitorOrganizationJobsPage} exact key={EUIAdminPortalResourcePaths.MonitorOrganizationJobs} />,
5246
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationUsers} component={ManageOrgUsersPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationUsers} />,
5347
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationBusinessGroups} component={ManageOrgBusinessGroupsPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationBusinessGroups} />,
5448
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationEnvironments} component={ManageOrgEnvironmentsPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationEnvironments} />,
@@ -59,15 +53,6 @@ export const AdminPortalAppRoutes = (): Array<JSX.Element> => {
5953
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationApis} component={ManageApisPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationApis} />,
6054
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationApiProducts} component={ManageApiProductsPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationApiProducts} />,
6155
<ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.ManageOrganizationApps} component={ManageAppsPage} exact key={EUIAdminPortalResourcePaths.ManageOrganizationApps} />,
62-
63-
// // DELETEME
64-
// <ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.DELETEME_ManageOrganizationApps} component={deleteme_ManageAppsPage} exact key={EUIAdminPortalResourcePaths.DELETEME_ManageOrganizationApps} />,
65-
// <ProtectedRouteWithRbacAndOrgAccess path={EUIAdminPortalResourcePaths.deleteme_ManageOrganizationApis} component={deleteme_ManageApisPage} exact key={EUIAdminPortalResourcePaths.deleteme_ManageOrganizationApis} />,
66-
67-
68-
69-
70-
7156
]
7257
);
7358
}

apim-portal/src/admin-portal/components/AdminPortalSideBar/AdminPortalSideBar.tsx

+31-44
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import { useHistory } from 'react-router-dom';
44
import { MenuItem } from "primereact/components/menuitem/MenuItem";
55
import { PanelMenu } from 'primereact/panelmenu';
66

7-
import { AuthContext } from "../../../components/AuthContextProvider/AuthContextProvider";
7+
import { AuthContext } from "../../../components/APContextProviders/AuthContextProvider";
88
import { UserContext } from "../../../components/APContextProviders/APUserContextProvider";
99
import { APHealthCheckSummaryContext } from "../../../components/APHealthCheckSummaryContextProvider";
1010
import { OrganizationContext } from "../../../components/APContextProviders/APOrganizationContextProvider";
1111
import { EAPHealthCheckSuccess } from "../../../utils/APHealthCheck";
1212
import { AuthHelper } from "../../../auth/AuthHelper";
1313
import { EUIAdminPortalResourcePaths, EUICombinedResourcePaths, EUIDeveloperPortalResourcePaths } from '../../../utils/Globals';
1414
import { EAPOrganizationConfigStatus } from "../../../displayServices/APOrganizationsDisplayService/APOrganizationsDisplayService";
15+
import { APOperationMode } from "../../../utils/APOperationMode";
1516

1617
import '../../../components/APComponents.css';
1718

@@ -20,9 +21,10 @@ export interface IAdminPortalSideBarProps {
2021
}
2122

2223
export const AdminPortalSideBar: React.FC<IAdminPortalSideBarProps> = (props: IAdminPortalSideBarProps) => {
23-
// const componentName = 'AdminPortalSideBar';
24+
// const ComponentName = 'AdminPortalSideBar';
2425

2526
const history = useHistory();
27+
// const [configContext] = React.useContext(ConfigContext);
2628
const [authContext] = React.useContext(AuthContext);
2729
const [userContext] = React.useContext(UserContext);
2830
const [healthCheckSummaryContext] = React.useContext(APHealthCheckSummaryContext);
@@ -47,45 +49,40 @@ export const AdminPortalSideBar: React.FC<IAdminPortalSideBarProps> = (props: IA
4749
if( healthCheckSummaryContext.connectorHealthCheckSuccess === EAPHealthCheckSuccess.FAIL ) return true;
4850
return false;
4951
}
50-
52+
5153
const getApimMenuItems = (): Array<MenuItem> => {
5254
if(
5355
isDisabled(EUIAdminPortalResourcePaths.ManageOrganizationApps) &&
5456
isDisabled(EUIAdminPortalResourcePaths.ManageOrganizationApiProducts) &&
5557
isDisabled(EUIAdminPortalResourcePaths.ManageOrganizationApis)
56-
57-
// isDisabled(EUIAdminPortalResourcePaths.DELETEME_ManageOrganizationApps) &&
58-
// isDisabled(EUIAdminPortalResourcePaths.deleteme_ManageOrganizationApis)
59-
6058
) return [];
6159

62-
let _items: Array<MenuItem> = [
60+
let _items: Array<MenuItem> = [];
61+
_items.push(
6362
{
6463
label: 'Manage Apps',
6564
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationApps),
6665
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageOrganizationApps); }
6766
},
68-
// {
69-
// label: 'DELETEME:APPs',
70-
// disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.DELETEME_ManageOrganizationApps),
71-
// command: () => { navigateTo(EUIAdminPortalResourcePaths.DELETEME_ManageOrganizationApps); }
72-
// },
73-
{
74-
label: 'API Products',
75-
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationApiProducts),
76-
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageOrganizationApiProducts); }
77-
},
78-
{
79-
label: 'APIs',
80-
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationApis),
81-
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageOrganizationApis); }
82-
},
83-
// {
84-
// label: 'APIs',
85-
// disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.deleteme_ManageOrganizationApis),
86-
// command: () => { navigateTo(EUIAdminPortalResourcePaths.deleteme_ManageOrganizationApis); }
87-
// },
88-
];
67+
);
68+
if(APOperationMode.showApiProductsMenuItem()) {
69+
_items.push(
70+
{
71+
label: 'API Products',
72+
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationApiProducts),
73+
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageOrganizationApiProducts); }
74+
},
75+
);
76+
}
77+
if(APOperationMode.showApisMenuItem()) {
78+
_items.push(
79+
{
80+
label: 'APIs',
81+
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationApis),
82+
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageOrganizationApis); }
83+
},
84+
);
85+
}
8986
return _items;
9087
}
9188

@@ -157,16 +154,11 @@ export const AdminPortalSideBar: React.FC<IAdminPortalSideBarProps> = (props: IA
157154
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.MonitorOrganizationStatus),
158155
command: () => { navigateTo(EUIAdminPortalResourcePaths.MonitorOrganizationStatus); }
159156
},
160-
// {
161-
// label: 'DELETEME: Settings',
162-
// disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.deleteme_ManageOrganizationSettings),
163-
// command: () => { navigateTo(EUIAdminPortalResourcePaths.deleteme_ManageOrganizationSettings); }
164-
// },
165-
// {
166-
// label: 'DELETEME: Status',
167-
// disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.deleteme_MonitorOrganizationStatus),
168-
// command: () => { navigateTo(EUIAdminPortalResourcePaths.deleteme_MonitorOrganizationStatus); }
169-
// },
157+
{
158+
label: 'Jobs',
159+
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.MonitorOrganizationJobs),
160+
command: () => { navigateTo(EUIAdminPortalResourcePaths.MonitorOrganizationJobs); }
161+
},
170162
{
171163
label: 'Integration',
172164
disabled: isDisabledWithConnectorUnavailable(isDisabledWithoutOrg, EUIAdminPortalResourcePaths.ManageOrganizationIntegration),
@@ -199,11 +191,6 @@ export const AdminPortalSideBar: React.FC<IAdminPortalSideBarProps> = (props: IA
199191
disabled: isDisabledWithConnectorUnavailable(isDisabled, EUIAdminPortalResourcePaths.ManageSystemOrganizations),
200192
command: () => { navigateTo(EUIAdminPortalResourcePaths.ManageSystemOrganizations); }
201193
},
202-
// {
203-
// label: 'DELETEME: Organizations',
204-
// disabled: isDisabledWithConnectorUnavailable(isDisabled, EUIAdminPortalResourcePaths.deleteme_ManageSystemOrganizations),
205-
// command: () => { navigateTo(EUIAdminPortalResourcePaths.deleteme_ManageSystemOrganizations); }
206-
// },
207194
{
208195
label: 'Setup',
209196
items: [

apim-portal/src/admin-portal/components/MaintainApiProducts/ListMaintainApiProducts.tsx

-7
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,6 @@ export const ListMaintainApiProducts: React.FC<IListMaintainApiProductsProps> =
175175
return row.apLifecycleStageInfo.stage;
176176
}
177177
const renderManagedObjectDataTable = () => {
178-
// const dataKey = APAdminPortalApiProductsDisplayService.nameOf_ApEntityId('id');
179-
// const sortField = APAdminPortalApiProductsDisplayService.nameOf_ApEntityId('displayName');
180-
// const filterField = APAdminPortalApiProductsDisplayService.nameOf<TAPAdminPortalApiProductDisplay>('apSearchContent');
181-
// // const approvalTypeSortField = APAdminPortalApiProductsDisplayService.nameOf<TAPAdminPortalApiProductDisplay>('apApprovalType');
182-
// const accessLevelSortField = APAdminPortalApiProductsDisplayService.nameOf<TAPAdminPortalApiProductDisplay>('apAccessLevel');
183-
// const stateSortField = APAdminPortalApiProductsDisplayService.nameOf_ApLifecycleStageInfo('stage');
184-
// const businessGroupSortField = APAdminPortalApiProductsDisplayService.nameOf_ApBusinessGroupInfo_ApOwningBusinessGroupEntityId('displayName');
185178
const dataKey = APDisplayUtils.nameOf<TAPAdminPortalApiProductDisplay>('apEntityId.id');
186179
const sortField = APDisplayUtils.nameOf<TAPAdminPortalApiProductDisplay>('apEntityId.displayName');
187180
const filterField = APDisplayUtils.nameOf<TAPAdminPortalApiProductDisplay>('apSearchContent');

apim-portal/src/admin-portal/components/MaintainApiProducts/MaintainApiProducts.tsx

+7-4
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,17 @@ import APAdminPortalApiProductsDisplayService, {
1515
TAPAdminPortalApiProductDisplay_AllowedActions
1616
} from "../../displayServices/APAdminPortalApiProductsDisplayService";
1717
import { UserContext } from "../../../components/APContextProviders/APUserContextProvider";
18-
import { AuthContext } from "../../../components/AuthContextProvider/AuthContextProvider";
18+
import { AuthContext } from "../../../components/APContextProviders/AuthContextProvider";
1919
import { ListMaintainApiProducts } from "./ListMaintainApiProducts";
2020
import { ViewApiProduct } from "../ManageApiProducts/ViewApiProduct";
2121
import { ManageEditNewApiProduct } from "../ManageApiProducts/EditNewApiProduct/ManageEditNewApiProduct";
2222
import { EAction } from "../ManageApiProducts/ManageApiProductsCommon";
2323
import { DeleteApiProduct } from "../ManageApiProducts/DeleteApiProduct";
24+
import { E_DISPLAY_ADMIN_PORTAL_API_PRODUCT_SCOPE } from "../ManageApiProducts/DisplayApiProduct";
2425

2526
import '../../../components/APComponents.css';
2627
import "./MaintainApiProducts.css";
27-
import { E_DISPLAY_ADMIN_PORTAL_API_PRODUCT_SCOPE } from "../ManageApiProducts/DisplayApiProduct";
28+
import { APOperationMode } from "../../../utils/APOperationMode";
2829

2930
export interface IMaintainApiProductsProps {
3031
organizationEntityId: TAPEntityId;
@@ -104,7 +105,8 @@ export const MaintainApiProducts: React.FC<IMaintainApiProductsProps> = (props:
104105
apAdminPortalApiProductDisplay: apAdminPortalApiProductDisplay,
105106
authorizedResourcePathAsString: authContext.authorizedResourcePathsAsString,
106107
userId: userContext.apLoginUserDisplay.apEntityId.id,
107-
userBusinessGroupId: userContext.runtimeSettings.currentBusinessGroupEntityId?.id
108+
userBusinessGroupId: userContext.runtimeSettings.currentBusinessGroupEntityId?.id,
109+
apOperationsMode: APOperationMode.AP_OPERATIONS_MODE,
108110
}));
109111
}
110112
// * View Object *
@@ -115,7 +117,8 @@ export const MaintainApiProducts: React.FC<IMaintainApiProductsProps> = (props:
115117
apAdminPortalApiProductDisplay: apAdminPortalApiProductDisplay,
116118
authorizedResourcePathAsString: authContext.authorizedResourcePathsAsString,
117119
userId: userContext.apLoginUserDisplay.apEntityId.id,
118-
userBusinessGroupId: userContext.runtimeSettings.currentBusinessGroupEntityId?.id
120+
userBusinessGroupId: userContext.runtimeSettings.currentBusinessGroupEntityId?.id,
121+
apOperationsMode: APOperationMode.AP_OPERATIONS_MODE,
119122
}));
120123
setNewComponentState(E_COMPONENT_STATE.MANAGED_OBJECT_VIEW);
121124
}

0 commit comments

Comments
 (0)