mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui.git
				synced 2025-10-30 10:22:24 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			release/v4
			...
			release/v4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | a4743b6db5 | ||
|   | b3880f7e7e | 
| @@ -8,7 +8,7 @@ fullnameOverride: "" | ||||
| images: | ||||
|   owgwui: | ||||
|     repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui | ||||
|     tag: v4.1.0 | ||||
|     tag: v4.0.0 | ||||
|     pullPolicy: Always | ||||
|  | ||||
| services: | ||||
|   | ||||
							
								
								
									
										32
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										32
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "ucentral-client", | ||||
|   "version": "4.1.0", | ||||
|   "version": "3.2.0", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "ucentral-client", | ||||
|       "version": "4.1.0", | ||||
|       "version": "3.2.0", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "@chakra-ui/anatomy": "^2.1.1", | ||||
| @@ -3540,7 +3540,7 @@ | ||||
|     }, | ||||
|     "node_modules/@jridgewell/resolve-uri": { | ||||
|       "version": "3.1.0", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=6.0.0" | ||||
| @@ -3548,7 +3548,7 @@ | ||||
|     }, | ||||
|     "node_modules/@jridgewell/set-array": { | ||||
|       "version": "1.1.2", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=6.0.0" | ||||
| @@ -3556,7 +3556,7 @@ | ||||
|     }, | ||||
|     "node_modules/@jridgewell/source-map": { | ||||
|       "version": "0.3.2", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@jridgewell/gen-mapping": "^0.3.0", | ||||
| @@ -3565,7 +3565,7 @@ | ||||
|     }, | ||||
|     "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { | ||||
|       "version": "0.3.2", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@jridgewell/set-array": "^1.0.1", | ||||
| @@ -3578,12 +3578,12 @@ | ||||
|     }, | ||||
|     "node_modules/@jridgewell/sourcemap-codec": { | ||||
|       "version": "1.4.14", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/@jridgewell/trace-mapping": { | ||||
|       "version": "0.3.17", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@jridgewell/resolve-uri": "3.1.0", | ||||
| @@ -4374,7 +4374,7 @@ | ||||
|       "version": "18.15.11", | ||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", | ||||
|       "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", | ||||
|       "devOptional": true | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/@types/parse-json": { | ||||
|       "version": "4.0.0", | ||||
| @@ -4419,7 +4419,7 @@ | ||||
|       "version": "18.0.11", | ||||
|       "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", | ||||
|       "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@types/react": "*" | ||||
|       } | ||||
| @@ -4753,7 +4753,7 @@ | ||||
|     }, | ||||
|     "node_modules/acorn": { | ||||
|       "version": "8.8.0", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "acorn": "bin/acorn" | ||||
| @@ -5174,7 +5174,7 @@ | ||||
|     }, | ||||
|     "node_modules/buffer-from": { | ||||
|       "version": "1.1.2", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/builtin-modules": { | ||||
| @@ -9781,7 +9781,7 @@ | ||||
|     }, | ||||
|     "node_modules/source-map-support": { | ||||
|       "version": "0.5.21", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "buffer-from": "^1.0.0", | ||||
| @@ -9790,7 +9790,7 @@ | ||||
|     }, | ||||
|     "node_modules/source-map-support/node_modules/source-map": { | ||||
|       "version": "0.6.1", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "BSD-3-Clause", | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
| @@ -10080,7 +10080,7 @@ | ||||
|     }, | ||||
|     "node_modules/terser": { | ||||
|       "version": "5.15.1", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "BSD-2-Clause", | ||||
|       "dependencies": { | ||||
|         "@jridgewell/source-map": "^0.3.2", | ||||
| @@ -10097,7 +10097,7 @@ | ||||
|     }, | ||||
|     "node_modules/terser/node_modules/commander": { | ||||
|       "version": "2.20.3", | ||||
|       "devOptional": true, | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/text-table": { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "ucentral-client", | ||||
|   "version": "4.1.0", | ||||
|   "version": "4.0.0", | ||||
|   "description": "", | ||||
|   "private": true, | ||||
|   "main": "index.tsx", | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -32,7 +32,6 @@ interface Props { | ||||
|   onOpenTelemetryModal: (serialNumber: string) => void; | ||||
|   onOpenScriptModal: (device: GatewayDevice) => void; | ||||
|   onOpenRebootModal: (serialNumber: string) => void; | ||||
|   onOpenReEnrollModal?: (serialNumber: string) => void; | ||||
|   size?: 'sm' | 'md' | 'lg'; | ||||
|   isCompact?: boolean; | ||||
| } | ||||
| @@ -50,7 +49,6 @@ const DeviceActionDropdown = ({ | ||||
|   onOpenConfigureModal, | ||||
|   onOpenScriptModal, | ||||
|   onOpenRebootModal, | ||||
|   onOpenReEnrollModal, | ||||
|   size, | ||||
|   isCompact, | ||||
| }: Props) => { | ||||
| @@ -236,11 +234,6 @@ const DeviceActionDropdown = ({ | ||||
|             <MenuItem onClick={handleRebootClick} hidden={!isCompact}> | ||||
|               {t('commands.reboot')} | ||||
|             </MenuItem> | ||||
|             {onOpenReEnrollModal && ( | ||||
|               <MenuItem onClick={() => onOpenReEnrollModal(device.serialNumber)}> | ||||
|                 {t('controller.devices.re_enroll')} | ||||
|               </MenuItem> | ||||
|             )} | ||||
|             <MenuItem onClick={handleOpenTelemetry}>{t('controller.telemetry.title')}</MenuItem> | ||||
|             <MenuItem onClick={handleOpenScript}>{t('script.one')}</MenuItem> | ||||
|             <MenuItem onClick={handleOpenTrace}>{t('controller.devices.trace')}</MenuItem> | ||||
|   | ||||
| @@ -1,50 +0,0 @@ | ||||
| import React from 'react'; | ||||
| import { Center, Spinner, Alert, Button } from '@chakra-ui/react'; | ||||
| import { useTranslation } from 'react-i18next'; | ||||
| import { Modal } from '../Modal'; | ||||
| import { useReEnroll } from 'hooks/Network/ReEnroll'; | ||||
| import { ModalProps } from 'models/Modal'; | ||||
|  | ||||
| interface Props { | ||||
|   modalProps: ModalProps; | ||||
|   serialNumber: string; | ||||
| } | ||||
|  | ||||
| const ReEnrollModal = ({ modalProps: { isOpen, onClose }, serialNumber }: Props) => { | ||||
|   const { t } = useTranslation(); | ||||
|   const { mutate: reEnroll, isLoading } = useReEnroll({ serialNumber }); | ||||
|  | ||||
|   const submit = () => { | ||||
|     reEnroll( | ||||
|       { serialNumber, when: 0 }, | ||||
|       { | ||||
|         onSuccess: () => { | ||||
|           onClose(); | ||||
|         }, | ||||
|       } | ||||
|     ); | ||||
|   }; | ||||
|  | ||||
|   return ( | ||||
|     <Modal isOpen={isOpen} onClose={onClose} title={t('controller.devices.re_enroll')}> | ||||
|       {isLoading ? ( | ||||
|         <Center> | ||||
|           <Spinner size="lg" /> | ||||
|         </Center> | ||||
|       ) : ( | ||||
|         <> | ||||
|           <Alert colorScheme="blue" mb={6}> | ||||
|             {t('controller.devices.re_enroll_warning', { serialNumber })} | ||||
|           </Alert> | ||||
|           <Center mb={6}> | ||||
|             <Button size="lg" colorScheme="blue" onClick={submit} fontWeight="bold"> | ||||
|               {t('controller.devices.confirm_re_enroll', { serialNumber })} | ||||
|             </Button> | ||||
|           </Center> | ||||
|         </> | ||||
|       )} | ||||
|     </Modal> | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| export default ReEnrollModal; | ||||
| @@ -166,7 +166,6 @@ export type DeviceStatus = { | ||||
|   connected: boolean; | ||||
|   connectReason?: string; | ||||
|   certificateExpiryDate: number; | ||||
|   certificateIssuerName?: string; | ||||
|   connectionCompletionTime: number; | ||||
|   firmware: string; | ||||
|   ipAddress: string; | ||||
|   | ||||
| @@ -1,78 +0,0 @@ | ||||
| import { useToast } from '@chakra-ui/react'; | ||||
| import { useMutation, useQueryClient } from '@tanstack/react-query'; | ||||
| import { useTranslation } from 'react-i18next'; | ||||
| import { axiosGw } from 'constants/axiosInstances'; | ||||
|  | ||||
| export type ReEnrollRequest = { | ||||
|   serialNumber: string; | ||||
|   when?: number; | ||||
| }; | ||||
|  | ||||
| export type ReEnrollResponse = { | ||||
|   UUID: string; | ||||
|   command: 're-enroll' | 'reenroll'; | ||||
|   completed: number; | ||||
|   custom: number; | ||||
|   details: { | ||||
|     serial: string; | ||||
|     when: number; | ||||
|   }; | ||||
|   errorCode: number; | ||||
|   errorText: string; | ||||
|   executed: number; | ||||
|   executionTime: number; | ||||
|   results: { | ||||
|     serial: string; | ||||
|     status: { | ||||
|       error: number; | ||||
|       resultCode: number; | ||||
|       resultText: string; | ||||
|       text: string; | ||||
|     }; | ||||
|   }; | ||||
|   serialNumber: string; | ||||
|   status: string; | ||||
|   submitted: number; | ||||
|   submittedBy: string; | ||||
|   when: number; | ||||
| }; | ||||
|  | ||||
| const reEnrollDevice = async ({ serialNumber, when = 0 }: ReEnrollRequest) => | ||||
|   axiosGw.post<ReEnrollResponse>(`device/${serialNumber}/reenroll`, { | ||||
|     serial: serialNumber, | ||||
|     when, | ||||
|   }); | ||||
|  | ||||
| export const useReEnroll = ({ serialNumber }: { serialNumber: string }) => { | ||||
|   const queryClient = useQueryClient(); | ||||
|   const { t } = useTranslation(); | ||||
|   const toast = useToast(); | ||||
|  | ||||
|   return useMutation(reEnrollDevice, { | ||||
|     onSuccess: () => { | ||||
|       queryClient.invalidateQueries(['commands', serialNumber]); | ||||
|       queryClient.invalidateQueries(['device', serialNumber]); | ||||
|       queryClient.invalidateQueries(['device-status', serialNumber]); | ||||
|       toast({ | ||||
|         id: `re-enroll-success-${serialNumber}`, | ||||
|         title: t('common.success'), | ||||
|         description: t('controller.devices.re_enroll_initiated', { serialNumber }), | ||||
|         status: 'success', | ||||
|         duration: 5000, | ||||
|         isClosable: true, | ||||
|         position: 'top-right', | ||||
|       }); | ||||
|     }, | ||||
|     onError: (error: any) => { | ||||
|       toast({ | ||||
|         id: `re-enroll-error-${serialNumber}`, | ||||
|         title: t('common.error'), | ||||
|         description: error?.response?.data?.ErrorDescription || t('common.error'), | ||||
|         status: 'error', | ||||
|         duration: 5000, | ||||
|         isClosable: true, | ||||
|         position: 'top-right', | ||||
|       }); | ||||
|     }, | ||||
|   }); | ||||
| }; | ||||
| @@ -171,12 +171,6 @@ const DeviceSummary = ({ serialNumber }: Props) => { | ||||
|                 '-' | ||||
|               )} | ||||
|             </GridItem> | ||||
|             <GridItem colSpan={1} alignContent="center" alignItems="center"> | ||||
|               <Heading size="sm">{t('devices.certificate_issuer')}:</Heading> | ||||
|             </GridItem> | ||||
|             <GridItem colSpan={1}> | ||||
|               {getStatus.data?.certificateIssuerName ? getStatus.data.certificateIssuerName.split('CN=')[1] : '-'} | ||||
|             </GridItem> | ||||
|             <GridItem colSpan={1} alignContent="center" alignItems="center"> | ||||
|               <Heading size="sm">Connect Reason:</Heading> | ||||
|             </GridItem> | ||||
|   | ||||
| @@ -41,7 +41,6 @@ import { EventQueueModal } from 'components/Modals/EventQueueModal'; | ||||
| import FactoryResetModal from 'components/Modals/FactoryResetModal'; | ||||
| import { FirmwareUpgradeModal } from 'components/Modals/FirmwareUpgradeModal'; | ||||
| import { RebootModal } from 'components/Modals/RebootModal'; | ||||
| import ReEnrollModal from 'components/Modals/ReEnrollModal'; | ||||
| import { useScriptModal } from 'components/Modals/ScriptModal/useScriptModal'; | ||||
| import ethernetConnected from './ethernetIconConnected.svg?react'; | ||||
| import ethernetDisconnected from './ethernetIconDisconnected.svg?react'; | ||||
| @@ -77,7 +76,6 @@ const DevicePageWrapper = ({ serialNumber }: Props) => { | ||||
|   const telemetryModalProps = useDisclosure(); | ||||
|   const traceModalProps = useDisclosure(); | ||||
|   const rebootModalProps = useDisclosure(); | ||||
|   const reEnrollModalProps = useDisclosure(); | ||||
|   const scriptModal = useScriptModal(); | ||||
|   // Sticky-top styles | ||||
|   const isCompact = breakpoint === 'base' || breakpoint === 'sm' || breakpoint === 'md'; | ||||
| @@ -218,7 +216,6 @@ const DevicePageWrapper = ({ serialNumber }: Props) => { | ||||
|                   onOpenTelemetryModal={telemetryModalProps.onOpen} | ||||
|                   onOpenScriptModal={scriptModal.openModal} | ||||
|                   onOpenRebootModal={rebootModalProps.onOpen} | ||||
|                   onOpenReEnrollModal={reEnrollModalProps.onOpen} | ||||
|                   size="md" | ||||
|                   isCompact | ||||
|                 /> | ||||
| @@ -271,7 +268,6 @@ const DevicePageWrapper = ({ serialNumber }: Props) => { | ||||
|                     onOpenTelemetryModal={telemetryModalProps.onOpen} | ||||
|                     onOpenRebootModal={rebootModalProps.onOpen} | ||||
|                     onOpenScriptModal={scriptModal.openModal} | ||||
|                     onOpenReEnrollModal={reEnrollModalProps.onOpen} | ||||
|                     size="md" | ||||
|                   /> | ||||
|                 )} | ||||
| @@ -315,7 +311,6 @@ const DevicePageWrapper = ({ serialNumber }: Props) => { | ||||
|       <ConfigureModal serialNumber={serialNumber} modalProps={configureModalProps} /> | ||||
|       <TelemetryModal serialNumber={serialNumber} modalProps={telemetryModalProps} /> | ||||
|       <RebootModal serialNumber={serialNumber} modalProps={rebootModalProps} /> | ||||
|       <ReEnrollModal serialNumber={serialNumber} modalProps={reEnrollModalProps} /> | ||||
|       {scriptModal.modal} | ||||
|       <Box mt={isCompact ? '0px' : '68px'}> | ||||
|         <Masonry | ||||
|   | ||||
		Reference in New Issue
	
	Block a user