diff --git a/app/containers/Dashboard/index.js b/app/containers/Dashboard/index.js index c438550..6c9cef4 100644 --- a/app/containers/Dashboard/index.js +++ b/app/containers/Dashboard/index.js @@ -65,7 +65,7 @@ const Dashboard = () => { toTime, equipmentIds: [0], dataTypes: ['StatusChangedEvent'], - limit: 100, + limit: 1000, }, }); diff --git a/app/containers/Network/containers/AccessPointDetails/index.js b/app/containers/Network/containers/AccessPointDetails/index.js index b6e79fb..e0b82a5 100644 --- a/app/containers/Network/containers/AccessPointDetails/index.js +++ b/app/containers/Network/containers/AccessPointDetails/index.js @@ -152,7 +152,7 @@ export const GET_ALL_PROFILES = gql` `; const toTime = moment(); -const fromTime = moment().subtract(24, 'hours'); +const fromTime = moment().subtract(1, 'hour'); const AccessPointDetails = ({ locations }) => { const { id } = useParams(); @@ -179,6 +179,7 @@ const AccessPointDetails = ({ locations }) => { toTime: toTime.valueOf().toString(), equipmentIds: [id], dataTypes: ['ApNode'], + limit: 100, }, }); diff --git a/app/containers/Network/containers/AccessPoints/index.js b/app/containers/Network/containers/AccessPoints/index.js index 87416d7..1dfb3e1 100644 --- a/app/containers/Network/containers/AccessPoints/index.js +++ b/app/containers/Network/containers/AccessPoints/index.js @@ -1,7 +1,7 @@ import React, { useEffect, useContext } from 'react'; import PropTypes from 'prop-types'; import { useLazyQuery } from '@apollo/react-hooks'; -import { Alert, notification } from 'antd'; +import { Alert } from 'antd'; import { NetworkTable, Loading } from '@tip-wlan/wlan-cloud-ui-library'; import UserContext from 'contexts/UserContext'; @@ -93,7 +93,10 @@ const accessPointsTableColumns = [ const AccessPoints = ({ checkedLocations }) => { const { customerId } = useContext(UserContext); const [filterEquipment, { loading, error, data: equipData, fetchMore }] = useLazyQuery( - FILTER_EQUIPMENT + FILTER_EQUIPMENT, + { + errorPolicy: 'all', + } ); const handleLoadMore = () => { @@ -119,15 +122,6 @@ const AccessPoints = ({ checkedLocations }) => { const fetchFilterEquipment = async () => { filterEquipment({ variables: { customerId, locationIds: checkedLocations, equipmentType: 'AP' }, - errorPolicy: 'all', - onError: e => { - e.forEach(({ message }) => { - notification.error({ - message: 'Error', - description: message, - }); - }); - }, }); }; @@ -139,7 +133,7 @@ const AccessPoints = ({ checkedLocations }) => { return ; } - if (error && !(equipData && equipData.filterEquipment && equipData.filterEquipment.items)) { + if (error && !equipData?.filterEquipment?.items) { return ; } diff --git a/app/containers/Network/containers/ClientDeviceDetails/index.js b/app/containers/Network/containers/ClientDeviceDetails/index.js index e08659b..4ac72e4 100644 --- a/app/containers/Network/containers/ClientDeviceDetails/index.js +++ b/app/containers/Network/containers/ClientDeviceDetails/index.js @@ -12,13 +12,14 @@ import UserContext from 'contexts/UserContext'; import { GET_CLIENT_SESSION, FILTER_SERVICE_METRICS } from 'graphql/queries'; const toTime = moment(); -const fromTime = moment().subtract(24, 'hours'); +const fromTime = moment().subtract(1, 'hour'); const ClientDeviceDetails = () => { const { id } = useParams(); const { customerId } = useContext(UserContext); const { loading, error, data, refetch } = useQuery(GET_CLIENT_SESSION, { variables: { customerId, macAddress: id }, + errorPolicy: 'all', }); const { loading: metricsLoading, @@ -32,6 +33,7 @@ const ClientDeviceDetails = () => { toTime: toTime.valueOf().toString(), clientMacs: [id], dataTypes: ['Client'], + limit: 100, }, }); @@ -56,7 +58,7 @@ const ClientDeviceDetails = () => { return ; } - if (error) { + if (error && !data?.getClientSession) { return ( ); diff --git a/app/containers/Network/containers/ClientDevices/index.js b/app/containers/Network/containers/ClientDevices/index.js index ff5d44c..c13d5cc 100644 --- a/app/containers/Network/containers/ClientDevices/index.js +++ b/app/containers/Network/containers/ClientDevices/index.js @@ -1,7 +1,7 @@ import React, { useEffect, useContext } from 'react'; import PropTypes from 'prop-types'; import { useLazyQuery } from '@apollo/react-hooks'; -import { Alert, notification } from 'antd'; +import { Alert } from 'antd'; import { NetworkTable, Loading } from '@tip-wlan/wlan-cloud-ui-library'; import UserContext from 'contexts/UserContext'; @@ -29,7 +29,10 @@ const clientDevicesTableColumns = [ const ClientDevices = ({ checkedLocations }) => { const { customerId } = useContext(UserContext); const [filterClientSessions, { loading, error, data, fetchMore }] = useLazyQuery( - FILTER_CLIENT_SESSIONS + FILTER_CLIENT_SESSIONS, + { + errorPolicy: 'all', + } ); const handleLoadMore = () => { @@ -52,26 +55,21 @@ const ClientDevices = ({ checkedLocations }) => { } }; - useEffect(() => { + const fetchFilterClientSessions = async () => { filterClientSessions({ variables: { customerId, locationIds: checkedLocations, equipmentType: 'AP' }, - errorPolicy: 'all', - onError: e => { - e.forEach(({ message }) => { - notification.error({ - message: 'Error', - description: message, - }); - }); - }, }); + }; + + useEffect(() => { + fetchFilterClientSessions(); }, [checkedLocations]); if (loading) { return ; } - if (error && !(data && data.filterClientSessions && data.filterClientSessions.items)) { + if (error && !data?.filterClientSessions?.items) { return ( ); diff --git a/app/containers/System/containers/AutoProvision/index.js b/app/containers/System/containers/AutoProvision/index.js new file mode 100644 index 0000000..9cfbd9a --- /dev/null +++ b/app/containers/System/containers/AutoProvision/index.js @@ -0,0 +1,87 @@ +import React, { useContext } from 'react'; +import { useQuery, useMutation } from '@apollo/react-hooks'; +import { Alert, notification } from 'antd'; +import { AutoProvision as AutoProvisionPage, Loading } from '@tip-wlan/wlan-cloud-ui-library'; + +import UserContext from 'contexts/UserContext'; +import { GET_CUSTOMER, GET_ALL_LOCATIONS, GET_ALL_PROFILES } from 'graphql/queries'; +import { UPDATE_CUSTOMER } from 'graphql/mutations'; + +const AutoProvision = () => { + const { customerId } = useContext(UserContext); + const { data, loading, error, refetch } = useQuery(GET_CUSTOMER, { + variables: { id: customerId }, + }); + const [updateCustomer] = useMutation(UPDATE_CUSTOMER); + + const { data: dataLocation, loading: loadingLoaction, error: errorLocation } = useQuery( + GET_ALL_LOCATIONS, + { + variables: { customerId }, + } + ); + const { data: dataProfile, loading: loadingProfile, error: errorProfile } = useQuery( + GET_ALL_PROFILES, + { + variables: { customerId, type: 'equipment_ap' }, + } + ); + + const handleUpdateCustomer = ( + id, + email, + name, + details, + createdTimestamp, + lastModifiedTimestamp + ) => { + updateCustomer({ + variables: { + id, + email, + name, + details, + createdTimestamp, + lastModifiedTimestamp, + }, + }) + .then(() => { + refetch(); + notification.success({ + message: 'Success', + description: 'Settings successfully updated.', + }); + }) + .catch(() => + notification.error({ + message: 'Error', + description: 'Settings could not be updated.', + }) + ); + }; + + if (loading) { + return ; + } + + if (error) { + return ( + + ); + } + + return ( + + ); +}; + +export default AutoProvision; diff --git a/app/containers/System/containers/Firmware/index.js b/app/containers/System/containers/Firmware/index.js index 8ae7da7..c3efcda 100644 --- a/app/containers/System/containers/Firmware/index.js +++ b/app/containers/System/containers/Firmware/index.js @@ -43,6 +43,7 @@ const Firmware = () => { data: firmwareModelData, error: firmwareModelError, loading: firmwareModelLoading, + refetch: refetchFirmwareModels, } = useQuery(GET_ALL_FIRMWARE_MODELS); const [updateTrackAssignment] = useMutation(UPDATE_TRACK_ASSIGNMENT); @@ -67,13 +68,13 @@ const Firmware = () => { refetchAssignmentData(); notification.success({ message: 'Success', - description: 'Track Assignment successfully created.', + description: 'Model Target Version successfully created.', }); }) .catch(() => notification.error({ message: 'Error', - description: 'Track Assignment could not be created.', + description: 'Model Target Version could not be created.', }) ); }; @@ -97,13 +98,13 @@ const Firmware = () => { refetchAssignmentData(); notification.success({ message: 'Success', - description: 'Track Assignment successfully updated.', + description: 'Model Target Version successfully updated.', }); }) .catch(() => notification.error({ message: 'Error', - description: 'Track Assignment could not be updated.', + description: 'Model Target Version could not be updated.', }) ); }; @@ -119,13 +120,13 @@ const Firmware = () => { refetchAssignmentData(); notification.success({ message: 'Success', - description: 'Track Assignment successfully deleted.', + description: 'Model Target Version successfully deleted.', }); }) .catch(() => notification.error({ message: 'Error', - description: 'Track Assignment could not be deleted.', + description: 'Model Target Version could not be deleted.', }) ); }; @@ -151,6 +152,7 @@ const Firmware = () => { }) .then(() => { refetch(); + refetchFirmwareModels(); notification.success({ message: 'Success', description: 'Firmware version successfully created.', @@ -192,6 +194,7 @@ const Firmware = () => { }) .then(() => { refetch(); + refetchFirmwareModels(); notification.success({ message: 'Success', description: 'Firmware version successfully updated.', @@ -213,6 +216,7 @@ const Firmware = () => { }) .then(() => { refetch(); + refetchFirmwareModels(); notification.success({ message: 'Success', description: 'Firmware version successfully deleted.', diff --git a/app/containers/System/containers/Manufacturer/index.js b/app/containers/System/containers/Manufacturer/index.js index 41b4945..87004a8 100644 --- a/app/containers/System/containers/Manufacturer/index.js +++ b/app/containers/System/containers/Manufacturer/index.js @@ -68,11 +68,18 @@ const System = () => { const handleFileUpload = (fileName, file) => fileUpload({ variables: { fileName, file } }) - .then(() => { - notification.success({ - message: 'Success', - description: 'File successfully uploaded.', - }); + .then(resp => { + if (resp?.ouiUpload?.success) { + notification.success({ + message: 'Success', + description: 'File successfully uploaded.', + }); + } else { + notification.error({ + message: 'Error', + description: 'File could not be uploaded.', + }); + } }) .catch(() => notification.error({ diff --git a/app/containers/System/index.js b/app/containers/System/index.js index 8ef15eb..3842465 100644 --- a/app/containers/System/index.js +++ b/app/containers/System/index.js @@ -5,6 +5,7 @@ import { System as SystemPage } from '@tip-wlan/wlan-cloud-ui-library'; import Manufacturer from 'containers/System/containers/Manufacturer'; import Firmware from 'containers/System/containers/Firmware'; +import AutoProvision from 'containers/System/containers/AutoProvision'; const System = () => { const { path } = useRouteMatch(); @@ -14,6 +15,7 @@ const System = () => { + diff --git a/app/graphql/mutations.js b/app/graphql/mutations.js index e03b841..ced9f5d 100644 --- a/app/graphql/mutations.js +++ b/app/graphql/mutations.js @@ -86,8 +86,7 @@ export const FILE_UPLOAD = gql` export const OUI_UPLOAD = gql` mutation OuiUpload($fileName: String, $file: Upload) { ouiUpload(fileName: $fileName, file: $file) { - fileName - baseUrl + success } } `; @@ -239,3 +238,30 @@ export const CREATE_EQUIPMENT = gql` } } `; + +export const UPDATE_CUSTOMER = gql` + mutation UpdateCustomer( + $id: ID! + $email: String! + $name: String! + $details: JSONObject + $createdTimestamp: String + $lastModifiedTimestamp: String + ) { + updateCustomer( + id: $id + email: $email + name: $name + details: $details + createdTimestamp: $createdTimestamp + lastModifiedTimestamp: $lastModifiedTimestamp + ) { + id + email + name + details + createdTimestamp + lastModifiedTimestamp + } + } +`; diff --git a/app/graphql/queries.js b/app/graphql/queries.js index a5d64c8..7f38290 100644 --- a/app/graphql/queries.js +++ b/app/graphql/queries.js @@ -163,6 +163,7 @@ export const FILTER_SERVICE_METRICS = gql` $clientMacs: [String] $equipmentIds: [ID] $dataTypes: [String] + $limit: Int ) { filterServiceMetrics( customerId: $customerId @@ -172,6 +173,7 @@ export const FILTER_SERVICE_METRICS = gql` clientMacs: $clientMacs equipmentIds: $equipmentIds dataTypes: $dataTypes + limit: $limit ) { items { dataType @@ -275,6 +277,19 @@ export const GET_ALARM_COUNT = gql` } `; +export const GET_CUSTOMER = gql` + query GetCustomer($id: ID!) { + getCustomer(id: $id) { + id + name + email + createdTimestamp + lastModifiedTimestamp + details + } + } +`; + export const FILTER_SYSTEM_EVENTS = gql` query FilterSystemEvents( $customerId: ID! diff --git a/package-lock.json b/package-lock.json index 9a8af17..8d853dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wlan-cloud-ui", - "version": "0.2.1", + "version": "0.2.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1874,9 +1874,9 @@ } }, "@tip-wlan/wlan-cloud-ui-library": { - "version": "0.2.1", - "resolved": "https://tip.jfrog.io/artifactory/api/npm/tip-wlan-cloud-npm-repo/@tip-wlan/wlan-cloud-ui-library/-/@tip-wlan/wlan-cloud-ui-library-0.2.1.tgz", - "integrity": "sha1-erMcjUClH8GattvLkFOnhN72kpA=" + "version": "0.2.3", + "resolved": "https://tip.jfrog.io/artifactory/api/npm/tip-wlan-cloud-npm-repo/@tip-wlan/wlan-cloud-ui-library/-/@tip-wlan/wlan-cloud-ui-library-0.2.3.tgz", + "integrity": "sha1-m/aF8DLiaeGF8UDtECAabipk2P0=" }, "@types/anymatch": { "version": "1.3.1", diff --git a/package.json b/package.json index 02cdfc4..00f1333 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wlan-cloud-ui", - "version": "0.2.1", + "version": "0.2.3", "author": "ConnectUs", "description": "React Portal", "engines": { @@ -20,7 +20,7 @@ "@ant-design/icons": "^4.2.1", "@apollo/react-hoc": "^3.1.4", "@apollo/react-hooks": "^3.1.3", - "@tip-wlan/wlan-cloud-ui-library": "^0.2.1", + "@tip-wlan/wlan-cloud-ui-library": "^0.2.3", "antd": "^4.3.1", "apollo-cache-inmemory": "^1.6.6", "apollo-client": "^2.6.10",