diff --git a/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/index.js b/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/index.js
index 07b2222a9c..f0433aca5c 100644
--- a/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/index.js
+++ b/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/index.js
@@ -32,6 +32,16 @@ import AppNotInstalledDevicesReport from './scenes/Home/scenes/Reports/scenes/Ap
import Geo from './scenes/Home/scenes/Geo';
import EncryptionStatus from './scenes/Home/scenes/Reports/scenes/EncryptionStatus';
import OutdatedOSversionReport from './scenes/Home/scenes/Reports/scenes/OutdatedOSVersion';
+import Notifications from './scenes/Home/scenes/Notifications';
+import DeviceEnroll from './scenes/Home/scenes/Devices/scenes/Enroll';
+import Groups from './scenes/Home/scenes/Groups';
+import Users from './scenes/Home/scenes/Users';
+import Policies from './scenes/Home/scenes/Policies';
+import AddNewPolicy from './scenes/Home/scenes/Policies/scenes/AddNewPolicy';
+import Roles from './scenes/Home/scenes/Roles';
+import DeviceTypes from './scenes/Home/scenes/DeviceTypes';
+import Certificates from './scenes/Home/scenes/Certificates';
+import Devices from './scenes/Home/scenes/Devices';
const routes = [
{
@@ -44,26 +54,16 @@ const routes = [
exact: false,
component: Home,
routes: [
- // {
- // path: '/entgra/devices',
- // component: Devices,
- // exact: true,
- // },
- // {
- // path: '/entgra/devices/enroll',
- // component: DeviceEnroll,
- // exact: true,
- // },
- // {
- // path: '/entgra/devices',
- // component: Devices,
- // exact: true,
- // },
- // {
- // path: '/entgra/devices/enroll',
- // component: DeviceEnroll,
- // exact: true,
- // },
+ {
+ path: '/entgra/devices',
+ component: Devices,
+ exact: true,
+ },
+ {
+ path: '/entgra/devices/enroll',
+ component: DeviceEnroll,
+ exact: true,
+ },
{
path: '/entgra/geo',
component: Geo,
@@ -74,41 +74,46 @@ const routes = [
component: Reports,
exact: true,
},
- // {
- // path: '/entgra/groups',
- // component: Groups,
- // exact: true,
- // },
- // {
- // path: '/entgra/users',
- // component: Users,
- // exact: true,
- // },
- // {
- // path: '/entgra/policies',
- // component: Policies,
- // exact: true,
- // },
- // {
- // path: '/entgra/policy/add',
- // component: AddNewPolicy,
- // exact: true,
- // },
- // {
- // path: '/entgra/roles',
- // component: Roles,
- // exact: true,
- // },
- // {
- // path: '/entgra/devicetypes',
- // component: DeviceTypes,
- // exact: true,
- // },
- // {
- // path: '/entgra/certificates',
- // component: Certificates,
- // exact: true,
- // },
+ {
+ path: '/entgra/groups',
+ component: Groups,
+ exact: true,
+ },
+ {
+ path: '/entgra/users',
+ component: Users,
+ exact: true,
+ },
+ {
+ path: '/entgra/policies',
+ component: Policies,
+ exact: true,
+ },
+ {
+ path: '/entgra/policy/add',
+ component: AddNewPolicy,
+ exact: true,
+ },
+ {
+ path: '/entgra/roles',
+ component: Roles,
+ exact: true,
+ },
+ {
+ path: '/entgra/devicetypes',
+ component: DeviceTypes,
+ exact: true,
+ },
+ {
+ path: '/entgra/certificates',
+ component: Certificates,
+ exact: true,
+ },
+ {
+ path: '/entgra/notifications',
+ component: Notifications,
+ exact: true,
+ },
{
path: '/entgra/reports/enrollments',
component: EnrollmentsVsUnenrollmentsReport,
diff --git a/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/scenes/Home/components/NotificationsDrawer/index.js b/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/scenes/Home/components/NotificationsDrawer/index.js
new file mode 100644
index 0000000000..7421038e4e
--- /dev/null
+++ b/components/device-mgt/io.entgra.device.mgt.ui/react-app/src/scenes/Home/components/NotificationsDrawer/index.js
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2020, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
+ *
+ * Entgra (pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import React from 'react';
+import { Drawer, message, notification, Card, Button } from 'antd';
+import { withConfigContext } from '../../../../components/ConfigContext';
+import axios from 'axios';
+import { Link } from 'react-router-dom';
+
+// eslint-disable-next-line no-unused-vars
+let config = null;
+
+class NotificationsDrawer extends React.Component {
+ routes;
+
+ constructor(props) {
+ super(props);
+ this.routes = props.routes;
+ config = this.props.context;
+ this.state = {
+ visible: false,
+ data: [],
+ };
+ }
+
+ showDrawer = () => {
+ this.setState({
+ visible: true,
+ });
+ this.fetchNotifications();
+ };
+
+ onClose = () => {
+ this.setState({
+ visible: false,
+ });
+ };
+
+ fetchNotifications = () => {
+ const config = this.props.context;
+ axios
+ .get(
+ window.location.origin +
+ config.serverConfig.invoker.uri +
+ config.serverConfig.invoker.deviceMgt +
+ '/notifications',
+ )
+ .then(res => {
+ if (res.status === 200) {
+ this.setState({ data: res.data.data.notifications });
+ }
+ })
+ .catch(error => {
+ if (error.hasOwnProperty('response') && error.response.status === 401) {
+ // todo display a popop with error
+ message.error('You are not logged in');
+ window.location.href = window.location.origin + '/entgra/login';
+ } else {
+ notification.error({
+ message: 'There was a problem',
+ duration: 0,
+ description:
+ 'Error occurred while trying to load notifications list.',
+ });
+ }
+ });
+ };
+
+ clearNotifications = () => {
+ const config = this.props.context;
+ axios
+ .put(
+ window.location.origin +
+ config.serverConfig.invoker.uri +
+ config.serverConfig.invoker.deviceMgt +
+ '/notifications/clear-all',
+ { 'Content-Type': 'application/json; charset=utf-8' },
+ )
+ .then(res => {
+ if (res.status === 200) {
+ notification.success({
+ message: 'Done',
+ duration: 0,
+ description: 'All notifications are cleared.',
+ });
+ }
+ })
+ .catch(error => {
+ if (error.hasOwnProperty('response') && error.response.status === 401) {
+ // todo display a popop with error
+ message.error('You are not logged in');
+ window.location.href = window.location.origin + '/entgra/login';
+ } else {
+ notification.error({
+ message: 'There was a problem',
+ duration: 0,
+ description: 'Error occurred while trying to clear notifications.',
+ });
+ }
+ });
+ this.setState({
+ visible: false,
+ });
+ };
+
+ render() {
+ const { data } = this.state;
+ const notificationItemList = data.map(data => (
+ {data.description}{data.deviceType + ':' + data.deviceName}t
+