mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'feature/dmgt-react/file-structure' into 'master'
Change the file structure of the DeviceMgt React app Closes product-iots#326 See merge request entgra/carbon-device-mgt!446
This commit is contained in:
commit
0f5c62938a
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -39,7 +39,7 @@
|
||||
font-variant: normal;
|
||||
speak: none;
|
||||
text-decoration: inherit;
|
||||
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
text-transform: none;
|
||||
text-rendering: auto;
|
||||
@ -275,7 +275,7 @@
|
||||
}
|
||||
.fw-stroke:before,
|
||||
.fw-helper-stroke:after {
|
||||
text-shadow: -2px -2px 0 #ffffff,
|
||||
text-shadow: -2px -2px 0 #ffffff,
|
||||
2px -2px 0 #ffffff,
|
||||
-2px 2px 0 #ffffff,
|
||||
2px 2px 0 #ffffff;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,7 +22,7 @@ import RouteWithSubRoutes from './components/RouteWithSubRoutes';
|
||||
import { BrowserRouter as Router, Redirect, Switch } from 'react-router-dom';
|
||||
import axios from 'axios';
|
||||
import { Layout, Spin, Result, notification } from 'antd';
|
||||
import ConfigContext from './context/ConfigContext';
|
||||
import ConfigContext from './components/ConfigContext';
|
||||
|
||||
const { Content } = Layout;
|
||||
const loadingView = (
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -1,267 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 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 axios from 'axios';
|
||||
import { Icon, message, notification, Table, Tag, Tooltip } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
|
||||
let config = null;
|
||||
let apiUrl;
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: 'Device',
|
||||
dataIndex: 'name',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: 'Type',
|
||||
dataIndex: 'type',
|
||||
key: 'type',
|
||||
// eslint-disable-next-line react/display-name
|
||||
render: type => {
|
||||
const defaultPlatformIcons = config.defaultPlatformIcons;
|
||||
let icon = defaultPlatformIcons.default.icon;
|
||||
let color = defaultPlatformIcons.default.color;
|
||||
let theme = defaultPlatformIcons.default.theme;
|
||||
|
||||
if (defaultPlatformIcons.hasOwnProperty(type)) {
|
||||
icon = defaultPlatformIcons[type].icon;
|
||||
color = defaultPlatformIcons[type].color;
|
||||
theme = defaultPlatformIcons[type].theme;
|
||||
}
|
||||
|
||||
return (
|
||||
<span style={{ fontSize: 20, color: color, textAlign: 'center' }}>
|
||||
<Icon type={icon} theme={theme} />
|
||||
</span>
|
||||
);
|
||||
},
|
||||
// todo add filtering options
|
||||
},
|
||||
{
|
||||
title: 'Owner',
|
||||
dataIndex: 'enrolmentInfo',
|
||||
key: 'owner',
|
||||
render: enrolmentInfo => enrolmentInfo.owner,
|
||||
// todo add filtering options
|
||||
},
|
||||
{
|
||||
title: 'Ownership',
|
||||
dataIndex: 'enrolmentInfo',
|
||||
key: 'ownership',
|
||||
render: enrolmentInfo => enrolmentInfo.ownership,
|
||||
// todo add filtering options
|
||||
},
|
||||
{
|
||||
title: 'Status',
|
||||
dataIndex: 'enrolmentInfo',
|
||||
key: 'status',
|
||||
// eslint-disable-next-line react/display-name
|
||||
render: enrolmentInfo => {
|
||||
const status = enrolmentInfo.status.toLowerCase();
|
||||
let color = '#f9ca24';
|
||||
switch (status) {
|
||||
case 'active':
|
||||
color = '#badc58';
|
||||
break;
|
||||
case 'created':
|
||||
color = '#6ab04c';
|
||||
break;
|
||||
case 'removed':
|
||||
color = '#ff7979';
|
||||
break;
|
||||
case 'inactive':
|
||||
color = '#f9ca24';
|
||||
break;
|
||||
case 'blocked':
|
||||
color = '#636e72';
|
||||
break;
|
||||
}
|
||||
return <Tag color={color}>{status}</Tag>;
|
||||
},
|
||||
// todo add filtering options
|
||||
},
|
||||
{
|
||||
title: 'Last Updated',
|
||||
dataIndex: 'enrolmentInfo',
|
||||
key: 'dateOfLastUpdate',
|
||||
// eslint-disable-next-line react/display-name
|
||||
render: data => {
|
||||
const { dateOfLastUpdate } = data;
|
||||
const timeAgoString = getTimeAgo(dateOfLastUpdate);
|
||||
return (
|
||||
<Tooltip title={new Date(dateOfLastUpdate).toString()}>
|
||||
{timeAgoString}
|
||||
</Tooltip>
|
||||
);
|
||||
},
|
||||
// todo add filtering options
|
||||
},
|
||||
];
|
||||
|
||||
const getTimeAgo = time => {
|
||||
const timeAgo = new TimeAgo('en-US');
|
||||
return timeAgo.format(time);
|
||||
};
|
||||
|
||||
class ReportDeviceTable extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
config = this.props.context;
|
||||
TimeAgo.addLocale(en);
|
||||
this.state = {
|
||||
data: [],
|
||||
pagination: {},
|
||||
loading: false,
|
||||
selectedRows: [],
|
||||
paramsObj: {},
|
||||
};
|
||||
}
|
||||
|
||||
rowSelection = {
|
||||
onChange: (selectedRowKeys, selectedRows) => {
|
||||
this.setState({
|
||||
selectedRows: selectedRows,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.fetch();
|
||||
}
|
||||
|
||||
// Rerender component when parameters change
|
||||
componentDidUpdate(prevProps, prevState, snapshot) {
|
||||
if (prevProps.paramsObject !== this.props.paramsObject) {
|
||||
this.fetch();
|
||||
}
|
||||
}
|
||||
|
||||
// fetch data from api
|
||||
fetch = (params = {}) => {
|
||||
const config = this.props.context;
|
||||
this.setState({ loading: true });
|
||||
// get current page
|
||||
const currentPage = params.hasOwnProperty('page') ? params.page : 1;
|
||||
|
||||
this.props.paramsObject.offset = 10 * (currentPage - 1); // calculate the offset
|
||||
this.props.paramsObject.limit = 10;
|
||||
|
||||
const encodedExtraParams = Object.keys(this.props.paramsObject)
|
||||
.map(key => key + '=' + this.props.paramsObject[key])
|
||||
.join('&');
|
||||
|
||||
if (
|
||||
this.props.paramsObject.from == null &&
|
||||
this.props.paramsObject.to == null
|
||||
) {
|
||||
apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/devices?' +
|
||||
encodedExtraParams;
|
||||
} else {
|
||||
apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/reports/devices?' +
|
||||
encodedExtraParams;
|
||||
}
|
||||
|
||||
// send request to the invokerss
|
||||
axios
|
||||
.get(apiUrl)
|
||||
.then(res => {
|
||||
if (res.status === 200) {
|
||||
const pagination = { ...this.state.pagination };
|
||||
this.setState({
|
||||
loading: false,
|
||||
data: res.data.data.devices,
|
||||
pagination,
|
||||
});
|
||||
}
|
||||
})
|
||||
.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 devices.',
|
||||
});
|
||||
}
|
||||
|
||||
this.setState({ loading: false });
|
||||
});
|
||||
};
|
||||
|
||||
handleTableChange = (pagination, filters, sorter) => {
|
||||
const pager = { ...this.state.pagination };
|
||||
pager.current = pagination.current;
|
||||
this.setState({
|
||||
pagination: pager,
|
||||
});
|
||||
this.fetch({
|
||||
results: pagination.pageSize,
|
||||
page: pagination.current,
|
||||
sortField: sorter.field,
|
||||
sortOrder: sorter.order,
|
||||
...filters,
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { data, pagination, loading } = this.state;
|
||||
return (
|
||||
<div>
|
||||
<Table
|
||||
columns={columns}
|
||||
rowKey={record =>
|
||||
record.deviceIdentifier +
|
||||
record.enrolmentInfo.owner +
|
||||
record.enrolmentInfo.ownership
|
||||
}
|
||||
dataSource={data}
|
||||
pagination={{
|
||||
...pagination,
|
||||
size: 'small',
|
||||
// position: "top",
|
||||
showTotal: (total, range) =>
|
||||
`showing ${range[0]}-${range[1]} of ${total} devices`,
|
||||
// showQuickJumper: true
|
||||
}}
|
||||
loading={loading}
|
||||
onChange={this.handleTableChange}
|
||||
rowSelection={this.rowSelection}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(ReportDeviceTable);
|
||||
@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 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 { Select } from 'antd';
|
||||
|
||||
class Filter extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
selectedItem: null,
|
||||
};
|
||||
}
|
||||
|
||||
// Send updated filter value to Reports.js
|
||||
onChange = value => {
|
||||
this.setState({ selectedItem: value }, () => {
|
||||
if (this.props.dropDownName == 'Device Status') {
|
||||
this.props.updateFiltersValue(this.state.selectedItem, 'Device Status');
|
||||
} else {
|
||||
this.props.updateFiltersValue(
|
||||
this.state.selectedItem,
|
||||
'Device Ownership',
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
// Dynamically generate dropdown items from dropDownItems array
|
||||
let item = this.props.dropDownItems.map(data => (
|
||||
<Select.Option value={data} key={data}>
|
||||
{data}
|
||||
</Select.Option>
|
||||
));
|
||||
return (
|
||||
<Select
|
||||
showSearch
|
||||
style={{ width: 200 }}
|
||||
placeholder={this.props.dropDownName}
|
||||
optionFilterProp="children"
|
||||
onChange={this.onChange}
|
||||
filterOption={(input, option) =>
|
||||
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||
}
|
||||
>
|
||||
{item}
|
||||
</Select>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Filter;
|
||||
@ -1,45 +0,0 @@
|
||||
import React from 'react';
|
||||
|
||||
import { Card, Col } from 'antd';
|
||||
|
||||
class CountWidget extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.routes = props.routes;
|
||||
this.state = {
|
||||
statArray: [],
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.setState({ statArray: this.props.statArray });
|
||||
console.log('$$$$');
|
||||
console.log(this.props.statArray);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { statArray } = this.state;
|
||||
|
||||
let card = statArray.map(data => (
|
||||
<Col key={data.item} span={6}>
|
||||
<Card
|
||||
key={data.item}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<h2>
|
||||
<b>{data.item}</b>
|
||||
</h2>
|
||||
<h1>{data.count}</h1>
|
||||
</div>
|
||||
</Card>
|
||||
</Col>
|
||||
));
|
||||
|
||||
return <div>{card}</div>;
|
||||
}
|
||||
}
|
||||
|
||||
export default CountWidget;
|
||||
@ -1,323 +0,0 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
Chart,
|
||||
Geom,
|
||||
Axis,
|
||||
Tooltip,
|
||||
Coord,
|
||||
Label,
|
||||
Legend,
|
||||
Guide,
|
||||
} from 'bizcharts';
|
||||
import DataSet from '@antv/data-set';
|
||||
import axios from 'axios';
|
||||
import { message, notification } from 'antd';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
|
||||
let config = null;
|
||||
|
||||
class PieChart extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
config = this.props.context;
|
||||
this.state = {
|
||||
loading: true,
|
||||
statArray: [],
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { reportData } = this.props;
|
||||
let params = {
|
||||
status: reportData.params[0],
|
||||
from: reportData.duration[0],
|
||||
to: reportData.duration[1],
|
||||
};
|
||||
|
||||
const urlSet = {
|
||||
paramsList: reportData.params,
|
||||
duration: reportData.duration,
|
||||
};
|
||||
|
||||
if (reportData.params[0] === 'Enrollments') {
|
||||
this.getEnrollmentsVsUnenrollmentsCount(params, urlSet);
|
||||
} else if (reportData.params[0] === 'BYOD') {
|
||||
this.getEnrollmentTypeCount(params, urlSet);
|
||||
} else {
|
||||
this.getCount(params, urlSet);
|
||||
}
|
||||
}
|
||||
|
||||
onChartChange = data => {
|
||||
this.props.onClickPieChart(data);
|
||||
};
|
||||
|
||||
statArray = [];
|
||||
|
||||
// Call count APIs and get count for given parameters, then create data object to build pie chart
|
||||
getCount = (params, urlSet) => {
|
||||
this.setState({ loading: true });
|
||||
|
||||
let { statArray } = this.state;
|
||||
|
||||
const urlArray = [];
|
||||
|
||||
urlSet.paramsList.map(data => {
|
||||
const paramsObj = {
|
||||
status: data,
|
||||
from: urlSet.duration[0],
|
||||
to: urlSet.duration[1],
|
||||
};
|
||||
const encodedExtraParams = Object.keys(paramsObj)
|
||||
.map(key => key + '=' + paramsObj[key])
|
||||
.join('&');
|
||||
const apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/reports/devices/count?' +
|
||||
encodedExtraParams;
|
||||
|
||||
urlArray.push(axios.get(apiUrl, data));
|
||||
});
|
||||
|
||||
axios
|
||||
.all(urlArray)
|
||||
.then(res => {
|
||||
res.map(response => {
|
||||
if (response.status === 200) {
|
||||
let countData = {
|
||||
item: response.config[0],
|
||||
// eslint-disable-next-line radix
|
||||
count: parseInt(response.data.data),
|
||||
};
|
||||
statArray.push(countData);
|
||||
}
|
||||
});
|
||||
this.setState({ statArray });
|
||||
})
|
||||
.catch(error => {
|
||||
if (error.hasOwnProperty('response') && error.response.status === 401) {
|
||||
// todo display a popup 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 get device count.',
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Call count APIs and get count for given parameters, then create data object to build pie chart
|
||||
getEnrollmentsVsUnenrollmentsCount = (params, urlSet) => {
|
||||
this.setState({ loading: true });
|
||||
|
||||
let { statArray } = this.state;
|
||||
|
||||
const urlArray = [];
|
||||
|
||||
urlSet.paramsList.map(data => {
|
||||
const paramsObj = {
|
||||
from: urlSet.duration[0],
|
||||
to: urlSet.duration[1],
|
||||
};
|
||||
const encodedExtraParams = Object.keys(paramsObj)
|
||||
.map(key => key + '=' + paramsObj[key])
|
||||
.join('&');
|
||||
|
||||
let apiUrl;
|
||||
if (data === 'Enrollments') {
|
||||
apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/reports/devices/count?status=ACTIVE&status=INACTIVE&' +
|
||||
encodedExtraParams;
|
||||
} else {
|
||||
apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/reports/devices/count?status=REMOVED&' +
|
||||
encodedExtraParams;
|
||||
}
|
||||
|
||||
urlArray.push(axios.get(apiUrl, data));
|
||||
});
|
||||
|
||||
axios
|
||||
.all(urlArray)
|
||||
.then(res => {
|
||||
res.map(response => {
|
||||
if (response.status === 200) {
|
||||
let countData = {
|
||||
item: response.config[0],
|
||||
// eslint-disable-next-line radix
|
||||
count: parseInt(response.data.data),
|
||||
};
|
||||
statArray.push(countData);
|
||||
}
|
||||
});
|
||||
this.setState({ statArray });
|
||||
})
|
||||
.catch(error => {
|
||||
if (error.hasOwnProperty('response') && error.response.status === 401) {
|
||||
// todo display a popup 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 get device count.',
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Call count APIs and get count for given parameters, then create data object to build pie chart
|
||||
getEnrollmentTypeCount = (params, urlSet) => {
|
||||
this.setState({ loading: true });
|
||||
|
||||
let { statArray } = this.state;
|
||||
|
||||
const urlArray = [];
|
||||
|
||||
urlSet.paramsList.map(data => {
|
||||
const paramsObj = {
|
||||
ownership: data,
|
||||
from: urlSet.duration[0],
|
||||
to: urlSet.duration[1],
|
||||
};
|
||||
const encodedExtraParams = Object.keys(paramsObj)
|
||||
.map(key => key + '=' + paramsObj[key])
|
||||
.join('&');
|
||||
const apiUrl =
|
||||
window.location.origin +
|
||||
config.serverConfig.invoker.uri +
|
||||
config.serverConfig.invoker.deviceMgt +
|
||||
'/reports/devices/count?' +
|
||||
encodedExtraParams;
|
||||
|
||||
urlArray.push(axios.get(apiUrl, data));
|
||||
});
|
||||
|
||||
axios
|
||||
.all(urlArray)
|
||||
.then(res => {
|
||||
res.map(response => {
|
||||
if (response.status === 200) {
|
||||
let countData = {
|
||||
item: response.config[0],
|
||||
// eslint-disable-next-line radix
|
||||
count: parseInt(response.data.data),
|
||||
};
|
||||
statArray.push(countData);
|
||||
}
|
||||
});
|
||||
this.setState({ statArray });
|
||||
})
|
||||
.catch(error => {
|
||||
if (error.hasOwnProperty('response') && error.response.status === 401) {
|
||||
// todo display a popup 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 get device count.',
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { DataView } = DataSet;
|
||||
const { Html } = Guide;
|
||||
const { statArray } = this.state;
|
||||
|
||||
const dv = new DataView();
|
||||
dv.source(statArray).transform({
|
||||
type: 'percent',
|
||||
field: 'count',
|
||||
dimension: 'item',
|
||||
as: 'percent',
|
||||
});
|
||||
const cols = {
|
||||
percent: {
|
||||
formatter: val => {
|
||||
val = val * 100 + '%';
|
||||
return val;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Chart
|
||||
height={window.innerHeight / 2}
|
||||
data={dv}
|
||||
scale={cols}
|
||||
padding={[20, 25, 20, 20]}
|
||||
forceFit
|
||||
onPlotClick={this.onChartChange}
|
||||
animate={true}
|
||||
>
|
||||
<Coord type={'theta'} radius={0.75} innerRadius={0.6} />
|
||||
<Axis name="percent" />
|
||||
<Legend
|
||||
position="right"
|
||||
offsetY={-window.innerHeight / 2 + 120}
|
||||
offsetX={-100}
|
||||
/>
|
||||
<Tooltip
|
||||
showTitle={false}
|
||||
itemTpl='<li><span style="background-color:{color};" class="g2-tooltip-marker"></span>{name}: {value}</li>'
|
||||
/>
|
||||
<Guide>
|
||||
<Html
|
||||
position={['50%', '50%']}
|
||||
html='<div style="color:#8c8c8c;font-size:1.16em;text-align: center;width: 10em;">Total<br><span style="color:#262626;font-size:2.5em">200</span>台</div>'
|
||||
alignX="middle"
|
||||
alignY="middle"
|
||||
/>
|
||||
</Guide>
|
||||
<div onClick={this.clicked}>
|
||||
<Geom
|
||||
type="intervalStack"
|
||||
position="percent"
|
||||
color="item"
|
||||
tooltip={[
|
||||
'item*percent',
|
||||
(item, percent) => {
|
||||
percent = percent * 100 + '%';
|
||||
return {
|
||||
name: item,
|
||||
value: percent,
|
||||
};
|
||||
},
|
||||
]}
|
||||
style={{
|
||||
lineWidth: 1,
|
||||
stroke: '#fff',
|
||||
}}
|
||||
>
|
||||
<Label
|
||||
content="percent"
|
||||
formatter={(val, item) => {
|
||||
return item.point.item + ': ' + val;
|
||||
}}
|
||||
/>
|
||||
</Geom>
|
||||
</div>
|
||||
</Chart>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(PieChart);
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -42,4 +42,4 @@
|
||||
|
||||
.ant-input-affix-wrapper .ant-input{
|
||||
min-height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
~ Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
~ 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -18,20 +18,18 @@
|
||||
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import * as serviceWorker from './serviceWorker';
|
||||
import * as serviceWorker from './services/serviceWorkers/serviceWorker';
|
||||
import App from './App';
|
||||
import Login from './pages/Login';
|
||||
import Dashboard from './pages/Dashboard/Dashboard';
|
||||
import Login from './scenes/Login';
|
||||
import Home from './scenes/Home';
|
||||
import './index.css';
|
||||
import Reports from './pages/Dashboard/Reports/Reports';
|
||||
import Geo from './pages/Dashboard/Geo/Geo';
|
||||
import EnrollmentsVsUnenrollmentsReport from './components/Reports/Templates/EnrollmentsVsUnenrollmentsReport';
|
||||
import EnrollmentTypeReport from './components/Reports/Templates/EnrollmentTypeReport';
|
||||
import PolicyReport from './components/Reports/Templates/PolicyReport';
|
||||
import DeviceStatusReport from './components/Reports/Templates/DeviceStatusReport';
|
||||
import PolicyReportHome from './pages/Dashboard/Reports/PolicyReportHome';
|
||||
import ReportDurationItemList from './pages/Dashboard/Reports/ReportDurationItemList';
|
||||
import AppNotInstalledDevicesReport from './components/Reports/Templates/AppNotInstalledDevicesReport';
|
||||
import Reports from './scenes/Home/scenes/Reports';
|
||||
import EnrollmentsVsUnenrollmentsReport from './scenes/Home/scenes/Reports/scenes/EnrolmentVsUnenrollments';
|
||||
import EnrollmentTypeReport from './scenes/Home/scenes/Reports/scenes/EnrollmentType';
|
||||
import PolicyReport from './scenes/Home/scenes/Reports/scenes/PolicyCompliance';
|
||||
import DeviceStatusReport from './scenes/Home/scenes/Reports/scenes/DeviceStatus';
|
||||
import AppNotInstalledDevicesReport from './scenes/Home/scenes/Reports/scenes/AppNotInstalledDevices';
|
||||
import Geo from './scenes/Home/scenes/Geo';
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@ -42,8 +40,23 @@ const routes = [
|
||||
{
|
||||
path: '/entgra',
|
||||
exact: false,
|
||||
component: Dashboard,
|
||||
component: Home,
|
||||
routes: [
|
||||
// {
|
||||
// path: '/entgra/devices',
|
||||
// component: Devices,
|
||||
// exact: true,
|
||||
// },
|
||||
// {
|
||||
// path: '/entgra/devices/enroll',
|
||||
// component: DeviceEnroll,
|
||||
// exact: true,
|
||||
// },
|
||||
// {
|
||||
// path: '/entgra/geo',
|
||||
// component: Geo,
|
||||
// exact: true,
|
||||
// },
|
||||
// {
|
||||
// path: '/entgra/devices',
|
||||
// component: Devices,
|
||||
@ -99,11 +112,6 @@ const routes = [
|
||||
// component: Certificates,
|
||||
// exact: true,
|
||||
// },
|
||||
{
|
||||
path: '/entgra/reports/list',
|
||||
component: ReportDurationItemList,
|
||||
exact: true,
|
||||
},
|
||||
{
|
||||
path: '/entgra/reports/enrollments',
|
||||
component: EnrollmentsVsUnenrollmentsReport,
|
||||
@ -114,11 +122,6 @@ const routes = [
|
||||
component: EnrollmentTypeReport,
|
||||
exact: true,
|
||||
},
|
||||
{
|
||||
path: '/entgra/reports/policy',
|
||||
component: PolicyReportHome,
|
||||
exact: true,
|
||||
},
|
||||
{
|
||||
path: '/entgra/reports/policy/compliance',
|
||||
component: PolicyReport,
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
|
||||
<g fill="#61DAFB">
|
||||
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
|
||||
<circle cx="420.9" cy="296.5" r="45.7"/>
|
||||
<path d="M520.5 78.1z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@ -1,185 +0,0 @@
|
||||
/*
|
||||
* 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 { Icon, Col, Row, Card } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
class PolicyReportHome extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {};
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<div style={{ borderRadius: 5 }}>
|
||||
<Row gutter={16}>
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/policy/compliance',
|
||||
data: {
|
||||
name: 'all_policy_compliance_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Policy Compliance Report</b>
|
||||
</h2>
|
||||
<p>Policy compliance details of all enrolled devices</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/enrollments',
|
||||
data: {
|
||||
name: 'enrollments_vs_unenrollments_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Enrollments vs Unenrollments</b>
|
||||
</h2>
|
||||
<p>Details on device enrollments vs unenrollments</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/device-status',
|
||||
data: {
|
||||
name: 'enrollment_status_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Device Status Report</b>
|
||||
</h2>
|
||||
<p>Report based on device status</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/enrollment-type',
|
||||
data: {
|
||||
name: 'enrollemt_type_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Device Type Report</b>
|
||||
</h2>
|
||||
<p>Report for all device types</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/app-not-installed',
|
||||
data: {
|
||||
name: 'app_not_installed_devices_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>App NOT Installed Devices Report</b>
|
||||
</h2>
|
||||
<p>Report for all device types</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
</Row>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default PolicyReportHome;
|
||||
@ -1,329 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 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 { Icon, Col, Row, Card, PageHeader, Breadcrumb } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import moment from 'moment';
|
||||
|
||||
class ReportDurationItemList extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
reportParams: ['ACTIVE', 'INACTIVE', 'REMOVED'],
|
||||
enrollmentsVsUnenrollmentsParams: ['Enrollments', 'Unenrollments'],
|
||||
enrollmentTypeParams: ['BYOD', 'COPE'],
|
||||
};
|
||||
}
|
||||
|
||||
// Array for pre defined date durations
|
||||
durationItemArray = [
|
||||
{
|
||||
name: 'Daily Report',
|
||||
description: 'Report of today',
|
||||
duration: [
|
||||
moment().format('YYYY-MM-DD'),
|
||||
moment()
|
||||
.add(1, 'days')
|
||||
.format('YYYY-MM-DD'),
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Weekly Report',
|
||||
description: 'Report of last 7 days',
|
||||
duration: [
|
||||
moment()
|
||||
.subtract(6, 'days')
|
||||
.format('YYYY-MM-DD'),
|
||||
moment()
|
||||
.add(1, 'days')
|
||||
.format('YYYY-MM-DD'),
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Monthly Report',
|
||||
description: 'Report of last month',
|
||||
duration: [
|
||||
moment()
|
||||
.subtract(29, 'days')
|
||||
.format('YYYY-MM-DD'),
|
||||
moment()
|
||||
.add(1, 'days')
|
||||
.format('YYYY-MM-DD'),
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// Map durationItemArray and additional parameters to antd cards
|
||||
mapDurationCards = data => {
|
||||
return this.durationItemArray.map(item => (
|
||||
<Col key={item.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/policy',
|
||||
reportData: {
|
||||
duration: item.duration,
|
||||
data: data,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={item.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>{item.name}</b>
|
||||
</h2>
|
||||
<p>{item.description}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
};
|
||||
|
||||
itemAllPolicyCompliance = this.durationItemArray.map(data => (
|
||||
<Col key={data.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/policyreport',
|
||||
reportData: {
|
||||
duration: data.duration,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={data.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon type="desktop" style={{ fontSize: '25px', color: '#08c' }} />
|
||||
<h2>
|
||||
<b>{data.name}</b>
|
||||
</h2>
|
||||
<p>{data.description}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
|
||||
itemPerPolicyCompliance = this.durationItemArray.map(data => (
|
||||
<Col key={data.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/policyreport',
|
||||
reportData: {
|
||||
duration: data.duration,
|
||||
policyId: 6,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={data.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon type="desktop" style={{ fontSize: '25px', color: '#08c' }} />
|
||||
<h2>
|
||||
<b>{data.name}</b>
|
||||
</h2>
|
||||
<p>{data.description}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
|
||||
render() {
|
||||
const { data } = this.props.location;
|
||||
|
||||
let itemStatus = this.durationItemArray.map(data => (
|
||||
<Col key={data.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/devicestatus',
|
||||
reportData: {
|
||||
duration: data.duration,
|
||||
reportType: data.reportType,
|
||||
params: this.state.reportParams,
|
||||
paramsType: data.paramsType,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={data.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>{data.name}</b>
|
||||
</h2>
|
||||
<p>{data.description}</p>
|
||||
{/* <p>{data.duration}</p>*/}
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
|
||||
let itemEnrollmentsVsUnenrollments = this.durationItemArray.map(data => (
|
||||
<Col key={data.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/enrollmentsvsunenrollments',
|
||||
reportData: {
|
||||
duration: data.duration,
|
||||
reportType: data.reportType,
|
||||
params: this.state.enrollmentsVsUnenrollmentsParams,
|
||||
paramsType: data.paramsType,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={data.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>{data.name}</b>
|
||||
</h2>
|
||||
<p>{data.description}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
|
||||
let itemEnrollmentType = this.durationItemArray.map(data => (
|
||||
<Col key={data.name} span={6}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/enrollmenttype',
|
||||
reportData: {
|
||||
duration: data.duration,
|
||||
reportType: data.reportType,
|
||||
params: this.state.enrollmentTypeParams,
|
||||
paramsType: data.paramsType,
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
key={data.name}
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>{data.name}</b>
|
||||
</h2>
|
||||
<p>{data.description}</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
));
|
||||
|
||||
let cardItem = this.itemAllPolicyCompliance;
|
||||
|
||||
switch (data.name) {
|
||||
case 'all_policy_compliance_report':
|
||||
cardItem = this.itemAllPolicyCompliance;
|
||||
// cardItem = this.mapDurationCards({});
|
||||
break;
|
||||
case 'per_policy_compliance_report':
|
||||
cardItem = this.itemPerPolicyCompliance;
|
||||
// cardItem = this.mapDurationCards({
|
||||
// policyId: 6,
|
||||
// });
|
||||
break;
|
||||
case 'enrollments_vs_unenrollments_report':
|
||||
cardItem = itemEnrollmentsVsUnenrollments;
|
||||
break;
|
||||
case 'enrollment_status_report':
|
||||
cardItem = itemStatus;
|
||||
break;
|
||||
case 'enrollemt_type_report':
|
||||
cardItem = itemEnrollmentType;
|
||||
break;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div>
|
||||
<PageHeader style={{ paddingTop: 0 }}>
|
||||
<Breadcrumb style={{ paddingBottom: 16 }}>
|
||||
<Breadcrumb.Item>
|
||||
<Link to="/entgra">
|
||||
<Icon type="home" /> Home
|
||||
</Link>
|
||||
</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>Reports</Breadcrumb.Item>
|
||||
</Breadcrumb>
|
||||
<div className="wrap">
|
||||
<h3>Reports</h3>
|
||||
<div style={{ borderRadius: 5 }}>
|
||||
<Row gutter={16}>{cardItem}</Row>
|
||||
</div>
|
||||
</div>
|
||||
</PageHeader>
|
||||
<div
|
||||
style={{ background: '#f0f2f5', padding: 24, minHeight: 720 }}
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default ReportDurationItemList;
|
||||
@ -1,84 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 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 { PageHeader, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import PolicyReportHome from './PolicyReportHome';
|
||||
|
||||
class Reports extends React.Component {
|
||||
routes;
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.routes = props.routes;
|
||||
this.state = {
|
||||
paramsObject: {},
|
||||
};
|
||||
}
|
||||
// Get modified value from datepicker and set it to paramsObject
|
||||
updateDurationValue = (modifiedFromDate, modifiedToDate) => {
|
||||
let tempParamObj = this.state.paramsObject;
|
||||
tempParamObj.from = modifiedFromDate;
|
||||
tempParamObj.to = modifiedToDate;
|
||||
this.setState({ paramsObject: tempParamObj });
|
||||
};
|
||||
|
||||
// Get modified value from filters and set it to paramsObject
|
||||
updateFiltersValue = (modifiedValue, filterType) => {
|
||||
let tempParamObj = this.state.paramsObject;
|
||||
if (filterType == 'Device Status') {
|
||||
tempParamObj.status = modifiedValue;
|
||||
if (modifiedValue == 'ALL' && tempParamObj.status) {
|
||||
delete tempParamObj.status;
|
||||
}
|
||||
} else {
|
||||
tempParamObj.ownership = modifiedValue;
|
||||
if (modifiedValue == 'ALL' && tempParamObj.ownership) {
|
||||
delete tempParamObj.ownership;
|
||||
}
|
||||
}
|
||||
this.setState({ paramsObject: tempParamObj });
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<PageHeader style={{ paddingTop: 0 }}>
|
||||
<Breadcrumb style={{ paddingBottom: 16 }}>
|
||||
<Breadcrumb.Item>
|
||||
<Link to="/entgra">
|
||||
<Icon type="home" /> Home
|
||||
</Link>
|
||||
</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>Reports</Breadcrumb.Item>
|
||||
</Breadcrumb>
|
||||
<div className="wrap">
|
||||
<h3>Reports</h3>
|
||||
<PolicyReportHome />
|
||||
</div>
|
||||
</PageHeader>
|
||||
<div
|
||||
style={{ background: '#f0f2f5', padding: 24, minHeight: 720 }}
|
||||
></div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Reports;
|
||||
@ -2,7 +2,7 @@ import React from 'react';
|
||||
|
||||
import { Form, Input, Button } from 'antd';
|
||||
|
||||
class HorizontalLoginForm extends React.Component {
|
||||
class Filter extends React.Component {
|
||||
handleSubmit = e => {
|
||||
e.preventDefault();
|
||||
this.props.form.validateFields((err, values) => {
|
||||
@ -35,4 +35,4 @@ class HorizontalLoginForm extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default Form.create({ name: 'horizontal_login' })(HorizontalLoginForm);
|
||||
export default Form.create({ name: 'horizontal_login' })(Filter);
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { notification, Menu, Icon } from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../components/ConfigContext';
|
||||
|
||||
/*
|
||||
This class for call the logout api by sending request
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -21,14 +21,14 @@ import { Layout, Menu, Icon } from 'antd';
|
||||
import { Switch, Link } from 'react-router-dom';
|
||||
import RouteWithSubRoutes from '../../components/RouteWithSubRoutes';
|
||||
import { Redirect } from 'react-router';
|
||||
import './Dashboard.css';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import Logout from './Logout/Logout';
|
||||
import './styles.css';
|
||||
import { withConfigContext } from '../../components/ConfigContext';
|
||||
import Logout from './components/Logout';
|
||||
|
||||
const { Header, Content, Footer } = Layout;
|
||||
const { SubMenu } = Menu;
|
||||
|
||||
class Dashboard extends React.Component {
|
||||
class Home extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@ -209,4 +209,4 @@ class Dashboard extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(Dashboard);
|
||||
export default withConfigContext(Home);
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -30,7 +30,7 @@ import {
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import Moment from 'react-moment';
|
||||
|
||||
const { Paragraph, Text } = Typography;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import CertificateTable from '../../../../components/Configurations/Certificates/CertificateTable';
|
||||
import CertificateTable from './components/CertificateTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,11 +22,11 @@ import { Card, Col, Icon, message, notification, Row } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
|
||||
let apiUrl;
|
||||
|
||||
class DeviceTypesTable extends React.Component {
|
||||
class Index extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
TimeAgo.addLocale(en);
|
||||
@ -127,4 +127,4 @@ class DeviceTypesTable extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(DeviceTypesTable);
|
||||
export default withConfigContext(Index);
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import DeviceTypesTable from '../../../components/DeviceTypes/DeviceTypesTable';
|
||||
import DeviceTypesTable from './components/DeviceTypesTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -31,8 +31,8 @@ import {
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import BulkActionBar from './BulkActionBar';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import BulkActionBar from './components/BulkActionBar';
|
||||
|
||||
let config = null;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import DeviceTable from '../../../components/Devices/DevicesTable';
|
||||
import DeviceTable from './components/DevicesTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -21,7 +21,7 @@ import { Card, Col, Icon, Row } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../../../components/ConfigContext';
|
||||
|
||||
class DeviceType extends React.Component {
|
||||
constructor(props) {
|
||||
@ -18,11 +18,11 @@
|
||||
|
||||
import React from 'react';
|
||||
import { Form, Row, Col, Card, Steps } from 'antd';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import DeviceType from '../DeviceType';
|
||||
import SelectEnrollmentType from './SelectEnrollmentType';
|
||||
import EnrollDevice from './EnrollDevice';
|
||||
import DownloadAgent from './DownloadAgent';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import DeviceType from './components/DeviceType';
|
||||
import SelectEnrollmentType from '../SelectEnrolmentType';
|
||||
import EnrollDevice from '../EnrollDevice';
|
||||
import DownloadAgent from '../DownloadAgent';
|
||||
const { Step } = Steps;
|
||||
|
||||
class AddDevice extends React.Component {
|
||||
@ -21,10 +21,10 @@ import { Button, Card, Divider, message, notification } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import QRCode from 'qrcode.react';
|
||||
|
||||
class SelectEnrollmentType extends React.Component {
|
||||
class DownloadAgent extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.config = this.props.context;
|
||||
@ -170,4 +170,4 @@ class SelectEnrollmentType extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(SelectEnrollmentType);
|
||||
export default withConfigContext(DownloadAgent);
|
||||
@ -30,14 +30,14 @@ import {
|
||||
} from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
import QRCode from 'qrcode.react';
|
||||
import QRPlaceholder from '../../../../public/images/qr-code.png';
|
||||
import installAgent from '../../../../public/images/install_agent.png';
|
||||
import register from '../../../../public/images/register.png';
|
||||
import registration from '../../../../public/images/registration.png';
|
||||
import setProfile from '../../../../public/images/set_profile.png';
|
||||
import QRPlaceholder from '../../../../../../../../../public/images/qr-code.png';
|
||||
import installAgent from '../../../../../../../../../public/images/install_agent.png';
|
||||
import register from '../../../../../../../../../public/images/register.png';
|
||||
import registration from '../../../../../../../../../public/images/registration.png';
|
||||
import setProfile from '../../../../../../../../../public/images/set_profile.png';
|
||||
|
||||
const { Option } = Select;
|
||||
|
||||
@ -20,7 +20,7 @@ import React from 'react';
|
||||
import { Button, Divider } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
class SelectEnrollmentType extends React.Component {
|
||||
constructor(props) {
|
||||
@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import AddDevice from '../../../components/Devices/Enroll-Device/AddDevice';
|
||||
import AddDevice from './components/AddDevice';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -25,9 +25,9 @@ import {
|
||||
Popup,
|
||||
Tooltip,
|
||||
} from 'react-leaflet';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
|
||||
class GeoCustomMap extends Component {
|
||||
class CustomMap extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
@ -76,4 +76,4 @@ class GeoCustomMap extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(GeoCustomMap);
|
||||
export default withConfigContext(CustomMap);
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -29,9 +29,9 @@ import {
|
||||
DatePicker,
|
||||
} from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import GeoCustomMap from '../geo-custom-map/GeoCustomMap';
|
||||
import './GeoDashboard.css';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import GeoCustomMap from '../CustomMap';
|
||||
import './styles.css';
|
||||
|
||||
class GeoDashboard extends React.Component {
|
||||
constructor(props) {
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import GeoDashboard from '../../../components/Geo/geo-dashboard/GeoDashboard';
|
||||
import GeoDashboard from './components/GeoDashboard';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { Button, Form, Input, message, Modal, notification } from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
class AddGroup extends React.Component {
|
||||
constructor(props) {
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -32,7 +32,7 @@ import {
|
||||
Typography,
|
||||
} from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
const { Text } = Typography;
|
||||
|
||||
@ -22,9 +22,8 @@ import { Button, Modal } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
|
||||
import ReportDevicesTable from '../Reports/Widgets/ReportDevicesTable';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import DevicesTable from '../../../../../Reports/components/DevicesTable';
|
||||
|
||||
let apiUrl;
|
||||
|
||||
@ -126,7 +125,7 @@ class GroupDevicesModal extends React.Component {
|
||||
]}
|
||||
>
|
||||
<div style={{ alignItems: 'center' }}>
|
||||
<ReportDevicesTable apiUrl={apiUrl} />
|
||||
<DevicesTable apiUrl={apiUrl} />
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,11 +22,11 @@ import { message, notification, Table } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import GroupActions from './GroupActions';
|
||||
import AddGroup from './AddGroup';
|
||||
import Filter from '../Utils/Filter/Filter';
|
||||
import GroupDevicesModal from './GroupDevicesModal';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import GroupActions from './components/GroupActions';
|
||||
import AddGroup from './components/AddGroup';
|
||||
import Filter from '../../../../components/Filter';
|
||||
import GroupDevicesModal from './components/GroupDevicesModal';
|
||||
|
||||
const searchFields = [
|
||||
{
|
||||
@ -89,6 +89,12 @@ class GroupsTable extends React.Component {
|
||||
key: 'details',
|
||||
render: (id, row) => <GroupDevicesModal groupData={row} />,
|
||||
},
|
||||
{
|
||||
title: 'Devices',
|
||||
dataIndex: 'id',
|
||||
key: 'details',
|
||||
render: (id, row) => <GroupDevicesModal groupData={row} />,
|
||||
},
|
||||
];
|
||||
|
||||
rowSelection = {
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import GroupsTable from '../../../components/Groups/GroupsTable';
|
||||
import GroupsTable from './components/GroupsTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -37,8 +37,8 @@ import {
|
||||
Button,
|
||||
Radio,
|
||||
} from 'antd';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import '../../pages/Dashboard/Policies/policies.css';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import '../../../../styles.css';
|
||||
import moment from 'moment';
|
||||
const { Text, Title, Paragraph } = Typography;
|
||||
const { TabPane } = Tabs;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,7 +22,7 @@ import { Card, Col, Icon, message, notification, Row } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
class SelectPlatform extends React.Component {
|
||||
constructor(props) {
|
||||
@ -27,9 +27,9 @@ import {
|
||||
message,
|
||||
notification,
|
||||
} from 'antd';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import SelectPlatform from './SelectPlatform';
|
||||
import ConfigureProfile from './ConfigureProfile';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import SelectPlatform from './components/SelectPlatform';
|
||||
import ConfigureProfile from './components/ConfigureProfile';
|
||||
import axios from 'axios';
|
||||
const { Step } = Steps;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -23,7 +23,7 @@ import TimeAgo from 'javascript-time-ago';
|
||||
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
|
||||
let apiUrl;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import PoliciesTable from '../../../components/Policies/PoliciesTable';
|
||||
import PoliciesTable from './components/PoliciesTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import AddPolicy from '../../../components/Policies/AddPolicy';
|
||||
import AddPolicy from '../../components/AddPolicy';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -25,7 +25,7 @@ class DateRangePicker extends React.Component {
|
||||
super(props);
|
||||
}
|
||||
|
||||
// Send updated date range to Reports.js when duration change
|
||||
// Send updated date range to index.js when duration change
|
||||
onChange = (dates, dateStrings) => {
|
||||
this.props.updateDurationValue(dateStrings[0], dateStrings[1]);
|
||||
};
|
||||
@ -22,7 +22,7 @@ import { Icon, message, notification, Table, Tag, Tooltip } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
|
||||
let config = null;
|
||||
|
||||
@ -123,7 +123,7 @@ const getTimeAgo = time => {
|
||||
return timeAgo.format(time);
|
||||
};
|
||||
|
||||
class ReportDeviceTable extends React.Component {
|
||||
class deviceTable extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
config = this.props.context;
|
||||
@ -246,4 +246,4 @@ class ReportDeviceTable extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withConfigContext(ReportDeviceTable);
|
||||
export default withConfigContext(deviceTable);
|
||||
229
components/device-mgt/io.entgra.device.mgt.ui/react-app/src/scenes/Home/scenes/Reports/index.js
vendored
Normal file
229
components/device-mgt/io.entgra.device.mgt.ui/react-app/src/scenes/Home/scenes/Reports/index.js
vendored
Normal file
@ -0,0 +1,229 @@
|
||||
/*
|
||||
* 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 { PageHeader, Breadcrumb, Icon, Row, Col, Card } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
class Reports extends React.Component {
|
||||
routes;
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.routes = props.routes;
|
||||
this.state = {
|
||||
paramsObject: {},
|
||||
};
|
||||
}
|
||||
// Get modified value from datepicker and set it to paramsObject
|
||||
updateDurationValue = (modifiedFromDate, modifiedToDate) => {
|
||||
let tempParamObj = this.state.paramsObject;
|
||||
tempParamObj.from = modifiedFromDate;
|
||||
tempParamObj.to = modifiedToDate;
|
||||
this.setState({ paramsObject: tempParamObj });
|
||||
};
|
||||
|
||||
// Get modified value from filters and set it to paramsObject
|
||||
updateFiltersValue = (modifiedValue, filterType) => {
|
||||
let tempParamObj = this.state.paramsObject;
|
||||
if (filterType == 'Device Status') {
|
||||
tempParamObj.status = modifiedValue;
|
||||
if (modifiedValue == 'ALL' && tempParamObj.status) {
|
||||
delete tempParamObj.status;
|
||||
}
|
||||
} else {
|
||||
tempParamObj.ownership = modifiedValue;
|
||||
if (modifiedValue == 'ALL' && tempParamObj.ownership) {
|
||||
delete tempParamObj.ownership;
|
||||
}
|
||||
}
|
||||
this.setState({ paramsObject: tempParamObj });
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<PageHeader style={{ paddingTop: 0 }}>
|
||||
<Breadcrumb style={{ paddingBottom: 16 }}>
|
||||
<Breadcrumb.Item>
|
||||
<Link to="/entgra">
|
||||
<Icon type="home" /> Home
|
||||
</Link>
|
||||
</Breadcrumb.Item>
|
||||
<Breadcrumb.Item>Reports</Breadcrumb.Item>
|
||||
</Breadcrumb>
|
||||
<div className="wrap">
|
||||
<h3>Reports</h3>
|
||||
<div style={{ borderRadius: 5 }}>
|
||||
<Row gutter={16}>
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/policy/compliance',
|
||||
data: {
|
||||
name: 'all_policy_compliance_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Policy Compliance Report</b>
|
||||
</h2>
|
||||
<p>Policy compliance details of all enrolled devices</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/enrollments',
|
||||
data: {
|
||||
name: 'enrollments_vs_unenrollments_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Enrollments vs Unenrollments</b>
|
||||
</h2>
|
||||
<p>Details on device enrollments vs unenrollments</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/device-status',
|
||||
data: {
|
||||
name: 'enrollment_status_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Device Status Report</b>
|
||||
</h2>
|
||||
<p>Report based on device status</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/enrollment-type',
|
||||
data: {
|
||||
name: 'enrollemt_type_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>Device Type Report</b>
|
||||
</h2>
|
||||
<p>Report for all device types</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Link
|
||||
to={{
|
||||
// Path to respective report page
|
||||
pathname: '/entgra/reports/app-not-installed',
|
||||
data: {
|
||||
name: 'app_not_installed_devices_report',
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Card
|
||||
bordered={true}
|
||||
hoverable={true}
|
||||
style={{ borderRadius: 10, marginBottom: 16 }}
|
||||
>
|
||||
<div align="center">
|
||||
<Icon
|
||||
type="desktop"
|
||||
style={{ fontSize: '25px', color: '#08c' }}
|
||||
/>
|
||||
<h2>
|
||||
<b>App NOT Installed Devices Report</b>
|
||||
</h2>
|
||||
<p>Report for all device types</p>
|
||||
</div>
|
||||
</Card>
|
||||
</Link>
|
||||
</Col>
|
||||
</Row>
|
||||
</div>
|
||||
</div>
|
||||
</PageHeader>
|
||||
<div
|
||||
style={{ background: '#f0f2f5', padding: 24, minHeight: 720 }}
|
||||
></div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Reports;
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { message, notification, Select } from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
const { Option } = Select;
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { message, notification, Select } from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
const { Option } = Select;
|
||||
|
||||
@ -20,11 +20,11 @@ import React from 'react';
|
||||
import { PageHeader, Breadcrumb, Icon, Button } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
|
||||
import AppListDropDown from '../Widgets/AppListDropDown';
|
||||
import ReportDevicesTable from '../Widgets/ReportDevicesTable';
|
||||
import AppVersionDropDown from '../Widgets/AppVersionDropDown';
|
||||
import AppListDropDown from './components/AppListDropDown';
|
||||
import ReportDevicesTable from '../../components/DevicesTable';
|
||||
import AppVersionDropDown from './components/AppVersionDropDown';
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let config = null;
|
||||
@ -20,13 +20,13 @@ import React from 'react';
|
||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
import DateRangePicker from '../DateRangePicker';
|
||||
import DateRangePicker from '../../components/DateRangePicker';
|
||||
import moment from 'moment';
|
||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||
import DataSet from '@antv/data-set';
|
||||
import { handleApiError } from '../../../js/Utils';
|
||||
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||
|
||||
class DeviceStatusReport extends React.Component {
|
||||
routes;
|
||||
@ -20,13 +20,13 @@ import React from 'react';
|
||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
import DateRangePicker from '../DateRangePicker';
|
||||
import DateRangePicker from '../../components/DateRangePicker';
|
||||
import moment from 'moment';
|
||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||
import DataSet from '@antv/data-set';
|
||||
import { handleApiError } from '../../../js/Utils';
|
||||
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||
|
||||
class EnrollmentTypeReport extends React.Component {
|
||||
routes;
|
||||
@ -20,13 +20,13 @@ import React from 'react';
|
||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
import DateRangePicker from '../DateRangePicker';
|
||||
import DateRangePicker from '../../components/DateRangePicker';
|
||||
import moment from 'moment';
|
||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||
import DataSet from '@antv/data-set';
|
||||
import { handleApiError } from '../../../js/Utils';
|
||||
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||
|
||||
class EnrollmentsVsUnenrollmentsReport extends React.Component {
|
||||
routes;
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { Button, message, Modal, notification, List, Typography } from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../../../components/ConfigContext';
|
||||
|
||||
class FeatureListModal extends React.Component {
|
||||
constructor(props) {
|
||||
@ -23,9 +23,9 @@ import TimeAgo from 'javascript-time-ago';
|
||||
import moment from 'moment';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import FeatureListModal from './FeatureListModal';
|
||||
import { handleApiError } from '../../../js/Utils';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import FeatureListModal from './components/FeatureListModal';
|
||||
import { handleApiError } from '../../../../../../../../services/utils/errorHandler';
|
||||
|
||||
let config = null;
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { Select, message, notification } from 'antd';
|
||||
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
|
||||
const { Option } = Select;
|
||||
@ -20,11 +20,11 @@ import React from 'react';
|
||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||
|
||||
import { Link } from 'react-router-dom';
|
||||
import { withConfigContext } from '../../../context/ConfigContext';
|
||||
import PolicyDevicesTable from '../Widgets/PolicyDevicesTable';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import PolicyDevicesTable from './components/PolicyDevicesTable';
|
||||
import moment from 'moment';
|
||||
import DateRangePicker from '../DateRangePicker';
|
||||
import SelectPolicyDropDown from '../Widgets/SelectPolicyDropDown';
|
||||
import DateRangePicker from '../../components/DateRangePicker';
|
||||
import SelectPolicyDropDown from './components/SelectPolicyDropDown';
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let config = null;
|
||||
@ -27,7 +27,7 @@ import {
|
||||
Select,
|
||||
Tree,
|
||||
} from 'antd';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
import axios from 'axios';
|
||||
|
||||
const { Option } = Select;
|
||||
@ -33,7 +33,7 @@ import {
|
||||
Typography,
|
||||
} from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
const { Option } = Select;
|
||||
const { Text } = Typography;
|
||||
const { TreeNode } = Tree;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,10 +22,10 @@ import { Button, message, Modal, notification, Table, List } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import AddRole from './AddRole';
|
||||
import RoleAction from './RoleAction';
|
||||
import Filter from '../Utils/Filter/Filter';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import AddRole from './components/AddRole';
|
||||
import RoleAction from './components/RoleAction';
|
||||
import Filter from '../../../../components/Filter';
|
||||
|
||||
const searchFields = [
|
||||
{
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import RolesTable from '../../../components/Roles/RolesTable';
|
||||
import RolesTable from './components/RolesTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -27,7 +27,7 @@ import {
|
||||
notification,
|
||||
} from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
const { Option } = Select;
|
||||
|
||||
class AddUser extends React.Component {
|
||||
@ -32,7 +32,7 @@ import {
|
||||
Typography,
|
||||
} from 'antd';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
const { Option } = Select;
|
||||
const { Text } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,7 +22,7 @@ import { Icon, message, notification, Table, Tag, Tooltip } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||
|
||||
let config = null;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -22,11 +22,11 @@ import { Button, List, message, Modal, notification, Table } from 'antd';
|
||||
import TimeAgo from 'javascript-time-ago';
|
||||
// Load locale-specific relative date/time formatting rules.
|
||||
import en from 'javascript-time-ago/locale/en';
|
||||
import { withConfigContext } from '../../context/ConfigContext';
|
||||
import UsersDevices from './UsersDevices';
|
||||
import AddUser from './AddUser';
|
||||
import UserActions from './UserActions';
|
||||
import Filter from '../Utils/Filter/Filter';
|
||||
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||
import UsersDevices from './components/UserDevices';
|
||||
import AddUser from './components/AddUser';
|
||||
import UserActions from './components/UserActions';
|
||||
import Filter from '../../../../components/Filter';
|
||||
const ButtonGroup = Button.Group;
|
||||
|
||||
let apiUrl;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -19,7 +19,7 @@
|
||||
import React from 'react';
|
||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||
import { Link } from 'react-router-dom';
|
||||
import UsersTable from '../../../components/Users/UsersTable';
|
||||
import UsersTable from './components/UsersTable';
|
||||
|
||||
const { Paragraph } = Typography;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -27,9 +27,9 @@ import {
|
||||
Button,
|
||||
Checkbox,
|
||||
} from 'antd';
|
||||
import './Login.css';
|
||||
import './styles.css';
|
||||
import axios from 'axios';
|
||||
import { withConfigContext } from '../context/ConfigContext';
|
||||
import { withConfigContext } from '../../components/ConfigContext';
|
||||
|
||||
const { Title } = Typography;
|
||||
const { Text } = Typography;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -59,4 +59,4 @@
|
||||
.content {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
* 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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user