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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -39,7 +39,7 @@
|
|||||||
font-variant: normal;
|
font-variant: normal;
|
||||||
speak: none;
|
speak: none;
|
||||||
text-decoration: inherit;
|
text-decoration: inherit;
|
||||||
|
|
||||||
/* Better Font Rendering =========== */
|
/* Better Font Rendering =========== */
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
text-rendering: auto;
|
text-rendering: auto;
|
||||||
@ -275,7 +275,7 @@
|
|||||||
}
|
}
|
||||||
.fw-stroke:before,
|
.fw-stroke:before,
|
||||||
.fw-helper-stroke:after {
|
.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,
|
-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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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 { BrowserRouter as Router, Redirect, Switch } from 'react-router-dom';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Layout, Spin, Result, notification } from 'antd';
|
import { Layout, Spin, Result, notification } from 'antd';
|
||||||
import ConfigContext from './context/ConfigContext';
|
import ConfigContext from './components/ConfigContext';
|
||||||
|
|
||||||
const { Content } = Layout;
|
const { Content } = Layout;
|
||||||
const loadingView = (
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -42,4 +42,4 @@
|
|||||||
|
|
||||||
.ant-input-affix-wrapper .ant-input{
|
.ant-input-affix-wrapper .ant-input{
|
||||||
min-height: 0;
|
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,
|
~ Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
~ Version 2.0 (the "License"); you may not use this file except
|
~ 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -18,20 +18,18 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import * as serviceWorker from './serviceWorker';
|
import * as serviceWorker from './services/serviceWorkers/serviceWorker';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
import Login from './pages/Login';
|
import Login from './scenes/Login';
|
||||||
import Dashboard from './pages/Dashboard/Dashboard';
|
import Home from './scenes/Home';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import Reports from './pages/Dashboard/Reports/Reports';
|
import Reports from './scenes/Home/scenes/Reports';
|
||||||
import Geo from './pages/Dashboard/Geo/Geo';
|
import EnrollmentsVsUnenrollmentsReport from './scenes/Home/scenes/Reports/scenes/EnrolmentVsUnenrollments';
|
||||||
import EnrollmentsVsUnenrollmentsReport from './components/Reports/Templates/EnrollmentsVsUnenrollmentsReport';
|
import EnrollmentTypeReport from './scenes/Home/scenes/Reports/scenes/EnrollmentType';
|
||||||
import EnrollmentTypeReport from './components/Reports/Templates/EnrollmentTypeReport';
|
import PolicyReport from './scenes/Home/scenes/Reports/scenes/PolicyCompliance';
|
||||||
import PolicyReport from './components/Reports/Templates/PolicyReport';
|
import DeviceStatusReport from './scenes/Home/scenes/Reports/scenes/DeviceStatus';
|
||||||
import DeviceStatusReport from './components/Reports/Templates/DeviceStatusReport';
|
import AppNotInstalledDevicesReport from './scenes/Home/scenes/Reports/scenes/AppNotInstalledDevices';
|
||||||
import PolicyReportHome from './pages/Dashboard/Reports/PolicyReportHome';
|
import Geo from './scenes/Home/scenes/Geo';
|
||||||
import ReportDurationItemList from './pages/Dashboard/Reports/ReportDurationItemList';
|
|
||||||
import AppNotInstalledDevicesReport from './components/Reports/Templates/AppNotInstalledDevicesReport';
|
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@ -42,8 +40,23 @@ const routes = [
|
|||||||
{
|
{
|
||||||
path: '/entgra',
|
path: '/entgra',
|
||||||
exact: false,
|
exact: false,
|
||||||
component: Dashboard,
|
component: Home,
|
||||||
routes: [
|
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',
|
// path: '/entgra/devices',
|
||||||
// component: Devices,
|
// component: Devices,
|
||||||
@ -99,11 +112,6 @@ const routes = [
|
|||||||
// component: Certificates,
|
// component: Certificates,
|
||||||
// exact: true,
|
// exact: true,
|
||||||
// },
|
// },
|
||||||
{
|
|
||||||
path: '/entgra/reports/list',
|
|
||||||
component: ReportDurationItemList,
|
|
||||||
exact: true,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/entgra/reports/enrollments',
|
path: '/entgra/reports/enrollments',
|
||||||
component: EnrollmentsVsUnenrollmentsReport,
|
component: EnrollmentsVsUnenrollmentsReport,
|
||||||
@ -114,11 +122,6 @@ const routes = [
|
|||||||
component: EnrollmentTypeReport,
|
component: EnrollmentTypeReport,
|
||||||
exact: true,
|
exact: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/entgra/reports/policy',
|
|
||||||
component: PolicyReportHome,
|
|
||||||
exact: true,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/entgra/reports/policy/compliance',
|
path: '/entgra/reports/policy/compliance',
|
||||||
component: PolicyReport,
|
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';
|
import { Form, Input, Button } from 'antd';
|
||||||
|
|
||||||
class HorizontalLoginForm extends React.Component {
|
class Filter extends React.Component {
|
||||||
handleSubmit = e => {
|
handleSubmit = e => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.props.form.validateFields((err, values) => {
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { notification, Menu, Icon } from 'antd';
|
import { notification, Menu, Icon } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../components/ConfigContext';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This class for call the logout api by sending request
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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 { Switch, Link } from 'react-router-dom';
|
||||||
import RouteWithSubRoutes from '../../components/RouteWithSubRoutes';
|
import RouteWithSubRoutes from '../../components/RouteWithSubRoutes';
|
||||||
import { Redirect } from 'react-router';
|
import { Redirect } from 'react-router';
|
||||||
import './Dashboard.css';
|
import './styles.css';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../components/ConfigContext';
|
||||||
import Logout from './Logout/Logout';
|
import Logout from './components/Logout';
|
||||||
|
|
||||||
const { Header, Content, Footer } = Layout;
|
const { Header, Content, Footer } = Layout;
|
||||||
const { SubMenu } = Menu;
|
const { SubMenu } = Menu;
|
||||||
|
|
||||||
class Dashboard extends React.Component {
|
class Home extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -30,7 +30,7 @@ import {
|
|||||||
import TimeAgo from 'javascript-time-ago';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import Moment from 'react-moment';
|
import Moment from 'react-moment';
|
||||||
|
|
||||||
const { Paragraph, Text } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import CertificateTable from '../../../../components/Configurations/Certificates/CertificateTable';
|
import CertificateTable from './components/CertificateTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
let apiUrl;
|
let apiUrl;
|
||||||
|
|
||||||
class DeviceTypesTable extends React.Component {
|
class Index extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
TimeAgo.addLocale(en);
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import DeviceTypesTable from '../../../components/DeviceTypes/DeviceTypesTable';
|
import DeviceTypesTable from './components/DeviceTypesTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -31,8 +31,8 @@ import {
|
|||||||
import TimeAgo from 'javascript-time-ago';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import BulkActionBar from './BulkActionBar';
|
import BulkActionBar from './components/BulkActionBar';
|
||||||
|
|
||||||
let config = null;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import DeviceTable from '../../../components/Devices/DevicesTable';
|
import DeviceTable from './components/DevicesTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class DeviceType extends React.Component {
|
class DeviceType extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -18,11 +18,11 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Form, Row, Col, Card, Steps } from 'antd';
|
import { Form, Row, Col, Card, Steps } from 'antd';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import DeviceType from '../DeviceType';
|
import DeviceType from './components/DeviceType';
|
||||||
import SelectEnrollmentType from './SelectEnrollmentType';
|
import SelectEnrollmentType from '../SelectEnrolmentType';
|
||||||
import EnrollDevice from './EnrollDevice';
|
import EnrollDevice from '../EnrollDevice';
|
||||||
import DownloadAgent from './DownloadAgent';
|
import DownloadAgent from '../DownloadAgent';
|
||||||
const { Step } = Steps;
|
const { Step } = Steps;
|
||||||
|
|
||||||
class AddDevice extends React.Component {
|
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 TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import QRCode from 'qrcode.react';
|
import QRCode from 'qrcode.react';
|
||||||
|
|
||||||
class SelectEnrollmentType extends React.Component {
|
class DownloadAgent extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.config = this.props.context;
|
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';
|
} from 'antd';
|
||||||
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import QRCode from 'qrcode.react';
|
import QRCode from 'qrcode.react';
|
||||||
import QRPlaceholder from '../../../../public/images/qr-code.png';
|
import QRPlaceholder from '../../../../../../../../../public/images/qr-code.png';
|
||||||
import installAgent from '../../../../public/images/install_agent.png';
|
import installAgent from '../../../../../../../../../public/images/install_agent.png';
|
||||||
import register from '../../../../public/images/register.png';
|
import register from '../../../../../../../../../public/images/register.png';
|
||||||
import registration from '../../../../public/images/registration.png';
|
import registration from '../../../../../../../../../public/images/registration.png';
|
||||||
import setProfile from '../../../../public/images/set_profile.png';
|
import setProfile from '../../../../../../../../../public/images/set_profile.png';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ import React from 'react';
|
|||||||
import { Button, Divider } from 'antd';
|
import { Button, Divider } from 'antd';
|
||||||
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
import TimeAgo from 'javascript-time-ago/modules/JavascriptTimeAgo';
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class SelectEnrollmentType extends React.Component {
|
class SelectEnrollmentType extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import AddDevice from '../../../components/Devices/Enroll-Device/AddDevice';
|
import AddDevice from './components/AddDevice';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -25,9 +25,9 @@ import {
|
|||||||
Popup,
|
Popup,
|
||||||
Tooltip,
|
Tooltip,
|
||||||
} from 'react-leaflet';
|
} from 'react-leaflet';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class GeoCustomMap extends Component {
|
class CustomMap extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -29,9 +29,9 @@ import {
|
|||||||
DatePicker,
|
DatePicker,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import GeoCustomMap from '../geo-custom-map/GeoCustomMap';
|
import GeoCustomMap from '../CustomMap';
|
||||||
import './GeoDashboard.css';
|
import './styles.css';
|
||||||
|
|
||||||
class GeoDashboard extends React.Component {
|
class GeoDashboard extends React.Component {
|
||||||
constructor(props) {
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import GeoDashboard from '../../../components/Geo/geo-dashboard/GeoDashboard';
|
import GeoDashboard from './components/GeoDashboard';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button, Form, Input, message, Modal, notification } from 'antd';
|
import { Button, Form, Input, message, Modal, notification } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class AddGroup extends React.Component {
|
class AddGroup extends React.Component {
|
||||||
constructor(props) {
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -32,7 +32,7 @@ import {
|
|||||||
Typography,
|
Typography,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
|
|
||||||
@ -22,9 +22,8 @@ import { Button, Modal } from 'antd';
|
|||||||
import TimeAgo from 'javascript-time-ago';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
import DevicesTable from '../../../../../Reports/components/DevicesTable';
|
||||||
import ReportDevicesTable from '../Reports/Widgets/ReportDevicesTable';
|
|
||||||
|
|
||||||
let apiUrl;
|
let apiUrl;
|
||||||
|
|
||||||
@ -126,7 +125,7 @@ class GroupDevicesModal extends React.Component {
|
|||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<div style={{ alignItems: 'center' }}>
|
<div style={{ alignItems: 'center' }}>
|
||||||
<ReportDevicesTable apiUrl={apiUrl} />
|
<DevicesTable apiUrl={apiUrl} />
|
||||||
</div>
|
</div>
|
||||||
</Modal>
|
</Modal>
|
||||||
</div>
|
</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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import GroupActions from './GroupActions';
|
import GroupActions from './components/GroupActions';
|
||||||
import AddGroup from './AddGroup';
|
import AddGroup from './components/AddGroup';
|
||||||
import Filter from '../Utils/Filter/Filter';
|
import Filter from '../../../../components/Filter';
|
||||||
import GroupDevicesModal from './GroupDevicesModal';
|
import GroupDevicesModal from './components/GroupDevicesModal';
|
||||||
|
|
||||||
const searchFields = [
|
const searchFields = [
|
||||||
{
|
{
|
||||||
@ -89,6 +89,12 @@ class GroupsTable extends React.Component {
|
|||||||
key: 'details',
|
key: 'details',
|
||||||
render: (id, row) => <GroupDevicesModal groupData={row} />,
|
render: (id, row) => <GroupDevicesModal groupData={row} />,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'Devices',
|
||||||
|
dataIndex: 'id',
|
||||||
|
key: 'details',
|
||||||
|
render: (id, row) => <GroupDevicesModal groupData={row} />,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
rowSelection = {
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import GroupsTable from '../../../components/Groups/GroupsTable';
|
import GroupsTable from './components/GroupsTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
const { Paragraph } = Typography;
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
Radio,
|
Radio,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import '../../pages/Dashboard/Policies/policies.css';
|
import '../../../../styles.css';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
const { Text, Title, Paragraph } = Typography;
|
const { Text, Title, Paragraph } = Typography;
|
||||||
const { TabPane } = Tabs;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class SelectPlatform extends React.Component {
|
class SelectPlatform extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -27,9 +27,9 @@ import {
|
|||||||
message,
|
message,
|
||||||
notification,
|
notification,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import SelectPlatform from './SelectPlatform';
|
import SelectPlatform from './components/SelectPlatform';
|
||||||
import ConfigureProfile from './ConfigureProfile';
|
import ConfigureProfile from './components/ConfigureProfile';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
const { Step } = Steps;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
let apiUrl;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import PoliciesTable from '../../../components/Policies/PoliciesTable';
|
import PoliciesTable from './components/PoliciesTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import AddPolicy from '../../../components/Policies/AddPolicy';
|
import AddPolicy from '../../components/AddPolicy';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -25,7 +25,7 @@ class DateRangePicker extends React.Component {
|
|||||||
super(props);
|
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) => {
|
onChange = (dates, dateStrings) => {
|
||||||
this.props.updateDurationValue(dateStrings[0], dateStrings[1]);
|
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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
let config = null;
|
let config = null;
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ const getTimeAgo = time => {
|
|||||||
return timeAgo.format(time);
|
return timeAgo.format(time);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReportDeviceTable extends React.Component {
|
class deviceTable extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
config = this.props.context;
|
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 React from 'react';
|
||||||
import { message, notification, Select } from 'antd';
|
import { message, notification, Select } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { message, notification, Select } from 'antd';
|
import { message, notification, Select } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
@ -20,11 +20,11 @@ import React from 'react';
|
|||||||
import { PageHeader, Breadcrumb, Icon, Button } from 'antd';
|
import { PageHeader, Breadcrumb, Icon, Button } from 'antd';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
import AppListDropDown from '../Widgets/AppListDropDown';
|
import AppListDropDown from './components/AppListDropDown';
|
||||||
import ReportDevicesTable from '../Widgets/ReportDevicesTable';
|
import ReportDevicesTable from '../../components/DevicesTable';
|
||||||
import AppVersionDropDown from '../Widgets/AppVersionDropDown';
|
import AppVersionDropDown from './components/AppVersionDropDown';
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
let config = null;
|
let config = null;
|
||||||
@ -20,13 +20,13 @@ import React from 'react';
|
|||||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import DateRangePicker from '../DateRangePicker';
|
import DateRangePicker from '../../components/DateRangePicker';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||||
import DataSet from '@antv/data-set';
|
import DataSet from '@antv/data-set';
|
||||||
import { handleApiError } from '../../../js/Utils';
|
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||||
|
|
||||||
class DeviceStatusReport extends React.Component {
|
class DeviceStatusReport extends React.Component {
|
||||||
routes;
|
routes;
|
||||||
@ -20,13 +20,13 @@ import React from 'react';
|
|||||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import DateRangePicker from '../DateRangePicker';
|
import DateRangePicker from '../../components/DateRangePicker';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||||
import DataSet from '@antv/data-set';
|
import DataSet from '@antv/data-set';
|
||||||
import { handleApiError } from '../../../js/Utils';
|
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||||
|
|
||||||
class EnrollmentTypeReport extends React.Component {
|
class EnrollmentTypeReport extends React.Component {
|
||||||
routes;
|
routes;
|
||||||
@ -20,13 +20,13 @@ import React from 'react';
|
|||||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import DateRangePicker from '../DateRangePicker';
|
import DateRangePicker from '../../components/DateRangePicker';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
import { Chart, Geom, Axis, Tooltip, Legend } from 'bizcharts';
|
||||||
import DataSet from '@antv/data-set';
|
import DataSet from '@antv/data-set';
|
||||||
import { handleApiError } from '../../../js/Utils';
|
import { handleApiError } from '../../../../../../services/utils/errorHandler';
|
||||||
|
|
||||||
class EnrollmentsVsUnenrollmentsReport extends React.Component {
|
class EnrollmentsVsUnenrollmentsReport extends React.Component {
|
||||||
routes;
|
routes;
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Button, message, Modal, notification, List, Typography } from 'antd';
|
import { Button, message, Modal, notification, List, Typography } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
class FeatureListModal extends React.Component {
|
class FeatureListModal extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -23,9 +23,9 @@ import TimeAgo from 'javascript-time-ago';
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import FeatureListModal from './FeatureListModal';
|
import FeatureListModal from './components/FeatureListModal';
|
||||||
import { handleApiError } from '../../../js/Utils';
|
import { handleApiError } from '../../../../../../../../services/utils/errorHandler';
|
||||||
|
|
||||||
let config = null;
|
let config = null;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Select, message, notification } from 'antd';
|
import { Select, message, notification } from 'antd';
|
||||||
|
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
@ -20,11 +20,11 @@ import React from 'react';
|
|||||||
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
import { PageHeader, Breadcrumb, Icon, Radio, Popover, Button } from 'antd';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { withConfigContext } from '../../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import PolicyDevicesTable from '../Widgets/PolicyDevicesTable';
|
import PolicyDevicesTable from './components/PolicyDevicesTable';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import DateRangePicker from '../DateRangePicker';
|
import DateRangePicker from '../../components/DateRangePicker';
|
||||||
import SelectPolicyDropDown from '../Widgets/SelectPolicyDropDown';
|
import SelectPolicyDropDown from './components/SelectPolicyDropDown';
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
let config = null;
|
let config = null;
|
||||||
@ -27,7 +27,7 @@ import {
|
|||||||
Select,
|
Select,
|
||||||
Tree,
|
Tree,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
@ -33,7 +33,7 @@ import {
|
|||||||
Typography,
|
Typography,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
const { TreeNode } = Tree;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import AddRole from './AddRole';
|
import AddRole from './components/AddRole';
|
||||||
import RoleAction from './RoleAction';
|
import RoleAction from './components/RoleAction';
|
||||||
import Filter from '../Utils/Filter/Filter';
|
import Filter from '../../../../components/Filter';
|
||||||
|
|
||||||
const searchFields = [
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import RolesTable from '../../../components/Roles/RolesTable';
|
import RolesTable from './components/RolesTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
const { Paragraph } = Typography;
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ import {
|
|||||||
notification,
|
notification,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
class AddUser extends React.Component {
|
class AddUser extends React.Component {
|
||||||
@ -32,7 +32,7 @@ import {
|
|||||||
Typography,
|
Typography,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
const { Text } = 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../../../components/ConfigContext';
|
||||||
|
|
||||||
let config = null;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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';
|
import TimeAgo from 'javascript-time-ago';
|
||||||
// Load locale-specific relative date/time formatting rules.
|
// Load locale-specific relative date/time formatting rules.
|
||||||
import en from 'javascript-time-ago/locale/en';
|
import en from 'javascript-time-ago/locale/en';
|
||||||
import { withConfigContext } from '../../context/ConfigContext';
|
import { withConfigContext } from '../../../../../../components/ConfigContext';
|
||||||
import UsersDevices from './UsersDevices';
|
import UsersDevices from './components/UserDevices';
|
||||||
import AddUser from './AddUser';
|
import AddUser from './components/AddUser';
|
||||||
import UserActions from './UserActions';
|
import UserActions from './components/UserActions';
|
||||||
import Filter from '../Utils/Filter/Filter';
|
import Filter from '../../../../components/Filter';
|
||||||
const ButtonGroup = Button.Group;
|
const ButtonGroup = Button.Group;
|
||||||
|
|
||||||
let apiUrl;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -19,7 +19,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
import { PageHeader, Typography, Breadcrumb, Icon } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import UsersTable from '../../../components/Users/UsersTable';
|
import UsersTable from './components/UsersTable';
|
||||||
|
|
||||||
const { Paragraph } = Typography;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -27,9 +27,9 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
} from 'antd';
|
} from 'antd';
|
||||||
import './Login.css';
|
import './styles.css';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { withConfigContext } from '../context/ConfigContext';
|
import { withConfigContext } from '../../components/ConfigContext';
|
||||||
|
|
||||||
const { Title } = Typography;
|
const { Title } = Typography;
|
||||||
const { Text } = 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
@ -59,4 +59,4 @@
|
|||||||
.content {
|
.content {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1;
|
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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* 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,
|
* Entgra (pvt) Ltd. licenses this file to you under the Apache License,
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user